<?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>121734</bug_id>
          
          <creation_ts>2013-09-20 23:11:20 -0700</creation_ts>
          <short_desc>Never use ReturnPC for exception handling and quit using exception check indices as a lame replica of the CodeOrigin index</short_desc>
          <delta_ts>2013-09-23 15:08:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121755</dependson>
    
    <dependson>121766</dependson>
          <blocked>121641</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>931724</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-20 23:11:20 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932010</commentid>
    <comment_count>1</comment_count>
      <attachid>212321</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-22 21:17:43 -0700</bug_when>
    <thetext>Created attachment 212321
almost there

Still need to, like, compile it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932236</commentid>
    <comment_count>2</comment_count>
      <attachid>212378</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-23 12:17:38 -0700</bug_when>
    <thetext>Created attachment 212378
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932239</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-23 12:21:36 -0700</bug_when>
    <thetext>Attachment 212378 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeOrigin.h&apos;, u&apos;Source/JavaScriptCore/bytecode/InlineCallFrameSet.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/InlineCallFrameSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDesiredWriteBarriers.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDesiredWriteBarriers.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITCompiler.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGRepatch.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGVirtualRegisterAllocationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp&apos;, u&apos;Source/JavaScriptCore/jit/AssemblyHelpers.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGCommonData.h:73:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 30 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>932245</commentid>
    <comment_count>4</comment_count>
      <attachid>212378</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-09-23 12:32:03 -0700</bug_when>
    <thetext>Comment on attachment 212378
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>932311</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-23 15:08:46 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/156300</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212321</attachid>
            <date>2013-09-22 21:17:43 -0700</date>
            <delta_ts>2013-09-23 12:17:38 -0700</delta_ts>
            <desc>almost there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38522</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTYyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0NSwxMyArMjU0NSw4IEBAIHZvaWQgQ29kZUJs
b2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHMKICAgICAgICAgfQogICAgIH0gLy8gZWxzZSBk
b24ndCBzaHJpbmsgdGhlc2UsIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQg
cG9pbnRlcnMgaW50byB0aGVzZSB0YWJsZXMuCiAKLSAgICBpZiAobV9yYXJlRGF0YSkgeworICAg
IGlmIChtX3JhcmVEYXRhKQogICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJz
LnNocmlua1RvRml0KCk7Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgICAgIG1fcmFyZURhdGEt
Pm1faW5saW5lQ2FsbEZyYW1lcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5t
X2NvZGVPcmlnaW5zLnNocmlua1RvRml0KCk7Ci0jZW5kaWYKLSAgICB9CiB9CiAKIHZvaWQgQ29k
ZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENhbGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU2MjQ3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NjYsNDMgKzU2NiwyNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNFeHByZXNz
aW9uSW5mbygpIHsgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5oYXNFeHByZXNzaW9uSW5mbygpOyB9
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBTZWdtZW50ZWRWZWN0b3I8SW5saW5lQ2FsbEZy
YW1lLCA0PiYgaW5saW5lQ2FsbEZyYW1lcygpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2lubGluZUNhbGxG
cmFtZXM7Ci0gICAgfQotICAgICAgICAKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+JiBjb2RlT3JpZ2lucygpCiAgICAgewotICAgICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvZGVPcmln
aW5zOworICAgICAgICByZXR1cm4gbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+Y29kZU9yaWdpbnM7
CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAg
ICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3JhcmVEYXRhLT5tX2NvZGVPcmlnaW5zLnNpemUoKTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9jb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgICAgICAKICAgICAvLyBIYXZpbmcgY29k
ZSBvcmlnaW5zIGltcGxpZXMgdGhhdCB0aGVyZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAg
IGJvb2wgaGFzQ29kZU9yaWdpbnMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEg
JiYgISFtX3JhcmVEYXRhLT5tX2NvZGVPcmlnaW5zLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIGlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5H
ZXRDb2RlT3JpZ2luKHVuc2lnbmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVE
YXRhKQorICAgICAgICBpZiAoIWhhc0NvZGVPcmlnaW5zKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5tX2NvZGVPcmlnaW5zLnNpemUoKSA+
IGluZGV4OworICAgICAgICByZXR1cm4gaW5kZXggPCBjb2RlT3JnaW5zKCkuc2l6ZSgpOwogICAg
IH0KIAogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbih1bnNpZ25lZCBpbmRleCkKICAgICB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOwotICAgICAgICByZXR1cm4gbV9yYXJl
RGF0YS0+bV9jb2RlT3JpZ2luc1tpbmRleF07CisgICAgICAgIHJldHVybiBjb2RlT3JpZ2lucygp
W2luZGV4XTsKICAgICB9CiAKICAgICBib29sIGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgREZH
OjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQpAQCAtMTEyMCwxMSArMTEwNCw2IEBAIHByaXZhdGU6
CiAgICAgICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKIAogICAgICAgICBFdmFsQ29kZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLQotI2lmIEVOQUJM
RShERkdfSklUKQotICAgICAgICBTZWdtZW50ZWRWZWN0b3I8SW5saW5lQ2FsbEZyYW1lLCA0PiBt
X2lubGluZUNhbGxGcmFtZXM7Ci0gICAgICAgIFZlY3RvcjxDb2RlT3JpZ2luLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV9jb2RlT3JpZ2luczsKLSNlbmRpZgogICAgIH07CiAjaWYgQ09NUElM
RVIoTVNWQykKICAgICBmcmllbmQgdm9pZCBXVEY6OmRlbGV0ZU93bmVkUHRyPFJhcmVEYXRhPihS
YXJlRGF0YSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oCShyZXZpc2lvbiAxNTYyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDE1IEBAIHN0cnVj
dCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDMxOwogICAgIGJv
b2wgaXNDYWxsIDogMTsKICAgICAKKyAgICAvLyBUaGVyZSBpcyByZWFsbHkgbm8gZ29vZCBub3Rp
b24gb2YgYSAiZGVmYXVsdCIgc2V0IG9mIHZhbHVlcyBmb3IKKyAgICAvLyBJbmxpbmVDYWxsRnJh
bWUncyBmaWVsZHMuIFRoaXMgY29uc3RydWN0b3IgaXMgaGVyZSBqdXN0IHRvIHJlZHVjZSBjb25m
dXNpb24gaWYKKyAgICAvLyB3ZSBmb3Jnb3QgdG8gaW5pdGlhbGl6ZSBleHBsaWNpdGx5LgorICAg
IElubGluZUNhbGxGcmFtZSgpCisgICAgICAgIDogc3RhY2tPZmZzZXQoMCkKKyAgICAgICAgLCBp
c0NhbGwoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0IHsgcmV0dXJuIHNwZWNpYWxpemF0aW9uRnJv
bUlzQ2FsbChpc0NhbGwpOyB9CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Qg
eyByZXR1cm4gIWNhbGxlZTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0lubGluZUNhbGxGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZVNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmxpbmVDYWxs
RnJhbWVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0lubGluZUNhbGxGcmFtZVNldDo6SW5s
aW5lQ2FsbEZyYW1lU2V0KCkgeyB9CitJbmxpbmVDYWxsRnJhbWVTZXQ6On5JbmxpbmVDYWxsRnJh
bWVTZXQoKSB7IH0KKworSW5saW5lQ2FsbEZyYW1lKiBJbmxpbmVDYWxsRnJhbWVTZXQ6OmFkZCgp
Cit7CisgICAgbV9mcmFtZXMuYXBwZW5kKElubGluZUNhbGxGcmFtZSgpKTsKKyAgICByZXR1cm4g
Jm1fZnJhbWVzLmxhc3QoKTsKK30KKwordm9pZCBJbmxpbmVDYWxsRnJhbWVTZXQ6OnNocmlua1Rv
Rml0KCkKK3sKKyAgICBtX2ZyYW1lcy5zaHJpbmtUb0ZpdCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxG
cmFtZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWVTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSW5saW5lQ2FsbEZyYW1lU2V0X2gKKyNkZWZpbmUgSW5saW5lQ2FsbEZyYW1lU2V0X2gK
KworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvU2VnbWVudGVkVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBJbmxpbmVDYWxsRnJhbWVTZXQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElubGlu
ZUNhbGxGcmFtZVNldCk7CitwdWJsaWM6CisgICAgSW5saW5lQ2FsbEZyYW1lU2V0KCk7CisgICAg
fklubGluZUNhbGxGcmFtZVNldCgpOworICAgIAorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVzLmlzRW1wdHkoKTsgfQorICAgIAorICAgIElubGluZUNhbGxGcmFtZSog
YWRkKCk7CisgICAgCisgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworICAgIAorcHJpdmF0ZToKKyAg
ICBTZWdtZW50ZWRWZWN0b3I8SW5saW5lQ2FsbEZyYW1lLCA0PiBtX2ZyYW1lczsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5saW5lQ2FsbEZyYW1lU2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE1NjI0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzc0LDU2ICszMzc0LDUzIEBAIEJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgQVNTRVJUKGlubGlu
ZUNhbGxGcmFtZVN0YXJ0ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBBU1NF
UlQoY2FsbHNpdGVCbG9ja0hlYWQpOwogICAgICAgICAKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1l
IGlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBieXRlQ29kZVBh
cnNlci0+bV9ncmFwaC5tX2lubGluZUNhbGxGcmFtZXMtPmFkZCgpOwogICAgICAgICBpbml0aWFs
aXplTGF6eVdyaXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUV4ZWN1dGFibGUoCiAgICAgICAg
ICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX3BsYW4ud3JpdGVCYXJyaWVycywKICAgICAg
ICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlLAogICAgICAgICAgICAgYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLAotICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkuc2l6ZSgpLAorICAgICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUsCiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCAKICAgICAgICAgICAgIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpOwot
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWVTdGFy
dCAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZVN0YXJ0IC0gSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKICAgICAgICAgaWYgKGNhbGxlZSkgewogICAgICAgICAgICAgaW5pdGlh
bGl6ZUxhenlXcml0ZUJhcnJpZXJGb3JJbmxpbmVDYWxsRnJhbWVDYWxsZWUoCiAgICAgICAgICAg
ICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9wbGFuLndyaXRlQmFycmllcnMsCi0gICAg
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxlZSwKKyAgICAgICAgICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+Y2FsbGVlLAogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jaywKLSAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2st
PmlubGluZUNhbGxGcmFtZXMoKS5zaXplKCksCisgICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUsCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgCiAgICAgICAgICAgICAgICAgY2FsbGVlKTsKICAgICAgICAgfQotICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2Rl
T3JpZ2luKCk7Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZS5hcmd1bWVudHMucmVzaXplKGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKTsgLy8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlu
Y2x1ZGluZyB0aGlzLCBidXQgZG9uJ3QgY29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5
ZXQuCi0gICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0NhbGwgPSBpc0NhbGwoa2luZCk7CisgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENv
ZGVPcmlnaW4oKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5yZXNpemUo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBvZiBhcmd1bWVu
dHMgaW5jbHVkaW5nIHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVlIHJlY292ZXJp
ZXMsIHlldC4KKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA9IGlzQ2FsbChraW5k
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUuY2FsbGVyLmlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYXB0dXJlZFZhcnMgPSBpbmxp
bmVDYWxsRnJhbWUuY2FsbGVyLmlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOworICAgICAg
ICBpZiAobV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUt
PmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBmb3IgKGludCBpID0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5tX251
bVZhcnM7IGktLTspIHsKICAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fY29k
ZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsVG9PcGVyYW5kKGkpKSkKLSAgICAgICAgICAgICAgICAg
ICAgaW5saW5lQ2FsbEZyYW1lLmNhcHR1cmVkVmFycy5zZXQoaSk7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KGkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKICAgICAgICAgZm9yIChpbnQgaSA9IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzOyBpLS07KSB7CiAgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NhcHR1cmVkKGFy
Z3VtZW50VG9PcGVyYW5kKGkpKSkKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2Fw
dHVyZWRWYXJzLnNldChvcGVyYW5kVG9Mb2NhbChhcmd1bWVudFRvT3BlcmFuZChpKSArIGlubGlu
ZUNhbGxGcmFtZS5zdGFja09mZnNldCkpOworICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lLT5jYXB0dXJlZFZhcnMuc2V0KG9wZXJhbmRUb0xvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkp
ICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgIH0KICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IGNvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7CiAgICAgICAgICAg
ICBpbnQgbG9jYWxPcGVyYW5kID0gbG9jYWxUb09wZXJhbmQoaSk7CiAgICAgICAgICAgICBpZiAo
Y29kZUJsb2NrLT5pc0NhcHR1cmVkKGxvY2FsT3BlcmFuZCkpCi0gICAgICAgICAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLmNhcHR1cmVkVmFycy5zZXQob3BlcmFuZFRvTG9jYWwobG9jYWxPcGVyYW5k
ICsgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgbV9pbmxp
bmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQob3BlcmFuZFRvTG9jYWwobG9jYWxPcGVyYW5k
ICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSk7CiAgICAgICAgIH0KIAogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZ0YoIkN1cnJlbnQgY2FwdHVy
ZWQgdmFyaWFibGVzOiAiKTsKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhcHR1cmVkVmFycy5k
dW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJl
ZFZhcnMuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwogICAgICAgICBkYXRhTG9nRigiXG4iKTsKICNl
bmRpZgogICAgICAgICAKLSAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxp
bmVDYWxsRnJhbWVzKCkuYXBwZW5kKGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lID0gJmJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2FsbEZyYW1l
cygpLmxhc3QoKTsKLSAgICAgICAgCiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5idWlsZE9wZXJh
bmRNYXBzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCiAgICAgICAgIG1faWRlbnRpZmllclJlbWFw
LnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE1NjI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21waWxpbmdT
dHJ1Y3R1cgogCiB2b2lkIENvbW1vbkRhdGE6OnNocmlua1RvRml0KCkKIHsKKyAgICBjb2RlT3Jp
Z2lucy5zaHJpbmtUb0ZpdCgpOwogICAgIHdlYWtSZWZlcmVuY2VzLnNocmlua1RvRml0KCk7CiAg
ICAgdHJhbnNpdGlvbnMuc2hyaW5rVG9GaXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxNTYyNDcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiAr
NzIsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCisgICAgT3du
UHRyPElubGluZUNhbGxGcmFtZVNldD4gaW5saW5lQ2FsbEZyYW1lczsKKyAgICBWZWN0b3I8Q29k
ZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IGNvZGVPcmlnaW5zOworICAgIAogICAg
IFZlY3RvcjxJZGVudGlmaWVyPiBkZmdJZGVudGlmaWVyczsKICAgICBWZWN0b3I8V2Vha1JlZmVy
ZW5jZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlND
ZWxsPiA+IHdlYWtSZWZlcmVuY2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV3JpdGVCYXJyaWVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5jcHAJKHJldmlzaW9uIDE1NjI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFycmllcnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwzNSArMzgsNDIgQEAgRGVzaXJlZFdyaXRlQmFycmllcjo6
RGVzaXJlZFdyaXRlQmFycmllcgogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fdHlwZSh0
eXBlKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwgbV9pbmRleChpbmRleCkK
IHsKKyAgICBtX3doaWNoLmluZGV4ID0gaW5kZXg7Cit9CisKK0Rlc2lyZWRXcml0ZUJhcnJpZXI6
OkRlc2lyZWRXcml0ZUJhcnJpZXIoVHlwZSB0eXBlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTQ2VsbCogb3duZXIpCisgICAgOiBtX293
bmVyKG93bmVyKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCit7CisgICAgbV93aGljaC5pbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWU7CiB9
CiAKIHZvaWQgRGVzaXJlZFdyaXRlQmFycmllcjo6dHJpZ2dlcihWTSYgdm0pCiB7CiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIENvbnN0YW50VHlwZTogewotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGJhcnJpZXIgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKClbbV9pbmRl
eF07CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYmFycmllciA9IG1fY29kZUJsb2Nr
LT5jb25zdGFudHMoKVttX3doaWNoLmluZGV4XTsKICAgICAgICAgYmFycmllci5zZXQodm0sIG1f
b3duZXIsIGJhcnJpZXIuZ2V0KCkpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lJiBpbmxpbmVDYWxsRnJhbWUgPSBtX2NvZGVCbG9jay0+aW5saW5l
Q2FsbEZyYW1lcygpW21faW5kZXhdOwotICAgICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0
YWJsZT4mIGV4ZWN1dGFibGUgPSBpbmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZTsKKyAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX3doaWNoLmlubGluZUNhbGxGcmFt
ZTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+JiBleGVjdXRhYmxlID0g
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlOwogICAgICAgICBleGVjdXRhYmxlLnNldCh2bSwg
bV9vd25lciwgZXhlY3V0YWJsZS5nZXQoKSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWVDYWxsZWVUeXBlOiB7Ci0gICAg
ICAgIElubGluZUNhbGxGcmFtZSYgaW5saW5lQ2FsbEZyYW1lID0gbV9jb2RlQmxvY2stPmlubGlu
ZUNhbGxGcmFtZXMoKVttX2luZGV4XTsKLSAgICAgICAgQVNTRVJUKCEhaW5saW5lQ2FsbEZyYW1l
LmNhbGxlZSk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlID0gaW5s
aW5lQ2FsbEZyYW1lLmNhbGxlZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBtX3doaWNoLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgQVNTRVJUKCEhaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZWUpOworICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNh
bGxlZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlOwogICAgICAgICBjYWxsZWUuc2V0KHZtLCBt
X293bmVyLCBjYWxsZWUuZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICB9Cisg
ICAgICAgIHJldHVybjsKKyAgICB9IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQogCiBEZXNpcmVkV3JpdGVCYXJyaWVyczo6RGVzaXJlZFdyaXRlQmFycmllcnMoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFy
cmllcnMuaAkocmV2aXNpb24gMTU2MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV3JpdGVCYXJyaWVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
IGNsYXNzIERlc2lyZWRXcml0ZUJhcnJpZXIgewogcHVibGljOgogICAgIGVudW0gVHlwZSB7IENv
bnN0YW50VHlwZSwgSW5saW5lQ2FsbEZyYW1lRXhlY3V0YWJsZVR5cGUsIElubGluZUNhbGxGcmFt
ZUNhbGxlZVR5cGUgfTsKICAgICBEZXNpcmVkV3JpdGVCYXJyaWVyKFR5cGUsIENvZGVCbG9jayos
IHVuc2lnbmVkIGluZGV4LCBKU0NlbGwqIG93bmVyKTsKKyAgICBEZXNpcmVkV3JpdGVCYXJyaWVy
KFR5cGUsIENvZGVCbG9jayosIElubGluZUNhbGxGcmFtZSosIEpTQ2VsbCogb3duZXIpOwogCiAg
ICAgdm9pZCB0cmlnZ2VyKFZNJik7CiAKQEAgLTUwLDcgKzUxLDEwIEBAIHByaXZhdGU6CiAgICAg
SlNDZWxsKiBtX293bmVyOwogICAgIFR5cGUgbV90eXBlOwogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB1bmlvbiB7CisgICAgICAgIHVuc2ln
bmVkIGluZGV4OworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluQ2FsbEZyYW1lOworICAg
IH0gbV93aGljaDsKIH07CiAKIGNsYXNzIERlc2lyZWRXcml0ZUJhcnJpZXJzIHsKQEAgLTcwLDE1
ICs3NCwxNSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxEZXNpcmVkV3JpdGVCYXJyaWVyPiBtX2Jh
cnJpZXJzOwogfTsKIAotaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUxhenlXcml0ZUJhcnJpZXJGb3JJ
bmxpbmVDYWxsRnJhbWVFeGVjdXRhYmxlKERlc2lyZWRXcml0ZUJhcnJpZXJzJiBiYXJyaWVycywg
V3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+JiBiYXJyaWVyLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgaW5kZXgsIEpTQ2VsbCogb3duZXIsIFNjcmlwdEV4ZWN1dGFibGUqIHZh
bHVlKQoraW5saW5lIHZvaWQgaW5pdGlhbGl6ZUxhenlXcml0ZUJhcnJpZXJGb3JJbmxpbmVDYWxs
RnJhbWVFeGVjdXRhYmxlKERlc2lyZWRXcml0ZUJhcnJpZXJzJiBiYXJyaWVycywgV3JpdGVCYXJy
aWVyPFNjcmlwdEV4ZWN1dGFibGU+JiBiYXJyaWVyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUsIEpTQ2VsbCogb3duZXIsIFNjcmlwdEV4ZWN1
dGFibGUqIHZhbHVlKQogewotICAgIERlc2lyZWRXcml0ZUJhcnJpZXImIGRlc2lyZWRCYXJyaWVy
ID0gYmFycmllcnMuYWRkKERlc2lyZWRXcml0ZUJhcnJpZXI6OklubGluZUNhbGxGcmFtZUV4ZWN1
dGFibGVUeXBlLCBjb2RlQmxvY2ssIGluZGV4LCBvd25lcik7CisgICAgRGVzaXJlZFdyaXRlQmFy
cmllciYgZGVzaXJlZEJhcnJpZXIgPSBiYXJyaWVycy5hZGQoRGVzaXJlZFdyaXRlQmFycmllcjo6
SW5saW5lQ2FsbEZyYW1lRXhlY3V0YWJsZVR5cGUsIGNvZGVCbG9jaywgaW5saW5lQ2FsbEZyYW1l
LCBvd25lcik7CiAgICAgYmFycmllciA9IFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPihk
ZXNpcmVkQmFycmllciwgdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBpbml0aWFsaXplTGF6eVdy
aXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUNhbGxlZShEZXNpcmVkV3JpdGVCYXJyaWVycyYg
YmFycmllcnMsIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgYmFycmllciwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGluZGV4LCBKU0NlbGwqIG93bmVyLCBKU0Z1bmN0aW9uKiB2YWx1
ZSkKK2lubGluZSB2b2lkIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9ySW5saW5lQ2FsbEZy
YW1lQ2FsbGVlKERlc2lyZWRXcml0ZUJhcnJpZXJzJiBiYXJyaWVycywgV3JpdGVCYXJyaWVyPEpT
RnVuY3Rpb24+JiBiYXJyaWVyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUsIEpTQ2VsbCogb3duZXIsIEpTRnVuY3Rpb24qIHZhbHVlKQogewot
ICAgIERlc2lyZWRXcml0ZUJhcnJpZXImIGRlc2lyZWRCYXJyaWVyID0gYmFycmllcnMuYWRkKERl
c2lyZWRXcml0ZUJhcnJpZXI6OklubGluZUNhbGxGcmFtZUNhbGxlZVR5cGUsIGNvZGVCbG9jaywg
aW5kZXgsIG93bmVyKTsKKyAgICBEZXNpcmVkV3JpdGVCYXJyaWVyJiBkZXNpcmVkQmFycmllciA9
IGJhcnJpZXJzLmFkZChEZXNpcmVkV3JpdGVCYXJyaWVyOjpJbmxpbmVDYWxsRnJhbWVDYWxsZWVU
eXBlLCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgb3duZXIpOwogICAgIGJhcnJpZXIgPSBX
cml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4oZGVzaXJlZEJhcnJpZXIsIHZhbHVlKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1NjI0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCw3IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdM
aXYKICAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCkpCiAgICAgLCBtX3By
b2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAgLCBtX2FsbG9jYXRv
cihsb25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikKKyAgICAsIG1faW5saW5lQ2FsbEZyYW1lcyhh
ZG9wdFB0cihuZXcgSW5saW5lQ2FsbEZyYW1lU2V0KCkpKQogICAgICwgbV9oYXNBcmd1bWVudHMo
ZmFsc2UpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX2Zv
cm0oTG9hZFN0b3JlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTU2MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NDcsNiArNzQ3LDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZl
Y3RvcjxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSwgOD4gbV9zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8TmV3QXJyYXlCdWZmZXJEYXRhLCA0PiBtX25ld0FycmF5
QnVmZmVyRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8U3dpdGNoRGF0YSwgND4gbV9zd2l0Y2hE
YXRhOworICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1lczsK
ICAgICBib29sIG1faGFzQXJndW1lbnRzOwogICAgIEhhc2hTZXQ8RXhlY3V0YWJsZUJhc2UqPiBt
X2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkOwogICAgIEJpdFZlY3RvciBtX3ByZXNl
cnZlZFZhcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTU2MjQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwzMyArMTIwLDIxIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUV4Y2VwdGlvbkhhbmRsZXJzKCkKIHsKLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIG1fY2FsbHMg
dmVjdG9yLCBjaGVja2luZyBmb3IganVtcHMgdG8gbGluay4KLSAgICBib29sIGRpZExpbmtFeGNl
cHRpb25DaGVjayA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4Y2Vw
dGlvbkNoZWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICBKdW1wJiBleGNlcHRpb25DaGVjayA9
IG1fZXhjZXB0aW9uQ2hlY2tzW2ldLm1fZXhjZXB0aW9uQ2hlY2s7Ci0gICAgICAgIGlmIChleGNl
cHRpb25DaGVjay5pc1NldCgpKSB7Ci0gICAgICAgICAgICBleGNlcHRpb25DaGVjay5saW5rKHRo
aXMpOwotICAgICAgICAgICAgZGlkTGlua0V4Y2VwdGlvbkNoZWNrID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KKyAgICBpZiAobV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAvLyBJ
ZiBhbnkgZXhjZXB0aW9uIGNoZWNrcyB3ZXJlIGxpbmtlZCwgZ2VuZXJhdGUgY29kZSB0byBsb29r
dXAgYSBoYW5kbGVyLgotICAgIGlmIChkaWRMaW5rRXhjZXB0aW9uQ2hlY2spIHsKLSAgICAgICAg
Ly8gbG9va3VwRXhjZXB0aW9uSGFuZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgZXhlYyAo
dGhlIENhbGxGcmFtZSopLCBhbmQKLSAgICAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBDb2RlT3Jp
Z2luLiBUaGUgbGF0dGVyIGlzIHVudXNlZCwgc2VlCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjE3MzQuCi0gICAgICAgIG1vdmUoR1BSSW5mbzo6
bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAg
ICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgaXMgcGFzc2VkIG9uZSBhcmd1bWVudCwg
dGhlIGV4ZWMgKHRoZSBDYWxsRnJhbWUqKS4KKyAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogI2lmIENQVShYODYpCi0gICAgICAgIC8v
IEZJWE1FOiBzaG91bGQgdXNlIHRoZSBjYWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBpcyBjdXJy
ZW50bHkgaW4gdGhlIFNwZWN1bGF0aXZlSklUIGxheWVyIQotICAgICAgICBwb2tlKEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7Ci0gICAgICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsK
KyAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0IHRoaXMg
aXMgY3VycmVudGx5IGluIHRoZSBTcGVjdWxhdGl2ZUpJVCBsYXllciEKKyAgICBwb2tlKEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CiAjZW5kaWYKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExp
bmtSZWNvcmQoY2FsbCgpLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAgIC8vIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIgbGVhdmVzIHRoZSBoYW5kbGVyIENhbGxGcmFtZSogaW4gdGhl
IHJldHVyblZhbHVlR1BSLAotICAgICAgICAvLyBhbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIGhhbmRs
ZXIgaW4gcmV0dXJuVmFsdWVHUFIyLgotICAgICAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVl
R1BSMik7Ci0gICAgfQorICAgIG1fY2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoKSwg
bG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIg
bGVhdmVzIHRoZSBoYW5kbGVyIENhbGxGcmFtZSogaW4gdGhlIHJldHVyblZhbHVlR1BSLAorICAg
IC8vIGFuZCB0aGUgYWRkcmVzcyBvZiB0aGUgaGFuZGxlciBpbiByZXR1cm5WYWx1ZUdQUjIuCisg
ICAganVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIpOwogfQogCiB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCkBAIC0xNTUsNiArMTQzLDExIEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCiAgICAgZGF0YUxvZ0YoIkpJVCBjb2RlIGZvciAlcCBzdGFydCBhdCBbJXAsICVw
KS4gU2l6ZSA9ICV6dS5cbiIsIG1fY29kZUJsb2NrLCBsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygp
LCBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVm
ZmVyLmRlYnVnU2l6ZSgpLCBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpKTsKICNlbmRpZgorICAgIAor
ICAgIGlmICghbV9ncmFwaC5tX2lubGluZUNhbGxGcmFtZXMtPmlzRW1wdHkoKSkgeworICAgICAg
ICBtX2dyYXBoLm1faW5saW5lQ2FsbEZyYW1lcy0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9q
aXRDb2RlLT5jb21tb24uaW5saW5lQ2FsbEZyYW1lcyA9IG1fZ3JhcGgubV9pbmxpbmVDYWxsRnJh
bWVzLnJlbGVhc2UoKTsKKyAgICB9CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuc2l6ZSgpOyBpLS07KSB7
CkBAIC0yMTYsMTQgKzIwOSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkK
ICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fY2FsbHNbaV0ubV9jYWxsLCBtX2NhbGxzW2ldLm1f
ZnVuY3Rpb24pOwogCi0gICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiYgY29kZU9yaWdpbnMgPSBtX2NvZGVCbG9jay0+Y29kZU9yaWdpbnMoKTsKLSAgICBjb2Rl
T3JpZ2lucy5yZXNpemUobV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKTsKLSAgICAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgQ2FsbEV4Y2VwdGlvblJlY29yZCYgcmVjb3JkID0gbV9leGNlcHRpb25DaGVja3NbaV07
Ci0gICAgICAgIGNvZGVPcmlnaW5zW2ldID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKLSAgICB9Ci0g
ICAgCiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJv
cGVydHlBY2Nlc3Nlcy5zaXplKCkgKyBtX2lucy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSk7
CkBAIC0zODMsMTAgKzM2OCw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigp
CiAgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
ICAgICBwb2tlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3Ry
dWN0IEpJVFN0YWNrRnJhbWUsIGNhbGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKIAotICAgIENh
bGxCZWdpblRva2VuIHRva2VuOwotICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7
CisgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBtX2NhbGxTdGFj
a0NoZWNrID0gY2FsbCgpOwotICAgIG5vdGlmeUNhbGwobV9jYWxsU3RhY2tDaGVjaywgQ29kZU9y
aWdpbigwKSwgdG9rZW4pOwogICAgIGp1bXAoZnJvbVN0YWNrQ2hlY2spOwogICAgIAogICAgIC8v
IFRoZSBmYXN0IGVudHJ5IHBvaW50IGludG8gYSBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUg
Y29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCkBAIC00MDEsMTMgKzM4NCwxMSBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
R1BSSW5mbzo6cmVnVDEsIFRydXN0ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
KSkubGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZy
YW1lKSAvIHNpemVvZih2b2lkKikpOwotICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tl
bik7CisgICAgZW1pdFN0b3JlQ29kZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBtX2NhbGxB
cml0eUNoZWNrID0gY2FsbCgpOwotICAgIG5vdGlmeUNhbGwobV9jYWxsQXJpdHlDaGVjaywgQ29k
ZU9yaWdpbigwKSwgdG9rZW4pOwogICAgIGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdU
MCkubGlua1RvKGZyb21Bcml0eUNoZWNrLCB0aGlzKTsKLSAgICBiZWdpbkNhbGwoQ29kZU9yaWdp
bigwKSwgdG9rZW4pOworICAgIGVtaXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbigwKSk7CiAg
ICAgbV9jYWxsQXJpdHlGaXh1cCA9IGNhbGwoKTsKLSAgICBub3RpZnlDYWxsKG1fY2FsbEFyaXR5
Rml4dXAsIENvZGVPcmlnaW4oMCksIHRva2VuKTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsK
ICAgICAKICAgICAvLyBHZW5lcmF0ZSBzbG93IHBhdGggY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzcsODkgKzc3LDYgQEAgc3RydWN0IENhbGxMaW5rUmVjb3JkIHsKICAgICBGdW5jdGlvblB0
ciBtX2Z1bmN0aW9uOwogfTsKIAotY2xhc3MgQ2FsbEJlZ2luVG9rZW4gewotcHVibGljOgotICAg
IENhbGxCZWdpblRva2VuKCkKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9yZWdp
c3RlcmVkKGZhbHNlKQotICAgICAgICAsIG1fZXhjZXB0aW9uQ2hlY2tJbmRleChzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0jZW5kaWYKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIH5DYWxsQmVnaW5Ub2tlbigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVk
IHx8ICFtX2NvZGVPcmlnaW4uaXNTZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4u
aXNTZXQoKSA9PSAobV9leGNlcHRpb25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgICAgIEFTU0VSVChtX3JlZ2lzdGVyZWQgfHwgIW1fY29kZU9yaWdpbi5pc1NldCgpKTsK
LSAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbi5pc1NldCgpID09IChtX2V4Y2VwdGlvbkNoZWNr
SW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7Ci0gICAgICAg
IG1fY29kZU9yaWdpbiA9IGNvZGVPcmlnaW47Ci0gICAgICAgIG1fcmVnaXN0ZXJlZCA9IGZhbHNl
OwotICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrSW5kZXggPSBpbmRleDsKLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTShjb2RlT3JpZ2luKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsK
LSNlbmRpZgotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNr
KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgdW5zaWduZWQgaW5kZXgpCi0gICAgewotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKTsK
LSAgICAgICAgaWYgKG1fcmVnaXN0ZXJlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
QVNTRVJUKG1fZXhjZXB0aW9uQ2hlY2tJbmRleCA9PSBpbmRleCk7Ci0gICAgICAgIG1fcmVnaXN0
ZXJlZCA9IHRydWU7Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9jb2RlT3JpZ2luOwotICAgIH0KLSNlbmRpZgotICAgIAotcHJp
dmF0ZToKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47
Ci0gICAgYm9vbCBtX3JlZ2lzdGVyZWQ7Ci0gICAgdW5zaWduZWQgbV9leGNlcHRpb25DaGVja0lu
ZGV4OwotI2VuZGlmCi19OwotCi0vLyA9PT0gQ2FsbEV4Y2VwdGlvblJlY29yZCA9PT0KLS8vCi0v
LyBBIHJlY29yZCBvZiBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUgdGhhdCBtaWdodCB0aHJvdyBh
biBleGNlcHRpb24uCi0vLyBDYWxscyB0aGF0IG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbHNv
IHJlY29yZCB0aGUgSnVtcCB0YWtlbiBvbiBleGNlcHRpb24KLS8vICh1bnNldCBpZiBub3QgcHJl
c2VudCkgYW5kIGNvZGUgb3JpZ2luIHVzZWQgdG8gcmVjb3ZlciBoYW5kbGVyL3NvdXJjZSBpbmZv
Lgotc3RydWN0IENhbGxFeGNlcHRpb25SZWNvcmQgewotICAgIENhbGxFeGNlcHRpb25SZWNvcmQo
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotICAgICAg
ICA6IG1fY2FsbChjYWxsKQotICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAg
IHsKLSAgICB9Ci0KLSAgICBDYWxsRXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCi0gICAgICAgIDogbV9jYWxsKGNhbGwpCi0gICAgICAgICwgbV9leGNlcHRpb25D
aGVjayhleGNlcHRpb25DaGVjaykKLSAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
LSAgICB7Ci0gICAgfQotCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwotICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG1fZXhjZXB0aW9uQ2hlY2s7Ci0gICAgQ29kZU9yaWdpbiBtX2Nv
ZGVPcmlnaW47Ci19OwotCiBzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewogICAgIGVudW0g
UmVnaXN0ZXJNb2RlIHsgUmVnaXN0ZXJzRmx1c2hlZCwgUmVnaXN0ZXJzSW5Vc2UgfTsKICAgICAK
QEAgLTMyNCwyOCArMjQxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNl
dEVuZE9mQ29kZShsYWJlbElnbm9yaW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAg
IHVuc2lnbmVkIGN1cnJlbnRDb2RlT3JpZ2luSW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fY3VycmVudENvZGVPcmlnaW5JbmRleDsKLSAgICB9Ci0gICAgCi0gICAgLy8gR2V0
IGEgdG9rZW4gZm9yIGJlZ2lubmluZyBhIGNhbGwsIGFuZCBzZXQgdGhlIGN1cnJlbnQgY29kZSBv
cmlnaW4gaW5kZXggaW4KLSAgICAvLyB0aGUgY2FsbCBmcmFtZS4gRm9yIGVhY2ggYmVnaW5DYWxs
KCkgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZXhjZXB0aW9uCi0gICAgLy8gY2hlY2ssIGFu
ZCBhbGwgb2YgdGhlIGV4Y2VwdGlvbiBjaGVja3MgbXVzdCBoYXZlIHRoZSBzYW1lIENvZGVPcmln
aW4gYXMgdGhlCi0gICAgLy8gYmVnaW5DYWxsKCkuCi0gICAgdm9pZCBiZWdpbkNhbGwoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCisgICAgdm9pZCBlbWl0U3Rv
cmVDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpOworICAgICAgICBWZWN0b3I8Q29k
ZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBjb2RlT3JpZ2lucyA9CisgICAgICAg
ICAgICBtX2ppdENvZGUtPmNvbW1vbi5jb2RlT3JpZ2luczsKKyAgICAgICAgaWYgKGNvZGVPcmln
aW5zLmlzRW1wdHkoKQorICAgICAgICAgICAgfHwgY29kZU9yaWdpbnMubGFzdCgpICE9IGNvZGVP
cmlnaW4pCisgICAgICAgICAgICBjb2RlT3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gY29kZU9yaWdpbnMuc2l6ZSgpIC0gMTsKKyAgICAgICAgQVNT
RVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKICAgICAgICAgdW5zaWduZWQg
bG9jYXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNDb2RlT3JpZ2luSW5k
ZXgoaW5kZXgpOwogICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCB0
YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOwotICAgICAgICB0b2tlbi5zZXQoY29kZU9yaWdpbiwgaW5kZXgpOwotICAgIH0KLQotICAg
IC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2lu
Zy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBmdW5jdGlvbkNhbGwsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgQ2FsbEJlZ2luVG9rZW4mIHRva2VuKQotICAgIHsKLSAgICAgICAgdG9rZW4ucmVn
aXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soY29kZU9yaWdpbiwgbV9leGNlcHRpb25DaGVja3Muc2l6
ZSgpKTsKLSAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNv
cmQoZnVuY3Rpb25DYWxsLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2Fs
bCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCkBAIC0zNTYs
MjYgKzI2MiwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCkKKyAgICB2b2lkIGV4
Y2VwdGlvbkNoZWNrKEp1bXAganVtcFRvSGFuZGxlcikKICAgICB7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbTMyKG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSksIEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUik7CisgICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChqdW1wVG9I
YW5kbGVyKTsKICAgICB9Ci0KLSAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3
aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICB2b2lkIGFkZEV4Y2VwdGlvbkNoZWNrKENhbGwg
ZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIENhbGxCZWdpblRva2VuJiB0b2tl
bikKKyAgICAKKyAgICB2b2lkIGV4Y2VwdGlvbkNoZWNrKCkKICAgICB7Ci0gICAgICAgIHByZXBh
cmVGb3JFeGNlcHRpb25DaGVjaygpOwotICAgICAgICB0b2tlbi5yZWdpc3RlcldpdGhFeGNlcHRp
b25DaGVjayhjb2RlT3JpZ2luLCBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpOwotICAgICAgICBt
X2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoQ2FsbEV4Y2VwdGlvblJlY29yZChmdW5jdGlvbkNhbGws
IGVtaXRFeGNlcHRpb25DaGVjaygpLCBjb2RlT3JpZ2luKSk7CisgICAgICAgIG1fZXhjZXB0aW9u
Q2hlY2tzLmFwcGVuZChlbWl0RXhjZXB0aW9uQ2hlY2soKSk7CiAgICAgfQogICAgIAogICAgIC8v
IEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVj
ayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KLSAgICB2b2lkIGFkZEZh
c3RFeGNlcHRpb25DaGVjayhDYWxsIGZ1bmN0aW9uQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCisgICAgdm9pZCBhZGRGYXN0RXhjZXB0aW9uQ2hlY2so
KQogICAgIHsKLSAgICAgICAgcHJlcGFyZUZvckV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgIEp1
bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKLSAgICAgICAgdG9rZW4ucmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2soY29kZU9y
aWdpbiwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKTsKLSAgICAgICAgbV9leGNlcHRpb25DaGVj
a3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBleGNlcHRpb25DaGVj
aywgY29kZU9yaWdpbikpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoYnJhbmNo
VGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGFwcGVuZEV4aXRJbmZvKE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFp
bCA9IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCgpKQpAQCAtNDk4LDcgKzM5OCw3IEBAIHByaXZh
dGU6CiAgICAgLy8gVmVjdG9yIG9mIGNhbGxzIG91dCBmcm9tIEpJVCBjb2RlLCBpbmNsdWRpbmcg
ZXhjZXB0aW9uIGhhbmRsZXIgaW5mb3JtYXRpb24uCiAgICAgLy8gQ291bnQgb2YgdGhlIG51bWJl
ciBvZiBDYWxsUmVjb3JkcyB3aXRoIGV4Y2VwdGlvbiBoYW5kbGVycy4KICAgICBWZWN0b3I8Q2Fs
bExpbmtSZWNvcmQ+IG1fY2FsbHM7Ci0gICAgVmVjdG9yPENhbGxFeGNlcHRpb25SZWNvcmQ+IG1f
ZXhjZXB0aW9uQ2hlY2tzOworICAgIEp1bXBMaXN0IG1fZXhjZXB0aW9uQ2hlY2tzOwogICAgIAog
ICAgIFZlY3RvcjxMYWJlbD4gbV9ibG9ja0hlYWRzOwogCkBAIC01MjYsNyArNDI2LDYgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8SlNDYWxsUmVjb3JkLCA0PiBtX2pzQ2FsbHM7CiAgICAgVmVjdG9y
PE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG1fZXhpdENvbXBpbGF0aW9uSW5mbzsKICAgICBWZWN0
b3I8VmVjdG9yPExhYmVsPiA+IG1fZXhpdFNpdGVMYWJlbHM7Ci0gICAgdW5zaWduZWQgbV9jdXJy
ZW50Q29kZU9yaWdpbkluZGV4OwogICAgIAogICAgIENhbGwgbV9jYWxsU3RhY2tDaGVjazsKICAg
ICBDYWxsIG1fY2FsbEFyaXR5Q2hlY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1NjI0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MDQsMjkg
KzE5MDQsOCBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uU3RyaW5nRnJvCiAgICAg
cmV0dXJuIEpTQzo6c3RyaW5nRnJvbUNoYXJDb2RlKGV4ZWMsIG9wMSk7CiB9CiAKLURGR0hhbmRs
ZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUq
IGV4ZWMsIHVpbnQzMl90IGNhbGxJbmRleCkKK0RGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJ
T04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgLy8gRklY
TUU6IFRoaXMgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTczNAotICAgIFVOVVNFRF9QQVJBTShjYWxsSW5kZXgp
OwotICAgIAotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSA9IGV4
ZWMtPmV4Y2VwdGlvbigpOwotICAgIEFTU0VSVChleGNlcHRpb25WYWx1ZSk7Ci0gICAgCi0gICAg
RXhjZXB0aW9uSGFuZGxlciBoYW5kbGVyID0gZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0
aW9uVmFsdWUpOwotICAgIEFTU0VSVChoYW5kbGVyLmNhdGNoUm91dGluZSk7Ci0gICAgcmV0dXJu
IGRmZ0hhbmRsZXJFbmNvZGVkKGhhbmRsZXIuY2FsbEZyYW1lLCBoYW5kbGVyLmNhdGNoUm91dGlu
ZSk7Ci19Ci0KLURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9u
SGFuZGxlckluU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpc24ndCBuZWVkZWQgYW55bW9yZS4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIxNzM0Ci0gICAgVU5VU0VE
X1BBUkFNKHN0dWJJbmZvKTsKLSAgICAKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE1NjI0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDAsOCArMzAwLDcgQEAgaW5saW5lIERGR0hhbmRsZXJFbmNvZGVkIGRmZ0hhbmRsZXJFbmNv
ZAogICAgIHJldHVybiBjcmVhdGVERkdIYW5kbGVyKGV4ZWMsIGhhbmRsZXIpLnUuZW5jb2RlZDsK
IH0KICNlbmRpZgotREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJBVElPTiBsb29rdXBFeGNlcHRp
b25IYW5kbGVyKEV4ZWNTdGF0ZSosIHVpbnQzMl90KSBXVEZfSU5URVJOQUw7Ci1ERkdIYW5kbGVy
RW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0dWIoRXhlY1N0
YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qKSBXVEZfSU5URVJOQUw7CitERkdIYW5kbGVyRW5jb2Rl
ZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKikgV1RGX0lO
VEVSTkFMOwogCiAvLyBUaGVzZSBvcGVyYXRpb25zIGltcGxlbWVudCB0aGUgaW1wbGljaXRseSBj
YWxsZWQgVG9JbnQzMiBhbmQgVG9Cb29sZWFuIGNvbnZlcnNpb25zIGZyb20gRVM1LgogLy8gVGhp
cyBjb252ZXJzaW9uIHJldHVybnMgYW4gaW50MzJfdCB3aXRoaW4gYSBzaXplX3Qgc3VjaCB0aGF0
IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhlIHJlZ2lzdGVyLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNTYyNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDcsOCArNzQ3LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIEpJVENvbXBpbGVyOjpEYXRh
TGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAKLSAgICBDYWxsQmVnaW5Ub2tlbiB0b2tlbjsKLSAgICBtX2ppdC5iZWdpbkNhbGwobm9k
ZS0+Y29kZU9yaWdpbiwgdG9rZW4pOworICAgIG1faml0LmVtaXRTdG9yZUNvZGVvcmlnaW4obm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgCiAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigtKG1f
aml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rlcikp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIApAQCAtNzU3LDE4ICs3NTYsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwogICAgIG1faml0LnN0b3JlNjQocmVz
dWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpKSAqIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKTsKIAotICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW47CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFy
Q2FsbCgpOwotICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIGNvZGVPcmlnaW4sIHRva2Vu
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAg
IAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5tb3ZlKGNhbGxl
ZUdQUiwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgbV9qaXQucHJlcGFyZUZvckV4Y2VwdGlv
bkNoZWNrKCk7CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2Fs
bCgpOwotICAgIG1faml0Lm5vdGlmeUNhbGwoc2xvd0NhbGwsIGNvZGVPcmlnaW4sIHRva2VuKTsK
ICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NjI0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY5MywxMSArMTY5Myw5IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
bikKICAgICB7CiAgICAgICAgIHByZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKLSAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luID0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbjsKLSAgICAgICAg
Q2FsbEJlZ2luVG9rZW4gdG9rZW47Ci0gICAgICAgIG1faml0LmJlZ2luQ2FsbChjb2RlT3JpZ2lu
LCB0b2tlbik7CisgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5h
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgbV9qaXQuYWRkRXhjZXB0aW9uQ2hlY2soY2Fs
bCwgY29kZU9yaWdpbiwgdG9rZW4pOworICAgICAgICBtX2ppdC5hZGRFeGNlcHRpb25DaGVjaygp
OwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVu
Y3Rpb24sIEdQUlJlZyByZXN1bHQpCkBAIC0xNzEwLDYgKzE3MDgsNyBAQCBwdWJsaWM6CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYg
ZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJu
YWxDYWxsKCk7CisgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5h
cHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVn
KQogICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
KTsKQEAgLTE3MTgsNiArMTcxNyw3IEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxlcjo6Q2FsbCBh
cHBlbmRDYWxsKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKICAgICB7CiAgICAgICAgIHBy
ZXBhcmVGb3JFeHRlcm5hbENhbGwoKTsKKyAgICAgICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdp
bihtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgcmV0dXJuIG1faml0LmFwcGVu
ZENhbGwoZnVuY3Rpb24pOwogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwg
R1BSUmVnIHJlc3VsdDEsIEdQUlJlZyByZXN1bHQyKQpAQCAtMTczOCw3ICsxNzM4LDcgQEAgcHVi
bGljOgogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNv
bnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKICAgICB7Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKKyAg
ICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVuY3Rpb24pOwogICAg
ICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpIHsKICAgICAgICAgICAgIG1faml0LmFz
c2VtYmxlcigpLmZzdHBsKDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgcmVzdWx0KTsKQEAgLTE3NTYsNyArMTc1Niw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYg
ZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewotICAgICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7CisgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShyZXN1bHQsIEZQ
UkluZm86OmFyZ3VtZW50RlBSMCk7CiAgICAgICAgIHJldHVybiBjYWxsOwpAQCAtMTc3MSw3ICsx
NzcxLDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
U2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKICAg
ICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1
bmN0aW9uKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENhbGwoZnVu
Y3Rpb24pOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCiAgICAgICAgICAg
ICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CiAgICAgICAgIHJldHVybiBjYWxsOwpAQCAtMTc4
Nyw3ICsxNzg3LDcgQEAgcHVibGljOgogICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBl
bmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3Vs
dCkKICAgICB7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRD
YWxsKGZ1bmN0aW9uKTsKKyAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVuZENh
bGwoZnVuY3Rpb24pOwogICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1bHQp
OwogICAgICAgICByZXR1cm4gY2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTU2MjQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDkgKzMy
Nyw5IEBAIHB1YmxpYzoKICAgICBKdW1wIGVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVj
a0tpbmQga2luZCA9IE5vcm1hbEV4Y2VwdGlvbkNoZWNrKQogICAgIHsKICNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIHJldHVybiBicmFuY2hUZXN0NjQoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVj
ayA/IE5vblplcm8gOiBaZXJvLCBBYnNvbHV0ZUFkZHJlc3Modm0oKS0+YWRkcmVzc09mRXhjZXB0
aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2Vw
dGlvbkNoZWNrID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNz
T2ZFeGNlcHRpb24oKSkpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICByZXR1cm4gYnJh
bmNoMzIoa2luZCA9PSBOb3JtYWxFeGNlcHRpb25DaGVjayA/IE5vdEVxdWFsIDogRXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNoYXIqPih2bSgpLT5hZGRyZXNzT2ZFeGNl
cHRpb24oKSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgICAgIHJldHVybiBicmFuY2gz
MihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2VwdGlv
bigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKICNlbmRpZgogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212378</attachid>
            <date>2013-09-23 12:17:38 -0700</date>
            <delta_ts>2013-09-23 12:32:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58300</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2MjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEzLTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TmV2ZXIgdXNlIFJldHVyblBDIGZvciBleGNlcHRpb24gaGFuZGxpbmcgYW5kIHF1aXQgdXNpbmcg
ZXhjZXB0aW9uIGNoZWNrIGluZGljZXMgYXMgYSBsYW1lIHJlcGxpY2Egb2YgdGhlIENvZGVPcmln
aW4gaW5kZXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMTczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgRXhjZXB0aW9uIGhhbmRsaW5nIGNhbiBkZWR1Y2Ugd2hlcmUgdGhlIGV4Y2VwdGlv
biB3YXMgdGhyb3duIGZyb20gYnkgbG9va2luZyBhdCB0aGUKKyAgICAgICAgY29kZSBvcmlnaW4g
dGhhdCB3YXMgc3RvcmVkIGludG8gdGhlIGNhbGwgZnJhbWUgaGVhZGVyLiBUaGVyZSBpcyBubyBu
ZWVkIHRvIHBhc3MgYW55CisgICAgICAgIGFkZGl0aW9uYWwgbWV0YS1kYXRhIGludG8gdGhlIGV4
Y2VwdGlvbiB0aHJvd2luZyBsb2dpYy4gQnV0IHRoZSBERkcgd2FzIHN0aWxsIGRvaW5nIGl0Cisg
ICAgICAgIGFueXdheS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcmVtb3ZlcyBhbGwgb2YgdGhl
IGxvZ2ljIHRvIHBhc3MgZXh0cmEgbWV0YS1kYXRhIGludG8gbG9va3VwRXhjZXB0aW9uSGFuZGxl
cigpCisgICAgICAgIGFuZCBmcmllbmRzLiBJdCBzaW1wbGlmaWVzIGEgbG90IG9mIGNvZGUuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29kZU9yaWdpbnMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0NvZGVPcmlnaW5zKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpjYW5HZXRDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpj
b2RlT3JpZ2luKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChK
U0M6OklubGluZUNhbGxGcmFtZTo6SW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKiBieXRlY29k
ZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW5saW5lQ2Fs
bEZyYW1lU2V0OjpJbmxpbmVDYWxsRnJhbWVTZXQpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxs
RnJhbWVTZXQ6On5JbmxpbmVDYWxsRnJhbWVTZXQpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxs
RnJhbWVTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZVNldDo6c2hyaW5r
VG9GaXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZVNldC5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6SW5saW5lQ2FsbEZyYW1lU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZy
YW1lU2V0OjphdCk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRy
eSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRh
dGE6OnNocmlua1RvRml0KToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uRGF0YS5oOgorICAgICAg
ICAqIGRmZy9ERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
RGVzaXJlZFdyaXRlQmFycmllcjo6RGVzaXJlZFdyaXRlQmFycmllcik6CisgICAgICAgIChKU0M6
OkRGRzo6RGVzaXJlZFdyaXRlQmFycmllcjo6dHJpZ2dlcik6CisgICAgICAgICogZGZnL0RGR0Rl
c2lyZWRXcml0ZUJhcnJpZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdyaXRlQmFy
cmllcnM6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6aW5pdGlhbGl6ZUxhenlXcml0ZUJhcnJp
ZXJGb3JJbmxpbmVDYWxsRnJhbWVFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjppbml0
aWFsaXplTGF6eVdyaXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUNhbGxlZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpJVENvbXBpbGVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbik6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBp
bGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmVtaXRTdG9yZUNvZGVPcmln
aW4pOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGNlcHRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmZhc3RFeGNlcHRpb25DaGVjayk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25z
Lmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFNl
dFJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFwcGVuZENhbGwp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZTo6
cnVuKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2Vw
dGlvbkNoZWNrKToKKwogMjAxMy0wOS0yMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBDbGVhbnVwIENNYWtlIGZpbGVzIGluIEphdmFTY3JpcHRDb3Jl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTYyODAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmNwcAogICAgIGJ5dGVjb2RlL0V4aXRLaW5kLmNwcAogICAgIGJ5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCisgICAgYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lU2V0
LmNwcAogICAgIGJ5dGVjb2RlL0p1bXBUYWJsZS5jcHAKICAgICBieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAKICAgICBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDggQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaCBcCisJU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZVNldC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1Rh
cmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJ
KHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwIFwKICAgICBieXRlY29kZS9FeGl0S2luZC5jcHAgXAogICAg
IGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwIFwKKyAgICBieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWVTZXQuY3BwIFwKICAgICBieXRlY29kZS9KdW1wVGFibGUuY3BwIFwKICAgICBieXRlY29kZS9M
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgXAogICAgIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTU2MjgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzA2LDYgKzMwNiw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxF
eGVjdXRpb25Db3VudGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxFeGl0S2luZC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcR2V0QnlJZFN0YXR1cy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxKdW1wVGFibGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNw
cCIgLz4NCkBAIC02NDgsNiArNjQ5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXEV4cHJlc3Npb25SYW5nZUluZm8uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxHZXRCeUlkU3RhdHVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxJbnN0cnVjdGlvbi5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1bXBUYWJsZS5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgiIC8+DQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDggQEAKIAkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3
IC8qIENDYWxsSGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyNEU1M0QxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTQzMTdF
QTlGNTkwMEFCQjIxNyAvKiBGUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRTE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjRFNTQ0
MTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0RTUzRjE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjRF
NTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyNEU1NTMxN0YwQjcxQzAwQUJC
MjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi87IH07CisJCTBGMjRFNTU2MTdGMEI3MUMw
MEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjRFNTU0MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVD
YWxsRnJhbWVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9y
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMkI2NkFDMTdCNkI1M0YwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVm
Q291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QTgxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjY2QUQxN0I2
QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjY2QTkxN0I2QjUzRDAwQTdB
RTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMzE4LDYgKzEzMjAsOCBAQAogCQkwRjI0
RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENDYWxsSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjI0RTUzRTE3RUE5RjU5MDBBQkIyMTcgLyogRlBSSW5mby5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBGUFJJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdQUkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVDYWxsRnJhbWVTZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjI0RTU1NDE3RjBCNzFDMDBBQkIyMTcg
LyogSW5saW5lQ2FsbEZyYW1lU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUNhbGxGcmFtZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI1
NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbEFycmF5QWxs
b2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJC
NjZBODE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR0NJbmNvbWluZ1JlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQjY2QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NTQsNiArMzc1OCw4IEBACiAJCTk2OUEwNzhGMEVE
MUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMEYyNEU1NTMxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxG
cmFtZVNldC5jcHAgKi8sCisJCQkJMEYyNEU1NTQxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNh
bGxGcmFtZVNldC5oICovLAogCQkJCTBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcCAqLywKIAkJCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovLAogCQkJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3
QyAvKiBBcnJheVByb2ZpbGUuY3BwICovLApAQCAtNDI0MCw2ICs0MjQ2LDcgQEAKIAkJCQk3QzNC
QTI5NzE3QzAzOTU2MDA3MkREQzkgLyogSlNQcm9taXNlUmVzb2x2ZXJDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0MzQkEyOTkxN0MwMzk1NjAwNzJEREM5IC8qIEpTUHJvbWlzZVJl
c29sdmVyUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5
RjE3RDAgLyogSlNQcm94eS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyNEU1NTYxN0YwQjcxQzAw
QUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MjYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTUmV0YWluUHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDg3NEFFNjE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdDMEM0QUMxNjgxMDMwMjAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC00OTg0LDYgKzQ5OTEsNyBAQAogCQkJCTBGREIyQ0U3MTc0ODMwQTIwMDdCM0Mx
QiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM3MDE2NURCQjkw
MDA1QUQzODcgLyogRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDQ0N0VE
MTdBMEJENzAwMEY1ODk4RSAvKiBEdW1wQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJy
b3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU0NSwxMyArMjU0NSw4IEBAIHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2Rl
IHMKICAgICAgICAgfQogICAgIH0gLy8gZWxzZSBkb24ndCBzaHJpbmsgdGhlc2UsIGJlY2F1c2Ug
d2Ugd291bGQgaGF2ZSBhbHJlYWR5IHBvaW50ZWQgcG9pbnRlcnMgaW50byB0aGVzZSB0YWJsZXMu
CiAKLSAgICBpZiAobV9yYXJlRGF0YSkgeworICAgIGlmIChtX3JhcmVEYXRhKQogICAgICAgICBt
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0jaWYgRU5BQkxF
KERGR19KSVQpCi0gICAgICAgIG1fcmFyZURhdGEtPm1faW5saW5lQ2FsbEZyYW1lcy5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvZGVPcmlnaW5zLnNocmlua1RvRml0KCk7
Ci0jZW5kaWYKLSAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpjcmVhdGVBY3RpdmF0aW9uKENh
bGxGcmFtZSogY2FsbEZyYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU2MjgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC01NjYsNDMgKzU2NiwyNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fdW5saW5r
ZWRDb2RlLT5oYXNFeHByZXNzaW9uSW5mbygpOyB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBTZWdtZW50ZWRWZWN0b3I8SW5saW5lQ2FsbEZyYW1lLCA0PiYgaW5saW5lQ2FsbEZyYW1lcygp
Ci0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIHJl
dHVybiBtX3JhcmVEYXRhLT5tX2lubGluZUNhbGxGcmFtZXM7Ci0gICAgfQotICAgICAgICAKICAg
ICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBjb2RlT3JpZ2lu
cygpCiAgICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5tX2NvZGVPcmlnaW5zOworICAgICAgICByZXR1cm4gbV9qaXRD
b2RlLT5kZmdDb21tb24oKS0+Y29kZU9yaWdpbnM7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVk
IGFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotICAgIHsKLSAgICAgICAgY3Jl
YXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX3Jh
cmVEYXRhLT5tX2NvZGVPcmlnaW5zLnNpemUoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9jb2Rl
T3JpZ2lucy5hcHBlbmQoY29kZU9yaWdpbik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotICAgICAgICAKICAgICAvLyBIYXZpbmcgY29kZSBvcmlnaW5zIGltcGxpZXMgdGhhdCB0aGVy
ZSBoYXMgYmVlbiBzb21lIGlubGluaW5nLgogICAgIGJvb2wgaGFzQ29kZU9yaWdpbnMoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEgJiYgISFtX3JhcmVEYXRhLT5tX2NvZGVPcmln
aW5zLnNpemUoKTsKKyAgICAgICAgcmV0dXJuIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRU
eXBlKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgYm9vbCBjYW5HZXRDb2RlT3JpZ2luKHVuc2ln
bmVkIGluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQorICAgICAgICBpZiAo
IWhhc0NvZGVPcmlnaW5zKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBtX3JhcmVEYXRhLT5tX2NvZGVPcmlnaW5zLnNpemUoKSA+IGluZGV4OworICAgICAgICBy
ZXR1cm4gaW5kZXggPCBjb2RlT3JpZ2lucygpLnNpemUoKTsKICAgICB9CiAKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4odW5zaWduZWQgaW5kZXgpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3JhcmVEYXRhKTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29kZU9yaWdp
bnNbaW5kZXhdOworICAgICAgICByZXR1cm4gY29kZU9yaWdpbnMoKVtpbmRleF07CiAgICAgfQog
CiAgICAgYm9vbCBhZGRGcmVxdWVudEV4aXRTaXRlKGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0
ZSYgc2l0ZSkKQEAgLTExMjAsMTEgKzExMDQsNiBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
U3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKICAgICAgICAgRXZh
bENvZGVDYWNoZSBtX2V2YWxDb2RlQ2FjaGU7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAg
ICAgU2VnbWVudGVkVmVjdG9yPElubGluZUNhbGxGcmFtZSwgND4gbV9pbmxpbmVDYWxsRnJhbWVz
OwotICAgICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1f
Y29kZU9yaWdpbnM7Ci0jZW5kaWYKICAgICB9OwogI2lmIENPTVBJTEVSKE1TVkMpCiAgICAgZnJp
ZW5kIHZvaWQgV1RGOjpkZWxldGVPd25lZFB0cjxSYXJlRGF0YT4oUmFyZURhdGEqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24g
MTU2MjgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwxNSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAzMTsKICAgICBib29sIGlzQ2FsbCA6IDE7CiAg
ICAgCisgICAgLy8gVGhlcmUgaXMgcmVhbGx5IG5vIGdvb2Qgbm90aW9uIG9mIGEgImRlZmF1bHQi
IHNldCBvZiB2YWx1ZXMgZm9yCisgICAgLy8gSW5saW5lQ2FsbEZyYW1lJ3MgZmllbGRzLiBUaGlz
IGNvbnN0cnVjdG9yIGlzIGhlcmUganVzdCB0byByZWR1Y2UgY29uZnVzaW9uIGlmCisgICAgLy8g
d2UgZm9yZ290IHRvIGluaXRpYWxpemUgZXhwbGljaXRseS4KKyAgICBJbmxpbmVDYWxsRnJhbWUo
KQorICAgICAgICA6IHN0YWNrT2Zmc2V0KDApCisgICAgICAgICwgaXNDYWxsKGZhbHNlKQorICAg
IHsKKyAgICB9CisgICAgCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlv
bktpbmQoKSBjb25zdCB7IHJldHVybiBzcGVjaWFsaXphdGlvbkZyb21Jc0NhbGwoaXNDYWxsKTsg
fQogICAgIAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0IHsgcmV0dXJuICFjYWxsZWU7
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVT
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5saW5lQ2FsbEZyYW1lU2V0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitJbmxpbmVDYWxsRnJhbWVTZXQ6OklubGluZUNhbGxGcmFtZVNldCgp
IHsgfQorSW5saW5lQ2FsbEZyYW1lU2V0Ojp+SW5saW5lQ2FsbEZyYW1lU2V0KCkgeyB9CisKK0lu
bGluZUNhbGxGcmFtZSogSW5saW5lQ2FsbEZyYW1lU2V0OjphZGQoKQoreworICAgIG1fZnJhbWVz
LmFwcGVuZChJbmxpbmVDYWxsRnJhbWUoKSk7CisgICAgcmV0dXJuICZtX2ZyYW1lcy5sYXN0KCk7
Cit9CisKK3ZvaWQgSW5saW5lQ2FsbEZyYW1lU2V0OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgbV9m
cmFtZXMuc2hyaW5rVG9GaXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lU2V0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5l
Q2FsbEZyYW1lU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIElubGluZUNhbGxG
cmFtZVNldF9oCisjZGVmaW5lIElubGluZUNhbGxGcmFtZVNldF9oCisKKyNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Nl
Z21lbnRlZFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSW5saW5lQ2FsbEZy
YW1lU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbmxpbmVDYWxsRnJhbWVTZXQpOwor
cHVibGljOgorICAgIElubGluZUNhbGxGcmFtZVNldCgpOworICAgIH5JbmxpbmVDYWxsRnJhbWVT
ZXQoKTsKKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lcy5p
c0VtcHR5KCk7IH0KKyAgICAKKyAgICBJbmxpbmVDYWxsRnJhbWUqIGFkZCgpOworICAgIAorICAg
IC8vIFRoZSBvbmx5IHVzZXJzIG9mIHRoZXNlIG1ldGhvZHMganVzdCB3YW50IHRvIGl0ZXJhdGUg
YWxsIGlubGluZSBjYWxsIGZyYW1lcy4KKyAgICAvLyBUaGVyZSBpcyBubyByZXF1aXJlbWVudCBm
b3IgcmFuZG9tIGFjY2Vzcy4KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZXMuc2l6ZSgpOyB9CisgICAgSW5saW5lQ2FsbEZyYW1lKiBhdCh1bnNpZ25lZCBpKSB7IHJl
dHVybiAmbV9mcmFtZXNbaV07IH0KKyAgICAKKyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAg
Citwcml2YXRlOgorICAgIFNlZ21lbnRlZFZlY3RvcjxJbmxpbmVDYWxsRnJhbWUsIDQ+IG1fZnJh
bWVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmxpbmVDYWxsRnJh
bWVTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NjI4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw4ICsxMjIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKICAgICAgICAgLy8gUmVjb3Jk
IHdoaWNoIGFyZ3VtZW50cyBhcmUga25vd24gdG8gZXNjYXBlIG5vIG1hdHRlciB3aGF0LgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+aW5saW5lQ2FsbEZyYW1lcygpLnNp
emUoKTsgaS0tOykKLSAgICAgICAgICAgIHBydW5lT2J2aW91c0FyZ3VtZW50Q3JlYXRpb25zKCZj
b2RlQmxvY2soKS0+aW5saW5lQ2FsbEZyYW1lcygpW2ldKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC5tX2lubGluZUNhbGxGcmFtZXMtPnNpemUoKTsgaS0tOykKKyAgICAgICAg
ICAgIHBydW5lT2J2aW91c0FyZ3VtZW50Q3JlYXRpb25zKG1fZ3JhcGgubV9pbmxpbmVDYWxsRnJh
bWVzLT5hdChpKSk7CiAgICAgICAgIHBydW5lT2J2aW91c0FyZ3VtZW50Q3JlYXRpb25zKDApOyAv
LyB0aGUgbWFjaGluZSBjYWxsIGZyYW1lLgogICAgICAgICAKICAgICAgICAgLy8gQ3JlYXRlIGRh
dGEgZm9yIHZhcmlhYmxlIGFjY2VzcyBkYXRhcyB0aGF0IHdlIHdpbGwgd2FudCB0byBhbmFseXpl
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzc0LDU2ICszMzc0LDUzIEBA
IEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgQVNTRVJU
KGlubGluZUNhbGxGcmFtZVN0YXJ0ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAg
ICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQpOwogICAgICAgICAKLSAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lIGlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSBieXRl
Q29kZVBhcnNlci0+bV9ncmFwaC5tX2lubGluZUNhbGxGcmFtZXMtPmFkZCgpOwogICAgICAgICBp
bml0aWFsaXplTGF6eVdyaXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUV4ZWN1dGFibGUoCiAg
ICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX3BsYW4ud3JpdGVCYXJyaWVycywK
LSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlLAorICAgICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUsCiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2ssCi0gICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlu
bGluZUNhbGxGcmFtZXMoKS5zaXplKCksCisgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZSwK
ICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIAogICAgICAgICAgICAgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Ci0gICAgICAg
IGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IGlubGluZUNhbGxGcmFtZVN0YXJ0IC0gSlNT
dGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgLSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOwogICAgICAgICBpZiAoY2FsbGVlKSB7CiAgICAgICAgICAgICBpbml0aWFsaXplTGF6
eVdyaXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUNhbGxlZSgKICAgICAgICAgICAgICAgICBi
eXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX3BsYW4ud3JpdGVCYXJyaWVycywKLSAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVlLAorICAgICAgICAgICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZWUsCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrLAotICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aW5saW5l
Q2FsbEZyYW1lcygpLnNpemUoKSwKKyAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZSwK
ICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCAKICAgICAgICAgICAgICAgICBjYWxsZWUpOwogICAgICAgICB9Ci0gICAgICAgIGlu
bGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmlnaW4o
KTsKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmFyZ3VtZW50cy5yZXNpemUoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpOyAvLyBTZXQgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaW5jbHVkaW5n
IHRoaXMsIGJ1dCBkb24ndCBjb25maWd1cmUgdGhlIHZhbHVlIHJlY292ZXJpZXMsIHlldC4KLSAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLmlzQ2FsbCA9IGlzQ2FsbChraW5kKTsKKyAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUtPmNhbGxlciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJyZW50Q29kZU9yaWdp
bigpOworICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnJlc2l6ZShhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbmNs
dWRpbmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFsdWUgcmVjb3ZlcmllcywgeWV0
LgorICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDYWxsID0gaXNDYWxsKGtpbmQpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhcHR1cmVkVmFycyA9IGlubGluZUNhbGxG
cmFtZS5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7CisgICAgICAgIGlmICht
X2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsg
aS0tOykgewogICAgICAgICAgICAgICAgIGlmIChieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2st
PmlzQ2FwdHVyZWQobG9jYWxUb09wZXJhbmQoaSkpKQotICAgICAgICAgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUuY2FwdHVyZWRWYXJzLnNldChpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5zZXQoaSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBmb3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
IGktLTspIHsKICAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRU
b09wZXJhbmQoaSkpKQotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYXB0dXJlZFZh
cnMuc2V0KG9wZXJhbmRUb0xvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkpICsgaW5saW5lQ2FsbEZy
YW1lLnN0YWNrT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNh
cHR1cmVkVmFycy5zZXQob3BlcmFuZFRvTG9jYWwoYXJndW1lbnRUb09wZXJhbmQoaSkgKyBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHNp
emVfdCBpID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKICAgICAgICAgICAgIGludCBs
b2NhbE9wZXJhbmQgPSBsb2NhbFRvT3BlcmFuZChpKTsKICAgICAgICAgICAgIGlmIChjb2RlQmxv
Y2stPmlzQ2FwdHVyZWQobG9jYWxPcGVyYW5kKSkKLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUuY2FwdHVyZWRWYXJzLnNldChvcGVyYW5kVG9Mb2NhbChsb2NhbE9wZXJhbmQgKyBpbmxp
bmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxG
cmFtZS0+Y2FwdHVyZWRWYXJzLnNldChvcGVyYW5kVG9Mb2NhbChsb2NhbE9wZXJhbmQgKyBtX2lu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKICAgICAgICAgfQogCiAjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nRigiQ3VycmVudCBjYXB0dXJlZCB2YXJp
YWJsZXM6ICIpOwotICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FwdHVyZWRWYXJzLmR1bXAoV1RG
OjpkYXRhRmlsZSgpKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycy5k
dW1wKFdURjo6ZGF0YUZpbGUoKSk7CiAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCiAg
ICAgICAgIAotICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxG
cmFtZXMoKS5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgbV9pbmxpbmVDYWxsRnJh
bWUgPSAmYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkubGFz
dCgpOwotICAgICAgICAKICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPmJ1aWxkT3BlcmFuZE1hcHNJ
Zk5lY2Vzc2FyeSgpOwogICAgICAgICAKICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXAucmVzaXpl
KGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTU2MjgwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDUsOCArNDUsMTkgQEAgdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1
cgogICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7
CiB9CiAKK3Vuc2lnbmVkIENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4oQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQoreworICAgIGlmIChjb2RlT3JpZ2lucy5pc0VtcHR5KCkKKyAgICAgICAgfHwgY29k
ZU9yaWdpbnMubGFzdCgpICE9IGNvZGVPcmlnaW4pCisgICAgICAgIGNvZGVPcmlnaW5zLmFwcGVu
ZChjb2RlT3JpZ2luKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGNvZGVPcmlnaW5zLnNpemUoKSAt
IDE7CisgICAgQVNTRVJUKGNvZGVPcmlnaW5zW2luZGV4XSA9PSBjb2RlT3JpZ2luKTsKKyAgICBy
ZXR1cm4gaW5kZXg7Cit9CisKIHZvaWQgQ29tbW9uRGF0YTo6c2hyaW5rVG9GaXQoKQogeworICAg
IGNvZGVPcmlnaW5zLnNocmlua1RvRml0KCk7CiAgICAgd2Vha1JlZmVyZW5jZXMuc2hyaW5rVG9G
aXQoKTsKICAgICB0cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE1NjI4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIklubGlu
ZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlByb2ZpbGVy
Q29tcGlsYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTY5LDkgKzcw
LDEzIEBAIHB1YmxpYzoKICAgICBDb21tb25EYXRhKCkgeyB9CiAgICAgCiAgICAgdm9pZCBub3Rp
ZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKFBsYW4mLCBDb2RlQmxvY2sqLCBOb2RlKik7
CisgICAgdW5zaWduZWQgYWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pOwogICAg
IAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKIAorICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVT
ZXQ+IGlubGluZUNhbGxGcmFtZXM7CisgICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBjb2RlT3JpZ2luczsKKyAgICAKICAgICBWZWN0b3I8SWRlbnRpZmllcj4g
ZGZnSWRlbnRpZmllcnM7CiAgICAgVmVjdG9yPFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uPiB0cmFu
c2l0aW9uczsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNl
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFycmll
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdyaXRlQmFycmllcnMuY3BwCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsMzUgKzM4LDQyIEBAIERlc2lyZWRXcml0ZUJhcnJpZXI6OkRlc2lyZWRXcml0ZUJhcnJpZXIK
ICAgICA6IG1fb3duZXIob3duZXIpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKLSAgICAsIG1faW5kZXgoaW5kZXgpCiB7CisgICAgbV93aGljaC5pbmRl
eCA9IGluZGV4OworfQorCitEZXNpcmVkV3JpdGVCYXJyaWVyOjpEZXNpcmVkV3JpdGVCYXJyaWVy
KFR5cGUgdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lLCBKU0NlbGwqIG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1f
dHlwZSh0eXBlKQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQoreworICAgIG1fd2hpY2gu
aW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lOwogfQogCiB2b2lkIERlc2lyZWRXcml0
ZUJhcnJpZXI6OnRyaWdnZXIoVk0mIHZtKQogewogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBDb25zdGFudFR5cGU6IHsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+JiBiYXJy
aWVyID0gbV9jb2RlQmxvY2stPmNvbnN0YW50cygpW21faW5kZXhdOworICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGJhcnJpZXIgPSBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKClbbV93aGlj
aC5pbmRleF07CiAgICAgICAgIGJhcnJpZXIuc2V0KHZtLCBtX293bmVyLCBiYXJyaWVyLmdldCgp
KTsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZUV4ZWN1dGFibGVUeXBlOiB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSYg
aW5saW5lQ2FsbEZyYW1lID0gbV9jb2RlQmxvY2stPmlubGluZUNhbGxGcmFtZXMoKVttX2luZGV4
XTsKLSAgICAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+JiBleGVjdXRhYmxlID0g
aW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGU7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gbV93aGljaC5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIFdyaXRlQmFy
cmllcjxTY3JpcHRFeGVjdXRhYmxlPiYgZXhlY3V0YWJsZSA9IGlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZTsKICAgICAgICAgZXhlY3V0YWJsZS5zZXQodm0sIG1fb3duZXIsIGV4ZWN1dGFibGUu
Z2V0KCkpOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lQ2FsbGVlVHlwZTogewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUm
IGlubGluZUNhbGxGcmFtZSA9IG1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKClbbV9pbmRl
eF07Ci0gICAgICAgIEFTU0VSVCghIWlubGluZUNhbGxGcmFtZS5jYWxsZWUpOwotICAgICAgICBX
cml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZS5jYWxsZWU7
CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV93aGljaC5pbmxp
bmVDYWxsRnJhbWU7CisgICAgICAgIEFTU0VSVCghIWlubGluZUNhbGxGcmFtZS0+Y2FsbGVlKTsK
KyAgICAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZTsKICAgICAgICAgY2FsbGVlLnNldCh2bSwgbV9vd25lciwgY2FsbGVlLmdldCgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgfQorICAgICAgICByZXR1cm47CisgICAg
fSB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogRGVzaXJlZFdyaXRl
QmFycmllcnM6OkRlc2lyZWRXcml0ZUJhcnJpZXJzKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFycmllcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmgJKHJldmlzaW9uIDE1
NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdyaXRlQmFycmll
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIEpTRnVuY3Rpb247CiBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwogY2xhc3MgVk07CitzdHJ1
Y3QgSW5saW5lQ2FsbEZyYW1lOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDMsNiArNDQsNyBA
QCBjbGFzcyBEZXNpcmVkV3JpdGVCYXJyaWVyIHsKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeyBD
b25zdGFudFR5cGUsIElubGluZUNhbGxGcmFtZUV4ZWN1dGFibGVUeXBlLCBJbmxpbmVDYWxsRnJh
bWVDYWxsZWVUeXBlIH07CiAgICAgRGVzaXJlZFdyaXRlQmFycmllcihUeXBlLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBpbmRleCwgSlNDZWxsKiBvd25lcik7CisgICAgRGVzaXJlZFdyaXRlQmFycmll
cihUeXBlLCBDb2RlQmxvY2sqLCBJbmxpbmVDYWxsRnJhbWUqLCBKU0NlbGwqIG93bmVyKTsKIAog
ICAgIHZvaWQgdHJpZ2dlcihWTSYpOwogCkBAIC01MCw3ICs1MiwxMCBAQCBwcml2YXRlOgogICAg
IEpTQ2VsbCogbV9vd25lcjsKICAgICBUeXBlIG1fdHlwZTsKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwotICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgdW5pb24geworICAgICAgICB1bnNp
Z25lZCBpbmRleDsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWU7Cisg
ICAgfSBtX3doaWNoOwogfTsKIAogY2xhc3MgRGVzaXJlZFdyaXRlQmFycmllcnMgewpAQCAtNjMs
NiArNjgsMTEgQEAgcHVibGljOgogICAgICAgICBtX2JhcnJpZXJzLmFwcGVuZChEZXNpcmVkV3Jp
dGVCYXJyaWVyKHR5cGUsIGNvZGVCbG9jaywgaW5kZXgsIG93bmVyKSk7CiAgICAgICAgIHJldHVy
biBtX2JhcnJpZXJzLmxhc3QoKTsKICAgICB9CisgICAgRGVzaXJlZFdyaXRlQmFycmllciYgYWRk
KERlc2lyZWRXcml0ZUJhcnJpZXI6OlR5cGUgdHlwZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0NlbGwqIG93bmVyKQorICAgIHsKKyAg
ICAgICAgbV9iYXJyaWVycy5hcHBlbmQoRGVzaXJlZFdyaXRlQmFycmllcih0eXBlLCBjb2RlQmxv
Y2ssIGlubGluZUNhbGxGcmFtZSwgb3duZXIpKTsKKyAgICAgICAgcmV0dXJuIG1fYmFycmllcnMu
bGFzdCgpOworICAgIH0KIAogICAgIHZvaWQgdHJpZ2dlcihWTSYpOwogCkBAIC03MCwxNSArODAs
MTUgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8RGVzaXJlZFdyaXRlQmFycmllcj4gbV9iYXJyaWVy
czsKIH07CiAKLWlubGluZSB2b2lkIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9ySW5saW5l
Q2FsbEZyYW1lRXhlY3V0YWJsZShEZXNpcmVkV3JpdGVCYXJyaWVycyYgYmFycmllcnMsIFdyaXRl
QmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiYgYmFycmllciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGluZGV4LCBKU0NlbGwqIG93bmVyLCBTY3JpcHRFeGVjdXRhYmxlKiB2YWx1ZSkK
K2lubGluZSB2b2lkIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9ySW5saW5lQ2FsbEZyYW1l
RXhlY3V0YWJsZShEZXNpcmVkV3JpdGVCYXJyaWVycyYgYmFycmllcnMsIFdyaXRlQmFycmllcjxT
Y3JpcHRFeGVjdXRhYmxlPiYgYmFycmllciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lLCBKU0NlbGwqIG93bmVyLCBTY3JpcHRFeGVjdXRhYmxl
KiB2YWx1ZSkKIHsKLSAgICBEZXNpcmVkV3JpdGVCYXJyaWVyJiBkZXNpcmVkQmFycmllciA9IGJh
cnJpZXJzLmFkZChEZXNpcmVkV3JpdGVCYXJyaWVyOjpJbmxpbmVDYWxsRnJhbWVFeGVjdXRhYmxl
VHlwZSwgY29kZUJsb2NrLCBpbmRleCwgb3duZXIpOworICAgIERlc2lyZWRXcml0ZUJhcnJpZXIm
IGRlc2lyZWRCYXJyaWVyID0gYmFycmllcnMuYWRkKERlc2lyZWRXcml0ZUJhcnJpZXI6OklubGlu
ZUNhbGxGcmFtZUV4ZWN1dGFibGVUeXBlLCBjb2RlQmxvY2ssIGlubGluZUNhbGxGcmFtZSwgb3du
ZXIpOwogICAgIGJhcnJpZXIgPSBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4oZGVzaXJl
ZEJhcnJpZXIsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgaW5pdGlhbGl6ZUxhenlXcml0ZUJh
cnJpZXJGb3JJbmxpbmVDYWxsRnJhbWVDYWxsZWUoRGVzaXJlZFdyaXRlQmFycmllcnMmIGJhcnJp
ZXJzLCBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGJhcnJpZXIsIENvZGVCbG9jayogY29kZUJs
b2NrLCB1bnNpZ25lZCBpbmRleCwgSlNDZWxsKiBvd25lciwgSlNGdW5jdGlvbiogdmFsdWUpCitp
bmxpbmUgdm9pZCBpbml0aWFsaXplTGF6eVdyaXRlQmFycmllckZvcklubGluZUNhbGxGcmFtZUNh
bGxlZShEZXNpcmVkV3JpdGVCYXJyaWVycyYgYmFycmllcnMsIFdyaXRlQmFycmllcjxKU0Z1bmN0
aW9uPiYgYmFycmllciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lLCBKU0NlbGwqIG93bmVyLCBKU0Z1bmN0aW9uKiB2YWx1ZSkKIHsKLSAgICBE
ZXNpcmVkV3JpdGVCYXJyaWVyJiBkZXNpcmVkQmFycmllciA9IGJhcnJpZXJzLmFkZChEZXNpcmVk
V3JpdGVCYXJyaWVyOjpJbmxpbmVDYWxsRnJhbWVDYWxsZWVUeXBlLCBjb2RlQmxvY2ssIGluZGV4
LCBvd25lcik7CisgICAgRGVzaXJlZFdyaXRlQmFycmllciYgZGVzaXJlZEJhcnJpZXIgPSBiYXJy
aWVycy5hZGQoRGVzaXJlZFdyaXRlQmFycmllcjo6SW5saW5lQ2FsbEZyYW1lQ2FsbGVlVHlwZSwg
Y29kZUJsb2NrLCBpbmxpbmVDYWxsRnJhbWUsIG93bmVyKTsKICAgICBiYXJyaWVyID0gV3JpdGVC
YXJyaWVyPEpTRnVuY3Rpb24+KGRlc2lyZWRCYXJyaWVyLCB2YWx1ZSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTYyODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNiArNTQsNyBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiAg
ICAgLCBtX2NvZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrLmdldCgpKQogICAgICwgbV9wcm9maWxl
ZEJsb2NrKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwgbV9hbGxvY2F0b3IobG9u
Z0xpdmVkU3RhdGUubV9hbGxvY2F0b3IpCisgICAgLCBtX2lubGluZUNhbGxGcmFtZXMoYWRvcHRQ
dHIobmV3IElubGluZUNhbGxGcmFtZVNldCgpKSkKICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNl
KQogICAgICwgbV9maXhwb2ludFN0YXRlKEJlZm9yZUZpeHBvaW50KQogICAgICwgbV9mb3JtKExv
YWRTdG9yZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVBbGxvY2F0b3IuaCIK
ICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHVmFyaWFkaWNGdW5jdGlvbi5oIgor
I2luY2x1ZGUgIklubGluZUNhbGxGcmFtZVNldC5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNp
bmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8d3RmL0Jp
dFZlY3Rvci5oPgpAQCAtNzQ3LDYgKzc0OCw3IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0
b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7
CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5QnVmZmVyRGF0YSwgND4gbV9uZXdBcnJheUJ1
ZmZlckRhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPFN3aXRjaERhdGEsIDQ+IG1fc3dpdGNoRGF0
YTsKKyAgICBPd25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CiAg
ICAgYm9vbCBtX2hhc0FyZ3VtZW50czsKICAgICBIYXNoU2V0PEV4ZWN1dGFibGVCYXNlKj4gbV9l
eGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZDsKICAgICBCaXRWZWN0b3IgbV9wcmVzZXJ2
ZWRWYXJzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBAIEpJVENvbXBp
bGVyOjpKSVRDb21waWxlcihHcmFwaCYgZGZnKQogICAgICwgbV9ncmFwaChkZmcpCiAgICAgLCBt
X2ppdENvZGUoYWRvcHRSZWYobmV3IEpJVENvZGUoKSkpCiAgICAgLCBtX2Jsb2NrSGVhZHMoZGZn
Lm51bUJsb2NrcygpKQotICAgICwgbV9jdXJyZW50Q29kZU9yaWdpbkluZGV4KDApCiB7CiAgICAg
aWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IG1fZ3JhcGgubV92bS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXIpCiAgICAgICAgIG1fZGlzYXNzZW1ibGVyID0gYWRvcHRQdHIobmV3IERpc2Fzc2Vt
YmxlcihkZmcpKTsKQEAgLTEyMCwzMyArMTE5LDIxIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVCb2R5KCkKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCkK
IHsKLSAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIG1fY2FsbHMgdmVjdG9yLCBjaGVja2luZyBmb3Ig
anVtcHMgdG8gbGluay4KLSAgICBib29sIGRpZExpbmtFeGNlcHRpb25DaGVjayA9IGZhbHNlOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBKdW1wJiBleGNlcHRpb25DaGVjayA9IG1fZXhjZXB0aW9uQ2hlY2tzW2ld
Lm1fZXhjZXB0aW9uQ2hlY2s7Ci0gICAgICAgIGlmIChleGNlcHRpb25DaGVjay5pc1NldCgpKSB7
Ci0gICAgICAgICAgICBleGNlcHRpb25DaGVjay5saW5rKHRoaXMpOwotICAgICAgICAgICAgZGlk
TGlua0V4Y2VwdGlvbkNoZWNrID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobV9l
eGNlcHRpb25DaGVja3MuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fZXhj
ZXB0aW9uQ2hlY2tzLmxpbmsodGhpcyk7CiAKLSAgICAvLyBJZiBhbnkgZXhjZXB0aW9uIGNoZWNr
cyB3ZXJlIGxpbmtlZCwgZ2VuZXJhdGUgY29kZSB0byBsb29rdXAgYSBoYW5kbGVyLgotICAgIGlm
IChkaWRMaW5rRXhjZXB0aW9uQ2hlY2spIHsKLSAgICAgICAgLy8gbG9va3VwRXhjZXB0aW9uSGFu
ZGxlciBpcyBwYXNzZWQgdHdvIGFyZ3VtZW50cywgZXhlYyAodGhlIENhbGxGcmFtZSopLCBhbmQK
LSAgICAgICAgLy8gdGhlIGluZGV4IG9mIHRoZSBDb2RlT3JpZ2luLiBUaGUgbGF0dGVyIGlzIHVu
dXNlZCwgc2VlCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjE3MzQuCi0gICAgICAgIG1vdmUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwotICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIC8vIGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXIgaXMgcGFzc2VkIG9uZSBhcmd1bWVudCwgdGhlIGV4ZWMgKHRoZSBDYWxsRnJh
bWUqKS4KKyAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogI2lmIENQVShYODYpCi0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRo
ZSBjYWxsIGFic3RyYWN0aW9uLCBidXQgdGhpcyBpcyBjdXJyZW50bHkgaW4gdGhlIFNwZWN1bGF0
aXZlSklUIGxheWVyIQotICAgICAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAg
ICAgIHBva2UoR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAxKTsKKyAgICAvLyBGSVhNRTogc2hvdWxk
IHVzZSB0aGUgY2FsbCBhYnN0cmFjdGlvbiwgYnV0IHRoaXMgaXMgY3VycmVudGx5IGluIHRoZSBT
cGVjdWxhdGl2ZUpJVCBsYXllciEKKyAgICBwb2tlKEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAj
ZW5kaWYKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbExpbmtSZWNvcmQoY2FsbCgpLCBsb29r
dXBFeGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIg
bGVhdmVzIHRoZSBoYW5kbGVyIENhbGxGcmFtZSogaW4gdGhlIHJldHVyblZhbHVlR1BSLAotICAg
ICAgICAvLyBhbmQgdGhlIGFkZHJlc3Mgb2YgdGhlIGhhbmRsZXIgaW4gcmV0dXJuVmFsdWVHUFIy
LgotICAgICAgICBqdW1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7Ci0gICAgfQorICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxMaW5rUmVjb3JkKGNhbGwoKSwgbG9va3VwRXhjZXB0aW9uSGFuZGxl
cikpOworICAgIC8vIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIgbGVhdmVzIHRoZSBoYW5kbGVyIENh
bGxGcmFtZSogaW4gdGhlIHJldHVyblZhbHVlR1BSLAorICAgIC8vIGFuZCB0aGUgYWRkcmVzcyBv
ZiB0aGUgaGFuZGxlciBpbiByZXR1cm5WYWx1ZUdQUjIuCisgICAganVtcChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIpOwogfQogCiB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpCkBAIC0xNTUsNiArMTQyLDExIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZGF0YUxv
Z0YoIkpJVCBjb2RlIGZvciAlcCBzdGFydCBhdCBbJXAsICVwKS4gU2l6ZSA9ICV6dS5cbiIsIG1f
Y29kZUJsb2NrLCBsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpLCBzdGF0aWNfY2FzdDxjaGFyKj4o
bGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpLCBsaW5r
QnVmZmVyLmRlYnVnU2l6ZSgpKTsKICNlbmRpZgorICAgIAorICAgIGlmICghbV9ncmFwaC5tX2lu
bGluZUNhbGxGcmFtZXMtPmlzRW1wdHkoKSkgeworICAgICAgICBtX2dyYXBoLm1faW5saW5lQ2Fs
bEZyYW1lcy0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9qaXRDb2RlLT5jb21tb24uaW5saW5l
Q2FsbEZyYW1lcyA9IG1fZ3JhcGgubV9pbmxpbmVDYWxsRnJhbWVzLnJlbGVhc2UoKTsKKyAgICB9
CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5tX3N3aXRjaERhdGEuc2l6ZSgpOyBpLS07KSB7CkBAIC0yMTYsMTQgKzIwOCw2IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkKICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG1fY2FsbHNbaV0ubV9jYWxsLCBtX2NhbGxzW2ldLm1fZnVuY3Rpb24pOwogCi0gICAgVmVj
dG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgY29kZU9yaWdpbnMgPSBt
X2NvZGVCbG9jay0+Y29kZU9yaWdpbnMoKTsKLSAgICBjb2RlT3JpZ2lucy5yZXNpemUobV9leGNl
cHRpb25DaGVja3Muc2l6ZSgpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9leGNlcHRpb25DaGVja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQ2FsbEV4Y2VwdGlvblJl
Y29yZCYgcmVjb3JkID0gbV9leGNlcHRpb25DaGVja3NbaV07Ci0gICAgICAgIGNvZGVPcmlnaW5z
W2ldID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKLSAgICB9Ci0gICAgCiAgICAgbV9jb2RlQmxvY2st
PnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCkg
KyBtX2lucy5zaXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5
QWNjZXNzZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8g
PSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSk7CkBAIC0zODMsMTAgKzM2Nyw4IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgbW92ZShzdGFja1BvaW50
ZXJSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKICAgICBwb2tlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yoc3RydWN0IEpJVFN0YWNrRnJhbWUsIGNh
bGxGcmFtZSkgLyBzaXplb2Yodm9pZCopKTsKIAotICAgIENhbGxCZWdpblRva2VuIHRva2VuOwot
ICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7CisgICAgZW1pdFN0b3JlQ29kZU9y
aWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBtX2NhbGxTdGFja0NoZWNrID0gY2FsbCgpOwotICAg
IG5vdGlmeUNhbGwobV9jYWxsU3RhY2tDaGVjaywgQ29kZU9yaWdpbigwKSwgdG9rZW4pOwogICAg
IGp1bXAoZnJvbVN0YWNrQ2hlY2spOwogICAgIAogICAgIC8vIFRoZSBmYXN0IGVudHJ5IHBvaW50
IGludG8gYSBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUgY29ycmVjdCBudW1iZXIgb2YgYXJn
dW1lbnRzCkBAIC00MDEsMTMgKzM4MywxMSBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24oKQogICAgIGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgR1BSSW5mbzo6cmVnVDEsIFRydXN0
ZWRJbW0zMihtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSkubGlua1RvKGZyb21Bcml0eUNo
ZWNrLCB0aGlzKTsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwogICAgIHBva2UoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZih2b2lkKikp
OwotICAgIGJlZ2luQ2FsbChDb2RlT3JpZ2luKDApLCB0b2tlbik7CisgICAgZW1pdFN0b3JlQ29k
ZU9yaWdpbihDb2RlT3JpZ2luKDApKTsKICAgICBtX2NhbGxBcml0eUNoZWNrID0gY2FsbCgpOwot
ICAgIG5vdGlmeUNhbGwobV9jYWxsQXJpdHlDaGVjaywgQ29kZU9yaWdpbigwKSwgdG9rZW4pOwog
ICAgIGJyYW5jaFRlc3QzMihaZXJvLCBHUFJJbmZvOjpyZWdUMCkubGlua1RvKGZyb21Bcml0eUNo
ZWNrLCB0aGlzKTsKLSAgICBiZWdpbkNhbGwoQ29kZU9yaWdpbigwKSwgdG9rZW4pOworICAgIGVt
aXRTdG9yZUNvZGVPcmlnaW4oQ29kZU9yaWdpbigwKSk7CiAgICAgbV9jYWxsQXJpdHlGaXh1cCA9
IGNhbGwoKTsKLSAgICBub3RpZnlDYWxsKG1fY2FsbEFyaXR5Rml4dXAsIENvZGVPcmlnaW4oMCks
IHRva2VuKTsKICAgICBqdW1wKGZyb21Bcml0eUNoZWNrKTsKICAgICAKICAgICAvLyBHZW5lcmF0
ZSBzbG93IHBhdGggY29kZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsODkgKzc3LDYgQEAgc3Ry
dWN0IENhbGxMaW5rUmVjb3JkIHsKICAgICBGdW5jdGlvblB0ciBtX2Z1bmN0aW9uOwogfTsKIAot
Y2xhc3MgQ2FsbEJlZ2luVG9rZW4gewotcHVibGljOgotICAgIENhbGxCZWdpblRva2VuKCkKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIDogbV9yZWdpc3RlcmVkKGZhbHNlKQotICAgICAg
ICAsIG1fZXhjZXB0aW9uQ2hlY2tJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCi0jZW5kaWYKLSAgICB7Ci0gICAgfQotICAgIAotICAgIH5DYWxsQmVnaW5Ub2tlbigp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yZWdpc3RlcmVkIHx8ICFtX2NvZGVPcmlnaW4uaXNT
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSA9PSAobV9leGNlcHRp
b25DaGVja0luZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNldChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVk
IGluZGV4KQotICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIEFTU0VSVChtX3Jl
Z2lzdGVyZWQgfHwgIW1fY29kZU9yaWdpbi5pc1NldCgpKTsKLSAgICAgICAgQVNTRVJUKG1fY29k
ZU9yaWdpbi5pc1NldCgpID09IChtX2V4Y2VwdGlvbkNoZWNrSW5kZXggIT0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSk7Ci0gICAgICAgIG1fY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW47Ci0gICAgICAgIG1fcmVnaXN0ZXJlZCA9IGZhbHNlOwotICAgICAgICBtX2V4Y2VwdGlv
bkNoZWNrSW5kZXggPSBpbmRleDsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShjb2RlT3Jp
Z2luKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsKLSNlbmRpZgotICAgIH0KLSAgICAK
LSAgICB2b2lkIHJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgdW5zaWduZWQgaW5kZXgpCi0gICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAg
QVNTRVJUKG1fY29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKTsKLSAgICAgICAgaWYgKG1fcmVnaXN0
ZXJlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1fZXhjZXB0aW9uQ2hl
Y2tJbmRleCA9PSBpbmRleCk7Ci0gICAgICAgIG1fcmVnaXN0ZXJlZCA9IHRydWU7Ci0jZWxzZQot
ICAgICAgICBVTlVTRURfUEFSQU0oY29kZU9yaWdpbik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShp
bmRleCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9j
b2RlT3JpZ2luOwotICAgIH0KLSNlbmRpZgotICAgIAotcHJpdmF0ZToKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgYm9vbCBtX3JlZ2lzdGVy
ZWQ7Ci0gICAgdW5zaWduZWQgbV9leGNlcHRpb25DaGVja0luZGV4OwotI2VuZGlmCi19OwotCi0v
LyA9PT0gQ2FsbEV4Y2VwdGlvblJlY29yZCA9PT0KLS8vCi0vLyBBIHJlY29yZCBvZiBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUgdGhhdCBtaWdodCB0aHJvdyBhbiBleGNlcHRpb24uCi0vLyBDYWxs
cyB0aGF0IG1pZ2h0IHRocm93IGFuIGV4Y2VwdGlvbiBhbHNvIHJlY29yZCB0aGUgSnVtcCB0YWtl
biBvbiBleGNlcHRpb24KLS8vICh1bnNldCBpZiBub3QgcHJlc2VudCkgYW5kIGNvZGUgb3JpZ2lu
IHVzZWQgdG8gcmVjb3ZlciBoYW5kbGVyL3NvdXJjZSBpbmZvLgotc3RydWN0IENhbGxFeGNlcHRp
b25SZWNvcmQgewotICAgIENhbGxFeGNlcHRpb25SZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
Y2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotICAgICAgICA6IG1fY2FsbChjYWxsKQotICAg
ICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgIHsKLSAgICB9Ci0KLSAgICBDYWxs
RXhjZXB0aW9uUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCi0gICAgICAgIDog
bV9jYWxsKGNhbGwpCi0gICAgICAgICwgbV9leGNlcHRpb25DaGVjayhleGNlcHRpb25DaGVjaykK
LSAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICB7Ci0gICAgfQotCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1f
ZXhjZXB0aW9uQ2hlY2s7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci19OwotCiBzdHJ1
Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewogICAgIGVudW0gUmVnaXN0ZXJNb2RlIHsgUmVnaXN0
ZXJzRmx1c2hlZCwgUmVnaXN0ZXJzSW5Vc2UgfTsKICAgICAKQEAgLTMyNCwyOCArMjQxLDExIEBA
IHB1YmxpYzoKICAgICAgICAgbV9kaXNhc3NlbWJsZXItPnNldEVuZE9mQ29kZShsYWJlbElnbm9y
aW5nV2F0Y2hwb2ludHMoKSk7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIGN1cnJlbnRDb2Rl
T3JpZ2luSW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudENvZGVP
cmlnaW5JbmRleDsKLSAgICB9Ci0gICAgCi0gICAgLy8gR2V0IGEgdG9rZW4gZm9yIGJlZ2lubmlu
ZyBhIGNhbGwsIGFuZCBzZXQgdGhlIGN1cnJlbnQgY29kZSBvcmlnaW4gaW5kZXggaW4KLSAgICAv
LyB0aGUgY2FsbCBmcmFtZS4gRm9yIGVhY2ggYmVnaW5DYWxsKCkgdGhlcmUgbXVzdCBiZSBhdCBs
ZWFzdCBvbmUgZXhjZXB0aW9uCi0gICAgLy8gY2hlY2ssIGFuZCBhbGwgb2YgdGhlIGV4Y2VwdGlv
biBjaGVja3MgbXVzdCBoYXZlIHRoZSBzYW1lIENvZGVPcmlnaW4gYXMgdGhlCi0gICAgLy8gYmVn
aW5DYWxsKCkuCi0gICAgdm9pZCBiZWdpbkNhbGwoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxs
QmVnaW5Ub2tlbiYgdG9rZW4pCisgICAgdm9pZCBlbWl0U3RvcmVDb2RlT3JpZ2luKENvZGVPcmln
aW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9leGNlcHRp
b25DaGVja3Muc2l6ZSgpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG1faml0Q29kZS0+Y29t
bW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7CiAgICAgICAgIHVuc2lnbmVkIGxvY2F0aW9u
Qml0cyA9IENhbGxGcmFtZTo6TG9jYXRpb246OmVuY29kZUFzQ29kZU9yaWdpbkluZGV4KGluZGV4
KTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAg
ICAgICAgdG9rZW4uc2V0KGNvZGVPcmlnaW4sIGluZGV4KTsKLSAgICB9Ci0KLSAgICAvLyBOb3Rp
ZnkgdGhlIEpJVCBvZiBhIGNhbGwgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGxpbmtpbmcuCi0gICAg
dm9pZCBub3RpZnlDYWxsKENhbGwgZnVuY3Rpb25DYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4s
IENhbGxCZWdpblRva2VuJiB0b2tlbikKLSAgICB7Ci0gICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0
aEV4Y2VwdGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhjZXB0aW9uQ2hlY2tzLnNpemUoKSk7Ci0g
ICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChDYWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0
aW9uQ2FsbCwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZy
b20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMzU2LDI2ICsyNTYs
MjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAK
LSAgICB2b2lkIHByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpCisgICAgdm9pZCBleGNlcHRpb25D
aGVjayhKdW1wIGp1bXBUb0hhbmRsZXIpCiAgICAgewotICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihtX2V4Y2VwdGlvbkNoZWNrcy5zaXplKCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1
cm5HUFIpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5hcHBlbmQoanVtcFRvSGFuZGxlcik7
CiAgICAgfQotCi0gICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhbiBl
eGNlcHRpb24gY2hlY2suCi0gICAgdm9pZCBhZGRFeGNlcHRpb25DaGVjayhDYWxsIGZ1bmN0aW9u
Q2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBDYWxsQmVnaW5Ub2tlbiYgdG9rZW4pCisgICAg
CisgICAgdm9pZCBleGNlcHRpb25DaGVjaygpCiAgICAgewotICAgICAgICBwcmVwYXJlRm9yRXhj
ZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgdG9rZW4ucmVnaXN0ZXJXaXRoRXhjZXB0aW9uQ2hlY2so
Y29kZU9yaWdpbiwgbV9leGNlcHRpb25DaGVja3Muc2l6ZSgpKTsKLSAgICAgICAgbV9leGNlcHRp
b25DaGVja3MuYXBwZW5kKENhbGxFeGNlcHRpb25SZWNvcmQoZnVuY3Rpb25DYWxsLCBlbWl0RXhj
ZXB0aW9uQ2hlY2soKSwgY29kZU9yaWdpbikpOworICAgICAgICBtX2V4Y2VwdGlvbkNoZWNrcy5h
cHBlbmQoZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOwogICAgIH0KICAgICAKICAgICAvLyBBZGQgYSBj
YWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0
ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCi0gICAgdm9pZCBhZGRGYXN0RXhjZXB0
aW9uQ2hlY2soQ2FsbCBmdW5jdGlvbkNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgQ2FsbEJl
Z2luVG9rZW4mIHRva2VuKQorICAgIHZvaWQgZmFzdEV4Y2VwdGlvbkNoZWNrKCkKICAgICB7Ci0g
ICAgICAgIHByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygpOwotICAgICAgICBKdW1wIGV4Y2VwdGlv
bkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0g
ICAgICAgIHRva2VuLnJlZ2lzdGVyV2l0aEV4Y2VwdGlvbkNoZWNrKGNvZGVPcmlnaW4sIG1fZXhj
ZXB0aW9uQ2hlY2tzLnNpemUoKSk7Ci0gICAgICAgIG1fZXhjZXB0aW9uQ2hlY2tzLmFwcGVuZChD
YWxsRXhjZXB0aW9uUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmln
aW4pKTsKKyAgICAgICAgbV9leGNlcHRpb25DaGVja3MuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVy
bywgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBhcHBl
bmRFeGl0SW5mbyhNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QganVtcHNUb0ZhaWwgPSBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QoKSkKQEAgLTQ5OCw3ICszOTIsNyBAQCBwcml2YXRlOgogICAgIC8v
IFZlY3RvciBvZiBjYWxscyBvdXQgZnJvbSBKSVQgY29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBo
YW5kbGVyIGluZm9ybWF0aW9uLgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJl
Y29yZHMgd2l0aCBleGNlcHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxMaW5rUmVjb3Jk
PiBtX2NhbGxzOwotICAgIFZlY3RvcjxDYWxsRXhjZXB0aW9uUmVjb3JkPiBtX2V4Y2VwdGlvbkNo
ZWNrczsKKyAgICBKdW1wTGlzdCBtX2V4Y2VwdGlvbkNoZWNrczsKICAgICAKICAgICBWZWN0b3I8
TGFiZWw+IG1fYmxvY2tIZWFkczsKIApAQCAtNTI2LDcgKzQyMCw2IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPEpTQ2FsbFJlY29yZCwgND4gbV9qc0NhbGxzOwogICAgIFZlY3RvcjxPU1JFeGl0Q29t
cGlsYXRpb25JbmZvPiBtX2V4aXRDb21waWxhdGlvbkluZm87CiAgICAgVmVjdG9yPFZlY3RvcjxM
YWJlbD4gPiBtX2V4aXRTaXRlTGFiZWxzOwotICAgIHVuc2lnbmVkIG1fY3VycmVudENvZGVPcmln
aW5JbmRleDsKICAgICAKICAgICBDYWxsIG1fY2FsbFN0YWNrQ2hlY2s7CiAgICAgQ2FsbCBtX2Nh
bGxBcml0eUNoZWNrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTA0LDI5ICsxOTA0LDggQEAg
SlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblN0cmluZ0ZybwogICAgIHJldHVybiBKU0M6
OnN0cmluZ0Zyb21DaGFyQ29kZShleGVjLCBvcDEpOwogfQogCi1ERkdIYW5kbGVyRW5jb2RlZCBE
RkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjLCB1aW50
MzJfdCBjYWxsSW5kZXgpCitERkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4
Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjKQogewotICAgIC8vIEZJWE1FOiBUaGlzIGlz
bid0IG5lZWRlZCBhbnltb3JlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjE3MzQKLSAgICBVTlVTRURfUEFSQU0oY2FsbEluZGV4KTsKLSAgICAKLSAg
ICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBleGVjKTsKLQotICAgIEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRp
b24oKTsKLSAgICBBU1NFUlQoZXhjZXB0aW9uVmFsdWUpOwotICAgIAotICAgIEV4Y2VwdGlvbkhh
bmRsZXIgaGFuZGxlciA9IGdlbmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICBBU1NFUlQoaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotICAgIHJldHVybiBkZmdIYW5kbGVy
RW5jb2RlZChoYW5kbGVyLmNhbGxGcmFtZSwgaGFuZGxlci5jYXRjaFJvdXRpbmUpOwotfQotCi1E
RkdIYW5kbGVyRW5jb2RlZCBERkdfT1BFUkFUSU9OIGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXJJblN0
dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCi17Ci0gICAg
Ly8gRklYTUU6IFRoaXMgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCi0gICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMTczNAotICAgIFVOVVNFRF9QQVJBTShzdHVi
SW5mbyk7Ci0gICAgCiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDggKzMw
MCw3IEBAIGlubGluZSBERkdIYW5kbGVyRW5jb2RlZCBkZmdIYW5kbGVyRW5jb2QKICAgICByZXR1
cm4gY3JlYXRlREZHSGFuZGxlcihleGVjLCBoYW5kbGVyKS51LmVuY29kZWQ7CiB9CiAjZW5kaWYK
LURGR0hhbmRsZXJFbmNvZGVkIERGR19PUEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihF
eGVjU3RhdGUqLCB1aW50MzJfdCkgV1RGX0lOVEVSTkFMOwotREZHSGFuZGxlckVuY29kZWQgREZH
X09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVySW5TdHViKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZVN0dWJJbmZvKikgV1RGX0lOVEVSTkFMOworREZHSGFuZGxlckVuY29kZWQgREZHX09QRVJB
VElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVyKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIAog
Ly8gVGhlc2Ugb3BlcmF0aW9ucyBpbXBsZW1lbnQgdGhlIGltcGxpY2l0bHkgY2FsbGVkIFRvSW50
MzIgYW5kIFRvQm9vbGVhbiBjb252ZXJzaW9ucyBmcm9tIEVTNS4KIC8vIFRoaXMgY29udmVyc2lv
biByZXR1cm5zIGFuIGludDMyX3Qgd2l0aGluIGEgc2l6ZV90IHN1Y2ggdGhhdCB0aGUgdmFsdWUg
aXMgemVybyBleHRlbmRlZCB0byBmaWxsIHRoZSByZWdpc3Rlci4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTU2MjgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE0
LDggKzUxNCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICNl
bmRpZgogICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEND
YWxsSGVscGVyczo6SW52ZXJ0ZWRFeGNlcHRpb25DaGVjayk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0dWJKaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZzdHViSW5mbykpOworICAgICAgICAg
ICAgc3R1YkppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOwogICAgICAgICAgICAgaGFuZGxl
ckNhbGwgPSBzdHViSml0LmNhbGwoKTsKICAgICAgICAgICAgIHN0dWJKaXQuanVtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUjIpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTUwLDcgKzU0OSw3IEBA
IHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgIGlmICgh
aXNEaXJlY3QpIHsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsob3BlcmF0aW9uQ2FsbCwg
b3BlcmF0aW9uRnVuY3Rpb24pOwotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhoYW5kbGVy
Q2FsbCwgbG9va3VwRXhjZXB0aW9uSGFuZGxlckluU3R1Yik7CisgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGhhbmRsZXJDYWxsLCBsb29rdXBFeGNlcHRpb25IYW5kbGVyKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1NjI4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNiw4
ICs3MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIENhbGxCZWdpblRva2VuIHRva2VuOwotICAgIG1f
aml0LmJlZ2luQ2FsbChub2RlLT5jb2RlT3JpZ2luLCB0b2tlbik7CisgICAgbV9qaXQuZW1pdFN0
b3JlQ29kZU9yaWdpbihub2RlLT5jb2RlT3JpZ2luKTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKC0obV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICog
c2l6ZW9mKFJlZ2lzdGVyKSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCkBA
IC03NDcsOSArNzQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdFBheWxvYWRHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKICAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikpICogSlNTdGFjazo6U2NvcGVDaGFpbiAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwog
Ci0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICBKSVRD
b21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7Ci0gICAgbV9qaXQubm90
aWZ5Q2FsbChmYXN0Q2FsbCwgY29kZU9yaWdpbiwgdG9rZW4pOwogCiAgICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKIApAQCAtNzY2LDkgKzc2Myw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgbV9qaXQubW92ZShjYWxs
ZWVQYXlsb2FkR1BSLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgbV9qaXQubW92ZShj
YWxsZWVUYWdHUFIsIEdQUkluZm86Om5vbkFyZ0dQUjEpOwogICAgIH0KLSAgICBtX2ppdC5wcmVw
YXJlRm9yRXhjZXB0aW9uQ2hlY2soKTsKICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9
IG1faml0Lm5lYXJDYWxsKCk7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChzbG93Q2FsbCwgY29kZU9y
aWdpbiwgdG9rZW4pOwogCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gMTU2MjgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ3LDggKzc0Nyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogCi0g
ICAgQ2FsbEJlZ2luVG9rZW4gdG9rZW47Ci0gICAgbV9qaXQuYmVnaW5DYWxsKG5vZGUtPmNvZGVP
cmlnaW4sIHRva2VuKTsKKyAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG5vZGUtPmNvZGVP
cmlnaW4pOwogICAgIAogICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLShtX2ppdC5jb2Rl
QmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSksIEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAKQEAgLTc1NywxOCArNzU2LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rp
b24sIG1fc2NvcGUpKSwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5zdG9yZTY0KHJlc3VsdEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKiBKU1N0YWNrOjpTY29wZUNoYWlu
KSk7CiAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luOwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsK
LSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgIG1faml0LnByZXBhcmVGb3JFeGNlcHRpb25DaGVjaygp
OwogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAg
ICBtX2ppdC5ub3RpZnlDYWxsKHNsb3dDYWxsLCBjb2RlT3JpZ2luLCB0b2tlbik7CiAgICAgCiAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTE2OTMsMTEgKzE2OTMsOSBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAg
ewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7Ci0gICAgICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW47Ci0gICAgICAgIENhbGxCZWdp
blRva2VuIHRva2VuOwotICAgICAgICBtX2ppdC5iZWdpbkNhbGwoY29kZU9yaWdpbiwgdG9rZW4p
OworICAgICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pOwogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2Fs
bChmdW5jdGlvbik7Ci0gICAgICAgIG1faml0LmFkZEV4Y2VwdGlvbkNoZWNrKGNhbGwsIGNvZGVP
cmlnaW4sIHRva2VuKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBHUFJS
ZWcgcmVzdWx0KQpAQCAtMTcxMCw2ICsxNzA4LDcgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBH
UFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgcHJlcGFyZUZvckV4dGVybmFsQ2FsbCgpOwor
ICAgICAgICBtX2ppdC5lbWl0U3RvcmVDb2RlT3JpZ2luKG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pOwogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChm
dW5jdGlvbik7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdCk7CkBAIC0xNzE4
LDYgKzE3MTcsNyBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbChj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0
ZXJuYWxDYWxsKCk7CisgICAgICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0
aW9uKTsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEdQUlJlZyByZXN1
bHQxLCBHUFJSZWcgcmVzdWx0MikKQEAgLTE3MzgsNyArMTczOCw3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlv
blB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewotICAgICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7CisgICAgICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAgICAgICAgaWYgKHJl
c3VsdCAhPSBJbnZhbGlkRlBSUmVnKSB7CiAgICAgICAgICAgICBtX2ppdC5hc3NlbWJsZXIoKS5m
c3RwbCgwLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlc3Vs
dCk7CkBAIC0xNzU2LDcgKzE3NTYsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBG
UFJSZWcgcmVzdWx0KQogICAgIHsKLSAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1f
aml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOworICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
ID0gYXBwZW5kQ2FsbChmdW5jdGlvbik7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZEZQ
UlJlZykKICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUocmVzdWx0LCBGUFJJbmZvOjphcmd1
bWVudEZQUjApOwogICAgICAgICByZXR1cm4gY2FsbDsKQEAgLTE3NzEsNyArMTc3MSw3IEBAIHB1
YmxpYzoKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewotICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7Cisg
ICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9uKTsKICAg
ICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9qaXQuYXNz
ZW1ibGVyKCkudm1vdihyZXN1bHQsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjIpOwogICAgICAgICByZXR1cm4gY2FsbDsKQEAgLTE3ODcsNyArMTc4Nyw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJl
c3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewot
ICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9qaXQuYXBwZW5kQ2FsbChmdW5jdGlv
bik7CisgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBhcHBlbmRDYWxsKGZ1bmN0aW9u
KTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQogICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIGNhbGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNTYyODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwxMSArMTIyLDExIEBA
IHB1YmxpYzoKICAgICAgICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9u
IGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKICAgICAgICAgLy8gZGlmZmVyZW50
IGFsbG9jYXRpb24gb2YgdGVtcG9yYXJpZXMsIG1vcmUgcmVnaXN0ZXJzIG1heSBub3cgYmUgcmVx
dWlyZWQuCiAgICAgICAgIHVuc2lnbmVkIGNhbGxlZVJlZ2lzdGVycyA9IHNjb3JlQm9hcmQuaGln
aFdhdGVybWFyaygpICsgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzOwotICAgICAgICBzaXplX3Qg
aW5saW5lQ2FsbEZyYW1lQ291bnQgPSBjb2RlQmxvY2soKS0+aW5saW5lQ2FsbEZyYW1lcygpLnNp
emUoKTsKKyAgICAgICAgc2l6ZV90IGlubGluZUNhbGxGcmFtZUNvdW50ID0gbV9ncmFwaC5tX2lu
bGluZUNhbGxGcmFtZXMtPnNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmxpbmVDYWxsRnJhbWVDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUm
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVCbG9jaygpLT5pbmxpbmVDYWxsRnJhbWVzKClbaV07Ci0g
ICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5s
aW5lQ2FsbEZyYW1lKCZpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVx
dWlyZWRDYWxsZWVSZWdpc3RlcnMgPSBvcGVyYW5kVG9Mb2NhbChpbmxpbmVDYWxsRnJhbWUuc3Rh
Y2tPZmZzZXQpICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ncmFwaC5tX2lubGluZUNhbGxG
cmFtZXMtPmF0KGkpOworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAg
ICAgdW5zaWduZWQgcmVxdWlyZWRDYWxsZWVSZWdpc3RlcnMgPSBvcGVyYW5kVG9Mb2NhbChpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnM7CiAgICAgICAgICAgICBpZiAocmVxdWlyZWRDYWxsZWVSZWdpc3RlcnMgPiBjYWxsZWVSZWdp
c3RlcnMpCiAgICAgICAgICAgICAgICAgY2FsbGVlUmVnaXN0ZXJzID0gcmVxdWlyZWRDYWxsZWVS
ZWdpc3RlcnM7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIzNiw3ICszMjM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuc3RvcmUzMigKICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoCiAgICAgICAgICAgICAgICAgQ2FsbEZyYW1lOjpMb2Nh
dGlvbjo6ZW5jb2RlQXNDb2RlT3JpZ2luSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIGNvZGVC
bG9jaygpLT5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pKSksIAorICAgICAgICAgICAgICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pKSks
CiAgICAgICAgICAgICB0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwogICAgIH0KICAg
ICB2b2lkIGNhbGxQcmVmbGlnaHQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxNTYyODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsOSArMzI3
LDkgQEAgcHVibGljOgogICAgIEp1bXAgZW1pdEV4Y2VwdGlvbkNoZWNrKEV4Y2VwdGlvbkNoZWNr
S2luZCBraW5kID0gTm9ybWFsRXhjZXB0aW9uQ2hlY2spCiAgICAgewogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgcmV0dXJuIGJyYW5jaFRlc3Q2NChraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNr
ID8gTm9uWmVybyA6IFplcm8sIEFic29sdXRlQWRkcmVzcyh2bSgpLT5hZGRyZXNzT2ZFeGNlcHRp
b24oKSkpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDY0KGtpbmQgPT0gTm9ybWFsRXhjZXB0
aW9uQ2hlY2sgPyBOb25aZXJvIDogWmVybywgQWJzb2x1dGVBZGRyZXNzKHZtKCktPmFkZHJlc3NP
ZkV4Y2VwdGlvbigpKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHJldHVybiBicmFu
Y2gzMihraW5kID09IE5vcm1hbEV4Y2VwdGlvbkNoZWNrID8gTm90RXF1YWwgOiBFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtKCktPmFkZHJlc3NPZkV4Y2Vw
dGlvbigpKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMy
KGtpbmQgPT0gTm9ybWFsRXhjZXB0aW9uQ2hlY2sgPyBOb3RFcXVhbCA6IEVxdWFsLCBBYnNvbHV0
ZUFkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0oKS0+YWRkcmVzc09mRXhjZXB0aW9u
KCkpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwogI2VuZGlmCiAgICAgfQogCg==
</data>
<flag name="review"
          id="234586"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>