<?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>96005</bug_id>
          
          <creation_ts>2012-09-06 12:04:08 -0700</creation_ts>
          <short_desc>Source/WebCore/platform/Length.cpp fails to build on PPC</short_desc>
          <delta_ts>2014-07-30 12:01:56 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc>https://trac.macports.org/ticket/35989</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>126492</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jeremy Huddleston Sequoia">jeremyhu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713546</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2012-09-06 12:04:08 -0700</bug_when>
    <thetext>This was first discovered in MacPorts when building webkit-gtk-1.8.3:

https://trac.macports.org/ticket/35989

The source builds fine for i386 and x86_64 but fails to build for ppc.  This compile-time assert fails:
COMPILE_ASSERT(sizeof(Length) == sizeof(SameSizeAsLength), length_should_stay_small);

libtool: compile:  /usr/bin/g++-4.2 -DHAVE_CONFIG_H -I. -DBUILDING_WEBKIT -Wall -W -Wcast-align -Wchar-subscripts -Wreturn-type -Wformat -Wformat-security -Wno-format-y2k -Wundef -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-unused-parameter -Wno-parentheses -fno-exceptions -DENABLE_GLIB_SUPPORT=1 -DBUILDING_CAIRO__=1 -DBUILDING_GTK__=1 -DWTF_CHANGES -DXP_UNIX -DWTF_USE_ICU_UNICODE=1 -DWTF_USE_GSTREAMER=1 -DGTK_API_VERSION_2=1 -DNDEBUG -I./Source/ThirdParty/ANGLE/src -I./Source/ThirdParty/ANGLE/include -I./Source/ThirdParty/ANGLE/include/GLSLANG -I./Source/WebCore -I./Source/WebCore/accessibility -I./Source/WebCore/bindings -I./Source/WebCore/bindings/generic -I./Source/WebCore/bindings/js -I./Source/WebCore/bindings/js/specialization -I./Source/WebCore/bridge -I./Source/WebCore/bridge/c -I./Source/WebCore/bridge/jni/jsc -I./Source/WebCore/bridge/jsc -I./Source/WebCore/css -I./Source/WebCore/dom -I./Source/WebCore/dom/default -I./Source/WebCore/editing -I./Source/WebCore/fileapi -I./Source/WebCore/history -I./Source/WebCore/html -I./Source/WebCore/html/canvas -I./Source/WebCore/html/parser -I./Source/WebCore/html/shadow -I./Source/WebCore/html/track -I./Source/WebCore/inspector -I./Source/WebCore/loader -I./Source/WebCore/loader/appcache -I./Source/WebCore/loader/archive -I./Source/WebCore/loader/cache -I./Source/WebCore/loader/icon -I./Source/WebCore/mathml -I./Source/WebCore/mediastream -I./Source/WebCore/notifications -I./Source/WebCore/page -I./Source/WebCore/page/animation -I./Source/WebCore/page/scrolling -I./Source/WebCore/platform -I./Source/WebCore/platform/animation -I./Source/WebCore/platform/audio -I./Source/WebCore/platform/graphics -I./Source/WebCore/platform/graphics/filters -I./Source/WebCore/platform/graphics/filters/arm -I./Source/WebCore/platform/graphics/gpu -I./Source/WebCore/platform/graphics/opengl -I./Source/WebCore/platform/graphics/opentype -I./Source/WebCore/platform/graphics/transforms -I./Source/WebCore/platform/image-decoders -I./Source/WebCore/platform/image-decoders/bmp -I./Source/WebCore/platform/image-decoders/gif -I./Source/WebCore/platform/image-decoders/ico -I./Source/WebCore/platform/image-decoders/jpeg -I./Source/WebCore/platform/image-decoders/webp -I./Source/WebCore/platform/image-decoders/png -I./Source/WebCore/platform/leveldb -I./Source/WebCore/platform/mediastream -I./Source/WebCore/platform/mock -I./Source/WebCore/platform/network -I./Source/WebCore/platform/sql -I./Source/WebCore/platform/text -I./Source/WebCore/platform/text/transcoder -I./Source/WebCore/platform/win -I./Source/WebCore/plugins -I./Source/WebCore/plugins/win -I./Source/WebCore/rendering -I./Source/WebCore/rendering/mathml -I./Source/WebCore/rendering/style -I./Source/WebCore/rendering/svg -I./Source/WebCore/storage -I./Source/WebCore/svg -I./Source/WebCore/svg/animation -I./Source/WebCore/svg/graphics -I./Source/WebCore/svg/graphics/filters -I./Source/WebCore/svg/properties -I./Source/WebCore/testing -I./Source/WebCore/testing/js -I./Source/WebCore/webaudio -I./Source/WebCore/websockets -I./Source/WebCore/workers -I./Source/WebCore/xml -I./Source/WebCore/xml/parser -I./WebCore/bindings/js -I./DerivedSources/WebCore -I./DerivedSources -I./DerivedSources/JavaScriptCore -DDATA_DIR=\&quot;/opt/local/share\&quot; -DENABLE_CHANNEL_MESSAGING=1 -DENABLE_METER_TAG=1 -DENABLE_PROGRESS_TAG=1 -DENABLE_JAVASCRIPT_DEBUGGER=1 -DENABLE_GAMEPAD=0 -DENABLE_SQL_DATABASE=1 -DENABLE_DATALIST=1 -DENABLE_DIRECTORY_UPLOAD=0 -DENABLE_MUTATION_OBSERVERS=1 -DENABLE_TOUCH_ICON_LOADING=0 -DENABLE_INPUT_COLOR=0 -DENABLE_INPUT_SPEECH=0 -DENABLE_ICONDATABASE=1 -DENABLE_VIDEO=1 -DENABLE_MEDIA_SOURCE=0 -DENABLE_MEDIA_STATISTICS=1 -DENABLE_FULLSCREEN_API=1 -DENABLE_VIDEO_TRACK=1 -DENABLE_MEDIA_STREAM=1 -DENABLE_XSLT=1 -DENABLE_WORKERS=1 -DENABLE_SHADOW_DOM=1 -DENABLE_SHARED_WORKERS=1 -DENABLE_FILTERS=1 -DENABLE_GEOLOCATION=1 -DENABLE_CLIENT_BASED_GEOLOCATION=1 -DENABLE_MATHML=1 -DENABLE_SVG=1 -DENABLE_SVG_FONTS=1 -DENABLE_WEB_SOCKETS=1 -DENABLE_BLOB=1 -DENABLE_REQUEST_ANIMATION_FRAME=1 -DENABLE_WEBGL=1 -DENABLE_MHTML=1 -I./Source/WebCore/loader/archive/mhtml -DENABLE_MICRODATA=1 -DWEBKITGTK_API_VERSION_STRING=\&quot;1.0\&quot; -DWTF_USE_SOUP=1 -I./Source/WebCore/accessibility/gtk -I./Source/WebCore/loader/gtk -I./Source/WebCore/page/gtk -I./Source/WebCore/platform/cairo -I./Source/WebCore/platform/audio/gstreamer -I./Source/WebCore/platform/graphics/cairo -I./Source/WebCore/platform/graphics/glx -I./Source/WebCore/platform/graphics/gstreamer -I./Source/WebCore/platform/graphics/gtk -I./Source/WebCore/platform/gtk -I./Source/WebCore/platform/network/soup -DWTF_USE_PANGO=1 -I./Source/WebCore/platform/graphics/pango -I./Source -I./Source/JavaScriptCore -I./Source/JavaScriptCore/API -I./Source/JavaScriptCore/assembler -I./Source/JavaScriptCore/bytecode -I./Source/JavaScriptCore/bytecompiler -I./Source/JavaScriptCore/dfg -I./Source/JavaScriptCore/heap -I./Source/JavaScriptCore/debugger -I./Source/JavaScriptCore/ForwardingHeaders -I./Source/JavaScriptCore/interpreter -I./Source/JavaScriptCore/jit -I./Source/JavaScriptCore/jit -I./Source/JavaScriptCore/parser -I./Source/JavaScriptCore/profiler -I./Source/JavaScriptCore/runtime -I./Source/JavaScriptCore/tools -I./Source/JavaScriptCore/wtf -I./Source/JavaScriptCore/wtf -I./Source/JavaScriptCore/wtf/gobject -I./Source/JavaScriptCore/wtf/gtk -I./Source/JavaScriptCore/wtf/text -I./Source/JavaScriptCore/wtf/unicode -I./Source/JavaScriptCore/yarr -I./DerivedSources/JavaScriptCore -I./Source/WTF -fno-strict-aliasing -I/opt/local/include/cairo -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/pixman-1 -I/opt/local/include/freetype2 -I/opt/local/include/libpng15 -D_REENTRANT -I/opt/local/include/enchant -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include -I/opt/local/include/dbus-1.0 -I/opt/local/include/libxml2 -I/opt/local/lib/dbus-1.0/include -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -D_REENTRANT -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -D_REENTRANT -I/opt/local/include/gstreamer-0.10 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/libxml2 -D_REENTRANT -I/opt/local/include/libsoup-2.4 -I/opt/local/include/libxml2 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/libxml2 -I/opt/local/include -I/opt/local/include/libxml2 -D_REENTRANT -I/opt/local/include/pango-1.0 -I/opt/local/include/glib-2.0 -I/opt/local/lib/glib-2.0/include -I/opt/local/include -I/opt/local/include/freetype2 -I/opt/local/include -I/opt/local/include -I/opt/local/include -I/opt/local/include -fvisibility-inlines-hidden -fno-rtti -pipe -O2 -arch ppc -O2 -MT Source/WebCore/platform/libWebCore_la-Length.lo -MD -MP -MF Source/WebCore/platform/.deps/libWebCore_la-Length.Tpo -c Source/WebCore/platform/Length.cpp  -fno-common -DPIC -o Source/WebCore/platform/.libs/libWebCore_la-Length.o
Source/WebCore/platform/Length.cpp:156: error: size of array &apos;dummylength_should_stay_small&apos; is negative
make[1]: *** [Source/WebCore/platform/libWebCore_la-Length.lo] Error 1
make: *** [all] Error 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713549</commentid>
    <comment_count>1</comment_count>
      <attachid>162550</attachid>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2012-09-06 12:04:37 -0700</bug_when>
    <thetext>Created attachment 162550
preprocessed source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713556</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2012-09-06 12:11:58 -0700</bug_when>
    <thetext>sizeof(WebCore::Length) is 16
sizeof(WebCore::SameSizeAsLength) is 8</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713560</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2012-09-06 12:17:06 -0700</bug_when>
    <thetext>Yeah, I don&apos;t know why that assert should be there.  It&apos;s clear that it is not the case.  The assert is essentially saying that these two structures should take up the same amount of memory, and that&apos;s clearly not the case:

struct Length {
    union {
        int m_intValue;
        float m_floatValue;
    };
    bool m_quirk;
    unsigned char m_type;
    bool m_isFloat;
};

struct SameSizeAsLength {
    int32_t value;
    int32_t metaData;
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713572</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Huddleston Sequoia">jeremyhu</who>
    <bug_when>2012-09-06 12:27:35 -0700</bug_when>
    <thetext>Or rather, it makes assumptions about packing and sizes that aren&apos;t always true...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713857</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-09-06 16:53:30 -0700</bug_when>
    <thetext>This assertion should pass for any port that doesn&apos;t want to waste memory on lengths, so the right fix would be to correct Length structure definition. 

This does not imply that we would necessarily accept a patch for PowerPC alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1025759</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-07-30 12:01:56 -0700</bug_when>
    <thetext>No plans to make PPC build.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>162550</attachid>
            <date>2012-09-06 12:04:37 -0700</date>
            <delta_ts>2012-09-06 12:05:02 -0700</delta_ts>
            <desc>preprocessed source</desc>
            <filename>libWebCore_la-Length.pp.c</filename>
            <type>text/plain</type>
            <size>608166</size>
            <attacher name="Jeremy Huddleston Sequoia">jeremyhu</attacher>
            
              <data encoding="base64">IyAxICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwIgojIDEgIjxidWlsdC1pbj4i
CiMgMSAiPGNvbW1hbmQtbGluZT4iCiMgMSAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
LmNwcCIKIyAyNSAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcCIKIyAxICIuL1Nv
dXJjZS9XZWJDb3JlL2NvbmZpZy5oIiAxCiMgMjYgIi4vU291cmNlL1dlYkNvcmUvY29uZmlnLmgi
CiMgMSAiLi9hdXRvdG9vbHNjb25maWcuaCIgMQojIDI3ICIuL1NvdXJjZS9XZWJDb3JlL2NvbmZp
Zy5oIiAyCgoKCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgiIDEK
IyAzMiAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgiCiMgMSAiLi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBpbGVyLmgiIDEKIyAzMyAiLi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1BsYXRmb3JtLmgiIDIKIyAzMTkgIi4vU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oIgojIDEgIi91c3IvaW5jbHVkZS9BdmFpbGFiaWxpdHlNYWNyb3MuaCIg
MSAzIDQKIyAzMjAgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIiAyCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL1RhcmdldENvbmRpdGlvbmFscy5oIiAxIDMgNAojIDMyNCAiLi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgiIDIKIyAxMTE3ICIuL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaCIgMQojIDI2ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvZ29iamVjdC9HVHlwZWRlZnMuaCIKdHlwZWRlZiBjaGFyIGdjaGFyOwp0eXBlZGVmIGRv
dWJsZSBnZG91YmxlOwp0eXBlZGVmIGZsb2F0IGdmbG9hdDsKdHlwZWRlZiBpbnQgZ2ludDsKdHlw
ZWRlZiBnaW50IGdib29sZWFuOwp0eXBlZGVmIGxvbmcgZ2xvbmc7CnR5cGVkZWYgc2hvcnQgZ3No
b3J0Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZ3VjaGFyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBn
dWludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGd1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBndXNob3J0Owp0eXBlZGVmIHZvaWQqIGdwb2ludGVyOwoKdHlwZWRlZiBzdHJ1Y3QgX0dBc3lu
Y1Jlc3VsdCBHQXN5bmNSZXN1bHQ7CnR5cGVkZWYgc3RydWN0IF9HQ2FuY2VsbGFibGUgR0NhbmNl
bGxhYmxlOwp0eXBlZGVmIHN0cnVjdCBfR0NoYXJzZXRDb252ZXJ0ZXIgR0NoYXJzZXRDb252ZXJ0
ZXI7CnR5cGVkZWYgc3RydWN0IF9HRGlyIEdEaXI7CnR5cGVkZWYgc3RydWN0IF9HZGtBdG9tKiBH
ZGtBdG9tOwp0eXBlZGVmIHN0cnVjdCBfR2RrQ3Vyc29yIEdka0N1cnNvcjsKdHlwZWRlZiBzdHJ1
Y3QgX0dka0RyYWdDb250ZXh0IEdka0RyYWdDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBfR2RrRXZl
bnRDb25maWd1cmUgR2RrRXZlbnRDb25maWd1cmU7CnR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEV4
cG9zZSBHZGtFdmVudEV4cG9zZTsKdHlwZWRlZiBzdHJ1Y3QgX0dka1BpeGJ1ZiBHZGtQaXhidWY7
CnR5cGVkZWYgc3RydWN0IF9HRXJyb3IgR0Vycm9yOwp0eXBlZGVmIHN0cnVjdCBfR0ZpbGUgR0Zp
bGU7CnR5cGVkZWYgc3RydWN0IF9HSGFzaFRhYmxlIEdIYXNoVGFibGU7CnR5cGVkZWYgc3RydWN0
IF9HSW5wdXRTdHJlYW0gR0lucHV0U3RyZWFtOwp0eXBlZGVmIHN0cnVjdCBfR0xpc3QgR0xpc3Q7
CnR5cGVkZWYgc3RydWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0Owp0eXBlZGVmIHN0cnVj
dCBfR01haW5Mb29wIEdNYWluTG9vcDsKdHlwZWRlZiBzdHJ1Y3QgX0dQYXR0ZXJuU3BlYyBHUGF0
dGVyblNwZWM7CnR5cGVkZWYgc3RydWN0IF9HUG9sbGFibGVPdXRwdXRTdHJlYW0gR1BvbGxhYmxl
T3V0cHV0U3RyZWFtOwp0eXBlZGVmIHN0cnVjdCBfR1NMaXN0IEdTTGlzdDsKdHlwZWRlZiBzdHJ1
Y3QgX0dTb2NrZXRDbGllbnQgR1NvY2tldENsaWVudDsKdHlwZWRlZiBzdHJ1Y3QgX0dTb2NrZXRD
b25uZWN0aW9uIEdTb2NrZXRDb25uZWN0aW9uOwp0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291
cmNlOwp0eXBlZGVmIHN0cnVjdCBfR1ZhcmlhbnQgR1ZhcmlhbnQ7CnR5cGVkZWYgdW5pb24gX0dk
a0V2ZW50IEdka0V2ZW50Owp0eXBlZGVmIHN0cnVjdCBfR1RpbWVyIEdUaW1lcjsKdHlwZWRlZiBz
dHJ1Y3QgX0dLZXlGaWxlIEdLZXlGaWxlOwoKCnR5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNl
IGNhaXJvX3N1cmZhY2VfdDsKdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3JlY3RhbmdsZV9pbnQgY2Fp
cm9fcmVjdGFuZ2xlX2ludF90OwoKCgp0eXBlZGVmIHN0cnVjdCBfR3RrQWN0aW9uIEd0a0FjdGlv
bjsKdHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQgR3RrQWRqdXN0bWVudDsKdHlwZWRlZiBz
dHJ1Y3QgX0d0a0JvcmRlciBHdGtCb3JkZXI7CnR5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQg
R3RrQ2xpcGJvYXJkOwp0eXBlZGVmIHN0cnVjdCBfR3RrQ29udGFpbmVyIEd0a0NvbnRhaW5lcjsK
dHlwZWRlZiBzdHJ1Y3QgX0d0a0ljb25JbmZvIEd0a0ljb25JbmZvOwp0eXBlZGVmIHN0cnVjdCBf
R3RrTWVudSBHdGtNZW51Owp0eXBlZGVmIHN0cnVjdCBfR3RrTWVudUl0ZW0gR3RrTWVudUl0ZW07
CnR5cGVkZWYgc3RydWN0IF9HdGtPYmplY3QgR3RrT2JqZWN0Owp0eXBlZGVmIHN0cnVjdCBfR3Rr
U2VsZWN0aW9uRGF0YSBHdGtTZWxlY3Rpb25EYXRhOwp0eXBlZGVmIHN0cnVjdCBfR3RrU3R5bGUg
R3RrU3R5bGU7CnR5cGVkZWYgc3RydWN0IF9HdGtUYXJnZXRMaXN0IEd0a1RhcmdldExpc3Q7CnR5
cGVkZWYgc3RydWN0IF9HdGtUaGVtZVBhcnRzIEd0a1RoZW1lUGFydHM7CnR5cGVkZWYgc3RydWN0
IF9HdGtXaWRnZXQgR3RrV2lkZ2V0Owp0eXBlZGVmIHN0cnVjdCBfR3RrV2luZG93IEd0a1dpbmRv
dzsKCgp0eXBlZGVmIHN0cnVjdCBfR2RrUmVjdGFuZ2xlIEdka1JlY3RhbmdsZTsKdHlwZWRlZiBz
dHJ1Y3QgX0dka0RyYXdhYmxlIEdka1dpbmRvdzsKIyAxMTE4ICIuL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaCIgMgojIDMxICIuL1NvdXJjZS9XZWJDb3JlL2NvbmZpZy5oIiAy
CgoKCgoKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRXhwb3J0TWFjcm9zLmgiIDEK
IyAzMyAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0V4cG9ydE1hY3Jvcy5oIgojIDEgIi4v
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIiAxCiMgMzQgIi4vU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9FeHBvcnRNYWNyb3MuaCIgMgojIDM3ICIuL1NvdXJjZS9XZWJDb3Jl
L2NvbmZpZy5oIiAyCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0V4cG9y
dE1hY3Jvcy5oIiAxCiMgMzggIi4vU291cmNlL1dlYkNvcmUvY29uZmlnLmgiIDIKIyAxICIuL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtRXhwb3J0TWFjcm9zLmgiIDEKIyAzOSAiLi9T
b3VyY2UvV2ViQ29yZS9jb25maWcuaCIgMgojIDc4ICIuL1NvdXJjZS9XZWJDb3JlL2NvbmZpZy5o
IgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmgiIDEKIyAyNSAi
Li9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaCIKIyAxICIuL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUG9zc2libHlOdWxsLmgiIDEKIyAyOSAiLi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1Bvc3NpYmx5TnVsbC5oIgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9Bc3NlcnRpb25zLmgiIDEKIyA0NyAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Fz
c2VydGlvbnMuaCIKIyAxICIvdXNyL2xpYi9nY2MvcG93ZXJwYy1hcHBsZS1kYXJ3aW45LzQuMi4x
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUyICIvdXNyL2xpYi9nY2MvcG93ZXJwYy1hcHBs
ZS1kYXJ3aW45LzQuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZm
X3Q7CiMgMjE0ICIvdXNyL2xpYi9nY2MvcG93ZXJwYy1hcHBsZS1kYXJ3aW45LzQuMi4xL2luY2x1
ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OCAi
Li9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Fzc2VydGlvbnMuaCIgMgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2ludHR5cGVzLmgiIDEgMyA0CiMgMjUzICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAojIDI1NCAiL3Vzci9pbmNs
dWRlL2ludHR5cGVzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL190eXBlcy5oIiAxIDMgNAoj
IDI3ICIvdXNyL2luY2x1ZGUvX3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvX3R5
cGVzLmgiIDEgMyA0CiMgMzMgIi91c3IvaW5jbHVkZS9zeXMvX3R5cGVzLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvbWFj
aGluZS9fdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3BwYy9fdHlwZXMuaCIgMSAzIDQK
IyAzNyAiL3Vzci9pbmNsdWRlL3BwYy9fdHlwZXMuaCIgMyA0CnR5cGVkZWYgc2lnbmVkIGNoYXIg
X19pbnQ4X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2hv
cnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdWludDE2X3Q7CnR5cGVkZWYg
aW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKdHlwZWRlZiBs
b25nIGxvbmcgX19pbnQ2NF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3VpbnQ2NF90
OwoKdHlwZWRlZiBsb25nIF9fZGFyd2luX2ludHB0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X2Rhcndpbl9uYXR1cmFsX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS9wcGMvX3R5cGVzLmgiIDMgNAp0
eXBlZGVmIGludCBfX2Rhcndpbl9jdF9ydW5lX3Q7CgoKCgoKdHlwZWRlZiB1bmlvbiB7CiBjaGFy
IF9fbWJzdGF0ZThbMTI4XTsKIGxvbmcgbG9uZyBfbWJzdGF0ZUw7Cn0gX19tYnN0YXRlX3Q7Cgp0
eXBlZGVmIF9fbWJzdGF0ZV90IF9fZGFyd2luX21ic3RhdGVfdDsKCgp0eXBlZGVmIGludCBfX2Rh
cndpbl9wdHJkaWZmX3Q7CgoKCgoKdHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCBfX2Rhcndpbl9z
aXplX3Q7CgoKCgoKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2Rhcndpbl92YV9saXN0OwoK
CgoKCnR5cGVkZWYgaW50IF9fZGFyd2luX3djaGFyX3Q7CgoKCgp0eXBlZGVmIF9fZGFyd2luX3dj
aGFyX3QgX19kYXJ3aW5fcnVuZV90OwoKCnR5cGVkZWYgaW50IF9fZGFyd2luX3dpbnRfdDsKCgoK
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2Rhcndpbl9jbG9ja190Owp0eXBlZGVmIF9fdWludDMy
X3QgX19kYXJ3aW5fc29ja2xlbl90Owp0eXBlZGVmIGxvbmcgX19kYXJ3aW5fc3NpemVfdDsKdHlw
ZWRlZiBsb25nIF9fZGFyd2luX3RpbWVfdDsKIyAzMyAiL3Vzci9pbmNsdWRlL21hY2hpbmUvX3R5
cGVzLmgiIDIgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zeXMvX3R5cGVzLmgiIDIgMyA0CiMgNTgg
Ii91c3IvaW5jbHVkZS9zeXMvX3R5cGVzLmgiIDMgNApzdHJ1Y3QgX19kYXJ3aW5fcHRocmVhZF9o
YW5kbGVyX3JlYwp7CiB2b2lkICgqX19yb3V0aW5lKSh2b2lkICopOwogdm9pZCAqX19hcmc7CiBz
dHJ1Y3QgX19kYXJ3aW5fcHRocmVhZF9oYW5kbGVyX3JlYyAqX19uZXh0Owp9OwpzdHJ1Y3QgX29w
YXF1ZV9wdGhyZWFkX2F0dHJfdCB7IGxvbmcgX19zaWc7IGNoYXIgX19vcGFxdWVbMzZdOyB9Owpz
dHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX2NvbmRfdCB7IGxvbmcgX19zaWc7IGNoYXIgX19vcGFxdWVb
MjRdOyB9OwpzdHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX2NvbmRhdHRyX3QgeyBsb25nIF9fc2lnOyBj
aGFyIF9fb3BhcXVlWzRdOyB9OwpzdHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX211dGV4X3QgeyBsb25n
IF9fc2lnOyBjaGFyIF9fb3BhcXVlWzQwXTsgfTsKc3RydWN0IF9vcGFxdWVfcHRocmVhZF9tdXRl
eGF0dHJfdCB7IGxvbmcgX19zaWc7IGNoYXIgX19vcGFxdWVbOF07IH07CnN0cnVjdCBfb3BhcXVl
X3B0aHJlYWRfb25jZV90IHsgbG9uZyBfX3NpZzsgY2hhciBfX29wYXF1ZVs0XTsgfTsKc3RydWN0
IF9vcGFxdWVfcHRocmVhZF9yd2xvY2tfdCB7IGxvbmcgX19zaWc7IGNoYXIgX19vcGFxdWVbMTI0
XTsgfTsKc3RydWN0IF9vcGFxdWVfcHRocmVhZF9yd2xvY2thdHRyX3QgeyBsb25nIF9fc2lnOyBj
aGFyIF9fb3BhcXVlWzEyXTsgfTsKc3RydWN0IF9vcGFxdWVfcHRocmVhZF90IHsgbG9uZyBfX3Np
Zzsgc3RydWN0IF9fZGFyd2luX3B0aHJlYWRfaGFuZGxlcl9yZWMgKl9fY2xlYW51cF9zdGFjazsg
Y2hhciBfX29wYXF1ZVs1OTZdOyB9OwojIDk0ICIvdXNyL2luY2x1ZGUvc3lzL190eXBlcy5oIiAz
IDQKdHlwZWRlZiBfX2ludDY0X3QgX19kYXJ3aW5fYmxrY250X3Q7CnR5cGVkZWYgX19pbnQzMl90
IF9fZGFyd2luX2Jsa3NpemVfdDsKdHlwZWRlZiBfX2ludDMyX3QgX19kYXJ3aW5fZGV2X3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9fZGFyd2luX2ZzYmxrY250X3Q7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fZGFyd2luX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX2Rhcndpbl9naWRf
dDsKdHlwZWRlZiBfX3VpbnQzMl90IF9fZGFyd2luX2lkX3Q7CnR5cGVkZWYgX191aW50NjRfdCBf
X2Rhcndpbl9pbm82NF90OwoKdHlwZWRlZiBfX2Rhcndpbl9pbm82NF90IF9fZGFyd2luX2lub190
OwoKCgp0eXBlZGVmIF9fZGFyd2luX25hdHVyYWxfdCBfX2Rhcndpbl9tYWNoX3BvcnRfbmFtZV90
Owp0eXBlZGVmIF9fZGFyd2luX21hY2hfcG9ydF9uYW1lX3QgX19kYXJ3aW5fbWFjaF9wb3J0X3Q7
CnR5cGVkZWYgX191aW50MTZfdCBfX2Rhcndpbl9tb2RlX3Q7CnR5cGVkZWYgX19pbnQ2NF90IF9f
ZGFyd2luX29mZl90Owp0eXBlZGVmIF9faW50MzJfdCBfX2Rhcndpbl9waWRfdDsKdHlwZWRlZiBz
dHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX2F0dHJfdAogICBfX2Rhcndpbl9wdGhyZWFkX2F0dHJfdDsK
dHlwZWRlZiBzdHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX2NvbmRfdAogICBfX2Rhcndpbl9wdGhyZWFk
X2NvbmRfdDsKdHlwZWRlZiBzdHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX2NvbmRhdHRyX3QKICAgX19k
YXJ3aW5fcHRocmVhZF9jb25kYXR0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19kYXJ3aW5f
cHRocmVhZF9rZXlfdDsKdHlwZWRlZiBzdHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX211dGV4X3QKICAg
X19kYXJ3aW5fcHRocmVhZF9tdXRleF90Owp0eXBlZGVmIHN0cnVjdCBfb3BhcXVlX3B0aHJlYWRf
bXV0ZXhhdHRyX3QKICAgX19kYXJ3aW5fcHRocmVhZF9tdXRleGF0dHJfdDsKdHlwZWRlZiBzdHJ1
Y3QgX29wYXF1ZV9wdGhyZWFkX29uY2VfdAogICBfX2Rhcndpbl9wdGhyZWFkX29uY2VfdDsKdHlw
ZWRlZiBzdHJ1Y3QgX29wYXF1ZV9wdGhyZWFkX3J3bG9ja190CiAgIF9fZGFyd2luX3B0aHJlYWRf
cndsb2NrX3Q7CnR5cGVkZWYgc3RydWN0IF9vcGFxdWVfcHRocmVhZF9yd2xvY2thdHRyX3QKICAg
X19kYXJ3aW5fcHRocmVhZF9yd2xvY2thdHRyX3Q7CnR5cGVkZWYgc3RydWN0IF9vcGFxdWVfcHRo
cmVhZF90CiAgICpfX2Rhcndpbl9wdGhyZWFkX3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX2Rhcndp
bl9zaWdzZXRfdDsKdHlwZWRlZiBfX2ludDMyX3QgX19kYXJ3aW5fc3VzZWNvbmRzX3Q7CnR5cGVk
ZWYgX191aW50MzJfdCBfX2Rhcndpbl91aWRfdDsKdHlwZWRlZiBfX3VpbnQzMl90IF9fZGFyd2lu
X3VzZWNvbmRzX3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2Rhcndpbl91dWlkX3RbMTZdOwoj
IDI4ICIvdXNyL2luY2x1ZGUvX3R5cGVzLmgiIDIgMyA0Cgp0eXBlZGVmIGludCBfX2Rhcndpbl9u
bF9pdGVtOwp0eXBlZGVmIGludCBfX2Rhcndpbl93Y3RyYW5zX3Q7CgoKCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBfX2Rhcndpbl93Y3R5cGVfdDsKIyAyNTUgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5o
IiAyIDMgNAojIDEgIi91c3IvbGliL2djYy9wb3dlcnBjLWFwcGxlLWRhcndpbjkvNC4yLjEvaW5j
bHVkZS9zdGRpbnQuaCIgMSAzIDQKIyAyMCAiL3Vzci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFy
d2luOS80LjIuMS9pbmNsdWRlL3N0ZGludC5oIiAzIDQKdHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4
X3Q7CgoKCgp0eXBlZGVmIHNob3J0IGludDE2X3Q7CgoKCgp0eXBlZGVmIGludCBpbnQzMl90OwoK
CgoKdHlwZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1
aW50OF90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsKCgoKCnR5cGVkZWYg
dW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWlu
dDY0X3Q7CgoKCnR5cGVkZWYgaW50OF90IGludF9sZWFzdDhfdDsKdHlwZWRlZiBpbnQxNl90IGlu
dF9sZWFzdDE2X3Q7CnR5cGVkZWYgaW50MzJfdCBpbnRfbGVhc3QzMl90Owp0eXBlZGVmIGludDY0
X3QgaW50X2xlYXN0NjRfdDsKdHlwZWRlZiB1aW50OF90IHVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYg
dWludDE2X3QgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdWludDMyX3QgdWludF9sZWFzdDMyX3Q7
CnR5cGVkZWYgdWludDY0X3QgdWludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgaW50OF90IGludF9m
YXN0OF90Owp0eXBlZGVmIGludDE2X3QgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludDMyX3QgaW50
X2Zhc3QzMl90Owp0eXBlZGVmIGludDY0X3QgaW50X2Zhc3Q2NF90Owp0eXBlZGVmIHVpbnQ4X3Qg
dWludF9mYXN0OF90Owp0eXBlZGVmIHVpbnQxNl90IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdWlu
dDMyX3QgdWludF9mYXN0MzJfdDsKdHlwZWRlZiB1aW50NjRfdCB1aW50X2Zhc3Q2NF90OwoKCgoK
Cgp0eXBlZGVmIGxvbmcgaW50cHRyX3Q7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0
cl90OwoKCgoKCgoKdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90OwojIDEwNiAiL3Vzci9s
aWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFyd2luOS80LjIuMS9pbmNsdWRlL3N0ZGludC5oIiAzIDQK
dHlwZWRlZiBsb25nIGxvbmcgdW5zaWduZWQgaW50IHVpbnRtYXhfdDsKIyAyNTYgIi91c3IvaW5j
bHVkZS9pbnR0eXBlcy5oIiAyIDMgNAojIDI2NSAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgiIDMg
NApleHRlcm4gIkMiIHsKCgogIGV4dGVybiBpbnRtYXhfdCBpbWF4YWJzKGludG1heF90IGopOwoK
CiAgdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludG1heF90IHF1b3Q7CiAgICAgICAgaW50bWF4
X3QgcmVtOwogIH0gaW1heGRpdl90OwoKICBleHRlcm4gaW1heGRpdl90IGltYXhkaXYoaW50bWF4
X3QgbnVtZXIsIGludG1heF90IGRlbm9tKTsKCgogIGV4dGVybiBpbnRtYXhfdCBzdHJ0b2ltYXgo
Y29uc3QgY2hhciAqIG5wdHIsIGNoYXIgKiogZW5kcHRyLCBpbnQgYmFzZSk7CiAgZXh0ZXJuIHVp
bnRtYXhfdCBzdHJ0b3VtYXgoY29uc3QgY2hhciAqIG5wdHIsIGNoYXIgKiogZW5kcHRyLCBpbnQg
YmFzZSk7CiMgMjkwICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMyA0CiAgZXh0ZXJuIGludG1h
eF90IHdjc3RvaW1heChjb25zdCB3Y2hhcl90ICogbnB0ciwgd2NoYXJfdCAqKiBlbmRwdHIsIGlu
dCBiYXNlKTsKICBleHRlcm4gdWludG1heF90IHdjc3RvdW1heChjb25zdCB3Y2hhcl90ICogbnB0
ciwgd2NoYXJfdCAqKiBlbmRwdHIsIGludCBiYXNlKTsKCgoKCgoKfQojIDUxICIuL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQXNzZXJ0aW9ucy5oIiAyCiMgMTI4ICIuL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvQXNzZXJ0aW9ucy5oIgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIGVudW0geyBX
VEZMb2dDaGFubmVsT2ZmLCBXVEZMb2dDaGFubmVsT24gfSBXVEZMb2dDaGFubmVsU3RhdGU7Cgp0
eXBlZGVmIHN0cnVjdCB7CiAgICB1bnNpZ25lZCBtYXNrOwogICAgY29uc3QgY2hhciAqZGVmYXVs
dE5hbWU7CiAgICBXVEZMb2dDaGFubmVsU3RhdGUgc3RhdGU7Cn0gV1RGTG9nQ2hhbm5lbDsKCiB2
b2lkIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24pOwogdm9pZCBXVEZS
ZXBvcnRBc3NlcnRpb25GYWlsdXJlV2l0aE1lc3NhZ2UoY29uc3QgY2hhciogZmlsZSwgaW50IGxp
bmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24sIGNvbnN0IGNo
YXIqIGZvcm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50ZiwgNSwgNikp
KTsKIHZvaWQgV1RGUmVwb3J0QXJndW1lbnRBc3NlcnRpb25GYWlsdXJlKGNvbnN0IGNoYXIqIGZp
bGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogYXJnTmFtZSwg
Y29uc3QgY2hhciogYXNzZXJ0aW9uKTsKIHZvaWQgV1RGUmVwb3J0RmF0YWxFcnJvcihjb25zdCBj
aGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGZv
cm1hdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50ZiwgNCwgNSkpKTsKIHZv
aWQgV1RGUmVwb3J0RXJyb3IoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3Jt
YXRfXyhwcmludGYsIDQsIDUpKSk7CiB2b2lkIFdURkxvZyhXVEZMb2dDaGFubmVsKiwgY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18ocHJpbnRmLCAyLCAz
KSkpOwogdm9pZCBXVEZMb2dWZXJib3NlKGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbiwgV1RGTG9nQ2hhbm5lbCosIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50ZiwgNSwgNikpKTsKCiB2b2lkIFdURkdl
dEJhY2t0cmFjZSh2b2lkKiogc3RhY2ssIGludCogc2l6ZSk7CiB2b2lkIFdURlJlcG9ydEJhY2t0
cmFjZSgpOwoKdHlwZWRlZiB2b2lkICgqV1RGQ3Jhc2hIb29rRnVuY3Rpb24pKCk7CiB2b2lkIFdU
RlNldENyYXNoSG9vayhXVEZDcmFzaEhvb2tGdW5jdGlvbik7CiB2b2lkIFdURkludm9rZUNyYXNo
SG9vaygpOwoKCn0KIyAzMCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bvc3NpYmx5TnVs
bC5oIiAyCgpuYW1lc3BhY2UgV1RGIHsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUG9z
c2libHlOdWxsIHsKICAgIFBvc3NpYmx5TnVsbChUIGRhdGEpCiAgICAgICAgOiBtX2RhdGEoZGF0
YSkKICAgIHsKICAgIH0KICAgIFBvc3NpYmx5TnVsbChjb25zdCBQb3NzaWJseU51bGw8VD4mIHNv
dXJjZSkKICAgICAgICA6IG1fZGF0YShzb3VyY2UubV9kYXRhKQogICAgewogICAgICAgIHNvdXJj
ZS5tX2RhdGEgPSAwOwogICAgfQogICAgflBvc3NpYmx5TnVsbCgpIHsgKCh2b2lkKTApOyB9CiAg
ICBib29sIGdldFZhbHVlKFQmIG91dCkgX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3Vs
dCkpOwpwcml2YXRlOgogICAgbXV0YWJsZSBUIG1fZGF0YTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBib29sIFBvc3NpYmx5TnVsbDxUPjo6Z2V0VmFsdWUoVCYgb3V0KQp7CiAgICBvdXQgPSBt
X2RhdGE7CiAgICBib29sIHJlc3VsdCA9ICEhbV9kYXRhOwogICAgbV9kYXRhID0gMDsKICAgIHJl
dHVybiByZXN1bHQ7Cn0KCn0KIyAyNiAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RN
YWxsb2MuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyA2MSAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYXZhaWxhYmxlLmgiIDEgMyA0
CiMgNjIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3dhaXQuaCIgMSAzIDQKIyA3OSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNAp0eXBl
ZGVmIGVudW0gewogUF9BTEwsCiBQX1BJRCwKIFBfUEdJRAp9IGlkdHlwZV90OwoKCgoKCgp0eXBl
ZGVmIF9fZGFyd2luX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2Rhcndpbl9pZF90IGlkX3Q7
CiMgMTE2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9zaWduYWwuaCIgMSAzIDQKIyA3MyAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3N5cy9hcHBsZWFwaW9wdHMuaCIgMSAzIDQKIyA3NCAiL3Vzci9pbmNs
dWRlL3N5cy9zaWduYWwuaCIgMiAzIDQKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUv
c2lnbmFsLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3NpZ25hbC5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvcHBjL3NpZ25hbC5oIiAxIDMgNAojIDM5ICIvdXNyL2luY2x1ZGUv
cHBjL3NpZ25hbC5oIiAzIDQKdHlwZWRlZiBpbnQgc2lnX2F0b21pY190OwojIDUwICIvdXNyL2lu
Y2x1ZGUvcHBjL3NpZ25hbC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvcHBjL19zdHJ1Y3RzLmgi
IDEgMyA0CiMgMTMxICIvdXNyL2luY2x1ZGUvcHBjL19zdHJ1Y3RzLmgiIDMgNApzdHJ1Y3QgX19k
YXJ3aW5fc2lnY29udGV4dAp7CiAgICBpbnQgX19zY19vbnN0YWNrOwogICAgaW50IF9fc2NfbWFz
azsKICAgIGludCBfX3NjX2lyOwogICAgaW50IF9fc2NfcHN3OwogICAgaW50IF9fc2Nfc3A7CiAg
ICB2b2lkICpfX3NjX3JlZ3M7Cn07CiMgMTY3ICIvdXNyL2luY2x1ZGUvcHBjL19zdHJ1Y3RzLmgi
IDMgNApzdHJ1Y3QgX19kYXJ3aW5fc2lnY29udGV4dDMyCnsKICAgIGludCBfX3NjX29uc3RhY2s7
CiAgICBpbnQgX19zY19tYXNrOwogICAgaW50IF9fc2NfaXI7CiAgICBpbnQgX19zY19wc3c7CiAg
ICBpbnQgX19zY19zcDsKICAgIHZvaWQgKl9fc2NfcmVnczsKfTsKIyAxOTYgIi91c3IvaW5jbHVk
ZS9wcGMvX3N0cnVjdHMuaCIgMyA0CnN0cnVjdCBfX2Rhcndpbl9zaWdjb250ZXh0NjQKewogICAg
aW50IF9fc2Nfb25zdGFjazsKICAgIGludCBfX3NjX21hc2s7CiAgICBsb25nIGxvbmcgX19zY19p
cjsKICAgIGxvbmcgbG9uZyBfX3NjX3BzdzsKICAgIGxvbmcgbG9uZyBfX3NjX3NwOwogICAgdm9p
ZCAqX19zY19yZWdzOwp9OwojIDUxICIvdXNyL2luY2x1ZGUvcHBjL3NpZ25hbC5oIiAyIDMgNAoj
IDY4ICIvdXNyL2luY2x1ZGUvcHBjL3NpZ25hbC5oIiAzIDQKdHlwZWRlZiBlbnVtIHsKIFJFR1Nf
U0FWRURfTk9ORSwKIFJFR1NfU0FWRURfQ0FMTEVSLAoKCiBSRUdTX1NBVkVEX0FMTAp9IHJlZ3Nf
c2F2ZWRfdDsKIyAzMyAiL3Vzci9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgiIDIgMyA0CiMgODIg
Ii91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDIgMyA0CiMgMTU0ICIvdXNyL2luY2x1ZGUvc3lz
L3NpZ25hbC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL19zdHJ1Y3RzLmgiIDEgMyA0CiMg
NTcgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL21h
Y2hpbmUvX3N0cnVjdHMuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvX3N0cnVj
dHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3BwYy9fc3RydWN0cy5oIiAxIDMgNAojIDQ0ICIv
dXNyL2luY2x1ZGUvcHBjL19zdHJ1Y3RzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9tYWNoL3Bw
Yy9fc3RydWN0cy5oIiAxIDMgNAojIDQ1ICIvdXNyL2luY2x1ZGUvbWFjaC9wcGMvX3N0cnVjdHMu
aCIgMyA0CnN0cnVjdCBfX2Rhcndpbl9wcGNfdGhyZWFkX3N0YXRlCnsKIHVuc2lnbmVkIGludCBf
X3NycjA7CiB1bnNpZ25lZCBpbnQgX19zcnIxOwogdW5zaWduZWQgaW50IF9fcjA7CiB1bnNpZ25l
ZCBpbnQgX19yMTsKIHVuc2lnbmVkIGludCBfX3IyOwogdW5zaWduZWQgaW50IF9fcjM7CiB1bnNp
Z25lZCBpbnQgX19yNDsKIHVuc2lnbmVkIGludCBfX3I1OwogdW5zaWduZWQgaW50IF9fcjY7CiB1
bnNpZ25lZCBpbnQgX19yNzsKIHVuc2lnbmVkIGludCBfX3I4OwogdW5zaWduZWQgaW50IF9fcjk7
CiB1bnNpZ25lZCBpbnQgX19yMTA7CiB1bnNpZ25lZCBpbnQgX19yMTE7CiB1bnNpZ25lZCBpbnQg
X19yMTI7CiB1bnNpZ25lZCBpbnQgX19yMTM7CiB1bnNpZ25lZCBpbnQgX19yMTQ7CiB1bnNpZ25l
ZCBpbnQgX19yMTU7CiB1bnNpZ25lZCBpbnQgX19yMTY7CiB1bnNpZ25lZCBpbnQgX19yMTc7CiB1
bnNpZ25lZCBpbnQgX19yMTg7CiB1bnNpZ25lZCBpbnQgX19yMTk7CiB1bnNpZ25lZCBpbnQgX19y
MjA7CiB1bnNpZ25lZCBpbnQgX19yMjE7CiB1bnNpZ25lZCBpbnQgX19yMjI7CiB1bnNpZ25lZCBp
bnQgX19yMjM7CiB1bnNpZ25lZCBpbnQgX19yMjQ7CiB1bnNpZ25lZCBpbnQgX19yMjU7CiB1bnNp
Z25lZCBpbnQgX19yMjY7CiB1bnNpZ25lZCBpbnQgX19yMjc7CiB1bnNpZ25lZCBpbnQgX19yMjg7
CiB1bnNpZ25lZCBpbnQgX19yMjk7CiB1bnNpZ25lZCBpbnQgX19yMzA7CiB1bnNpZ25lZCBpbnQg
X19yMzE7CgogdW5zaWduZWQgaW50IF9fY3I7CiB1bnNpZ25lZCBpbnQgX194ZXI7CiB1bnNpZ25l
ZCBpbnQgX19scjsKIHVuc2lnbmVkIGludCBfX2N0cjsKIHVuc2lnbmVkIGludCBfX21xOwoKIHVu
c2lnbmVkIGludCBfX3Zyc2F2ZTsKfTsKIyAxNDEgIi91c3IvaW5jbHVkZS9tYWNoL3BwYy9fc3Ry
dWN0cy5oIiAzIDQKI3ByYWdtYSBwYWNrKDQpCgoKCnN0cnVjdCBfX2Rhcndpbl9wcGNfdGhyZWFk
X3N0YXRlNjQKewogdW5zaWduZWQgbG9uZyBsb25nIF9fc3JyMDsKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX3NycjE7CiB1bnNpZ25lZCBsb25nIGxvbmcgX19yMDsKIHVuc2lnbmVkIGxvbmcgbG9uZyBf
X3IxOwogdW5zaWduZWQgbG9uZyBsb25nIF9fcjI7CiB1bnNpZ25lZCBsb25nIGxvbmcgX19yMzsK
IHVuc2lnbmVkIGxvbmcgbG9uZyBfX3I0OwogdW5zaWduZWQgbG9uZyBsb25nIF9fcjU7CiB1bnNp
Z25lZCBsb25nIGxvbmcgX19yNjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3I3OwogdW5zaWduZWQg
bG9uZyBsb25nIF9fcjg7CiB1bnNpZ25lZCBsb25nIGxvbmcgX19yOTsKIHVuc2lnbmVkIGxvbmcg
bG9uZyBfX3IxMDsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IxMTsKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX3IxMjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IxMzsKIHVuc2lnbmVkIGxvbmcgbG9uZyBf
X3IxNDsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IxNTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3Ix
NjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IxNzsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IxODsK
IHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IxOTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IyMDsKIHVu
c2lnbmVkIGxvbmcgbG9uZyBfX3IyMTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IyMjsKIHVuc2ln
bmVkIGxvbmcgbG9uZyBfX3IyMzsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IyNDsKIHVuc2lnbmVk
IGxvbmcgbG9uZyBfX3IyNTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IyNjsKIHVuc2lnbmVkIGxv
bmcgbG9uZyBfX3IyNzsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IyODsKIHVuc2lnbmVkIGxvbmcg
bG9uZyBfX3IyOTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3IzMDsKIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX3IzMTsKCiB1bnNpZ25lZCBpbnQgX19jcjsKIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3hlcjsK
IHVuc2lnbmVkIGxvbmcgbG9uZyBfX2xyOwogdW5zaWduZWQgbG9uZyBsb25nIF9fY3RyOwoKIHVu
c2lnbmVkIGludCBfX3Zyc2F2ZTsKfTsKIyAyMzcgIi91c3IvaW5jbHVkZS9tYWNoL3BwYy9fc3Ry
dWN0cy5oIiAzIDQKI3ByYWdtYSBwYWNrKCkKCgoKCgoKCnN0cnVjdCBfX2Rhcndpbl9wcGNfZmxv
YXRfc3RhdGUKewogZG91YmxlIF9fZnByZWdzWzMyXTsKCiB1bnNpZ25lZCBpbnQgX19mcHNjcl9w
YWQ7CiB1bnNpZ25lZCBpbnQgX19mcHNjcjsKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYWNoL3Bw
Yy9fc3RydWN0cy5oIiAzIDQKI3ByYWdtYSBwYWNrKDQpCgoKCnN0cnVjdCBfX2Rhcndpbl9wcGNf
dmVjdG9yX3N0YXRlCnsKCgoKCiB1bnNpZ25lZCBsb25nIF9fc2F2ZV92clszMl1bNF07CiB1bnNp
Z25lZCBsb25nIF9fc2F2ZV92c2NyWzRdOwoKIHVuc2lnbmVkIGludCBfX3NhdmVfcGFkNVs0XTsK
IHVuc2lnbmVkIGludCBfX3NhdmVfdnJ2YWxpZDsKIHVuc2lnbmVkIGludCBfX3NhdmVfcGFkNls3
XTsKfTsKIyAyOTcgIi91c3IvaW5jbHVkZS9tYWNoL3BwYy9fc3RydWN0cy5oIiAzIDQKI3ByYWdt
YSBwYWNrKCkKIyAzMTYgIi91c3IvaW5jbHVkZS9tYWNoL3BwYy9fc3RydWN0cy5oIiAzIDQKI3By
YWdtYSBwYWNrKDQpCgoKCnN0cnVjdCBfX2Rhcndpbl9wcGNfZXhjZXB0aW9uX3N0YXRlCnsKCgoK
CgoKCiB1bnNpZ25lZCBsb25nIF9fZGFyOwogdW5zaWduZWQgbG9uZyBfX2RzaXNyOwogdW5zaWdu
ZWQgbG9uZyBfX2V4Y2VwdGlvbjsKIHVuc2lnbmVkIGxvbmcgX19wYWQwOwogdW5zaWduZWQgbG9u
ZyBfX3BhZDFbNF07Cgp9OwojIDM1OSAiL3Vzci9pbmNsdWRlL21hY2gvcHBjL19zdHJ1Y3RzLmgi
IDMgNApzdHJ1Y3QgX19kYXJ3aW5fcHBjX2V4Y2VwdGlvbl9zdGF0ZTY0CnsKIHVuc2lnbmVkIGxv
bmcgbG9uZyBfX2RhcjsKCgoKCgogdW5zaWduZWQgbG9uZyBfX2RzaXNyOwogdW5zaWduZWQgbG9u
ZyBfX2V4Y2VwdGlvbjsKIHVuc2lnbmVkIGxvbmcgX19wYWQxWzRdOwoKfTsKIyAzOTAgIi91c3Iv
aW5jbHVkZS9tYWNoL3BwYy9fc3RydWN0cy5oIiAzIDQKI3ByYWdtYSBwYWNrKCkKIyA0NSAiL3Vz
ci9pbmNsdWRlL3BwYy9fc3RydWN0cy5oIiAyIDMgNAoKCgoKCgoKc3RydWN0IF9fZGFyd2luX21j
b250ZXh0CnsKIHN0cnVjdCBfX2Rhcndpbl9wcGNfZXhjZXB0aW9uX3N0YXRlIF9fZXM7CiBzdHJ1
Y3QgX19kYXJ3aW5fcHBjX3RocmVhZF9zdGF0ZSBfX3NzOwogc3RydWN0IF9fZGFyd2luX3BwY19m
bG9hdF9zdGF0ZSBfX2ZzOwogc3RydWN0IF9fZGFyd2luX3BwY192ZWN0b3Jfc3RhdGUgX192czsK
fTsKIyA3NyAiL3Vzci9pbmNsdWRlL3BwYy9fc3RydWN0cy5oIiAzIDQKc3RydWN0IF9fZGFyd2lu
X21jb250ZXh0NjQKewogc3RydWN0IF9fZGFyd2luX3BwY19leGNlcHRpb25fc3RhdGU2NCBfX2Vz
Owogc3RydWN0IF9fZGFyd2luX3BwY190aHJlYWRfc3RhdGU2NCBfX3NzOwogc3RydWN0IF9fZGFy
d2luX3BwY19mbG9hdF9zdGF0ZSBfX2ZzOwogc3RydWN0IF9fZGFyd2luX3BwY192ZWN0b3Jfc3Rh
dGUgX192czsKfTsKIyAxMDEgIi91c3IvaW5jbHVkZS9wcGMvX3N0cnVjdHMuaCIgMyA0CnR5cGVk
ZWYgc3RydWN0IF9fZGFyd2luX21jb250ZXh0ICptY29udGV4dF90OwoKCgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgX19kYXJ3aW5fbWNvbnRleHQ2NCAqbWNvbnRleHQ2NF90OwojIDMwICIvdXNyL2luY2x1
ZGUvbWFjaGluZS9fc3RydWN0cy5oIiAyIDMgNAojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL19zdHJ1
Y3RzLmgiIDIgMyA0CiMgNzUgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMuaCIgMyA0CnN0cnVj
dCBfX2Rhcndpbl9zaWdhbHRzdGFjawp7CiB2b2lkICpzc19zcDsKIF9fZGFyd2luX3NpemVfdCBz
c19zaXplOwogaW50IHNzX2ZsYWdzOwp9OwojIDEyOCAiL3Vzci9pbmNsdWRlL3N5cy9fc3RydWN0
cy5oIiAzIDQKc3RydWN0IF9fZGFyd2luX3Vjb250ZXh0CnsKIGludCB1Y19vbnN0YWNrOwogX19k
YXJ3aW5fc2lnc2V0X3QgdWNfc2lnbWFzazsKIHN0cnVjdCBfX2Rhcndpbl9zaWdhbHRzdGFjayB1
Y19zdGFjazsKIHN0cnVjdCBfX2Rhcndpbl91Y29udGV4dCAqdWNfbGluazsKIF9fZGFyd2luX3Np
emVfdCB1Y19tY3NpemU7CiBzdHJ1Y3QgX19kYXJ3aW5fbWNvbnRleHQgKnVjX21jb250ZXh0OwoK
Cgp9OwojIDE1MSAiL3Vzci9pbmNsdWRlL3N5cy9fc3RydWN0cy5oIiAzIDQKc3RydWN0IF9fZGFy
d2luX3Vjb250ZXh0NjQKewogaW50IHVjX29uc3RhY2s7CiBfX2Rhcndpbl9zaWdzZXRfdCB1Y19z
aWdtYXNrOwogc3RydWN0IF9fZGFyd2luX3NpZ2FsdHN0YWNrIHVjX3N0YWNrOwogc3RydWN0IF9f
ZGFyd2luX3Vjb250ZXh0NjQgKnVjX2xpbms7CiBfX2Rhcndpbl9zaXplX3QgdWNfbWNzaXplOwog
c3RydWN0IF9fZGFyd2luX21jb250ZXh0NjQgKnVjX21jb250ZXh0NjQ7Cn07CiMgMjE4ICIvdXNy
L2luY2x1ZGUvc3lzL19zdHJ1Y3RzLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2Rhcndpbl9zaWdh
bHRzdGFjayBzdGFja190OwojIDIyNyAiL3Vzci9pbmNsdWRlL3N5cy9fc3RydWN0cy5oIiAzIDQK
dHlwZWRlZiBzdHJ1Y3QgX19kYXJ3aW5fdWNvbnRleHQgdWNvbnRleHRfdDsKCgoKCgoKCnR5cGVk
ZWYgc3RydWN0IF9fZGFyd2luX3Vjb250ZXh0NjQgdWNvbnRleHQ2NF90OwojIDE1NSAiL3Vzci9p
bmNsdWRlL3N5cy9zaWduYWwuaCIgMiAzIDQKIyAxNjMgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFs
LmgiIDMgNAp0eXBlZGVmIF9fZGFyd2luX3B0aHJlYWRfYXR0cl90IHB0aHJlYWRfYXR0cl90OwoK
CgoKdHlwZWRlZiBfX2Rhcndpbl9zaWdzZXRfdCBzaWdzZXRfdDsKIyAxNzggIi91c3IvaW5jbHVk
ZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIF9fZGFyd2luX3VpZF90IHVpZF90OwoKCnVuaW9u
IHNpZ3ZhbCB7CgogaW50IHNpdmFsX2ludDsKIHZvaWQgKnNpdmFsX3B0cjsKfTsKCgoKCgpzdHJ1
Y3Qgc2lnZXZlbnQgewogaW50IHNpZ2V2X25vdGlmeTsKIGludCBzaWdldl9zaWdubzsKIHVuaW9u
IHNpZ3ZhbCBzaWdldl92YWx1ZTsKIHZvaWQgKCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9u
IHNpZ3ZhbCk7CiBwdGhyZWFkX2F0dHJfdCAqc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXM7Cn07CgoK
dHlwZWRlZiBzdHJ1Y3QgX19zaWdpbmZvIHsKIGludCBzaV9zaWdubzsKIGludCBzaV9lcnJubzsK
IGludCBzaV9jb2RlOwogcGlkX3Qgc2lfcGlkOwogdWlkX3Qgc2lfdWlkOwogaW50IHNpX3N0YXR1
czsKIHZvaWQgKnNpX2FkZHI7CiB1bmlvbiBzaWd2YWwgc2lfdmFsdWU7CiBsb25nIHNpX2JhbmQ7
CiB1bnNpZ25lZCBsb25nIF9fcGFkWzddOwp9IHNpZ2luZm9fdDsKIyAyOTIgIi91c3IvaW5jbHVk
ZS9zeXMvc2lnbmFsLmgiIDMgNAp1bmlvbiBfX3NpZ2FjdGlvbl91IHsKIHZvaWQgKCpfX3NhX2hh
bmRsZXIpKGludCk7CiB2b2lkICgqX19zYV9zaWdhY3Rpb24pKGludCwgc3RydWN0IF9fc2lnaW5m
byAqLAogICAgICAgICB2b2lkICopOwp9OwoKCnN0cnVjdCBfX3NpZ2FjdGlvbiB7CiB1bmlvbiBf
X3NpZ2FjdGlvbl91IF9fc2lnYWN0aW9uX3U7CiB2b2lkICgqc2FfdHJhbXApKHZvaWQgKiwgaW50
LCBpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOwogc2lnc2V0X3Qgc2FfbWFzazsKIGludCBzYV9m
bGFnczsKfTsKCgoKCnN0cnVjdCBzaWdhY3Rpb24gewogdW5pb24gX19zaWdhY3Rpb25fdSBfX3Np
Z2FjdGlvbl91Owogc2lnc2V0X3Qgc2FfbWFzazsKIGludCBzYV9mbGFnczsKfTsKIyAzNTQgIi91
c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAp0eXBlZGVmIHZvaWQgKCpzaWdfdCkoaW50KTsK
IyAzNzEgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNApzdHJ1Y3Qgc2lndmVjIHsKIHZv
aWQgKCpzdl9oYW5kbGVyKShpbnQpOwogaW50IHN2X21hc2s7CiBpbnQgc3ZfZmxhZ3M7Cn07CiMg
MzkwICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQKc3RydWN0IHNpZ3N0YWNrIHsKIGNo
YXIgKnNzX3NwOwogaW50IHNzX29uc3RhY2s7Cn07CiMgNDEyICIvdXNyL2luY2x1ZGUvc3lzL3Np
Z25hbC5oIiAzIDQKZXh0ZXJuICJDIiB7CnZvaWQgKCpzaWduYWwoaW50LCB2b2lkICgqKShpbnQp
KSkoaW50KTsKfQojIDExNyAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAxIDMgNAojIDc2ICIvdXNyL2luY2x1ZGUvc3lzL3Jl
c291cmNlLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMuaCIgMSAzIDQKIyAx
MDAgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMuaCIgMyA0CnN0cnVjdCB0aW1ldmFsCnsKIF9f
ZGFyd2luX3RpbWVfdCB0dl9zZWM7CiBfX2Rhcndpbl9zdXNlY29uZHNfdCB0dl91c2VjOwp9Owoj
IDc3ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDIgMyA0CiMgODggIi91c3IvaW5jbHVk
ZS9zeXMvcmVzb3VyY2UuaCIgMyA0CnR5cGVkZWYgX191aW50NjRfdCBybGltX3Q7CiMgMTQyICIv
dXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNApzdHJ1Y3QgcnVzYWdlIHsKIHN0cnVjdCB0
aW1ldmFsIHJ1X3V0aW1lOwogc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CiMgMTUzICIvdXNyL2lu
Y2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAogbG9uZyBydV9tYXhyc3M7CgogbG9uZyBydV9peHJz
czsKIGxvbmcgcnVfaWRyc3M7CiBsb25nIHJ1X2lzcnNzOwogbG9uZyBydV9taW5mbHQ7CiBsb25n
IHJ1X21hamZsdDsKIGxvbmcgcnVfbnN3YXA7CiBsb25nIHJ1X2luYmxvY2s7CiBsb25nIHJ1X291
YmxvY2s7CiBsb25nIHJ1X21zZ3NuZDsKIGxvbmcgcnVfbXNncmN2OwogbG9uZyBydV9uc2lnbmFs
czsKIGxvbmcgcnVfbnZjc3c7CiBsb25nIHJ1X25pdmNzdzsKCgp9OwojIDIxMyAiL3Vzci9pbmNs
dWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKc3RydWN0IHJsaW1pdCB7CiBybGltX3QgcmxpbV9jdXI7
CiBybGltX3QgcmxpbV9tYXg7Cn07CiMgMjM1ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgi
IDMgNApleHRlcm4gIkMiIHsKaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CgppbnQgZ2V0aW9w
b2xpY3lfbnAoaW50LCBpbnQpOwoKaW50IGdldHJsaW1pdChpbnQsIHN0cnVjdCBybGltaXQgKikg
X19hc20oIl8iICJnZXRybGltaXQiICIkVU5JWDIwMDMiKTsKaW50IGdldHJ1c2FnZShpbnQsIHN0
cnVjdCBydXNhZ2UgKik7CmludCBzZXRwcmlvcml0eShpbnQsIGlkX3QsIGludCk7CgppbnQgc2V0
aW9wb2xpY3lfbnAoaW50LCBpbnQsIGludCk7CgppbnQgc2V0cmxpbWl0KGludCwgY29uc3Qgc3Ry
dWN0IHJsaW1pdCAqKSBfX2FzbSgiXyIgInNldHJsaW1pdCIgIiRVTklYMjAwMyIpOwp9CiMgMTE4
ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQKIyAxOTMgIi91c3IvaW5jbHVkZS9zeXMv
d2FpdC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCIgMSAzIDQKIyAz
NSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9w
cGMvZW5kaWFuLmgiIDEgMyA0CiMgMTIxICIvdXNyL2luY2x1ZGUvcHBjL2VuZGlhbi5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL19lbmRpYW4uaCIgMSAzIDQKIyAxMjIgIi91c3IvaW5jbHVk
ZS9wcGMvZW5kaWFuLmgiIDIgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5o
IiAyIDMgNAojIDE5NCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgoKCgoKCgp1bmlv
biB3YWl0IHsKIGludCB3X3N0YXR1czsKCgoKIHN0cnVjdCB7CgoKCgoKCgogIHVuc2lnbmVkIGlu
dCB3X0ZpbGxlcjoxNiwKICAgIHdfUmV0Y29kZTo4LAogICAgd19Db3JlZHVtcDoxLAogICAgd19U
ZXJtc2lnOjc7CgogfSB3X1Q7CgoKCgoKIHN0cnVjdCB7CgoKCgoKCiAgdW5zaWduZWQgaW50IHdf
RmlsbGVyOjE2LAogICAgd19TdG9wc2lnOjgsCiAgICB3X1N0b3B2YWw6ODsKCiB9IHdfUzsKfTsK
IyAyNTQgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQKZXh0ZXJuICJDIiB7CnBpZF90IHdh
aXQoaW50ICopIF9fYXNtKCJfIiAid2FpdCIgIiRVTklYMjAwMyIpOwpwaWRfdCB3YWl0cGlkKHBp
ZF90LCBpbnQgKiwgaW50KSBfX2FzbSgiXyIgIndhaXRwaWQiICIkVU5JWDIwMDMiKTsKCmludCB3
YWl0aWQoaWR0eXBlX3QsIGlkX3QsIHNpZ2luZm9fdCAqLCBpbnQpIF9fYXNtKCJfIiAid2FpdGlk
IiAiJFVOSVgyMDAzIik7CgoKcGlkX3Qgd2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAq
KTsKcGlkX3Qgd2FpdDQocGlkX3QsIGludCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7Cgp9CiMg
NjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9j
YS5oIiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMgNApleHRlcm4gIkMiIHsK
dm9pZCAqYWxsb2NhKHNpemVfdCk7Cn0KIyA2OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMg
NAojIDgxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIF9fZGFyd2luX2N0X3J1
bmVfdCBjdF9ydW5lX3Q7CgoKCgp0eXBlZGVmIF9fZGFyd2luX3J1bmVfdCBydW5lX3Q7CiMgOTcg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CnR5cGVkZWYgc3RydWN0IHsKIGludCBxdW90Owog
aW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0IHsKIGxvbmcgcXVvdDsKIGxvbmcgcmVt
Owp9IGxkaXZfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiBsb25nIGxvbmcgcXVvdDsKIGxvbmcgbG9u
ZyByZW07Cn0gbGxkaXZfdDsKIyAxMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVy
biBpbnQgX19tYl9jdXJfbWF4OwojIDE0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0
ZXJuICJDIiB7CnZvaWQgYWJvcnQodm9pZCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7
CmludCBhYnMoaW50KSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKaW50IGF0ZXhpdCh2b2lk
ICgqKSh2b2lkKSk7CmRvdWJsZSBhdG9mKGNvbnN0IGNoYXIgKik7CmludCBhdG9pKGNvbnN0IGNo
YXIgKik7CmxvbmcgYXRvbChjb25zdCBjaGFyICopOwoKbG9uZyBsb25nCiAgYXRvbGwoY29uc3Qg
Y2hhciAqKTsKCnZvaWQgKmJzZWFyY2goY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf
dCwKICAgICBzaXplX3QsIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKdm9p
ZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKZGl2X3QgZGl2KGludCwgaW50KSBfX2F0dHJpYnV0
ZV9fKChfX2NvbnN0X18pKTsKdm9pZCBleGl0KGludCkgX19hdHRyaWJ1dGVfXygoX19ub3JldHVy
bl9fKSk7CnZvaWQgZnJlZSh2b2lkICopOwpjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKbG9u
ZyBsYWJzKGxvbmcpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpsZGl2X3QgbGRpdihsb25n
LCBsb25nKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKCmxvbmcgbG9uZwogIGxsYWJzKGxv
bmcgbG9uZyk7CmxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOwoKdm9pZCAqbWFs
bG9jKHNpemVfdCk7CmludCBtYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CnNpemVfdCBtYnN0
b3djcyh3Y2hhcl90ICogLCBjb25zdCBjaGFyICogLCBzaXplX3QpOwppbnQgbWJ0b3djKHdjaGFy
X3QgKiAsIGNvbnN0IGNoYXIgKiAsIHNpemVfdCk7CnZvaWQgcXNvcnQodm9pZCAqLCBzaXplX3Qs
IHNpemVfdCwKICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmludCBy
YW5kKHZvaWQpOwp2b2lkICpyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKdm9pZCBzcmFuZCh1bnNp
Z25lZCk7CmRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKSBfX2FzbSgiXyIgInN0
cnRvZCIgIiRVTklYMjAwMyIpOwpmbG9hdCBzdHJ0b2YoY29uc3QgY2hhciAqLCBjaGFyICoqKSBf
X2FzbSgiXyIgInN0cnRvZiIgIiRVTklYMjAwMyIpOwpsb25nIHN0cnRvbChjb25zdCBjaGFyICos
IGNoYXIgKiosIGludCk7CmxvbmcgZG91YmxlCiAgc3RydG9sZChjb25zdCBjaGFyICosIGNoYXIg
KiopIF9fYXNtKCJfIiAic3RydG9sZCIgIiRMREJMMTI4Iik7Cgpsb25nIGxvbmcKICBzdHJ0b2xs
KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKCnVuc2lnbmVkIGxvbmcKICBzdHJ0b3VsKGNv
bnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKCnVuc2lnbmVkIGxvbmcgbG9uZwogIHN0cnRvdWxs
KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKCmludCBzeXN0ZW0oY29uc3QgY2hhciAqKSBf
X2FzbSgiXyIgInN5c3RlbSIgIiRVTklYMjAwMyIpOwpzaXplX3Qgd2NzdG9tYnMoY2hhciAqICwg
Y29uc3Qgd2NoYXJfdCAqICwgc2l6ZV90KTsKaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOwoK
CnZvaWQgX0V4aXQoaW50KSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKbG9uZyBhNjRs
KGNvbnN0IGNoYXIgKik7CmRvdWJsZSBkcmFuZDQ4KHZvaWQpOwpjaGFyICplY3Z0KGRvdWJsZSwg
aW50LCBpbnQgKiwgaW50ICopOwpkb3VibGUgZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7CmNo
YXIgKmZjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmNoYXIgKmdjdnQoZG91YmxlLCBp
bnQsIGNoYXIgKik7CmludCBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICosIGNoYXIg
KiopOwppbnQgZ3JhbnRwdChpbnQpOwoKY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICos
IHNpemVfdCk7CgoKCmxvbmcganJhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7CmNoYXIgKmw2NGEo
bG9uZyk7CnZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydFs3XSk7CmxvbmcgbHJhbmQ0OCh2b2lk
KTsKY2hhciAqbWt0ZW1wKGNoYXIgKik7CmludCBta3N0ZW1wKGNoYXIgKik7CmxvbmcgbXJhbmQ0
OCh2b2lkKTsKbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0WzNdKTsKaW50IHBvc2l4X29wZW5w
dChpbnQpOwpjaGFyICpwdHNuYW1lKGludCk7CmludCBwdXRlbnYoY2hhciAqKSBfX2FzbSgiXyIg
InB1dGVudiIgIiRVTklYMjAwMyIpOwpsb25nIHJhbmRvbSh2b2lkKTsKaW50IHJhbmRfcih1bnNp
Z25lZCAqKTsKCmNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiAsIGNoYXIgKiApIF9fYXNtKCJf
IiAicmVhbHBhdGgiICIkREFSV0lOX0VYVFNOIik7CgoKCnVuc2lnbmVkIHNob3J0CiAqc2VlZDQ4
KHVuc2lnbmVkIHNob3J0WzNdKTsKaW50IHNldGVudihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
KiwgaW50KSBfX2FzbSgiXyIgInNldGVudiIgIiRVTklYMjAwMyIpOwoKdm9pZCBzZXRrZXkoY29u
c3QgY2hhciAqKSBfX2FzbSgiXyIgInNldGtleSIgIiRVTklYMjAwMyIpOwoKCgpjaGFyICpzZXRz
dGF0ZShjb25zdCBjaGFyICopOwp2b2lkIHNyYW5kNDgobG9uZyk7Cgp2b2lkIHNyYW5kb20odW5z
aWduZWQpOwoKCgppbnQgdW5sb2NrcHQoaW50KTsKCmludCB1bnNldGVudihjb25zdCBjaGFyICop
IF9fYXNtKCJfIiAidW5zZXRlbnYiICIkVU5JWDIwMDMiKTsKCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvbWFjaGluZS90eXBlcy5oIiAxIDMgNAojIDM1ICIvdXNyL2luY2x1ZGUvbWFjaGluZS90eXBl
cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvcHBjL3R5cGVzLmgiIDEgMyA0CiMgNzAgIi91c3Iv
aW5jbHVkZS9wcGMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3BwYy9fdHlwZXMuaCIg
MSAzIDQKIyA3MSAiL3Vzci9pbmNsdWRlL3BwYy90eXBlcy5oIiAyIDMgNAojIDgwICIvdXNyL2lu
Y2x1ZGUvcHBjL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9pbnQ4X3Q7CgoK
Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfaW50MTZfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHVfaW50MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfaW50NjRfdDsK
CgoKCnR5cGVkZWYgaW50MzJfdCByZWdpc3Rlcl90OwojIDExNyAiL3Vzci9pbmNsdWRlL3BwYy90
eXBlcy5oIiAzIDQKdHlwZWRlZiB1X2ludDY0X3QgdXNlcl9hZGRyX3Q7CnR5cGVkZWYgdV9pbnQ2
NF90IHVzZXJfc2l6ZV90Owp0eXBlZGVmIGludDY0X3QgdXNlcl9zc2l6ZV90Owp0eXBlZGVmIGlu
dDY0X3QgdXNlcl9sb25nX3Q7CnR5cGVkZWYgdV9pbnQ2NF90IHVzZXJfdWxvbmdfdDsKdHlwZWRl
ZiBpbnQ2NF90IHVzZXJfdGltZV90OwoKCgoKCnR5cGVkZWYgdV9pbnQ2NF90IHN5c2NhbGxfYXJn
X3Q7CiMgMzYgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDIgMyA0CiMgMjU1ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKdHlwZWRlZiBfX2Rhcndpbl9kZXZfdCBkZXZfdDsK
CgoKCnR5cGVkZWYgX19kYXJ3aW5fbW9kZV90IG1vZGVfdDsKCgoKdV9pbnQzMl90CiAgYXJjNHJh
bmRvbSh2b2lkKTsKdm9pZCBhcmM0cmFuZG9tX2FkZHJhbmRvbSh1bnNpZ25lZCBjaGFyICpkYXQs
IGludCBkYXRsZW4pOwp2b2lkIGFyYzRyYW5kb21fc3Rpcih2b2lkKTsKCgpjaGFyICpjZ2V0Y2Fw
KGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwppbnQgY2dldGNsb3NlKHZvaWQpOwppbnQgY2dl
dGVudChjaGFyICoqLCBjaGFyICoqLCBjb25zdCBjaGFyICopOwppbnQgY2dldGZpcnN0KGNoYXIg
KiosIGNoYXIgKiopOwppbnQgY2dldG1hdGNoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
aW50IGNnZXRuZXh0KGNoYXIgKiosIGNoYXIgKiopOwppbnQgY2dldG51bShjaGFyICosIGNvbnN0
IGNoYXIgKiwgbG9uZyAqKTsKaW50IGNnZXRzZXQoY29uc3QgY2hhciAqKTsKaW50IGNnZXRzdHIo
Y2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOwppbnQgY2dldHVzdHIoY2hhciAqLCBjb25z
dCBjaGFyICosIGNoYXIgKiopOwoKaW50IGRhZW1vbihpbnQsIGludCkgX19hc20oIl8iICJkYWVt
b24iICIkMTA1MCIpIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKTsKY2hhciAqZGV2bmFtZShk
ZXZfdCwgbW9kZV90KTsKY2hhciAqZGV2bmFtZV9yKGRldl90LCBtb2RlX3QsIGNoYXIgKmJ1Ziwg
aW50IGxlbik7CmNoYXIgKmdldGJzaXplKGludCAqLCBsb25nICopOwppbnQgZ2V0bG9hZGF2Zyhk
b3VibGUgW10sIGludCk7CmNvbnN0IGNoYXIKICpnZXRwcm9nbmFtZSh2b2lkKTsKCmludCBoZWFw
c29ydCh2b2lkICosIHNpemVfdCwgc2l6ZV90LAogICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBj
b25zdCB2b2lkICopKTsKaW50IG1lcmdlc29ydCh2b2lkICosIHNpemVfdCwgc2l6ZV90LAogICAg
IGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKdm9pZCBxc29ydF9yKHZvaWQg
Kiwgc2l6ZV90LCBzaXplX3QsIHZvaWQgKiwKICAgICBpbnQgKCopKHZvaWQgKiwgY29uc3Qgdm9p
ZCAqLCBjb25zdCB2b2lkICopKTsKaW50IHJhZGl4c29ydChjb25zdCB1bnNpZ25lZCBjaGFyICoq
LCBpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICB1bnNpZ25lZCk7CnZvaWQgc2V0cHJv
Z25hbWUoY29uc3QgY2hhciAqKTsKaW50IHNyYWRpeHNvcnQoY29uc3QgdW5zaWduZWQgY2hhciAq
KiwgaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgdW5zaWduZWQpOwp2b2lkIHNyYW5k
ZGV2KHZvaWQpOwp2b2lkIHNyYW5kb21kZXYodm9pZCk7CnZvaWQgKnJlYWxsb2NmKHZvaWQgKiwg
c2l6ZV90KTsKCmxvbmcgbG9uZwogIHN0cnRvcShjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7
CnVuc2lnbmVkIGxvbmcgbG9uZwogIHN0cnRvdXEoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQp
OwoKZXh0ZXJuIGNoYXIgKnN1Ym9wdGFyZzsKdm9pZCAqdmFsbG9jKHNpemVfdCk7CgoKCgoKCn0K
IyAyNyAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuaCIgMgojIDEgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvbmV3IiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9uZXciIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NzdGRkZWYiIDEgMwojIDQ2ICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL2NzdGRkZWYiIDMKICAgICAgIAojIDQ3ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUt
ZGFyd2luOS80LjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUv
YysrLzQuMC4wL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZm
X3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9uZXci
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vz
ci9pbmNsdWRlL2MrKy80LjAuMC9leGNlcHRpb24iIDMKI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBw
dXNoKGRlZmF1bHQpCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiMgNTQgIi91c3Iv
aW5jbHVkZS9jKysvNC4wLjAvZXhjZXB0aW9uIiAzCiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1
YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24o
KSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygp
OwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg
cHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJh
ZF9leGNlcHRpb24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVf
aGFuZGxlcikgKCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoK
ICB0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJv
dygpOwoKCiAgdm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgoKICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVy
KSB0aHJvdygpOwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwojIDEwMiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9leGNlcHRpb24iIDMKICBib29s
IHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoj
IDExNyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9z
ZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQoKI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AK
IyA0MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9uZXciIDIgMwoKI3ByYWdtYSBHQ0MgdmlzaWJp
bGl0eSBwdXNoKGRlZmF1bHQpCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoK
ICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJh
ZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7
CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBu
b3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVy
IHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDg0ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL25ldyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93
IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJv
dyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsK
dm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3
KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJh
dG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhy
b3coKTsKCgppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3Ap
IHRocm93KCkgeyByZXR1cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6
OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lk
IG9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfQppbmxpbmUgdm9pZCBv
cGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9Cgp9CgojcHJhZ21hIEdD
QyB2aXNpYmlsaXR5IHBvcAojIDI4ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1h
bGxvYy5oIiAyCgpuYW1lc3BhY2UgV1RGIHsKCgogICAgdm9pZCogZmFzdE1hbGxvYyhzaXplX3Qp
OwogICAgdm9pZCogZmFzdFplcm9lZE1hbGxvYyhzaXplX3QpOwogICAgdm9pZCogZmFzdENhbGxv
YyhzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSk7CiAgICB2b2lkKiBmYXN0
UmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICAgIGNoYXIqIGZhc3RTdHJEdXAoY29uc3QgY2hhciop
OwogICAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqKTsKCiAgICBzdHJ1Y3QgVHJ5
TWFsbG9jUmV0dXJuVmFsdWUgewogICAgICAgIFRyeU1hbGxvY1JldHVyblZhbHVlKHZvaWQqIGRh
dGEpCiAgICAgICAgICAgIDogbV9kYXRhKGRhdGEpCiAgICAgICAgewogICAgICAgIH0KICAgICAg
ICBUcnlNYWxsb2NSZXR1cm5WYWx1ZShjb25zdCBUcnlNYWxsb2NSZXR1cm5WYWx1ZSYgc291cmNl
KQogICAgICAgICAgICA6IG1fZGF0YShzb3VyY2UubV9kYXRhKQogICAgICAgIHsKICAgICAgICAg
ICAgc291cmNlLm1fZGF0YSA9IDA7CiAgICAgICAgfQogICAgICAgIH5UcnlNYWxsb2NSZXR1cm5W
YWx1ZSgpIHsgKCh2b2lkKTApOyB9CiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGJvb2wg
Z2V0VmFsdWUoVCYgZGF0YSkgX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpOwog
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBvcGVyYXRvciBQb3NzaWJseU51bGw8VD4oKQog
ICAgICAgIHsKICAgICAgICAgICAgVCB2YWx1ZTsKICAgICAgICAgICAgZ2V0VmFsdWUodmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gUG9zc2libHlOdWxsPFQ+KHZhbHVlKTsKICAgICAgICB9CiAg
ICBwcml2YXRlOgogICAgICAgIG11dGFibGUgdm9pZCogbV9kYXRhOwogICAgfTsKCiAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gYm9vbCBUcnlNYWxsb2NSZXR1cm5WYWx1ZTo6Z2V0VmFsdWUoVCYg
ZGF0YSkKICAgIHsKICAgICAgICB1bmlvbiB1IHsgdm9pZCogZGF0YTsgVCB0YXJnZXQ7IH0gcmVz
OwogICAgICAgIHJlcy5kYXRhID0gbV9kYXRhOwogICAgICAgIGRhdGEgPSByZXMudGFyZ2V0Owog
ICAgICAgIGJvb2wgcmV0dXJuVmFsdWUgPSAhIW1fZGF0YTsKICAgICAgICBtX2RhdGEgPSAwOwog
ICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKICAgIH0KCiAgICBUcnlNYWxsb2NSZXR1cm5WYWx1
ZSB0cnlGYXN0TWFsbG9jKHNpemVfdCBuKTsKICAgIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZh
c3RaZXJvZWRNYWxsb2Moc2l6ZV90IG4pOwogICAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFz
dENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CiAgICBUcnlN
YWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBwLCBzaXplX3Qgbik7CgogICAg
dm9pZCBmYXN0RnJlZSh2b2lkKik7CgoKCgoKCiAgICB2b2lkIHJlbGVhc2VGYXN0TWFsbG9jRnJl
ZU1lbW9yeSgpOwoKICAgIHN0cnVjdCBGYXN0TWFsbG9jU3RhdGlzdGljcyB7CiAgICAgICAgc2l6
ZV90IHJlc2VydmVkVk1CeXRlczsKICAgICAgICBzaXplX3QgY29tbWl0dGVkVk1CeXRlczsKICAg
ICAgICBzaXplX3QgZnJlZUxpc3RCeXRlczsKICAgIH07CiAgICBGYXN0TWFsbG9jU3RhdGlzdGlj
cyBmYXN0TWFsbG9jU3RhdGlzdGljcygpOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv
bmcgQWxsb2NBbGlnbm1lbnRJbnRlZ2VyOwoKICAgIG5hbWVzcGFjZSBJbnRlcm5hbCB7CiAgICAg
ICAgZW51bSBBbGxvY1R5cGUgewogICAgICAgICAgICBBbGxvY1R5cGVNYWxsb2MgPSAweDM3NWQ2
NzUwLAogICAgICAgICAgICBBbGxvY1R5cGVDbGFzc05ldywKICAgICAgICAgICAgQWxsb2NUeXBl
Q2xhc3NOZXdBcnJheSwKICAgICAgICAgICAgQWxsb2NUeXBlRmFzdE5ldywKICAgICAgICAgICAg
QWxsb2NUeXBlRmFzdE5ld0FycmF5LAogICAgICAgICAgICBBbGxvY1R5cGVOZXcsCiAgICAgICAg
ICAgIEFsbG9jVHlwZU5ld0FycmF5CiAgICAgICAgfTsKCiAgICAgICAgZW51bSB7CiAgICAgICAg
ICAgIFZhbGlkYXRpb25QcmVmaXggPSAweGYwMGRmMDBkLAogICAgICAgICAgICBWYWxpZGF0aW9u
U3VmZml4ID0gMHgwYmFkZjAwZAogICAgICAgIH07CgogICAgICAgIHR5cGVkZWYgdW5zaWduZWQg
VmFsaWRhdGlvblRhZzsKCiAgICAgICAgc3RydWN0IFZhbGlkYXRpb25IZWFkZXIgewogICAgICAg
ICAgICBBbGxvY1R5cGUgbV90eXBlOwogICAgICAgICAgICB1bnNpZ25lZCBtX3NpemU7CiAgICAg
ICAgICAgIFZhbGlkYXRpb25UYWcgbV9wcmVmaXg7CiAgICAgICAgICAgIHVuc2lnbmVkIG1fYWxp
Z25tZW50OwogICAgICAgIH07CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgVmFsaWRhdGlvbkJ1
ZmZlclNpemUgPSBzaXplb2YoVmFsaWRhdGlvbkhlYWRlcikgKyBzaXplb2YoVmFsaWRhdGlvblRh
Zyk7CiAgICB9CiMgMjExICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5o
IgogICAgaW5saW5lIHZvaWQgZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVNYWxsb2Modm9pZCosIElu
dGVybmFsOjpBbGxvY1R5cGUpCiAgICB7CiAgICB9CgogICAgaW5saW5lIHZvaWQgZmFzdE1hbGxv
Y01hdGNoVmFsaWRhdGVGcmVlKHZvaWQqLCBJbnRlcm5hbDo6QWxsb2NUeXBlKQogICAgewogICAg
fQoKCgp9Cgp1c2luZyBXVEY6OmZhc3RDYWxsb2M7CnVzaW5nIFdURjo6ZmFzdEZyZWU7CnVzaW5n
IFdURjo6ZmFzdE1hbGxvYzsKdXNpbmcgV1RGOjpmYXN0TWFsbG9jU2l6ZTsKdXNpbmcgV1RGOjpm
YXN0UmVhbGxvYzsKdXNpbmcgV1RGOjpmYXN0U3RyRHVwOwp1c2luZyBXVEY6OmZhc3RaZXJvZWRN
YWxsb2M7CnVzaW5nIFdURjo6dHJ5RmFzdENhbGxvYzsKdXNpbmcgV1RGOjp0cnlGYXN0TWFsbG9j
Owp1c2luZyBXVEY6OnRyeUZhc3RSZWFsbG9jOwp1c2luZyBXVEY6OnRyeUZhc3RaZXJvZWRNYWxs
b2M7CiMgNzkgIi4vU291cmNlL1dlYkNvcmUvY29uZmlnLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9jaXNvNjQ2IiAxIDMKIyA4MSAiLi9Tb3VyY2UvV2ViQ29yZS9jb25maWcuaCIg
MgojIDI2ICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwIiAyCiMgMSAiU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgiIDEKIyAyNSAiU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vTGVuZ3RoLmgiCiMgMSAiLi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmgiIDEKIyAyOSAiLi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgiCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01hdGhFeHRyYXMuaCIgMQojIDI5ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWF0
aEV4dHJhcy5oIgojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYWxnb3JpdGhtIiAxIDMKIyA2
MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9hbGdvcml0aG0iIDMKICAgICAgIAojIDY0ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL2FsZ29yaXRobSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQu
MC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL3Bvd2Vy
cGMtYXBwbGUtZGFyd2luOS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9jKytjb25maWcuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvb3NfZGVm
aW5lcy5oIiAxIDMKIyA3OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRh
cndpbjkvYml0cy9vc19kZWZpbmVzLmgiIDMKZXh0ZXJuICJDIiB7CiMgODkgIi91c3IvaW5jbHVk
ZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvb3NfZGVmaW5lcy5oIiAzCnR5
cGVkZWYgZW51bSBub2RlX2tpbmRzIHsKIE5PREVfVEhSRUFEX1NQRUNJRklDX0RBVEE9MSwKIE5P
REVfUFJPQ0VTU1dJREVfUFRSPTIsCiBOT0RFX0xBU1RfS0lORAogfSBUbm9kZUtpbmQgOwoKCgoK
CnR5cGVkZWYgZW51bSBub2RlX21vZGUgewogTk1fQUxMT1dfUkVDVVJTSU9OPTEsCiBOTV9SRUNV
UlNJT05fSUxMRUdBTD0yLAogTk1fRU5IQU5DRURfTE9DS0lORz0zLAogTk1fTE9DS0VEPTQKIH0g
VG5vZGVNb2RlIDsKCgoKCmV4dGVybiB2b2lkICogX2tleW1ncl9nZXRfcGVyX3RocmVhZF9kYXRh
KHVuc2lnbmVkIGludCBrZXkpIDsKZXh0ZXJuIGludCBfa2V5bWdyX3NldF9wZXJfdGhyZWFkX2Rh
dGEodW5zaWduZWQgaW50IGtleSwgdm9pZCAqa2V5ZGF0YSkgOwpleHRlcm4gdm9pZCAqX2tleW1n
cl9nZXRfYW5kX2xvY2tfcHJvY2Vzc3dpZGVfcHRyKHVuc2lnbmVkIGludCBrZXkpIDsKZXh0ZXJu
IHZvaWQgX2tleW1ncl9zZXRfYW5kX3VubG9ja19wcm9jZXNzd2lkZV9wdHIodW5zaWduZWQgaW50
IGtleSwgdm9pZCAqcHRyKSA7CmV4dGVybiB2b2lkIF9rZXltZ3JfdW5sb2NrX3Byb2Nlc3N3aWRl
X3B0cih1bnNpZ25lZCBpbnQga2V5KSA7CmV4dGVybiB2b2lkIF9rZXltZ3Jfc2V0X2xvY2ttb2Rl
X3Byb2Nlc3N3aWRlX3B0cih1bnNpZ25lZCBpbnQga2V5LCB1bnNpZ25lZCBpbnQgbW9kZSkgOwpl
eHRlcm4gdW5zaWduZWQgaW50IF9rZXltZ3JfZ2V0X2xvY2ttb2RlX3Byb2Nlc3N3aWRlX3B0cih1
bnNpZ25lZCBpbnQga2V5KSA7CmV4dGVybiBpbnQgX2tleW1ncl9nZXRfbG9ja19jb3VudF9wcm9j
ZXNzd2lkZV9wdHIodW5zaWduZWQgaW50IGtleSkgOwoKZXh0ZXJuIHZvaWQgKl9fa2V5bWdyX2ds
b2JhbFtdOwp0eXBlZGVmIHN0cnVjdCBfU2luZm9fTm9kZSB7CiAgICAgICAgdW5zaWduZWQgaW50
IHNpemUgOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1ham9yX3ZlcnNpb24gOwogICAgICAgIHVu
c2lnbmVkIHNob3J0IG1pbm9yX3ZlcnNpb24gOwogICAgICAgIH0gX1RpbmZvX05vZGUgOwojIDE4
MSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9vc19k
ZWZpbmVzLmgiIDMKfQojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL3Bvd2VycGMtYXBwbGUt
ZGFyd2luOS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9jKytjb25maWcuaCIgMwpuYW1lc3BhY2UgX19n
bnVfZGVidWdfZGVmIHsgfQoKbmFtZXNwYWNlIF9fZ251X2RlYnVnCnsKICB1c2luZyBuYW1lc3Bh
Y2UgX19nbnVfZGVidWdfZGVmOwp9CiMgNjUgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jc3RyaW5nIiAx
IDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jc3RyaW5nIiAzCiAgICAgICAKIyA0OCAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jc3RyaW5nIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAxIDMgNAojIDcwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAp0eXBlZGVmIF9f
ZGFyd2luX3NzaXplX3Qgc3NpemVfdDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQK
ZXh0ZXJuICJDIiB7CnZvaWQgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKaW50
IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKdm9pZCAqbWVtY3B5
KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICptZW1tb3ZlKHZvaWQgKiwgY29u
c3Qgdm9pZCAqLCBzaXplX3QpOwp2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7Cgpj
aGFyICpzdHBjcHkoY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpzdHJjYXNlc3RyKGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCmNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmNoYXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CmludCBzdHJjbXAoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwppbnQgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmNoYXIgKnN0cmNweShjaGFyICosIGNvbnN0IGNoYXIgKik7CnNpemVfdCBzdHJjc3BuKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqc3RyZXJyb3IoaW50KSBfX2FzbSgiXyIg
InN0cmVycm9yIiAiJFVOSVgyMDAzIik7CmludCBzdHJlcnJvcl9yKGludCwgY2hhciAqLCBzaXpl
X3QpOwpzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CmNoYXIgKnN0cm5jYXQoY2hhciAqLCBj
b25zdCBjaGFyICosIHNpemVfdCk7CmludCBzdHJuY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh
ciAqLCBzaXplX3QpOwpjaGFyICpzdHJuY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp
OwoKY2hhciAqc3RybnN0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCmNo
YXIgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpzdHJyY2hyKGNv
bnN0IGNoYXIgKiwgaW50KTsKc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kik7CmNoYXIgKnN0cnN0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKnN0cnRv
ayhjaGFyICosIGNvbnN0IGNoYXIgKik7CnNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hh
ciAqLCBzaXplX3QpOwoKCgp2b2lkICptZW1jY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBpbnQs
IHNpemVfdCk7CmNoYXIgKnN0cnRva19yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKTsK
Y2hhciAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CgppbnQgYmNtcChjb25zdCB2b2lkICosIGNvbnN0
IHZvaWQgKiwgc2l6ZV90KTsKdm9pZCBiY29weShjb25zdCB2b2lkICosIHZvaWQgKiwgc2l6ZV90
KTsKdm9pZCBiemVybyh2b2lkICosIHNpemVfdCk7CmludCBmZnMoaW50KTsKaW50IGZmc2wobG9u
Zyk7CmludCBmbHMoaW50KTsKaW50IGZsc2wobG9uZyk7CmNoYXIgKmluZGV4KGNvbnN0IGNoYXIg
KiwgaW50KTsKdm9pZCBtZW1zZXRfcGF0dGVybjQodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf
dCk7CnZvaWQgbWVtc2V0X3BhdHRlcm44KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2
b2lkIG1lbXNldF9wYXR0ZXJuMTYodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmNoYXIg
KnJpbmRleChjb25zdCBjaGFyICosIGludCk7CmludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwg
Y29uc3QgY2hhciAqKTsKc2l6ZV90IHN0cmxjYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVf
dCk7CnNpemVfdCBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwp2b2lkIHN0
cm1vZGUoaW50LCBjaGFyICopOwppbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICosIHNpemVfdCk7CmNoYXIgKnN0cnNlcChjaGFyICoqLCBjb25zdCBjaGFyICopOwpjaGFy
ICpzdHJzaWduYWwoaW50IHNpZyk7CnZvaWQgc3dhYihjb25zdCB2b2lkICogLCB2b2lkICogLCBz
c2l6ZV90KTsKCgp9CiMgNTIgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3N0cmluZyIgMiAzCiMg
NzcgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1
c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNp
bmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2lu
ZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcg
OjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcg
OjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpz
dHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2
b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4g
bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2lu
ZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24p
CiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3Mx
KSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmso
Y2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJy
ayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJy
Y2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyBy
ZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f
bik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBf
X3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3Rf
Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA2NiAiL3Vzci9pbmNsdWRlL2Mr
Ky80LjAuMC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQu
MC4wL2NsaW1pdHMiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NsaW1pdHMiIDMK
ICAgICAgIAojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NsaW1pdHMiIDMKCiMgMSAiL3Vz
ci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFyd2luOS80LjIuMS9pbmNsdWRlL2xpbWl0cy5oIiAx
IDMgNAoKCgoKCgojIDEgIi91c3IvbGliL2djYy9wb3dlcnBjLWFwcGxlLWRhcndpbjkvNC4yLjEv
aW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKIyA4ICIvdXNyL2xpYi9nY2MvcG93ZXJwYy1hcHBs
ZS1kYXJ3aW45LzQuMi4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1
ZGUvbGltaXRzLmgiIDEgMyA0CiMgNjQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAi
L3Vzci9pbmNsdWRlL21hY2hpbmUvbGltaXRzLmgiIDEgMyA0CgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvcHBjL2xpbWl0cy5oIiAxIDMgNAojIDQwICIvdXNyL2luY2x1ZGUvcHBjL2xpbWl0cy5oIiAz
IDQKIyAxICIvdXNyL2luY2x1ZGUvcHBjL19saW1pdHMuaCIgMSAzIDQKIyA0MSAiL3Vzci9pbmNs
dWRlL3BwYy9saW1pdHMuaCIgMiAzIDQKIyA3ICIvdXNyL2luY2x1ZGUvbWFjaGluZS9saW1pdHMu
aCIgMiAzIDQKIyA2NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc3lzbGltaXRzLmgiIDEgMyA0CiMgNjYgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIg
MiAzIDQKIyAxMSAiL3Vzci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFyd2luOS80LjIuMS9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMgNAojIDUwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NsaW1pdHMi
IDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3N0ZGxpYiIgMSAzCiMgNDcgIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvY3N0ZGxpYiIgMwogICAgICAgCiMgNDggIi91c3IvaW5jbHVkZS9jKysv
NC4wLjAvY3N0ZGxpYiIgMwojIDkwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NzdGRsaWIiIDMK
bmFtZXNwYWNlIHN0ZAp7CgogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVz
aW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjph
dG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwog
IHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6
OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsK
ICB1c2luZyA6Om1hbGxvYzsKCiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwog
IHVzaW5nIDo6bWJ0b3djOwoKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2lu
ZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6
OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CgogIHVzaW5nIDo6
d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9f
aSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ks
IGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQojIDE0MyAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9jc3RkbGliIiAzCn0KIyAxNTYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3N0
ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCiAgdXNpbmcgOjpsbGRpdl90OwoKCgoKCiAg
dXNpbmcgOjpfRXhpdDsKCgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkg
eyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBs
bGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCgog
IGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBs
bGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJl
dHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25n
IGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVt
ID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CiMgMTkyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2NzdGRsaWIiIDMKICB1c2luZyA6OmF0b2xsOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6
OnN0cnRvdWxsOwoKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVz
cGFjZSBzdGQKewoKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CgogIHVzaW5nIF9fZ251X2N4
eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGFi
czsKCiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKCiAg
dXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9pb3Nmd2Qi
IDEgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2lvc2Z3ZCIgMwogICAgICAgCiMgNDMg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvaW9zZndkIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFyd2luOS9iaXRzL2MrK2xvY2FsZS5oIiAxIDMKIyAzOSAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9jKytsb2Nh
bGUuaCIgMwogICAgICAgCiMgNDAgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBs
ZS1kYXJ3aW45L2JpdHMvYysrbG9jYWxlLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9jbG9jYWxlIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jbG9jYWxlIiAzCiAg
ICAgICAKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jbG9jYWxlIiAzCgojIDEgIi91c3Iv
aW5jbHVkZS9sb2NhbGUuaCIgMSAzIDQKIyA0MCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvX2xvY2FsZS5oIiAxIDMgNAojIDQzICIvdXNyL2luY2x1ZGUvX2xv
Y2FsZS5oIiAzIDQKc3RydWN0IGxjb252IHsKIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiBjaGFyICp0
aG91c2FuZHNfc2VwOwogY2hhciAqZ3JvdXBpbmc7CiBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiBj
aGFyICpjdXJyZW5jeV9zeW1ib2w7CiBjaGFyICptb25fZGVjaW1hbF9wb2ludDsKIGNoYXIgKm1v
bl90aG91c2FuZHNfc2VwOwogY2hhciAqbW9uX2dyb3VwaW5nOwogY2hhciAqcG9zaXRpdmVfc2ln
bjsKIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiBjaGFyIGludF9mcmFjX2RpZ2l0czsKIGNoYXIgZnJh
Y19kaWdpdHM7CiBjaGFyIHBfY3NfcHJlY2VkZXM7CiBjaGFyIHBfc2VwX2J5X3NwYWNlOwogY2hh
ciBuX2NzX3ByZWNlZGVzOwogY2hhciBuX3NlcF9ieV9zcGFjZTsKIGNoYXIgcF9zaWduX3Bvc247
CiBjaGFyIG5fc2lnbl9wb3NuOwogY2hhciBpbnRfcF9jc19wcmVjZWRlczsKIGNoYXIgaW50X25f
Y3NfcHJlY2VkZXM7CiBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsKIGNoYXIgaW50X25fc2VwX2J5
X3NwYWNlOwogY2hhciBpbnRfcF9zaWduX3Bvc247CiBjaGFyIGludF9uX3NpZ25fcG9zbjsKfTsK
CgoKCgpleHRlcm4gIkMiIHsKc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOwp9CiMgNDEg
Ii91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o
IiAzIDQKZXh0ZXJuICJDIiB7CmNoYXIgKnNldGxvY2FsZShpbnQsIGNvbnN0IGNoYXIgKik7Cn0K
IyA1MCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9j
YWxlY29udjsKfQojIDQyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFy
d2luOS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9j
c3RkaW8iIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NzdGRpbyIgMwogICAgICAg
CiMgNDggIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3N0ZGlvIiAzCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zdGRpby5oIiAxIDMgNAojIDcwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVk
ZWYgX19kYXJ3aW5fdmFfbGlzdCB2YV9saXN0OwoKCgoKdHlwZWRlZiBfX2Rhcndpbl9vZmZfdCBv
ZmZfdDsKIyA4NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIF9fZGFyd2luX29m
Zl90IGZwb3NfdDsKIyA5OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApzdHJ1Y3QgX19zYnVm
IHsKIHVuc2lnbmVkIGNoYXIgKl9iYXNlOwogaW50IF9zaXplOwp9OwoKCnN0cnVjdCBfX3NGSUxF
WDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX19zRklM
RSB7CiB1bnNpZ25lZCBjaGFyICpfcDsKIGludCBfcjsKIGludCBfdzsKIHNob3J0IF9mbGFnczsK
IHNob3J0IF9maWxlOwogc3RydWN0IF9fc2J1ZiBfYmY7CiBpbnQgX2xiZnNpemU7CgoKIHZvaWQg
Kl9jb29raWU7CiBpbnQgKCpfY2xvc2UpKHZvaWQgKik7CiBpbnQgKCpfcmVhZCkgKHZvaWQgKiwg
Y2hhciAqLCBpbnQpOwogZnBvc190ICgqX3NlZWspICh2b2lkICosIGZwb3NfdCwgaW50KTsKIGlu
dCAoKl93cml0ZSkodm9pZCAqLCBjb25zdCBjaGFyICosIGludCk7CgoKIHN0cnVjdCBfX3NidWYg
X3ViOwogc3RydWN0IF9fc0ZJTEVYICpfZXh0cmE7CiBpbnQgX3VyOwoKCiB1bnNpZ25lZCBjaGFy
IF91YnVmWzNdOwogdW5zaWduZWQgY2hhciBfbmJ1ZlsxXTsKCgogc3RydWN0IF9fc2J1ZiBfbGI7
CgoKIGludCBfYmxrc2l6ZTsKIGZwb3NfdCBfb2Zmc2V0Owp9IEZJTEU7CgpleHRlcm4gIkMiIHsK
CmV4dGVybiBGSUxFICpfX3N0ZGlucDsKZXh0ZXJuIEZJTEUgKl9fc3Rkb3V0cDsKZXh0ZXJuIEZJ
TEUgKl9fc3RkZXJycDsKCgoKfQojIDI0OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRl
cm4gIkMiIHsKdm9pZCBjbGVhcmVycihGSUxFICopOwppbnQgZmNsb3NlKEZJTEUgKik7CmludCBm
ZW9mKEZJTEUgKik7CmludCBmZXJyb3IoRklMRSAqKTsKaW50IGZmbHVzaChGSUxFICopOwppbnQg
ZmdldGMoRklMRSAqKTsKaW50IGZnZXRwb3MoRklMRSAqICwgZnBvc190ICopOwpjaGFyICpmZ2V0
cyhjaGFyICogLCBpbnQsIEZJTEUgKik7CkZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiAsIGNvbnN0
IGNoYXIgKiApOwppbnQgZnByaW50ZihGSUxFICogLCBjb25zdCBjaGFyICogLCAuLi4pIF9fYXNt
KCJfIiAiZnByaW50ZiIgIiRMREJMMTI4Iik7CmludCBmcHV0YyhpbnQsIEZJTEUgKik7CmludCBm
cHV0cyhjb25zdCBjaGFyICogLCBGSUxFICogKSBfX2FzbSgiXyIgImZwdXRzIiAiJFVOSVgyMDAz
Iik7CnNpemVfdCBmcmVhZCh2b2lkICogLCBzaXplX3QsIHNpemVfdCwgRklMRSAqICk7CkZJTEUg
KmZyZW9wZW4oY29uc3QgY2hhciAqICwgY29uc3QgY2hhciAqICwKICAgICBGSUxFICogKSBfX2Fz
bSgiXyIgImZyZW9wZW4iICIkVU5JWDIwMDMiKTsKaW50IGZzY2FuZihGSUxFICogLCBjb25zdCBj
aGFyICogLCAuLi4pIF9fYXNtKCJfIiAiZnNjYW5mIiAiJExEQkwxMjgiKTsKaW50IGZzZWVrKEZJ
TEUgKiwgbG9uZywgaW50KTsKaW50IGZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3QgKik7Cmxv
bmcgZnRlbGwoRklMRSAqKTsKc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkICogLCBzaXplX3QsIHNp
emVfdCwgRklMRSAqICkgX19hc20oIl8iICJmd3JpdGUiICIkVU5JWDIwMDMiKTsKaW50IGdldGMo
RklMRSAqKTsKaW50IGdldGNoYXIodm9pZCk7CmNoYXIgKmdldHMoY2hhciAqKTsKCmV4dGVybiBj
b25zdCBpbnQgc3lzX25lcnI7CmV4dGVybiBjb25zdCBjaGFyICpjb25zdCBzeXNfZXJybGlzdFtd
OwoKdm9pZCBwZXJyb3IoY29uc3QgY2hhciAqKTsKaW50IHByaW50Zihjb25zdCBjaGFyICogLCAu
Li4pIF9fYXNtKCJfIiAicHJpbnRmIiAiJExEQkwxMjgiKTsKaW50IHB1dGMoaW50LCBGSUxFICop
OwppbnQgcHV0Y2hhcihpbnQpOwppbnQgcHV0cyhjb25zdCBjaGFyICopOwppbnQgcmVtb3ZlKGNv
bnN0IGNoYXIgKik7CmludCByZW5hbWUgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKdm9p
ZCByZXdpbmQoRklMRSAqKTsKaW50IHNjYW5mKGNvbnN0IGNoYXIgKiAsIC4uLikgX19hc20oIl8i
ICJzY2FuZiIgIiRMREJMMTI4Iik7CnZvaWQgc2V0YnVmKEZJTEUgKiAsIGNoYXIgKiApOwppbnQg
c2V0dmJ1ZihGSUxFICogLCBjaGFyICogLCBpbnQsIHNpemVfdCk7CmludCBzcHJpbnRmKGNoYXIg
KiAsIGNvbnN0IGNoYXIgKiAsIC4uLikgX19hc20oIl8iICJzcHJpbnRmIiAiJExEQkwxMjgiKTsK
aW50IHNzY2FuZihjb25zdCBjaGFyICogLCBjb25zdCBjaGFyICogLCAuLi4pIF9fYXNtKCJfIiAi
c3NjYW5mIiAiJExEQkwxMjgiKTsKRklMRSAqdG1wZmlsZSh2b2lkKTsKY2hhciAqdG1wbmFtKGNo
YXIgKik7CmludCB1bmdldGMoaW50LCBGSUxFICopOwppbnQgdmZwcmludGYoRklMRSAqICwgY29u
c3QgY2hhciAqICwgdmFfbGlzdCkgX19hc20oIl8iICJ2ZnByaW50ZiIgIiRMREJMMTI4Iik7Cmlu
dCB2cHJpbnRmKGNvbnN0IGNoYXIgKiAsIHZhX2xpc3QpIF9fYXNtKCJfIiAidnByaW50ZiIgIiRM
REJMMTI4Iik7CmludCB2c3ByaW50ZihjaGFyICogLCBjb25zdCBjaGFyICogLCB2YV9saXN0KSBf
X2FzbSgiXyIgInZzcHJpbnRmIiAiJExEQkwxMjgiKTsKCmludCBhc3ByaW50ZihjaGFyICoqLCBj
b25zdCBjaGFyICosIC4uLikgX19hc20oIl8iICJhc3ByaW50ZiIgIiRMREJMMTI4Iik7CmludCB2
YXNwcmludGYoY2hhciAqKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSBfX2FzbSgiXyIgInZhc3By
aW50ZiIgIiRMREJMMTI4Iik7Cgp9CgoKCgoKCgpleHRlcm4gIkMiIHsKY2hhciAqY3Rlcm1pZChj
aGFyICopOwoKY2hhciAqY3Rlcm1pZF9yKGNoYXIgKik7CgpGSUxFICpmZG9wZW4oaW50LCBjb25z
dCBjaGFyICopOwoKY2hhciAqZmdldGxuKEZJTEUgKiwgc2l6ZV90ICopOwoKaW50IGZpbGVubyhG
SUxFICopOwp2b2lkIGZsb2NrZmlsZShGSUxFICopOwoKY29uc3QgY2hhcgogKmZtdGNoZWNrKGNv
bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IGZwdXJnZShGSUxFICopOwoKaW50IGZzZWVr
byhGSUxFICosIG9mZl90LCBpbnQpOwpvZmZfdCBmdGVsbG8oRklMRSAqKTsKaW50IGZ0cnlsb2Nr
ZmlsZShGSUxFICopOwp2b2lkIGZ1bmxvY2tmaWxlKEZJTEUgKik7CmludCBnZXRjX3VubG9ja2Vk
KEZJTEUgKik7CmludCBnZXRjaGFyX3VubG9ja2VkKHZvaWQpOwoKaW50IGdldHcoRklMRSAqKTsK
CmludCBwY2xvc2UoRklMRSAqKTsKRklMRSAqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwppbnQgcHV0Y191bmxvY2tlZChpbnQsIEZJTEUgKik7CmludCBwdXRjaGFyX3VubG9ja2Vk
KGludCk7CgppbnQgcHV0dyhpbnQsIEZJTEUgKik7CnZvaWQgc2V0YnVmZmVyKEZJTEUgKiwgY2hh
ciAqLCBpbnQpOwppbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKaW50IHNucHJpbnRmKGNoYXIgKiAs
IHNpemVfdCwgY29uc3QgY2hhciAqICwgLi4uKSBfX2FzbSgiXyIgInNucHJpbnRmIiAiJExEQkwx
MjgiKTsKY2hhciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19hc20oIl8i
ICJ0ZW1wbmFtIiAiJFVOSVgyMDAzIik7CmludCB2ZnNjYW5mKEZJTEUgKiAsIGNvbnN0IGNoYXIg
KiAsIHZhX2xpc3QpIF9fYXNtKCJfIiAidmZzY2FuZiIgIiRMREJMMTI4Iik7CmludCB2c2NhbmYo
Y29uc3QgY2hhciAqICwgdmFfbGlzdCkgX19hc20oIl8iICJ2c2NhbmYiICIkTERCTDEyOCIpOwpp
bnQgdnNucHJpbnRmKGNoYXIgKiAsIHNpemVfdCwgY29uc3QgY2hhciAqICwgdmFfbGlzdCkgX19h
c20oIl8iICJ2c25wcmludGYiICIkTERCTDEyOCIpOwppbnQgdnNzY2FuZihjb25zdCBjaGFyICog
LCBjb25zdCBjaGFyICogLCB2YV9saXN0KSBfX2FzbSgiXyIgInZzc2NhbmYiICIkTERCTDEyOCIp
OwoKRklMRSAqem9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Cgp9CgoKCgoK
ZXh0ZXJuICJDIiB7CkZJTEUgKmZ1bm9wZW4oY29uc3Qgdm9pZCAqLAogIGludCAoKikodm9pZCAq
LCBjaGFyICosIGludCksCiAgaW50ICgqKSh2b2lkICosIGNvbnN0IGNoYXIgKiwgaW50KSwKICBm
cG9zX3QgKCopKHZvaWQgKiwgZnBvc190LCBpbnQpLAogIGludCAoKikodm9pZCAqKSk7Cn0KIyAz
NzEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuICJDIiB7CmludCBfX3NyZ2V0KEZJ
TEUgKik7CmludCBfX3N2ZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KSBfX2Fz
bSgiXyIgIl9fc3Zmc2NhbmYiICIkTERCTDEyOCIpOwppbnQgX19zd2J1ZihpbnQsIEZJTEUgKik7
Cn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IF9fc3B1dGMoaW50IF9jLCBGSUxFICpfcCkgewog
aWYgKC0tX3AtPl93ID49IDAgfHwgKF9wLT5fdyA+PSBfcC0+X2xiZnNpemUgJiYgKGNoYXIpX2Mg
IT0gJ1xuJykpCiAgcmV0dXJuICgqX3AtPl9wKysgPSBfYyk7CiBlbHNlCiAgcmV0dXJuIChfX3N3
YnVmKF9jLCBfcCkpOwp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3N0ZGlvIiAyIDMK
IyA5NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jc3RkaW8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAg
dXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVz
aW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6
OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZn
ZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7
CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1
c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2lu
ZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6Omdl
dGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRm
OwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVz
aW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5n
IDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6
c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0
bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZw
cmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE1MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9jc3RkaW8iIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiMgMTY3ICIvdXNyL2luY2x1ZGUvYysr
LzQuMC4wL2NzdGRpbyIgMwogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwog
IHVzaW5nIDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsK
Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcg
X19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9f
Z251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDQ0ICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFyd2luOS9iaXRzL2MrK2xvY2Fs
ZS5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3Yo
Y2hhciogX19vdXQsCiAgICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18oKF9fdW51
c2VkX18pKSwKICAgICAgIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAgX1R2IF9fdiwgY29uc3Qg
X19jX2xvY2FsZSYsIGludCBfX3ByZWMpCiAgICB7CiAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpz
ZXRsb2NhbGUoNCwgX19udWxsKTsKICAgICAgY2hhciogX19zYXYgPSBfX251bGw7CiAgICAgIGlm
IChzdGQ6OnN0cmNtcChfX29sZCwgIkMiKSkKIHsKICAgX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0
cmxlbihfX29sZCkgKyAxXTsKICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgc3RkOjpz
ZXRsb2NhbGUoNCwgIkMiKTsKIH0KCgogICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJp
bnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CgoKCgogICAgICBpZiAoX19z
YXYpCiB7CiAgIHN0ZDo6c2V0bG9jYWxlKDQsIF9fc2F2KTsKICAgZGVsZXRlIFtdIF9fc2F2Owog
fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBsZS1k
YXJ3aW45L2JpdHMvYysraW8uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvcG93
ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvYysraW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv
NC4wLjAvcG93ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvZ3Roci5oIiAxIDMKIyAzMyAiL3Vzci9p
bmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9ndGhyLmgiIDMKI3By
YWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGRlZmF1bHQpCiMgMTE0ICIvdXNyL2luY2x1ZGUvYysr
LzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFyd2luOS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvZ3Roci1kZWZhdWx0Lmgi
IDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFyd2luOS9i
aXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMSAzIDQK
IyA1NyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3B0aHJl
YWRfaW1wbC5oIiAxIDMgNAojIDU4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKIyAx
ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi
IDMgNApleHRlcm4gIkMiIHsKCgoKCnN0cnVjdCBzY2hlZF9wYXJhbSB7IGludCBzY2hlZF9wcmlv
cml0eTsgY2hhciBfX29wYXF1ZVs0XTsgfTsKCgpleHRlcm4gaW50IHNjaGVkX3lpZWxkKHZvaWQp
OwpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4oaW50KTsKZXh0ZXJuIGludCBzY2hl
ZF9nZXRfcHJpb3JpdHlfbWF4KGludCk7Cn0KIyA2MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDY5ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX3N0cnVjdHMuaCIgMSAzIDQKIyAyNCAiL3Vz
ci9pbmNsdWRlL19zdHJ1Y3RzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMu
aCIgMSAzIDQKIyA4OCAiL3Vzci9pbmNsdWRlL3N5cy9fc3RydWN0cy5oIiAzIDQKc3RydWN0IHRp
bWVzcGVjCnsKIF9fZGFyd2luX3RpbWVfdCB0dl9zZWM7CiBsb25nIHR2X25zZWM7Cn07CiMgMjUg
Ii91c3IvaW5jbHVkZS9fc3RydWN0cy5oIiAyIDMgNAojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAyIDMgNAoKCgoKCgoKdHlwZWRlZiBfX2Rhcndpbl9jbG9ja190IGNsb2NrX3Q7CiMgODcgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fZGFyd2luX3RpbWVfdCB0aW1lX3Q7CgoK
c3RydWN0IHRtIHsKIGludCB0bV9zZWM7CiBpbnQgdG1fbWluOwogaW50IHRtX2hvdXI7CiBpbnQg
dG1fbWRheTsKIGludCB0bV9tb247CiBpbnQgdG1feWVhcjsKIGludCB0bV93ZGF5OwogaW50IHRt
X3lkYXk7CiBpbnQgdG1faXNkc3Q7CiBsb25nIHRtX2dtdG9mZjsKIGNoYXIgKnRtX3pvbmU7Cn07
CiMgMTEzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGNoYXIgKnR6bmFtZVtdOwoK
CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgpleHRlcm4gbG9uZyB0aW1lem9uZSBfX2FzbSgiXyIg
InRpbWV6b25lIiAiJFVOSVgyMDAzIik7CgpleHRlcm4gaW50IGRheWxpZ2h0OwoKZXh0ZXJuICJD
IiB7CmNoYXIgKmFzY3RpbWUoY29uc3Qgc3RydWN0IHRtICopOwpjbG9ja190IGNsb2NrKHZvaWQp
IF9fYXNtKCJfIiAiY2xvY2siICIkVU5JWDIwMDMiKTsKY2hhciAqY3RpbWUoY29uc3QgdGltZV90
ICopOwpkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwpzdHJ1Y3QgdG0gKmdldGRhdGUo
Y29uc3QgY2hhciAqKTsKc3RydWN0IHRtICpnbXRpbWUoY29uc3QgdGltZV90ICopOwpzdHJ1Y3Qg
dG0gKmxvY2FsdGltZShjb25zdCB0aW1lX3QgKik7CnRpbWVfdCBta3RpbWUoc3RydWN0IHRtICop
IF9fYXNtKCJfIiAibWt0aW1lIiAiJFVOSVgyMDAzIik7CnNpemVfdCBzdHJmdGltZShjaGFyICog
LCBzaXplX3QsIGNvbnN0IGNoYXIgKiAsIGNvbnN0IHN0cnVjdCB0bSAqICkgX19hc20oIl8iICJz
dHJmdGltZSIgIiRVTklYMjAwMyIpOwpjaGFyICpzdHJwdGltZShjb25zdCBjaGFyICogLCBjb25z
dCBjaGFyICogLCBzdHJ1Y3QgdG0gKiApIF9fYXNtKCJfIiAic3RycHRpbWUiICIkVU5JWDIwMDMi
KTsKdGltZV90IHRpbWUodGltZV90ICopOwoKCnZvaWQgdHpzZXQodm9pZCk7CgoKCmNoYXIgKmFz
Y3RpbWVfcihjb25zdCBzdHJ1Y3QgdG0gKiAsIGNoYXIgKiApOwpjaGFyICpjdGltZV9yKGNvbnN0
IHRpbWVfdCAqLCBjaGFyICopOwpzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqICwg
c3RydWN0IHRtICogKTsKc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiAsIHN0
cnVjdCB0bSAqICk7CgoKdGltZV90IHBvc2l4MnRpbWUodGltZV90KTsKCgoKdm9pZCB0enNldHdh
bGwodm9pZCk7CnRpbWVfdCB0aW1lMnBvc2l4KHRpbWVfdCk7CnRpbWVfdCB0aW1lbG9jYWwoc3Ry
dWN0IHRtICogY29uc3QpOwp0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqIGNvbnN0KTsKCgoKaW50
IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopIF9f
YXNtKCJfIiAibmFub3NsZWVwIiAiJFVOSVgyMDAzIik7Cgp9CiMgNjEgIi91c3IvaW5jbHVkZS9w
dGhyZWFkLmgiIDIgMyA0CiMgNjkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNAp0eXBlZGVm
IF9fZGFyd2luX3B0aHJlYWRfY29uZF90IHB0aHJlYWRfY29uZF90OwoKCgoKdHlwZWRlZiBfX2Rh
cndpbl9wdGhyZWFkX2NvbmRhdHRyX3QgcHRocmVhZF9jb25kYXR0cl90OwoKCgoKdHlwZWRlZiBf
X2Rhcndpbl9wdGhyZWFkX2tleV90IHB0aHJlYWRfa2V5X3Q7CgoKCgp0eXBlZGVmIF9fZGFyd2lu
X3B0aHJlYWRfbXV0ZXhfdCBwdGhyZWFkX211dGV4X3Q7CgoKCgp0eXBlZGVmIF9fZGFyd2luX3B0
aHJlYWRfbXV0ZXhhdHRyX3QgcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKCnR5cGVkZWYgX19kYXJ3
aW5fcHRocmVhZF9vbmNlX3QgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIF9fZGFyd2luX3B0
aHJlYWRfcndsb2NrX3QgcHRocmVhZF9yd2xvY2tfdDsKCgoKCnR5cGVkZWYgX19kYXJ3aW5fcHRo
cmVhZF9yd2xvY2thdHRyX3QgcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIF9fZGFy
d2luX3B0aHJlYWRfdCBwdGhyZWFkX3Q7CgoKCgoKCnR5cGVkZWYgX19kYXJ3aW5fbWFjaF9wb3J0
X3QgbWFjaF9wb3J0X3Q7CiMgMTQ4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJu
ICJDIiB7CiMgMjQ0ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKaW50IHB0aHJlYWRfYXRm
b3JrKHZvaWQgKCopKHZvaWQpLCB2b2lkICgqKSh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKCopKHZvaWQpKTsKaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90
ICopOwppbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlKGNvbnN0IHB0aHJlYWRfYXR0cl90
ICosCiAgICAgICAgICBpbnQgKik7CmludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKGNvbnN0
IHB0aHJlYWRfYXR0cl90ICogLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqICk7CmludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkKGNvbnN0IHB0aHJl
YWRfYXR0cl90ICogLAogICAgICAgICAgIGludCAqICk7CmludCBwdGhyZWFkX2F0dHJfZ2V0c2No
ZWRwYXJhbShjb25zdCBwdGhyZWFkX2F0dHJfdCAqICwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqICk7CmludCBwdGhyZWFkX2F0dHJfZ2V0
c2NoZWRwb2xpY3koY29uc3QgcHRocmVhZF9hdHRyX3QgKiAsCiAgICAgICAgICBpbnQgKiApOwpp
bnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKGNvbnN0IHB0aHJlYWRfYXR0cl90ICogLCBpbnQgKiAp
OwppbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrKGNvbnN0IHB0aHJlYWRfYXR0cl90ICogLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiogLCBzaXplX3QgKiApOwpp
bnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihjb25zdCBwdGhyZWFkX2F0dHJfdCAqICwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqICk7CmludCBwdGhyZWFk
X2F0dHJfZ2V0c3RhY2tzaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90ICogLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqICk7CmludCBwdGhyZWFkX2F0dHJfaW5p
dChwdGhyZWFkX2F0dHJfdCAqKTsKaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShwdGhy
ZWFkX2F0dHJfdCAqLAogICAgICAgICAgaW50ICk7CmludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRz
aXplKHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCApOwppbnQgcHRocmVhZF9hdHRyX3NldGluaGVy
aXRzY2hlZChwdGhyZWFkX2F0dHJfdCAqLAogICAgICAgICAgIGludCApOwppbnQgcHRocmVhZF9h
dHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiApOwppbnQgcHRocmVh
ZF9hdHRyX3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICosCiAgICAgICAgICBpbnQgKTsK
aW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCAqLCBpbnQpOwppbnQgcHRo
cmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqLCBzaXplX3QgKTsKaW50IHB0aHJlYWRfYXR0cl9zZXRz
dGFja2FkZHIocHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICopOwppbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0
dHJfdCAqLCBzaXplX3QgKTsKaW50IHB0aHJlYWRfY2FuY2VsKHB0aHJlYWRfdCApIF9fYXNtKCJf
IiAicHRocmVhZF9jYW5jZWwiICIkVU5JWDIwMDMiKTsKCmludCBwdGhyZWFkX2NvbmRfYnJvYWRj
YXN0KHB0aHJlYWRfY29uZF90ICopOwppbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kocHRocmVhZF9j
b25kX3QgKik7CmludCBwdGhyZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqICwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqICkgX19hc20o
Il8iICJwdGhyZWFkX2NvbmRfaW5pdCIgIiRVTklYMjAwMyIpOwppbnQgcHRocmVhZF9jb25kX3Np
Z25hbChwdGhyZWFkX2NvbmRfdCAqKTsKaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVh
ZF9jb25kX3QgKiAsCiAgICAgcHRocmVhZF9tdXRleF90ICogLAogICAgIGNvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqICkgX19hc20oIl8iICJwdGhyZWFkX2NvbmRfdGltZWR3YWl0IiAiJFVOSVgyMDAz
Iik7CmludCBwdGhyZWFkX2NvbmRfd2FpdChwdGhyZWFkX2NvbmRfdCAqICwKICAgICAgIHB0aHJl
YWRfbXV0ZXhfdCAqICkgX19hc20oIl8iICJwdGhyZWFkX2NvbmRfd2FpdCIgIiRVTklYMjAwMyIp
OwppbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95KHB0aHJlYWRfY29uZGF0dHJfdCAqKTsKaW50
IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmludCBwdGhyZWFk
X2NvbmRhdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICogLAogICBpbnQg
KiApOwppbnQgcHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRfY29uZGF0dHJfdCAq
LAogICBpbnQgKTsKaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqICwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfYXR0cl90ICogLAogICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqKCopKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICog
KTsKaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCApOwppbnQgcHRocmVhZF9lcXVhbChwdGhy
ZWFkX3QgLAogICBwdGhyZWFkX3QgKTsKdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKSBfX2F0dHJp
YnV0ZV9fKChfX25vcmV0dXJuX18pKTsKaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kodm9pZCk7
CmludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZF90ICwgaW50ICogLCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKiApOwp2b2lkICpwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3QgKTsK
aW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QgLCB2b2lkICoqKSBfX2FzbSgiXyIgInB0aHJlYWRf
am9pbiIgIiRVTklYMjAwMyIpOwppbnQgcHRocmVhZF9rZXlfY3JlYXRlKHB0aHJlYWRfa2V5X3Qg
Kiwgdm9pZCAoKikodm9pZCAqKSk7CmludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlf
dCApOwppbnQgcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCAqKTsKaW50IHB0
aHJlYWRfbXV0ZXhfZ2V0cHJpb2NlaWxpbmcoY29uc3QgcHRocmVhZF9tdXRleF90ICogLCBpbnQg
KiApOwppbnQgcHRocmVhZF9tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCAqICwgY29uc3QgcHRo
cmVhZF9tdXRleGF0dHJfdCAqICk7CmludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRl
eF90ICopOwppbnQgcHRocmVhZF9tdXRleF9zZXRwcmlvY2VpbGluZyhwdGhyZWFkX211dGV4X3Qg
KiAsIGludCwgaW50ICogKTsKaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4
X3QgKik7CmludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKik7CmludCBw
dGhyZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKikgX19hc20oIl8i
ICJwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IiAiJFVOSVgyMDAzIik7CmludCBwdGhyZWFkX211
dGV4YXR0cl9nZXRwcmlvY2VpbGluZyhjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICogLCBpbnQg
KiApOwppbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2woY29uc3QgcHRocmVhZF9tdXRl
eGF0dHJfdCAqICwgaW50ICogKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHBzaGFyZWQoY29u
c3QgcHRocmVhZF9tdXRleGF0dHJfdCAqICwgaW50ICogKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRy
X2dldHR5cGUoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqICwgaW50ICogKTsKaW50IHB0aHJl
YWRfbXV0ZXhhdHRyX2luaXQocHRocmVhZF9tdXRleGF0dHJfdCAqKTsKaW50IHB0aHJlYWRfbXV0
ZXhhdHRyX3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX3NldHByb3RvY29sKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsK
aW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQocHRocmVhZF9tdXRleGF0dHJfdCAqLCBp
bnQgKTsKaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUocHRocmVhZF9tdXRleGF0dHJfdCAq
LCBpbnQpOwppbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICosIHZvaWQgKCopKHZvaWQp
KTsKaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kocHRocmVhZF9yd2xvY2tfdCAqICkgX19hc20o
Il8iICJwdGhyZWFkX3J3bG9ja19kZXN0cm95IiAiJFVOSVgyMDAzIik7CmludCBwdGhyZWFkX3J3
bG9ja19pbml0KHB0aHJlYWRfcndsb2NrX3QgKiAsIGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90
ICogKSBfX2FzbSgiXyIgInB0aHJlYWRfcndsb2NrX2luaXQiICIkVU5JWDIwMDMiKTsKaW50IHB0
aHJlYWRfcndsb2NrX3JkbG9jayhwdGhyZWFkX3J3bG9ja190ICopIF9fYXNtKCJfIiAicHRocmVh
ZF9yd2xvY2tfcmRsb2NrIiAiJFVOSVgyMDAzIik7CmludCBwdGhyZWFkX3J3bG9ja190cnlyZGxv
Y2socHRocmVhZF9yd2xvY2tfdCAqKSBfX2FzbSgiXyIgInB0aHJlYWRfcndsb2NrX3RyeXJkbG9j
ayIgIiRVTklYMjAwMyIpOwppbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrKHB0aHJlYWRfcnds
b2NrX3QgKikgX19hc20oIl8iICJwdGhyZWFkX3J3bG9ja190cnl3cmxvY2siICIkVU5JWDIwMDMi
KTsKaW50IHB0aHJlYWRfcndsb2NrX3dybG9jayhwdGhyZWFkX3J3bG9ja190ICopIF9fYXNtKCJf
IiAicHRocmVhZF9yd2xvY2tfd3Jsb2NrIiAiJFVOSVgyMDAzIik7CmludCBwdGhyZWFkX3J3bG9j
a191bmxvY2socHRocmVhZF9yd2xvY2tfdCAqKSBfX2FzbSgiXyIgInB0aHJlYWRfcndsb2NrX3Vu
bG9jayIgIiRVTklYMjAwMyIpOwppbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kocHRocmVh
ZF9yd2xvY2thdHRyX3QgKik7CmludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZChjb25z
dCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqICwKICAgaW50ICogKTsKaW50IHB0aHJlYWRfcndsb2Nr
YXR0cl9pbml0KHB0aHJlYWRfcndsb2NrYXR0cl90ICopOwppbnQgcHRocmVhZF9yd2xvY2thdHRy
X3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QgKiwKICAgaW50ICk7CnB0aHJlYWRfdCBw
dGhyZWFkX3NlbGYodm9pZCk7CgppbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQgLCBpbnQg
KikgX19hc20oIl8iICJwdGhyZWFkX3NldGNhbmNlbHN0YXRlIiAiJFVOSVgyMDAzIik7CmludCBw
dGhyZWFkX3NldGNhbmNlbHR5cGUoaW50ICwgaW50ICopIF9fYXNtKCJfIiAicHRocmVhZF9zZXRj
YW5jZWx0eXBlIiAiJFVOSVgyMDAzIik7CmludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5KGludCk7
CmludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90ICwKICAgIGludCAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwppbnQg
cHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90ICwKICAgICAgICAgY29uc3Qgdm9pZCAq
KTsKdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwodm9pZCkgX19hc20oIl8iICJwdGhyZWFkX3Rlc3Rj
YW5jZWwiICIkVU5JWDIwMDMiKTsKCgoKaW50IHB0aHJlYWRfaXNfdGhyZWFkZWRfbnAodm9pZCk7
CgoKaW50IHB0aHJlYWRfbWFpbl9ucCh2b2lkKTsKCgptYWNoX3BvcnRfdCBwdGhyZWFkX21hY2hf
dGhyZWFkX25wKHB0aHJlYWRfdCk7CnNpemVfdCBwdGhyZWFkX2dldF9zdGFja3NpemVfbnAocHRo
cmVhZF90KTsKdm9pZCAqIHB0aHJlYWRfZ2V0X3N0YWNrYWRkcl9ucChwdGhyZWFkX3QpOwoKCmlu
dCBwdGhyZWFkX2NvbmRfc2lnbmFsX3RocmVhZF9ucChwdGhyZWFkX2NvbmRfdCAqLCBwdGhyZWFk
X3QpOwoKCmludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlX25wKHB0aHJlYWRfY29u
ZF90ICosCiAgICAgcHRocmVhZF9tdXRleF90ICosCiAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVj
ICopOwoKCmludCBwdGhyZWFkX2NyZWF0ZV9zdXNwZW5kZWRfbnAocHRocmVhZF90ICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX2F0dHJfdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqKCopKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICopOwppbnQgcHRocmVhZF9raWxsKHB0aHJlYWRfdCwgaW50KTsKCnB0aHJlYWRfdCBwdGhy
ZWFkX2Zyb21fbWFjaF90aHJlYWRfbnAobWFjaF9wb3J0X3QpOwoKaW50IHB0aHJlYWRfc2lnbWFz
ayhpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopIF9fYXNtKCJfIiAicHRocmVhZF9z
aWdtYXNrIiAiJFVOSVgyMDAzIik7CnZvaWQgcHRocmVhZF95aWVsZF9ucCh2b2lkKTsKCn0KIyA0
NCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9ndGhy
LWRlZmF1bHQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMgNAojIDcyICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgi
IDEgMyA0CiMgMTM4ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQKc3RydWN0IGFjY2Vz
c3hfZGVzY3JpcHRvciB7CiB1bnNpZ25lZCBpbnQgYWRfbmFtZV9vZmZzZXQ7CiBpbnQgYWRfZmxh
Z3M7CiBpbnQgYWRfcGFkWzJdOwp9OwojIDczICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMyA0
CiMgODMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CnR5cGVkZWYgX19kYXJ3aW5fZ2lkX3Qg
Z2lkX3Q7CiMgMTI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNAp0eXBlZGVmIF9fZGFyd2lu
X3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKCgp0eXBlZGVmIF9fZGFyd2luX3V1aWRfdCB1dWlk
X3Q7CiMgNDE0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gIkMiIHsKCnZvaWQg
X2V4aXQoaW50KSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKaW50IGFjY2Vzcyhjb25z
dCBjaGFyICosIGludCk7CnVuc2lnbmVkIGludAogIGFsYXJtKHVuc2lnbmVkIGludCk7CmludCBj
aGRpcihjb25zdCBjaGFyICopOwppbnQgY2hvd24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3Qp
OwppbnQgY2xvc2UoaW50KSBfX2FzbSgiXyIgImNsb3NlIiAiJFVOSVgyMDAzIik7CnNpemVfdCBj
b25mc3RyKGludCwgY2hhciAqLCBzaXplX3QpIF9fYXNtKCJfIiAiY29uZnN0ciIgIiRVTklYMjAw
MyIpOwpjaGFyICpjcnlwdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKmN0ZXJt
aWQoY2hhciAqKTsKaW50IGR1cChpbnQpOwppbnQgZHVwMihpbnQsIGludCk7Cgp2b2lkIGVuY3J5
cHQoY2hhciAqLCBpbnQpIF9fYXNtKCJfIiAiZW5jcnlwdCIgIiRVTklYMjAwMyIpOwoKCgppbnQg
ZXhlY2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBleGVjbGUoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBleGVjbHAoY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICosIC4uLik7CmludCBleGVjdihjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqKTsK
aW50IGV4ZWN2ZShjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqLCBjaGFyICogY29uc3QgKik7
CmludCBleGVjdnAoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKik7CmludCBmY2hvd24oaW50
LCB1aWRfdCwgZ2lkX3QpOwppbnQgZmNoZGlyKGludCk7CnBpZF90IGZvcmsodm9pZCk7Cmxvbmcg
ZnBhdGhjb25mKGludCwgaW50KTsKaW50IGZzeW5jKGludCkgX19hc20oIl8iICJmc3luYyIgIiRV
TklYMjAwMyIpOwppbnQgZnRydW5jYXRlKGludCwgb2ZmX3QpOwpjaGFyICpnZXRjd2QoY2hhciAq
LCBzaXplX3QpOwpnaWRfdCBnZXRlZ2lkKHZvaWQpOwp1aWRfdCBnZXRldWlkKHZvaWQpOwpnaWRf
dCBnZXRnaWQodm9pZCk7CmludCBnZXRncm91cHMoaW50LCBnaWRfdCBbXSk7CmxvbmcgZ2V0aG9z
dGlkKHZvaWQpOwppbnQgZ2V0aG9zdG5hbWUoY2hhciAqLCBzaXplX3QpOwpjaGFyICpnZXRsb2dp
bih2b2lkKTsKaW50IGdldGxvZ2luX3IoY2hhciAqLCBzaXplX3QpOwppbnQgZ2V0b3B0KGludCwg
Y2hhciAqIGNvbnN0IFtdLCBjb25zdCBjaGFyICopIF9fYXNtKCJfIiAiZ2V0b3B0IiAiJFVOSVgy
MDAzIik7CnBpZF90IGdldHBnaWQocGlkX3QpOwpwaWRfdCBnZXRwZ3JwKHZvaWQpOwpwaWRfdCBn
ZXRwaWQodm9pZCk7CnBpZF90IGdldHBwaWQodm9pZCk7CnBpZF90IGdldHNpZChwaWRfdCk7CnVp
ZF90IGdldHVpZCh2b2lkKTsKY2hhciAqZ2V0d2QoY2hhciAqKTsKaW50IGlzYXR0eShpbnQpOwpp
bnQgbGNob3duKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KSBfX2FzbSgiXyIgImxjaG93biIg
IiRVTklYMjAwMyIpOwppbnQgbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBs
b2NrZihpbnQsIGludCwgb2ZmX3QpIF9fYXNtKCJfIiAibG9ja2YiICIkVU5JWDIwMDMiKTsKb2Zm
X3QgbHNlZWsoaW50LCBvZmZfdCwgaW50KTsKaW50IG5pY2UoaW50KSBfX2FzbSgiXyIgIm5pY2Ui
ICIkVU5JWDIwMDMiKTsKbG9uZyBwYXRoY29uZihjb25zdCBjaGFyICosIGludCk7CmludCBwYXVz
ZSh2b2lkKSBfX2FzbSgiXyIgInBhdXNlIiAiJFVOSVgyMDAzIik7CmludCBwaXBlKGludCBbMl0p
Owpzc2l6ZV90IHByZWFkKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90KSBfX2FzbSgiXyIgInBy
ZWFkIiAiJFVOSVgyMDAzIik7CnNzaXplX3QgcHdyaXRlKGludCwgY29uc3Qgdm9pZCAqLCBzaXpl
X3QsIG9mZl90KSBfX2FzbSgiXyIgInB3cml0ZSIgIiRVTklYMjAwMyIpOwpzc2l6ZV90IHJlYWQo
aW50LCB2b2lkICosIHNpemVfdCkgX19hc20oIl8iICJyZWFkIiAiJFVOSVgyMDAzIik7CnNzaXpl
X3QgcmVhZGxpbmsoY29uc3QgY2hhciAqICwgY2hhciAqICwgc2l6ZV90KTsKaW50IHJtZGlyKGNv
bnN0IGNoYXIgKik7CmludCBzZXRlZ2lkKGdpZF90KTsKaW50IHNldGV1aWQodWlkX3QpOwppbnQg
c2V0Z2lkKGdpZF90KTsKaW50IHNldHBnaWQocGlkX3QsIHBpZF90KTsKCnBpZF90IHNldHBncnAo
dm9pZCkgX19hc20oIl8iICJzZXRwZ3JwIiAiJFVOSVgyMDAzIik7CgoKCmludCBzZXRyZWdpZChn
aWRfdCwgZ2lkX3QpIF9fYXNtKCJfIiAic2V0cmVnaWQiICIkVU5JWDIwMDMiKTsKaW50IHNldHJl
dWlkKHVpZF90LCB1aWRfdCkgX19hc20oIl8iICJzZXRyZXVpZCIgIiRVTklYMjAwMyIpOwpwaWRf
dCBzZXRzaWQodm9pZCk7CmludCBzZXR1aWQodWlkX3QpOwp1bnNpZ25lZCBpbnQKICBzbGVlcCh1
bnNpZ25lZCBpbnQpIF9fYXNtKCJfIiAic2xlZXAiICIkVU5JWDIwMDMiKTsKdm9pZCBzd2FiKGNv
bnN0IHZvaWQgKiAsIHZvaWQgKiAsIHNzaXplX3QpOwppbnQgc3ltbGluayhjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7CnZvaWQgc3luYyh2b2lkKTsKbG9uZyBzeXNjb25mKGludCk7CnBpZF90
IHRjZ2V0cGdycChpbnQpOwppbnQgdGNzZXRwZ3JwKGludCwgcGlkX3QpOwppbnQgdHJ1bmNhdGUo
Y29uc3QgY2hhciAqLCBvZmZfdCk7CmNoYXIgKnR0eW5hbWUoaW50KTsKCmludCB0dHluYW1lX3Io
aW50LCBjaGFyICosIHNpemVfdCkgX19hc20oIl8iICJ0dHluYW1lX3IiICIkVU5JWDIwMDMiKTsK
CgoKdXNlY29uZHNfdAogIHVhbGFybSh1c2Vjb25kc190LCB1c2Vjb25kc190KTsKaW50IHVubGlu
ayhjb25zdCBjaGFyICopOwppbnQgdXNsZWVwKHVzZWNvbmRzX3QpIF9fYXNtKCJfIiAidXNsZWVw
IiAiJFVOSVgyMDAzIik7CnBpZF90IHZmb3JrKHZvaWQpOwpzc2l6ZV90IHdyaXRlKGludCwgY29u
c3Qgdm9pZCAqLCBzaXplX3QpIF9fYXNtKCJfIiAid3JpdGUiICIkVU5JWDIwMDMiKTsKCmV4dGVy
biBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgNzggIi91c3IvaW5jbHVkZS9zeXMv
c2VsZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMuaCIgMSAzIDQKIyAx
ODMgIi91c3IvaW5jbHVkZS9zeXMvX3N0cnVjdHMuaCIgMyA0CmV4dGVybiAiQyIgewp0eXBlZGVm
IHN0cnVjdCBmZF9zZXQgewogX19pbnQzMl90IGZkc19iaXRzWygoKDEwMjQpICsgKCgoc2l6ZW9m
KF9faW50MzJfdCkgKiA4KSkgLSAxKSkgLyAoKHNpemVvZihfX2ludDMyX3QpICogOCkpKV07Cn0g
ZmRfc2V0Owp9CgoKc3RhdGljIGlubGluZSBpbnQKX19kYXJ3aW5fZmRfaXNzZXQoaW50IF9uLCBz
dHJ1Y3QgZmRfc2V0ICpfcCkKewogcmV0dXJuIChfcC0+ZmRzX2JpdHNbX24vKHNpemVvZihfX2lu
dDMyX3QpICogOCldICYgKDE8PChfbiAlIChzaXplb2YoX19pbnQzMl90KSAqIDgpKSkpOwp9CiMg
NzkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMgOTIgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIF9fZGFyd2luX3N1c2Vjb25kc190IHN1c2Vjb25kc190
OwojIDEzNCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiAiQyIgewoKCmlu
dCBwc2VsZWN0KGludCwgZmRfc2V0ICogLCBmZF9zZXQgKiAsCiAgZmRfc2V0ICogLCBjb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKiAsCiAgY29uc3Qgc2lnc2V0X3QgKiApCgoKCgoKCiAgX19hc20oIl8i
ICJwc2VsZWN0IiAiJFVOSVgyMDAzIikKCgogIDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvX3Nl
bGVjdC5oIiAxIDMgNAojIDM5ICIvdXNyL2luY2x1ZGUvc3lzL19zZWxlY3QuaCIgMyA0CmludCBz
ZWxlY3QoaW50LCBmZF9zZXQgKiAsIGZkX3NldCAqICwKICBmZF9zZXQgKiAsIHN0cnVjdCB0aW1l
dmFsICogKQoKCgoKCgogIF9fYXNtKCJfIiAic2VsZWN0IiAiJFVOSVgyMDAzIikKCgogIDsKIyAx
NTMgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0Cgp9CiMgNTE2ICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDIgMyA0Cgp2b2lkIF9FeGl0KGludCkgX19hdHRyaWJ1dGVfXygoX19ub3Jl
dHVybl9fKSk7CmludCBhY2Nlc3N4X25wKGNvbnN0IHN0cnVjdCBhY2Nlc3N4X2Rlc2NyaXB0b3Ig
Kiwgc2l6ZV90LCBpbnQgKiwgdWlkX3QpOwppbnQgYWNjdChjb25zdCBjaGFyICopOwppbnQgYWRk
X3Byb2ZpbChjaGFyICosIHNpemVfdCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKdm9p
ZCAqYnJrKGNvbnN0IHZvaWQgKik7CmludCBjaHJvb3QoY29uc3QgY2hhciAqKTsKdm9pZCBlbmR1
c2Vyc2hlbGwodm9pZCk7CmludCBleGVjdlAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNo
YXIgKiBjb25zdCAqKTsKY2hhciAqZmZsYWdzdG9zdHIodW5zaWduZWQgbG9uZyk7CmludCBnZXRk
dGFibGVzaXplKHZvaWQpOwppbnQgZ2V0ZG9tYWlubmFtZShjaGFyICosIGludCk7CmludCBnZXRn
cm91cGxpc3QoY29uc3QgY2hhciAqLCBpbnQsIGludCAqLCBpbnQgKik7Cm1vZGVfdCBnZXRtb2Rl
KGNvbnN0IHZvaWQgKiwgbW9kZV90KTsKaW50IGdldHBhZ2VzaXplKHZvaWQpIF9fYXR0cmlidXRl
X18oKF9fY29uc3RfXykpOwpjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmludCBnZXRwZWVy
ZWlkKGludCwgdWlkX3QgKiwgZ2lkX3QgKik7CmludCBnZXRwZ2lkKHBpZF90IF9waWQpOwppbnQg
Z2V0c2dyb3Vwc19ucChpbnQgKiwgdXVpZF90KTsKaW50IGdldHNpZChwaWRfdCBfcGlkKTsKY2hh
ciAqZ2V0dXNlcnNoZWxsKHZvaWQpOwppbnQgZ2V0d2dyb3Vwc19ucChpbnQgKiwgdXVpZF90KTsK
aW50IGluaXRncm91cHMoY29uc3QgY2hhciAqLCBpbnQpOwppbnQgaXJ1c2Vyb2sodW5zaWduZWQg
bG9uZywgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBpcnVzZXJva19zYShj
b25zdCB2b2lkICosIGludCwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBp
c3NldHVnaWQodm9pZCk7CmNoYXIgKm1rZHRlbXAoY2hhciAqKTsKaW50IG1rbm9kKGNvbnN0IGNo
YXIgKiwgbW9kZV90LCBkZXZfdCk7CmludCBta3N0ZW1wKGNoYXIgKik7CmludCBta3N0ZW1wcyhj
aGFyICosIGludCk7CmNoYXIgKm1rdGVtcChjaGFyICopOwppbnQgbmZzc3ZjKGludCwgdm9pZCAq
KTsKaW50IHByb2ZpbChjaGFyICosIHNpemVfdCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50
KTsKaW50IHB0aHJlYWRfc2V0dWdpZF9ucCh1aWRfdCwgZ2lkX3QpOwppbnQgcHRocmVhZF9nZXR1
Z2lkX25wKCB1aWRfdCAqLCBnaWRfdCAqKTsKaW50IHJjbWQoY2hhciAqKiwgaW50LCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQgKik7CmludCByY21kX2FmKGNo
YXIgKiosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50
ICosCiAgaW50KTsKaW50IHJlYm9vdChpbnQpOwppbnQgcmV2b2tlKGNvbnN0IGNoYXIgKik7Cmlu
dCBycmVzdnBvcnQoaW50ICopOwppbnQgcnJlc3Zwb3J0X2FmKGludCAqLCBpbnQpOwppbnQgcnVz
ZXJvayhjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwp2b2lk
ICpzYnJrKGludCk7CmludCBzZXRkb21haW5uYW1lKGNvbnN0IGNoYXIgKiwgaW50KTsKaW50IHNl
dGdyb3VwcyhpbnQsIGNvbnN0IGdpZF90ICopOwp2b2lkIHNldGhvc3RpZChsb25nKTsKaW50IHNl
dGhvc3RuYW1lKGNvbnN0IGNoYXIgKiwgaW50KTsKCnZvaWQgc2V0a2V5KGNvbnN0IGNoYXIgKikg
X19hc20oIl8iICJzZXRrZXkiICIkVU5JWDIwMDMiKTsKCgoKaW50IHNldGxvZ2luKGNvbnN0IGNo
YXIgKik7CnZvaWQgKnNldG1vZGUoY29uc3QgY2hhciAqKTsKaW50IHNldHJnaWQoZ2lkX3QpOwpp
bnQgc2V0cnVpZCh1aWRfdCk7CmludCBzZXRzZ3JvdXBzX25wKGludCwgY29uc3QgdXVpZF90KTsK
dm9pZCBzZXR1c2Vyc2hlbGwodm9pZCk7CmludCBzZXR3Z3JvdXBzX25wKGludCwgY29uc3QgdXVp
ZF90KTsKaW50IHN0cnRvZmZsYWdzKGNoYXIgKiosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQg
bG9uZyAqKTsKaW50IHN3YXBvbihjb25zdCBjaGFyICopOwppbnQgc3lzY2FsbChpbnQsIC4uLik7
CmludCB0dHlzbG90KHZvaWQpOwppbnQgdW5kZWxldGUoY29uc3QgY2hhciAqKTsKaW50IHVud2hp
dGVvdXQoY29uc3QgY2hhciAqKTsKdm9pZCAqdmFsbG9jKHNpemVfdCk7CgpleHRlcm4gY2hhciAq
c3Vib3B0YXJnOwppbnQgZ2V0c3Vib3B0KGNoYXIgKiosIGNoYXIgKiBjb25zdCAqLCBjaGFyICoq
KTsKIyA1OTcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmludCBnZXRhdHRybGlzdChjb25z
dCBjaGFyKix2b2lkKix2b2lkKixzaXplX3QsdW5zaWduZWQgbG9uZykgX19hc20oIl8iICJnZXRh
dHRybGlzdCIgIiRVTklYMjAwMyIpOwppbnQgc2V0YXR0cmxpc3QoY29uc3QgY2hhciosdm9pZCos
dm9pZCosc2l6ZV90LHVuc2lnbmVkIGxvbmcpIF9fYXNtKCJfIiAic2V0YXR0cmxpc3QiICIkVU5J
WDIwMDMiKTsKaW50IGV4Y2hhbmdlZGF0YShjb25zdCBjaGFyKixjb25zdCBjaGFyKix1bnNpZ25l
ZCBsb25nKTsKaW50IGdldGRpcmVudHJpZXNhdHRyKGludCx2b2lkKix2b2lkKixzaXplX3QsdW5z
aWduZWQgbG9uZyosdW5zaWduZWQgbG9uZyosdW5zaWduZWQgbG9uZyosdW5zaWduZWQgbG9uZyk7
CmludCBzZWFyY2hmcyhjb25zdCBjaGFyKix2b2lkKix2b2lkKix1bnNpZ25lZCBsb25nLHVuc2ln
bmVkIGxvbmcsdm9pZCopOwoKaW50IGZzY3RsKGNvbnN0IGNoYXIgKix1bnNpZ25lZCBsb25nLHZv
aWQqLHVuc2lnbmVkIGxvbmcpOwoKCmV4dGVybiBpbnQgb3B0cmVzZXQ7CgoKfQojIDQ1ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFyd2luOS9iaXRzL2d0aHItZGVmYXVs
dC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYg
cHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3Qg
X19ndGhyZWFkX211dGV4X3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9yZWN1
cnNpdmVfbXV0ZXhfdDsKIyAxMTYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBs
ZS1kYXJ3aW45L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhy
ZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIDE7Cn0KIyA0NzMgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvcG93ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3Rh
dGljIGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZv
aWQgKCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0
dXJuIHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9Cgpz
dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICpr
ZXksIHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUg
KGtleSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChf
X2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsK
fQoKc3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRf
a2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRp
YyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwg
Y29uc3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRy
KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9t
dXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4g
cHRocmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRp
YyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAq
bXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRf
bXV0ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5s
aW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgp
CnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhf
dW5sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCgpzdGF0aWMgaW5saW5lIGlu
dApfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2luaXRfZnVuY3Rpb24gKF9fZ3RocmVhZF9yZWN1
cnNpdmVfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAg
ewogICAgICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7CiAgICAgIGludCByOwoKICAgICAgciA9
IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKCZhdHRyKTsKICAgICAgaWYgKCFyKQogciA9IHB0aHJl
YWRfbXV0ZXhhdHRyX3NldHR5cGUgKCZhdHRyLCAyKTsKICAgICAgaWYgKCFyKQogciA9IHB0aHJl
YWRfbXV0ZXhfaW5pdCAobXV0ZXgsICZhdHRyKTsKICAgICAgaWYgKCFyKQogciA9IHB0aHJlYWRf
bXV0ZXhhdHRyX2Rlc3Ryb3kgKCZhdHRyKTsKICAgICAgcmV0dXJuIHI7CiAgICB9Cn0KCgpzdGF0
aWMgaW5saW5lIGludApfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X2xvY2sgKF9fZ3RocmVhZF9y
ZWN1cnNpdmVfbXV0ZXhfdCAqbXV0ZXgpCnsKICByZXR1cm4gX19ndGhyZWFkX211dGV4X2xvY2sg
KG11dGV4KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3JlY3Vyc2l2ZV9tdXRleF90
cnlsb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3QgKm11dGV4KQp7CiAgcmV0dXJuIF9f
Z3RocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro
cmVhZF9yZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfcmVjdXJzaXZlX211dGV4X3Qg
Km11dGV4KQp7CiAgcmV0dXJuIF9fZ3RocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKfQojIDEx
NSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9ndGhy
LmgiIDIgMwoKCgoKCgoKI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwb3AKIyAzOCAiL3Vzci9pbmNs
dWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9jKytpby5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKICB0
eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlw
ZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jv
b2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4
MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0
ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5p
dGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9
IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgw
MDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFz
ZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0
ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
aW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDcgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvaW9zZndkIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQu
MC4wL2NjdHlwZSIgMSAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY2N0eXBlIiAzCiAg
ICAgICAKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jY3R5cGUiIDMKCgojIDEgIi91c3Iv
aW5jbHVkZS9jdHlwZS5oIiAxIDMgNAojIDY5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMg
MSAiL3Vzci9pbmNsdWRlL3J1bmV0eXBlLmgiIDEgMyA0CiMgNzAgIi91c3IvaW5jbHVkZS9ydW5l
dHlwZS5oIiAzIDQKdHlwZWRlZiBfX2Rhcndpbl93aW50X3Qgd2ludF90OwojIDgxICIvdXNyL2lu
Y2x1ZGUvcnVuZXR5cGUuaCIgMyA0CnR5cGVkZWYgc3RydWN0IHsKIF9fZGFyd2luX3J1bmVfdCBf
X21pbjsKIF9fZGFyd2luX3J1bmVfdCBfX21heDsKIF9fZGFyd2luX3J1bmVfdCBfX21hcDsKIF9f
dWludDMyX3QgKl9fdHlwZXM7Cn0gX1J1bmVFbnRyeTsKCnR5cGVkZWYgc3RydWN0IHsKIGludCBf
X25yYW5nZXM7CiBfUnVuZUVudHJ5ICpfX3JhbmdlczsKfSBfUnVuZVJhbmdlOwoKdHlwZWRlZiBz
dHJ1Y3QgewogY2hhciBfX25hbWVbMTRdOwogX191aW50MzJfdCBfX21hc2s7Cn0gX1J1bmVDaGFy
Q2xhc3M7Cgp0eXBlZGVmIHN0cnVjdCB7CiBjaGFyIF9fbWFnaWNbOF07CiBjaGFyIF9fZW5jb2Rp
bmdbMzJdOwoKIF9fZGFyd2luX3J1bmVfdCAoKl9fc2dldHJ1bmUpKGNvbnN0IGNoYXIgKiwgX19k
YXJ3aW5fc2l6ZV90LCBjaGFyIGNvbnN0ICoqKTsKIGludCAoKl9fc3B1dHJ1bmUpKF9fZGFyd2lu
X3J1bmVfdCwgY2hhciAqLCBfX2Rhcndpbl9zaXplX3QsIGNoYXIgKiopOwogX19kYXJ3aW5fcnVu
ZV90IF9faW52YWxpZF9ydW5lOwoKIF9fdWludDMyX3QgX19ydW5ldHlwZVsoMSA8PDggKV07CiBf
X2Rhcndpbl9ydW5lX3QgX19tYXBsb3dlclsoMSA8PDggKV07CiBfX2Rhcndpbl9ydW5lX3QgX19t
YXB1cHBlclsoMSA8PDggKV07CgoKCgoKCiBfUnVuZVJhbmdlIF9fcnVuZXR5cGVfZXh0OwogX1J1
bmVSYW5nZSBfX21hcGxvd2VyX2V4dDsKIF9SdW5lUmFuZ2UgX19tYXB1cHBlcl9leHQ7Cgogdm9p
ZCAqX192YXJpYWJsZTsKIGludCBfX3ZhcmlhYmxlX2xlbjsKCgoKCiBpbnQgX19uY2hhcmNsYXNz
ZXM7CiBfUnVuZUNoYXJDbGFzcyAqX19jaGFyY2xhc3NlczsKfSBfUnVuZUxvY2FsZTsKCgoKZXh0
ZXJuICJDIiB7CmV4dGVybiBfUnVuZUxvY2FsZSBfRGVmYXVsdFJ1bmVMb2NhbGU7CmV4dGVybiBf
UnVuZUxvY2FsZSAqX0N1cnJlbnRSdW5lTG9jYWxlOwp9CiMgNzAgIi91c3IvaW5jbHVkZS9jdHlw
ZS5oIiAyIDMgNAojIDE0NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsK
dW5zaWduZWQgbG9uZyBfX19ydW5ldHlwZShfX2Rhcndpbl9jdF9ydW5lX3QpOwpfX2Rhcndpbl9j
dF9ydW5lX3QgX19fdG9sb3dlcihfX2Rhcndpbl9jdF9ydW5lX3QpOwpfX2Rhcndpbl9jdF9ydW5l
X3QgX19fdG91cHBlcihfX2Rhcndpbl9jdF9ydW5lX3QpOwp9CgpzdGF0aWMgaW5saW5lIGludApp
c2FzY2lpKGludCBfYykKewogcmV0dXJuICgoX2MgJiB+MHg3RikgPT0gMCk7Cn0KIyAxNjQgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuICJDIiB7CmludCBfX21hc2tydW5lKF9fZGFy
d2luX2N0X3J1bmVfdCwgdW5zaWduZWQgbG9uZyk7Cn0KCgpzdGF0aWMgaW5saW5lIGludApfX2lz
dHlwZShfX2Rhcndpbl9jdF9ydW5lX3QgX2MsIHVuc2lnbmVkIGxvbmcgX2YpCnsKCgoKIHJldHVy
biAoaXNhc2NpaShfYykgPyAhIShfRGVmYXVsdFJ1bmVMb2NhbGUuX19ydW5ldHlwZVtfY10gJiBf
ZikKICA6ICEhX19tYXNrcnVuZShfYywgX2YpKTsKCn0KCnN0YXRpYyBpbmxpbmUgX19kYXJ3aW5f
Y3RfcnVuZV90Cl9faXNjdHlwZShfX2Rhcndpbl9jdF9ydW5lX3QgX2MsIHVuc2lnbmVkIGxvbmcg
X2YpCnsKCgoKIHJldHVybiAoX2MgPCAwIHx8IF9jID49ICgxIDw8OCApKSA/IDAgOgogICEhKF9E
ZWZhdWx0UnVuZUxvY2FsZS5fX3J1bmV0eXBlW19jXSAmIF9mKTsKCn0KIyAyMDQgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuICJDIiB7Cl9fZGFyd2luX2N0X3J1bmVfdCBfX3RvdXBw
ZXIoX19kYXJ3aW5fY3RfcnVuZV90KTsKX19kYXJ3aW5fY3RfcnVuZV90IF9fdG9sb3dlcihfX2Rh
cndpbl9jdF9ydW5lX3QpOwp9CgoKc3RhdGljIGlubGluZSBpbnQKX193Y3dpZHRoKF9fZGFyd2lu
X2N0X3J1bmVfdCBfYykKewogdW5zaWduZWQgaW50IF94OwoKIGlmIChfYyA9PSAwKQogIHJldHVy
biAoMCk7CiBfeCA9ICh1bnNpZ25lZCBpbnQpX19tYXNrcnVuZShfYywgMHhlMDAwMDAwMEx8MHgw
MDA0MDAwMEwpOwogaWYgKChfeCAmIDB4ZTAwMDAwMDBMKSAhPSAwKQogIHJldHVybiAoKF94ICYg
MHhlMDAwMDAwMEwpID4+IDMwKTsKIHJldHVybiAoKF94ICYgMHgwMDA0MDAwMEwpICE9IDAgPyAx
IDogLTEpOwp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgaW50CmlzYWxudW0oaW50IF9jKQp7CiByZXR1
cm4gKF9faXN0eXBlKF9jLCAweDAwMDAwMTAwTHwweDAwMDAwNDAwTCkpOwp9CgpzdGF0aWMgaW5s
aW5lIGludAppc2FscGhhKGludCBfYykKewogcmV0dXJuIChfX2lzdHlwZShfYywgMHgwMDAwMDEw
MEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKaXNibGFuayhpbnQgX2MpCnsKIHJldHVybiAoX19p
c3R5cGUoX2MsIDB4MDAwMjAwMDBMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50CmlzY250cmwoaW50
IF9jKQp7CiByZXR1cm4gKF9faXN0eXBlKF9jLCAweDAwMDAwMjAwTCkpOwp9CgoKc3RhdGljIGlu
bGluZSBpbnQKaXNkaWdpdChpbnQgX2MpCnsKIHJldHVybiAoX19pc2N0eXBlKF9jLCAweDAwMDAw
NDAwTCkpOwp9CgpzdGF0aWMgaW5saW5lIGludAppc2dyYXBoKGludCBfYykKewogcmV0dXJuIChf
X2lzdHlwZShfYywgMHgwMDAwMDgwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKaXNsb3dlcihp
bnQgX2MpCnsKIHJldHVybiAoX19pc3R5cGUoX2MsIDB4MDAwMDEwMDBMKSk7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50CmlzcHJpbnQoaW50IF9jKQp7CiByZXR1cm4gKF9faXN0eXBlKF9jLCAweDAwMDQw
MDAwTCkpOwp9CgpzdGF0aWMgaW5saW5lIGludAppc3B1bmN0KGludCBfYykKewogcmV0dXJuIChf
X2lzdHlwZShfYywgMHgwMDAwMjAwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKaXNzcGFjZShp
bnQgX2MpCnsKIHJldHVybiAoX19pc3R5cGUoX2MsIDB4MDAwMDQwMDBMKSk7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50CmlzdXBwZXIoaW50IF9jKQp7CiByZXR1cm4gKF9faXN0eXBlKF9jLCAweDAwMDA4
MDAwTCkpOwp9CgoKc3RhdGljIGlubGluZSBpbnQKaXN4ZGlnaXQoaW50IF9jKQp7CiByZXR1cm4g
KF9faXNjdHlwZShfYywgMHgwMDAxMDAwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKdG9hc2Np
aShpbnQgX2MpCnsKIHJldHVybiAoX2MgJiAweDdGKTsKfQoKc3RhdGljIGlubGluZSBpbnQKdG9s
b3dlcihpbnQgX2MpCnsKICAgICAgICByZXR1cm4gKF9fdG9sb3dlcihfYykpOwp9CgpzdGF0aWMg
aW5saW5lIGludAp0b3VwcGVyKGludCBfYykKewogICAgICAgIHJldHVybiAoX190b3VwcGVyKF9j
KSk7Cn0KCgpzdGF0aWMgaW5saW5lIGludApkaWdpdHRvaW50KGludCBfYykKewogcmV0dXJuIChf
X21hc2tydW5lKF9jLCAweDBGKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50CmlzaGV4bnVtYmVyKGlu
dCBfYykKewogcmV0dXJuIChfX2lzdHlwZShfYywgMHgwMDAxMDAwMEwpKTsKfQoKc3RhdGljIGlu
bGluZSBpbnQKaXNpZGVvZ3JhbShpbnQgX2MpCnsKIHJldHVybiAoX19pc3R5cGUoX2MsIDB4MDAw
ODAwMDBMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50CmlzbnVtYmVyKGludCBfYykKewogcmV0dXJu
IChfX2lzdHlwZShfYywgMHgwMDAwMDQwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKaXNwaG9u
b2dyYW0oaW50IF9jKQp7CiByZXR1cm4gKF9faXN0eXBlKF9jLCAweDAwMjAwMDAwTCkpOwp9Cgpz
dGF0aWMgaW5saW5lIGludAppc3J1bmUoaW50IF9jKQp7CiByZXR1cm4gKF9faXN0eXBlKF9jLCAw
eEZGRkZGRkYwTCkpOwp9CgpzdGF0aWMgaW5saW5lIGludAppc3NwZWNpYWwoaW50IF9jKQp7CiBy
ZXR1cm4gKF9faXN0eXBlKF9jLCAweDAwMTAwMDAwTCkpOwp9CiMgNTAgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvY2N0eXBlIiAyIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jY3R5cGUi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsK
ICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsK
ICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsK
ICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7
CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ4ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRz
L3N0cmluZ2Z3ZC5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0cmlu
Z2Z3ZC5oIiAzCiAgICAgICAKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0cmlu
Z2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0
IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFs
bG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdGVtcGxhdGU8PiBz
dHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0
cmluZzsKCgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQ5ICIvdXNyL2luY2x1ZGUv
YysrLzQuMC4wL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3Bv
c3R5cGVzLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvcG9zdHlwZXMu
aCIgMwogICAgICAgCiMgNDUgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9wb3N0eXBlcy5o
IiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3djaGFyIiAxIDMKIyA0NyAiL3Vzci9p
bmNsdWRlL2MrKy80LjAuMC9jd2NoYXIiIDMKICAgICAgIAojIDQ4ICIvdXNyL2luY2x1ZGUvYysr
LzQuMC4wL2N3Y2hhciIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY3RpbWUiIDEg
MwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2N0aW1lIiAzCiAgICAgICAKIyA0OCAiL3Vz
ci9pbmNsdWRlL2MrKy80LjAuMC9jdGltZSIgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRp
bWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7
CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1
c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVz
aW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jd2NoYXIiIDIg
MwoKCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgODMgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzIDQKdHlwZWRlZiBfX2Rhcndpbl9tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDExMSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi91c3IvbGliL2djYy9wb3dlcnBjLWFwcGxl
LWRhcndpbjkvNC4yLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzIDQKIyA0MyAiL3Vzci9saWIvZ2Nj
L3Bvd2VycGMtYXBwbGUtZGFyd2luOS80LjIuMS9pbmNsdWRlL3N0ZGFyZy5oIiAzIDQKdHlwZWRl
ZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAxMTIgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL193Y3R5cGUuaCIgMSAzIDQKIyA1MiAi
L3Vzci9pbmNsdWRlL193Y3R5cGUuaCIgMyA0CnR5cGVkZWYgX19kYXJ3aW5fd2N0eXBlX3Qgd2N0
eXBlX3Q7CiMgNzEgIi91c3IvaW5jbHVkZS9fd2N0eXBlLmgiIDMgNApzdGF0aWMgaW5saW5lIGlu
dAppc3dhbG51bSh3aW50X3QgX3djKQp7CiByZXR1cm4gKF9faXN0eXBlKF93YywgMHgwMDAwMDEw
MEx8MHgwMDAwMDQwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKaXN3YWxwaGEod2ludF90IF93
YykKewogcmV0dXJuIChfX2lzdHlwZShfd2MsIDB4MDAwMDAxMDBMKSk7Cn0KCnN0YXRpYyBpbmxp
bmUgaW50Cmlzd2NudHJsKHdpbnRfdCBfd2MpCnsKIHJldHVybiAoX19pc3R5cGUoX3djLCAweDAw
MDAwMjAwTCkpOwp9CgpzdGF0aWMgaW5saW5lIGludAppc3djdHlwZSh3aW50X3QgX3djLCB3Y3R5
cGVfdCBfY2hhcmNsYXNzKQp7CiByZXR1cm4gKF9faXN0eXBlKF93YywgX2NoYXJjbGFzcykpOwp9
CgpzdGF0aWMgaW5saW5lIGludAppc3dkaWdpdCh3aW50X3QgX3djKQp7CiByZXR1cm4gKF9faXNj
dHlwZShfd2MsIDB4MDAwMDA0MDBMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cmlzd2dyYXBoKHdp
bnRfdCBfd2MpCnsKIHJldHVybiAoX19pc3R5cGUoX3djLCAweDAwMDAwODAwTCkpOwp9CgpzdGF0
aWMgaW5saW5lIGludAppc3dsb3dlcih3aW50X3QgX3djKQp7CiByZXR1cm4gKF9faXN0eXBlKF93
YywgMHgwMDAwMTAwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQKaXN3cHJpbnQod2ludF90IF93
YykKewogcmV0dXJuIChfX2lzdHlwZShfd2MsIDB4MDAwNDAwMDBMKSk7Cn0KCnN0YXRpYyBpbmxp
bmUgaW50Cmlzd3B1bmN0KHdpbnRfdCBfd2MpCnsKIHJldHVybiAoX19pc3R5cGUoX3djLCAweDAw
MDAyMDAwTCkpOwp9CgpzdGF0aWMgaW5saW5lIGludAppc3dzcGFjZSh3aW50X3QgX3djKQp7CiBy
ZXR1cm4gKF9faXN0eXBlKF93YywgMHgwMDAwNDAwMEwpKTsKfQoKc3RhdGljIGlubGluZSBpbnQK
aXN3dXBwZXIod2ludF90IF93YykKewogcmV0dXJuIChfX2lzdHlwZShfd2MsIDB4MDAwMDgwMDBM
KSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cmlzd3hkaWdpdCh3aW50X3QgX3djKQp7CiByZXR1cm4g
KF9faXNjdHlwZShfd2MsIDB4MDAwMTAwMDBMKSk7Cn0KCnN0YXRpYyBpbmxpbmUgd2ludF90CnRv
d2xvd2VyKHdpbnRfdCBfd2MpCnsKICAgICAgICByZXR1cm4gKF9fdG9sb3dlcihfd2MpKTsKfQoK
c3RhdGljIGlubGluZSB3aW50X3QKdG93dXBwZXIod2ludF90IF93YykKewogICAgICAgIHJldHVy
biAoX190b3VwcGVyKF93YykpOwp9CiMgMTc2ICIvdXNyL2luY2x1ZGUvX3djdHlwZS5oIiAzIDQK
ZXh0ZXJuICJDIiB7CndjdHlwZV90CiB3Y3R5cGUoY29uc3QgY2hhciAqKTsKfQojIDExNSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKd2ludF90IGJ0b3djKGludCk7
CndpbnRfdCBmZ2V0d2MoRklMRSAqKTsKd2NoYXJfdCAqZmdldHdzKHdjaGFyX3QgKiAsIGludCwg
RklMRSAqICk7CndpbnRfdCBmcHV0d2Mod2NoYXJfdCwgRklMRSAqKTsKaW50IGZwdXR3cyhjb25z
dCB3Y2hhcl90ICogLCBGSUxFICogKTsKaW50IGZ3aWRlKEZJTEUgKiwgaW50KTsKaW50IGZ3cHJp
bnRmKEZJTEUgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIC4uLikgX19hc20oIl8iICJmd3ByaW50ZiIg
IiRMREJMMTI4Iik7CmludCBmd3NjYW5mKEZJTEUgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIC4uLikg
X19hc20oIl8iICJmd3NjYW5mIiAiJExEQkwxMjgiKTsKd2ludF90IGdldHdjKEZJTEUgKik7Cndp
bnRfdCBnZXR3Y2hhcih2b2lkKTsKc2l6ZV90IG1icmxlbihjb25zdCBjaGFyICogLCBzaXplX3Qs
IG1ic3RhdGVfdCAqICk7CnNpemVfdCBtYnJ0b3djKHdjaGFyX3QgKiAsIGNvbnN0IGNoYXIgKiAs
IHNpemVfdCwKICAgICBtYnN0YXRlX3QgKiApOwppbnQgbWJzaW5pdChjb25zdCBtYnN0YXRlX3Qg
Kik7CnNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqICwgY29uc3QgY2hhciAqKiAsIHNpemVfdCwK
ICAgICBtYnN0YXRlX3QgKiApOwp3aW50X3QgcHV0d2Mod2NoYXJfdCwgRklMRSAqKTsKd2ludF90
IHB1dHdjaGFyKHdjaGFyX3QpOwppbnQgc3dwcmludGYod2NoYXJfdCAqICwgc2l6ZV90LCBjb25z
dCB3Y2hhcl90ICogLAogICAgIC4uLikgX19hc20oIl8iICJzd3ByaW50ZiIgIiRMREJMMTI4Iik7
CmludCBzd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiAsIC4uLikgX19h
c20oIl8iICJzd3NjYW5mIiAiJExEQkwxMjgiKTsKd2ludF90IHVuZ2V0d2Mod2ludF90LCBGSUxF
ICopOwppbnQgdmZ3cHJpbnRmKEZJTEUgKiAsIGNvbnN0IHdjaGFyX3QgKiAsCiAgICAgX19kYXJ3
aW5fdmFfbGlzdCkgX19hc20oIl8iICJ2ZndwcmludGYiICIkTERCTDEyOCIpOwppbnQgdnN3cHJp
bnRmKHdjaGFyX3QgKiAsIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqICwKICAgICBfX2Rhcndpbl92
YV9saXN0KSBfX2FzbSgiXyIgInZzd3ByaW50ZiIgIiRMREJMMTI4Iik7CmludCB2d3ByaW50Zihj
b25zdCB3Y2hhcl90ICogLCBfX2Rhcndpbl92YV9saXN0KSBfX2FzbSgiXyIgInZ3cHJpbnRmIiAi
JExEQkwxMjgiKTsKc2l6ZV90IHdjcnRvbWIoY2hhciAqICwgd2NoYXJfdCwgbWJzdGF0ZV90ICog
KTsKd2NoYXJfdCAqd2NzY2F0KHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3QgKiApOwp3Y2hhcl90
ICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKaW50IHdjc2NtcChjb25zdCB3Y2hh
cl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmludCB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29u
c3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3Qg
KiApOwpzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CnNp
emVfdCB3Y3NmdGltZSh3Y2hhcl90ICogLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QgKiAsCiAgICAg
Y29uc3Qgc3RydWN0IHRtICogKSBfX2FzbSgiXyIgIndjc2Z0aW1lIiAiJFVOSVgyMDAzIik7CnNp
emVfdCB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqd2NzbmNhdCh3Y2hhcl90ICog
LCBjb25zdCB3Y2hhcl90ICogLCBzaXplX3QpOwppbnQgd2NzbmNtcChjb25zdCB3Y2hhcl90ICos
IGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKd2NoYXJfdCAqd2NzbmNweSh3Y2hhcl90ICogLCBj
b25zdCB3Y2hhcl90ICogLCBzaXplX3QpOwp3Y2hhcl90ICp3Y3NwYnJrKGNvbnN0IHdjaGFyX3Qg
KiwgY29uc3Qgd2NoYXJfdCAqKTsKd2NoYXJfdCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdj
aGFyX3QpOwpzaXplX3Qgd2NzcnRvbWJzKGNoYXIgKiAsIGNvbnN0IHdjaGFyX3QgKiogLCBzaXpl
X3QsCiAgICAgbWJzdGF0ZV90ICogKTsKc2l6ZV90IHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNv
bnN0IHdjaGFyX3QgKik7CndjaGFyX3QgKndjc3N0cihjb25zdCB3Y2hhcl90ICogLCBjb25zdCB3
Y2hhcl90ICogKTsKc2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqICwgY29uc3Qgd2NoYXJfdCAqICwg
c2l6ZV90KTsKaW50IHdjdG9iKHdpbnRfdCk7CmRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCAq
ICwgd2NoYXJfdCAqKiApOwp3Y2hhcl90ICp3Y3N0b2sod2NoYXJfdCAqICwgY29uc3Qgd2NoYXJf
dCAqICwKICAgICB3Y2hhcl90ICoqICk7Cmxvbmcgd2NzdG9sKGNvbnN0IHdjaGFyX3QgKiAsIHdj
aGFyX3QgKiogLCBpbnQpOwp1bnNpZ25lZCBsb25nCiAgd2NzdG91bChjb25zdCB3Y2hhcl90ICog
LCB3Y2hhcl90ICoqICwgaW50KTsKd2NoYXJfdCAqd21lbWNocihjb25zdCB3Y2hhcl90ICosIHdj
aGFyX3QsIHNpemVfdCk7CmludCB3bWVtY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJf
dCAqLCBzaXplX3QpOwp3Y2hhcl90ICp3bWVtY3B5KHdjaGFyX3QgKiAsIGNvbnN0IHdjaGFyX3Qg
KiAsIHNpemVfdCk7CndjaGFyX3QgKndtZW1tb3ZlKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAq
LCBzaXplX3QpOwp3Y2hhcl90ICp3bWVtc2V0KHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsK
aW50IHdwcmludGYoY29uc3Qgd2NoYXJfdCAqICwgLi4uKSBfX2FzbSgiXyIgIndwcmludGYiICIk
TERCTDEyOCIpOwppbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiAsIC4uLikgX19hc20oIl8iICJ3
c2NhbmYiICIkTERCTDEyOCIpOwoKCmludCB2ZndzY2FuZihGSUxFICogLCBjb25zdCB3Y2hhcl90
ICogLAogICAgIF9fZGFyd2luX3ZhX2xpc3QpIF9fYXNtKCJfIiAidmZ3c2NhbmYiICIkTERCTDEy
OCIpOwppbnQgdnN3c2NhbmYoY29uc3Qgd2NoYXJfdCAqICwgY29uc3Qgd2NoYXJfdCAqICwKICAg
ICBfX2Rhcndpbl92YV9saXN0KSBfX2FzbSgiXyIgInZzd3NjYW5mIiAiJExEQkwxMjgiKTsKaW50
IHZ3c2NhbmYoY29uc3Qgd2NoYXJfdCAqICwgX19kYXJ3aW5fdmFfbGlzdCkgX19hc20oIl8iICJ2
d3NjYW5mIiAiJExEQkwxMjgiKTsKZmxvYXQgd2NzdG9mKGNvbnN0IHdjaGFyX3QgKiAsIHdjaGFy
X3QgKiogKTsKbG9uZyBkb3VibGUKIHdjc3RvbGQoY29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAq
KiApIF9fYXNtKCJfIiAid2NzdG9sZCIgIiRMREJMMTI4Iik7Cgpsb25nIGxvbmcKIHdjc3RvbGwo
Y29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAqKiAsIGludCk7CnVuc2lnbmVkIGxvbmcgbG9uZwog
d2NzdG91bGwoY29uc3Qgd2NoYXJfdCAqICwgd2NoYXJfdCAqKiAsIGludCk7CgppbnQgd2Nzd2lk
dGgoY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwppbnQgd2N3aWR0aCh3Y2hhcl90KTsKCgoKc2l6
ZV90IG1ic25ydG93Y3Mod2NoYXJfdCAqICwgY29uc3QgY2hhciAqKiAsIHNpemVfdCwKICAgICBz
aXplX3QsIG1ic3RhdGVfdCAqICk7CnNpemVfdCB3Y3NsY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2No
YXJfdCAqLCBzaXplX3QpOwpzaXplX3Qgd2NzbGNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3Qg
Kiwgc2l6ZV90KTsKc2l6ZV90IHdjc25ydG9tYnMoY2hhciAqICwgY29uc3Qgd2NoYXJfdCAqKiAs
IHNpemVfdCwKICAgICBzaXplX3QsIG1ic3RhdGVfdCAqICk7CgoKCgoKCn0KIyA1NSAiL3Vzci9p
bmNsdWRlL2MrKy80LjAuMC9jd2NoYXIiIDIgMwojIDY5ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDE0MSAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
Ojp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAgdXNpbmcgOjpm
Z2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNpbmcgOjpmd2lk
ZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2luZyA6OmdldHdj
OwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcgOjptYnJ0b3dj
OwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2luZyA6OnB1dHdj
OwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2luZyA6OnN3c2Nh
bmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwoKICB1c2luZyA6OnZm
d3NjYW5mOwoKICB1c2luZyA6OnZzd3ByaW50ZjsKCiAgdXNpbmcgOjp2c3dzY2FuZjsKCiAgdXNp
bmcgOjp2d3ByaW50ZjsKCiAgdXNpbmcgOjp2d3NjYW5mOwoKICB1c2luZyA6OndjcnRvbWI7CiAg
dXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwogIHVz
aW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwogIHVz
aW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAgdXNp
bmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwogIHVz
aW5nIDo6d2NzdG9kOwoKICB1c2luZyA6Ondjc3RvZjsKCiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNp
bmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2lu
ZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcg
Ojp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5n
IDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hy
KHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8
Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxp
bmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyBy
ZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0K
CiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3Qq
IF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdj
aGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJf
dCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgY29uc3Qgd2NoYXJfdCogX19zMikKICB7IHJldHVy
biB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVz
aW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3As
IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxj
b25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2du
dV9jeHgKewoKCgoKCiAgdXNpbmcgOjp3Y3N0b2xkOwojIDI1OCAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9jd2NoYXIiIDMKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKCn0K
Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2luZyBfX2du
dV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ3ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvcG9zdHlwZXMuaCIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0
ZAp7CiMgNzIgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9wb3N0eXBlcy5oIiAzCiAgdHlw
ZWRlZiBpbnQ2NF90IHN0cmVhbW9mZjsKCgoKCgogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNp
emU7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zOwojIDk0ICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvcG9zdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdHJl
YW1vZmYgX01fb2ZmOwogICAgICBfU3RhdGVUIF9NX3N0YXRlOwoKICAgIHB1YmxpYzoKCgoKCiAg
ICAgIGZwb3MoKQogICAgICA6IF9NX29mZigwKSwgX01fc3RhdGUoKSB7IH0KIyAxMTYgIi91c3Iv
aW5jbHVkZS9jKysvNC4wLjAvYml0cy9wb3N0eXBlcy5oIiAzCiAgICAgIGZwb3Moc3RyZWFtb2Zm
IF9fb2ZmKQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0YXRlKCkgeyB9CgoKICAgICAgb3Bl
cmF0b3Igc3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgoKICAgICAgdm9pZAog
ICAgICBzdGF0ZShfU3RhdGVUIF9fc3QpCiAgICAgIHsgX01fc3RhdGUgPSBfX3N0OyB9CgoKICAg
ICAgX1N0YXRlVAogICAgICBzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0YXRlOyB9
CgoKCgoKCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX290aGVyKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19vdGhlci5fTV9vZmY7IH0KCgogICAgICBi
b29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19vdGhlcikgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fb2ZmICE9IF9fb3RoZXIuX01fb2ZmOyB9CgoKCgoKICAgICAgZnBvcyYKICAgICAg
b3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKIF9NX29mZiArPSBfX29mZjsKIHJl
dHVybiAqdGhpczsKICAgICAgfQoKCgoKCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3Ry
ZWFtb2ZmIF9fb2ZmKQogICAgICB7CiBfTV9vZmYgLT0gX19vZmY7CiByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCgoKCgoKCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikg
Y29uc3QKICAgICAgewogZnBvcyBfX3BvcygqdGhpcyk7CiBfX3BvcyArPSBfX29mZjsKIHJldHVy
biBfX3BvczsKICAgICAgfQoKCgoKCgoKICAgICAgZnBvcwogICAgICBvcGVyYXRvci0oc3RyZWFt
b2ZmIF9fb2ZmKSBjb25zdAogICAgICB7CiBmcG9zIF9fcG9zKCp0aGlzKTsKIF9fcG9zIC09IF9f
b2ZmOwogcmV0dXJuIF9fcG9zOwogICAgICB9CgoKCgoKCiAgICAgIHN0cmVhbW9mZgogICAgICBv
cGVyYXRvci0oY29uc3QgZnBvcyYgX19vdGhlcikgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2Zm
IC0gX19vdGhlci5fTV9vZmY7IH0KICAgIH07CgoKCgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90
PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cn0KIyA1
MCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9pb3Nmd2QiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2V4
Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1
cm5fXykpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpIF9fYXR0cmlidXRlX18o
KF9fbm9yZXR1cm5fXykpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh
ciogX19zKSBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCiAgdm9pZAogIF9fdGhyb3df
ZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcykgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9f
KSk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKSBf
X2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcykgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CgogIHZv
aWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpIF9fYXR0cmlidXRlX18o
KF9fbm9yZXR1cm5fXykpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcykgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CgogIHZvaWQKICBfX3Rocm93
X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcykgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9f
KSk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcykgX19h
dHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19l
cnJvcihjb25zdCBjaGFyKiBfX3MpIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOwoKCiAg
dm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKSBfX2F0dHJpYnV0ZV9f
KChfX25vcmV0dXJuX18pKTsKfQojIDUxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2lvc2Z3ZCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgIHR5
cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmlu
Z2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiwKICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICB0eXBlbmFt
ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+LAogICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9y
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3Mg
aW9zX2Jhc2U7CiMgMTM1ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2lvc2Z3ZCIgMwogIHR5cGVk
ZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBz
dHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxj
aGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7
CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlw
ZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmls
ZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJh
c2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+
IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJf
dD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdi
dWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lm
c3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFy
X3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07
CgoKfQojIDcwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7
CgogIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgc3RydWN0IHBhaXIKICAgIHsK
ICAgICAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICAgICAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5
cGU7CgogICAgICBfVDEgZmlyc3Q7CiAgICAgIF9UMiBzZWNvbmQ7CgoKCgoKICAgICAgcGFpcigp
CiAgICAgIDogZmlyc3QoKSwgc2Vjb25kKCkgeyB9CgoKICAgICAgcGFpcihjb25zdCBfVDEmIF9f
YSwgY29uc3QgX1QyJiBfX2IpCiAgICAgIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikgeyB9CgoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgICAgICAgcGFpcihjb25zdCBw
YWlyPF9VMSwgX1UyPiYgX19wKQogOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29u
ZCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX195KQogICAgeyByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAm
JiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IH0KCgogIHRlbXBsYXRlPGNsYXNzIF9UMSwgY2xh
c3MgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQogICAgeyByZXR1cm4gX194LmZpcnN0
IDwgX195LmZpcnN0CiAgICAgIHx8ICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNl
Y29uZCA8IF9feS5zZWNvbmQpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gs
IGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9
CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwg
X1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQogICAgeyByZXR1cm4gIShfX3kg
PCBfX3gpOyB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KIyAxNDIgIi91c3Iv
aW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfcGFpci5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgcGFpcjxfVDEsIF9UMj4KICAgIG1ha2VfcGFpcihfVDEg
X194LCBfVDIgX195KQogICAgeyByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOyB9Cn0K
IyA3MSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvY3BwX3R5cGVfdHJhaXRzLmgiIDEgMwojIDQx
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvY3BwX3R5cGVfdHJhaXRzLmgiIDMKICAgICAg
IAojIDQyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvY3BwX3R5cGVfdHJhaXRzLmgiIDMK
IyA3NSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAzCm5h
bWVzcGFjZSBfX2dudV9pbnRlcm5hbAp7CiAgdHlwZWRlZiBjaGFyIF9fb25lOwogIHR5cGVkZWYg
Y2hhciBfX3R3b1syXTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIF9fb25lIF9fdGVzdF90
eXBlKGludCBfVHA6OiopOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBfX3R3byYgX190ZXN0
X3R5cGUoLi4uKTsKfQoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJh
dG9yOwp9CgpzdHJ1Y3QgX190cnVlX3R5cGUgeyB9OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHsgfTsK
Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGJvb2w+CiAgICBzdHJ1Y3QgX190cnV0aF90eXBl
CiAgICB7IHR5cGVkZWYgX19mYWxzZV90eXBlIF9fdHlwZTsgfTsKCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IF9fdHJ1dGhfdHlwZTx0cnVlPgogICAgeyB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlw
ZTsgfTsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfU3AsIGNsYXNzIF9UcD4KICAgIHN0cnVjdCBfX3Ry
YWl0b3IKICAgIHsKICAgICAgZW51bSB7IF9fdmFsdWUgPSBib29sKF9TcDo6X192YWx1ZSkgfHwg
Ym9vbChfVHA6Ol9fdmFsdWUpIH07CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190cnV0aF90eXBl
PF9fdmFsdWU+OjpfX3R5cGUgX190eXBlOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lLCB0
eXBlbmFtZT4KICAgIHN0cnVjdCBfX2FyZV9zYW1lCiAgICB7CiAgICAgIGVudW0geyBfX3ZhbHVl
ID0gMCB9OwogICAgICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19hcmVfc2FtZTxfVHAsIF9UcD4KICAgIHsK
ICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CiAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190
eXBlOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lLCBib29sPgogICAgc3RydWN0IF9fZW5h
YmxlX2lmCiAgICB7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg
X19lbmFibGVfaWY8X1RwLCB0cnVlPgogICAgewogICAgICB0eXBlZGVmIF9UcCBfX3R5cGU7CiAg
ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9faXNfdm9pZAogICAg
ewogICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUg
X190eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9faXNfdm9pZDx2b2lkPgog
ICAgewogICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKICAgICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfX3R5cGU7CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg
X19pc19pbnRlZ2VyCiAgICB7CiAgICAgIGVudW0geyBfX3ZhbHVlID0gMCB9OwogICAgICB0eXBl
ZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1
Y3QgX19pc19pbnRlZ2VyPGJvb2w+CiAgICB7CiAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9Owog
ICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPD4KICAg
IHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcj4KICAgIHsKICAgICAgZW51bSB7IF9fdmFsdWUgPSAx
IH07CiAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IF9faXNfaW50ZWdlcjxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgZW51bSB7
IF9fdmFsdWUgPSAxIH07CiAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOwogICAgfTsK
CiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPgogICAg
ewogICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBf
X3R5cGU7CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9faXNfaW50ZWdlcjx3Y2hh
cl90PgogICAgewogICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKICAgICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfX3R5cGU7CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9faXNfaW50
ZWdlcjxzaG9ydD4KICAgIHsKICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CiAgICAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgX190eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9f
aXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgZW51bSB7IF9fdmFsdWUgPSAx
IH07CiAgICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IF9faXNfaW50ZWdlcjxpbnQ+CiAgICB7CiAgICAgIGVudW0geyBfX3ZhbHVl
ID0gMSB9OwogICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKICAgIH07CgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgaW50PgogICAgewogICAgICBl
bnVtIHsgX192YWx1ZSA9IDEgfTsKICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CiAg
ICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPGxvbmc+CiAgICB7CiAg
ICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OwogICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlw
ZTsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQg
bG9uZz4KICAgIHsKICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CiAgICAgIHR5cGVkZWYgX190
cnVlX3R5cGUgX190eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9faXNfaW50
ZWdlcjxsb25nIGxvbmc+CiAgICB7CiAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OwogICAgICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9fdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBfX2lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAgICBlbnVtIHsgX192
YWx1ZSA9IDEgfTsKICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CiAgICB9OwoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc19mbG9hdGluZwogICAgewog
ICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKICAgICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190
eXBlOwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBfX2lzX2Zsb2F0aW5nPGZsb2F0
PgogICAgewogICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsKICAgICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19pc19mbG9hdGlu
Zzxkb3VibGU+CiAgICB7CiAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OwogICAgICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIF9fdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBfX2lz
X2Zsb2F0aW5nPGxvbmcgZG91YmxlPgogICAgewogICAgICBlbnVtIHsgX192YWx1ZSA9IDEgfTsK
ICAgICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfX3R5cGU7CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc19wb2ludGVyCiAgICB7CiAgICAgIGVudW0geyBf
X3ZhbHVlID0gMCB9OwogICAgICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfX3R5cGU7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc19wb2ludGVyPF9UcCo+CiAg
ICB7CiAgICAgIGVudW0geyBfX3ZhbHVlID0gMSB9OwogICAgICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9fdHlwZTsKICAgIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBf
X2lzX25vcm1hbF9pdGVyYXRvcgogICAgewogICAgICBlbnVtIHsgX192YWx1ZSA9IDAgfTsKICAg
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX190eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgc3RydWN0IF9faXNfbm9ybWFs
X2l0ZXJhdG9yPCBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwKICAgICAg
ICAgICAgIF9Db250YWluZXI+ID4KICAgIHsKICAgICAgZW51bSB7IF9fdmFsdWUgPSAxIH07CiAg
ICAgIHR5cGVkZWYgX190cnVlX3R5cGUgX190eXBlOwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgc3RydWN0IF9faXNfYXJpdGhtZXRpYwogICAgOiBwdWJsaWMgX190cmFp
dG9yPF9faXNfaW50ZWdlcjxfVHA+LCBfX2lzX2Zsb2F0aW5nPF9UcD4gPgogICAgeyB9OwoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc19mdW5kYW1lbnRhbAogICAg
OiBwdWJsaWMgX190cmFpdG9yPF9faXNfdm9pZDxfVHA+LCBfX2lzX2FyaXRobWV0aWM8X1RwPiA+
CiAgICB7IH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2lzX3Nj
YWxhcgogICAgOiBwdWJsaWMgX190cmFpdG9yPF9faXNfYXJpdGhtZXRpYzxfVHA+LCBfX2lzX3Bv
aW50ZXI8X1RwPiA+CiAgICB7IH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0
cnVjdCBfX2lzX3BvZAogICAgewogICAgICBlbnVtCiB7CiAgIF9fdmFsdWUgPSAoc2l6ZW9mKF9f
Z251X2ludGVybmFsOjpfX3Rlc3RfdHlwZTxfVHA+KDApKQogICAgICAgIT0gc2l6ZW9mKF9fZ251
X2ludGVybmFsOjpfX29uZSkpCiB9OwogICAgfTsKCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgICAgICAKIyA2OCAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMK
Cm5hbWVzcGFjZSBzdGQKewojIDgwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307Cgog
IHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRv
cl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKCiAgc3RydWN0IGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKCiAg
c3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnIHt9OwojIDEwNCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9p
dGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5
cGVuYW1lIF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBz
dHJ1Y3QgaXRlcmF0b3IKICAgIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2Nh
dGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHR5cGVkZWYgX0Rp
c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1BvaW50ZXIgcG9pbnRlcjsK
CiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVy
YXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5
cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVu
Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZl
cmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3Ry
dWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPgogICAgewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1
ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5
cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25z
dCBfVHAqPgogICAgewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBw
b2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDczICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKICAgICAgIAojIDY4ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM4ICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvY29uY2VwdF9jaGVjay5oIiAzCiAgICAgICAKIyAz
OSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAg
IGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKICAgIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7Cgog
ICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKIHsK
ICAgKytfX2ZpcnN0OwogICArK19fbjsKIH0KICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKQogICAgewoKICAgICAKCiAgICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogICAgfQoj
IDExMiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNz
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAg
IGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkK
ICAgIHsKCiAgICAgIHJldHVybiBzdGQ6Ol9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LAogICAg
ICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUg
dm9pZAogICAgX19hZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlu
cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgIHdoaWxlIChfX24tLSkKICsrX19p
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAg
ICB3aGlsZSAoX19uLS0pCiAgICsrX19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisr
KQogICAtLV9faTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCiAgICAgIF9faSArPSBfX247
CiAgICB9CiMgMTcwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh
c2VfZnVuY3MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFt
ZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgdm9pZAogICAgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYg
X19pLCBfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgc3RkOjpfX2FkdmFuY2UoX19pLCBfX24s
IHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICAgIH0KfQojIDc0ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysv
NC4wLjAvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA4OSAiL3Vzci9p
bmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRl
cmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVn
b3J5LAogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90
eXBlLAogICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUsCiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBv
aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3Ig
Y3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5j
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9p
bnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigp
IDogY3VycmVudCgpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9f
eC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAg
ICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiA6
IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJh
c2UoKSBjb25zdAogICAgICB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5j
ZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiBfSXRlcmF0b3IgX190bXAgPSBjdXJy
ZW50OwogcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAg
b3BlcmF0b3ItPigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoK
CiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAtLWN1
cnJlbnQ7CiByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogLS1jdXJyZW50OwogcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJl
dmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQogICAgICB7CiArK2N1cnJlbnQ7CiBy
ZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRv
ci0tKGludCkKICAgICAgewogcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogKytjdXJy
ZW50OwogcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK
ICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9p
dGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiBj
dXJyZW50IC09IF9fbjsKIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAg
ICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAg
IHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikK
ICAgICAgewogY3VycmVudCArPSBfX247CiByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAg
ICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QK
ICAgICAgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAgIH07CiMgMjc1ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgp
IDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAg
IHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj4mIF9feCwKICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0
b3I8X0l0ZXJhdG9yPiYgX194LAogIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0
ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4o
X194LmJhc2UoKSAtIF9fbik7IH0KIyAzMzUgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9z
dGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFz
cyBiYWNrX2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJh
dG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAg
ICAgX0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0Nv
bnRhaW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2Vy
dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM2MSAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29u
c3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFs
dWUpOwogcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Im
CiAgICAgIG9wZXJhdG9yKigpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19p
bnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7IHJldHVybiAqdGhpczsg
fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAg
ICB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyAzOTUgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAg
ICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0
ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4oX194KTsgfQojIDQxMCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9p
dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZy
b250X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9y
X3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAg
X0NvbnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRh
aW5lciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0
b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MzUgIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBmcm9udF9pbnNlcnRf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZl
cmVuY2UgX192YWx1ZSkKICAgICAgewogY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwog
cmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvciooKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2Vy
dF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7
IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NjkgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0
cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBp
bmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRl
cihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4oX194KTsgfQojIDQ4OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9p
dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGlu
c2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywg
dm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRh
aW5lciogY29udGFpbmVyOwogICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVy
OwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsK
CgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29u
dGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkg
e30KIyA1MzAgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog
ICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29u
dGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogaXRlciA9IGNvbnRhaW5l
ci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogKytpdGVyOwogcmV0dXJuICp0aGlzOwogICAgICB9
CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKQogICAgICB7IHJldHVy
biAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAg
ICAgIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcisrKGludCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTY1ICIvdXNyL2lu
Y2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ29udGFpbmVyLCB0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBf
X2kpCiAgICB7CiAgICAgIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAog
ICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFtZXNw
YWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwogIHVz
aW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgIHsKICAgIHByb3Rl
Y3RlZDoKICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y
eQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJl
bnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICBpbmxp
bmUgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsCiAgICAg
X0NvbnRhaW5lcj4mIF9faSkKIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICBy
ZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgeyByZXR1cm4gKl9NX2N1cnJl
bnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
cisrKCkKICAgICAgewogKytfTV9jdXJyZW50OwogcmV0dXJuICp0aGlzOwogICAgICB9CgogICAg
ICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgeyByZXR1cm4g
X19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9ybWFsX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvci0tKCkKICAgICAgewogLS1fTV9jdXJyZW50OwogcmV0dXJuICp0
aGlzOwogICAgICB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0tKGlu
dCkKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsgfQoKCiAg
ICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQog
ICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29u
c3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9fbik7IH0K
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNl
X3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3Vy
cmVudCAtIF9fbik7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAgYmFzZSgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CiMgNjc4ICIvdXNyL2luY2x1ZGUv
YysrLzQuMC4wL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
TCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J
dGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9
PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuYmFz
ZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWlu
ZXI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3Is
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
Y29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
YmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y
LCB0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg
ICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogICAgeyByZXR1cm4g
X19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+
PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywK
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu
YW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg
IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPgogICAgb3BlcmF0b3IrKHR5cGVuYW1l
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlw
ZQogICAgICAgX19uLCBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX2kpCiAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0KIyA3NSAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9k
ZWJ1Zy9kZWJ1Zy5oIiAxIDMKIyAyNzIgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvZGVidWcvZGVi
dWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY2Fzc2VydCIgMSAzCiMgNDYgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvY2Fzc2VydCIgMwogICAgICAgCiMgNDcgIi91c3IvaW5jbHVk
ZS9jKysvNC4wLjAvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0
CiMgNDggIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY2Fzc2VydCIgMiAzCiMgMjczICIvdXNyL2lu
Y2x1ZGUvYysrLzQuMC4wL2RlYnVnL2RlYnVnLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MvcG93
ZXJwYy1hcHBsZS1kYXJ3aW45LzQuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMjc1ICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL2RlYnVnL2RlYnVnLmgiIDIgMwoKCgpuYW1lc3BhY2UgX19n
bnVfZGVidWcKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX1NlcXVl
bmNlPgogICAgY2xhc3MgX1NhZmVfaXRlcmF0b3I7CgoKICBpbmxpbmUgYm9vbAogIF9fY2hlY2tf
c2luZ3VsYXJfYXV4KGNvbnN0IHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBfX2NoZWNrX3Npbmd1bGFy
KF9JdGVyYXRvciYgX194KQogICAgeyByZXR1cm4gX19nbnVfZGVidWc6Ol9fY2hlY2tfc2luZ3Vs
YXJfYXV4KCZfX3gpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9v
bAogICAgX19jaGVja19zaW5ndWxhcihjb25zdCBfVHAqIF9fcHRyKQogICAgeyByZXR1cm4gX19w
dHIgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2Vx
dWVuY2U+CiAgICBpbmxpbmUgYm9vbAogICAgX19jaGVja19zaW5ndWxhcihjb25zdCBfU2FmZV9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9feCkKICAgIHsgcmV0dXJuIF9feC5fTV9z
aW5ndWxhcigpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5l
IGJvb2wKICAgIF9fY2hlY2tfZGVyZWZlcmVuY2VhYmxlKF9JdGVyYXRvciYpCiAgICB7IHJldHVy
biB0cnVlOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAg
X19jaGVja19kZXJlZmVyZW5jZWFibGUoY29uc3QgX1RwKiBfX3B0cikKICAgIHsgcmV0dXJuIF9f
cHRyOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9TZXF1ZW5j
ZT4KICAgIGlubGluZSBib29sCiAgICBfX2NoZWNrX2RlcmVmZXJlbmNlYWJsZShjb25zdCBfU2Fm
ZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9feCkKICAgIHsgcmV0dXJuIF9feC5f
TV9kZXJlZmVyZW5jZWFibGUoKTsgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgX192YWxpZF9yYW5nZV9hdXgyKGNvbnN0
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19maXJzdCwKICAgICAgICAgY29uc3QgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yJiBfX2xhc3QsCiAgICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCiAgICB7IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0ID49IDA7IH0KCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIF9fdmFsaWRf
cmFuZ2VfYXV4Mihjb25zdCBfSW5wdXRJdGVyYXRvciYsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwK
ICAgICAgICAgc3RkOjppbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7IHJldHVybiB0cnVlOyB9CgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZWdyYWw+CiAgICBpbmxpbmUgYm9vbAogICAgX192
YWxpZF9yYW5nZV9hdXgoY29uc3QgX0ludGVncmFsJiwgY29uc3QgX0ludGVncmFsJiwgX190cnVl
X3R5cGUpCiAgICB7IHJldHVybiB0cnVlOyB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIF9fdmFsaWRfcmFuZ2VfYXV4KGNvbnN0IF9J
bnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LAogICAgICAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xh
c3QsIF9fZmFsc2VfdHlwZSkKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgX0NhdGVnb3J5
OwogICAgcmV0dXJuIF9fZ251X2RlYnVnOjpfX3ZhbGlkX3JhbmdlX2F1eDIoX19maXJzdCwgX19s
YXN0LCBfQ2F0ZWdvcnkoKSk7CiAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIF9fdmFsaWRfcmFuZ2UoY29uc3QgX0lucHV0SXRl
cmF0b3ImIF9fZmlyc3QsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfX3R5
cGUgX0ludGVncmFsOwogICAgICByZXR1cm4gX19nbnVfZGVidWc6Ol9fdmFsaWRfcmFuZ2VfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfU2VxdWVuY2U+CiAgICBpbmxpbmUgYm9vbAogICAgX192
YWxpZF9yYW5nZShjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9f
Zmlyc3QsCiAgICBjb25zdCBfU2FmZV9pdGVyYXRvcjxfSXRlcmF0b3IsIF9TZXF1ZW5jZT4mIF9f
bGFzdCkKICAgIHsgcmV0dXJuIF9fZmlyc3QuX01fdmFsaWRfcmFuZ2UoX19sYXN0KTsgfQoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICBpbmxpbmUgX0lucHV0SXRl
cmF0b3IKICAgIF9fY2hlY2tfdmFsaWRfcmFuZ2UoY29uc3QgX0lucHV0SXRlcmF0b3ImIF9fZmly
c3QsCiAgIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2xhc3QpCiAgICB7CiAgICAgIDsKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9JbnRlZ2VyPgogICAgaW5saW5lIGNvbnN0IF9DaGFyVCoKICAgIF9fY2hlY2tfc3RyaW5n
KGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfSW50ZWdlciYgX19uKQogICAgewoKCgogICAgICBy
ZXR1cm4gX19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGNvbnN0IF9DaGFyVCoKICAgIF9fY2hlY2tfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zKQogICAg
ewoKCgogICAgICByZXR1cm4gX19zOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIF9fY2hlY2tfc29ydGVkX2F1eChjb25zdCBf
SW5wdXRJdGVyYXRvciYsIGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OmlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsgcmV0dXJuIHRydWU7IH0KCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIF9f
Y2hlY2tfc29ydGVkX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gdHJ1
ZTsKCiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICAgZm9yICgr
K19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsK
ICAgICAgICBpZiAoKl9fbmV4dCA8ICpfX2ZpcnN0KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBf
X2NoZWNrX3NvcnRlZF9hdXgoY29uc3QgX0lucHV0SXRlcmF0b3ImLCBjb25zdCBfSW5wdXRJdGVy
YXRvciYsCiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSwgc3RkOjppbnB1dF9pdGVy
YXRvcl90YWcpCiAgICB7IHJldHVybiB0cnVlOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBf
X2NoZWNrX3NvcnRlZF9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgc3Rk
Ojpmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIHJldHVybiB0cnVlOwoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX25leHQgPSBf
X2ZpcnN0OwogICAgICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0OyBfX2ZpcnN0ID0g
X19uZXh0LCArK19fbmV4dCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fbmV4dCwgKl9fZmlyc3Qp
KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wK
ICAgIF9fY2hlY2tfc29ydGVkKGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LCBjb25zdCBf
SW5wdXRJdGVyYXRvciYgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAg
ICBfQ2F0ZWdvcnk7CiAgICAgIHJldHVybiBfX2dudV9kZWJ1Zzo6X19jaGVja19zb3J0ZWRfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAg
ICBfX2NoZWNrX3NvcnRlZChjb25zdCBfSW5wdXRJdGVyYXRvciYgX19maXJzdCwgY29uc3QgX0lu
cHV0SXRlcmF0b3ImIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICBfQ2F0ZWdvcnk7CiAgICAgIHJl
dHVybiBfX2dudV9kZWJ1Zzo6X19jaGVja19zb3J0ZWRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkLAogICAgICAgICAgX0NhdGVnb3J5KCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgX19j
aGVja19wYXJ0aXRpb25lZChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0LAogICBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CiAgICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCAmJiAqX19maXJzdCA8IF9fdmFsdWUpCiArK19fZmlyc3Q7CiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0IDwgX192YWx1ZSkpCiArK19fZmly
c3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdDsKICAgIH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1ByZWQ+CiAg
ICBpbmxpbmUgYm9vbAogICAgX19jaGVja19wYXJ0aXRpb25lZChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICBjb25zdCBfVHAmIF9fdmFsdWUsIF9Q
cmVkIF9fcHJlZCkKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcHJl
ZCgqX19maXJzdCwgX192YWx1ZSkpCiArK19fZmlyc3Q7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0LCBfX3ZhbHVlKSkKICsrX19maXJzdDsKICAgICAg
cmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0OwogICAgfQp9CiMgNzcgIi91c3IvaW5jbHVkZS9jKysv
NC4wLjAvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MCAiL3Vz
ci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQog
ICAgewoKICAgICAKCiAgICAgIGNvbnN0IF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0gX19i
OwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KCgoKCiAgdGVtcGxhdGU8Ym9vbCBfQm9vbFR5cGU+
CiAgICBzdHJ1Y3QgX19pdGVyX3N3YXAKICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgogICAgICAgIHN0YXRp
YyB2b2lkCiAgICAgICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcmF0b3IxIF9fYSwgX0ZvcndhcmRJ
dGVyYXRvcjIgX19iKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3IxPjo6dmFsdWVfdHlwZQogICAgICAgICAgICBfVmFs
dWVUeXBlMTsKICAgICAgICAgIGNvbnN0IF9WYWx1ZVR5cGUxIF9fdG1wID0gKl9fYTsKICAgICAg
ICAgICpfX2EgPSAqX19iOwogICAgICAgICAgKl9fYiA9IF9fdG1wOwogfQogICAgfTsKCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IF9faXRlcl9zd2FwPHRydWU+CiAgICB7CiAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMj4K
ICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXJhdG9yMSBf
X2EsIF9Gb3J3YXJkSXRlcmF0b3IyIF9fYikKICAgICAgICB7CiAgICAgICAgICBzd2FwKCpfX2Es
ICpfX2IpOwogICAgICAgIH0KICAgIH07CiMgMTQwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9y
MSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9z
d2FwKF9Gb3J3YXJkSXRlcmF0b3IxIF9fYSwgX0ZvcndhcmRJdGVyYXRvcjIgX19iKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMT46
OnZhbHVlX3R5cGUKIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yMj46OnZhbHVlX3R5cGUKIF9WYWx1ZVR5cGUyOwoKCiAg
ICAgCgogICAgIAoKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjE+OjpyZWZlcmVuY2UKIF9SZWZlcmVuY2VUeXBlMTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcjI+
OjpyZWZlcmVuY2UKIF9SZWZlcmVuY2VUeXBlMjsKICAgICAgc3RkOjpfX2l0ZXJfc3dhcDxfX2Fy
ZV9zYW1lPF9WYWx1ZVR5cGUxLCBfVmFsdWVUeXBlMj46Ol9fdmFsdWUgJiYKIF9fYXJlX3NhbWU8
X1ZhbHVlVHlwZTEgJiwgX1JlZmVyZW5jZVR5cGUxPjo6X192YWx1ZSAmJgogX19hcmVfc2FtZTxf
VmFsdWVUeXBlMiAmLCBfUmVmZXJlbmNlVHlwZTI+OjpfX3ZhbHVlPjo6CiBpdGVyX3N3YXAoX19h
LCBfX2IpOwogICAgfQojIDE4MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYK
ICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7CgogICAgIAoKICAg
ICAgaWYgKF9fYiA8IF9fYSkKIHJldHVybiBfX2I7CiAgICAgIHJldHVybiBfX2E7CiAgICB9CiMg
MjA0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9U
cCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19i
KQogcmV0dXJuIF9fYjsKICAgICAgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjYgIi91c3IvaW5jbHVk
ZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAg
aWYgKF9fY29tcChfX2IsIF9fYSkpCiByZXR1cm4gX19iOwogICAgICByZXR1cm4gX19hOwogICAg
fQojIDI0NiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25z
dCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKIHJldHVybiBfX2I7CiAg
ICAgIHJldHVybiBfX2E7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPGJvb2wsIHR5cGVuYW1lPgog
ICAgc3RydWN0IF9fY29weQogICAgewogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUksIHR5cGVu
YW1lIF9PST4KICAgICAgICBzdGF0aWMgX09JCiAgICAgICAgY29weShfSUkgX19maXJzdCwgX0lJ
IF9fbGFzdCwgX09JIF9fcmVzdWx0KQogICAgICAgIHsKICAgZm9yICg7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAg
IHJldHVybiBfX3Jlc3VsdDsKIH0KICAgIH07CgogIHRlbXBsYXRlPGJvb2wgX0Jvb2xUeXBlPgog
ICAgc3RydWN0IF9fY29weTxfQm9vbFR5cGUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgog
ICAgewogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUksIHR5cGVuYW1lIF9PST4KICAgICAgICBz
dGF0aWMgX09JCiAgICAgICAgY29weShfSUkgX19maXJzdCwgX0lJIF9fbGFzdCwgX09JIF9fcmVz
dWx0KQogICAgICAgIHsKICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lJPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgZm9yKF9EaXN0YW5jZSBfX24gPSBfX2xhc3Qg
LSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKICAgICB7CiAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDsKICAgICAgICsrX19maXJzdDsKICAgICAgICsrX19yZXN1bHQ7CiAgICAgfQogICByZXR1
cm4gX19yZXN1bHQ7CiB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19jb3B5PHRy
dWUsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnPgogICAgewogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICAgICAgc3RhdGljIF9UcCoKICAgICAgICBjb3B5KGNvbnN0IF9UcCogX19m
aXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgICAgewogICBzdGQ6
Om1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmly
c3QpKTsKICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogfQogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJLCB0eXBlbmFtZSBfT0k+CiAgICBpbmxpbmUgX09JCiAg
ICBfX2NvcHlfYXV4KF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBfT0kgX19yZXN1bHQpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JST46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZUk7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PST46
OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZU87CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JST46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgICAgY29uc3QgYm9v
bCBfX3NpbXBsZSA9IChfX2lzX3NjYWxhcjxfVmFsdWVUeXBlST46Ol9fdmFsdWUKICAgICAgICAg
ICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxfSUk+OjpfX3ZhbHVlCiAgICAgICAgICAgICAg
ICAgICAgICAmJiBfX2lzX3BvaW50ZXI8X09JPjo6X192YWx1ZQogICAgICAgICYmIF9fYXJlX3Nh
bWU8X1ZhbHVlVHlwZUksIF9WYWx1ZVR5cGVPPjo6X192YWx1ZSk7CgogICAgICByZXR1cm4gc3Rk
OjpfX2NvcHk8X19zaW1wbGUsIF9DYXRlZ29yeT46OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCk7CiAgICB9CgogIHRlbXBsYXRlPGJvb2wsIGJvb2w+CiAgICBzdHJ1Y3QgX19jb3B5X25v
cm1hbAogICAgewogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSUksIHR5cGVuYW1lIF9PST4KICAg
ICAgICBzdGF0aWMgX09JCiAgICAgICAgY29weV9uKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0LCBf
T0kgX19yZXN1bHQpCiAgICAgICAgeyByZXR1cm4gc3RkOjpfX2NvcHlfYXV4KF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19jb3B5
X25vcm1hbDx0cnVlLCBmYWxzZT4KICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJLCB0
eXBlbmFtZSBfT0k+CiAgICAgICAgc3RhdGljIF9PSQogICAgICAgIGNvcHlfbihfSUkgX19maXJz
dCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0KQogICAgICAgIHsgcmV0dXJuIHN0ZDo6X19jb3B5
X2F1eChfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQpOyB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19jb3B5X25vcm1hbDxmYWxzZSwgdHJ1ZT4KICAgIHsK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJLCB0eXBlbmFtZSBfT0k+CiAgICAgICAgc3RhdGlj
IF9PSQogICAgICAgIGNvcHlfbihfSUkgX19maXJzdCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0
KQogICAgICAgIHsgcmV0dXJuIF9PSShzdGQ6Ol9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdC5iYXNlKCkpKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9fY29w
eV9ub3JtYWw8dHJ1ZSwgdHJ1ZT4KICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lJLCB0
eXBlbmFtZSBfT0k+CiAgICAgICAgc3RhdGljIF9PSQogICAgICAgIGNvcHlfbihfSUkgX19maXJz
dCwgX0lJIF9fbGFzdCwgX09JIF9fcmVzdWx0KQogICAgICAgIHsgcmV0dXJuIF9PSShzdGQ6Ol9f
Y29weV9hdXgoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgIF9fcmVzdWx0
LmJhc2UoKSkpOyB9CiAgICB9OwojIDM3MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyYXRvcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcmF0b3IKICAgIGNvcHko
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogIF9PdXRwdXRJ
dGVyYXRvciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICA7CgogICAgICAgY29u
c3QgYm9vbCBfX2luID0gX19pc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcmF0b3I+OjpfX3Zh
bHVlOwogICAgICAgY29uc3QgYm9vbCBfX291dCA9IF9faXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRw
dXRJdGVyYXRvcj46Ol9fdmFsdWU7CiAgICAgICByZXR1cm4gc3RkOjpfX2NvcHlfbm9ybWFsPF9f
aW4sIF9fb3V0Pjo6Y29weV9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQp
OwogICAgfQoKICB0ZW1wbGF0ZTxib29sLCB0eXBlbmFtZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFj
a3dhcmQKICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K
ICAgICAgICBzdGF0aWMgX0JJMgogICAgICAgIGNvcHlfYihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LCBfQkkyIF9fcmVzdWx0KQogICAgICAgIHsKICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KQogICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICByZXR1cm4gX19yZXN1bHQ7CiB9CiAg
ICB9OwoKICB0ZW1wbGF0ZTxib29sIF9Cb29sVHlwZT4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dh
cmQ8X0Jvb2xUeXBlLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZz4KICAgIHsKICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgICAgICBzdGF0aWMgX0JJMgog
ICAgICAgIGNvcHlfYihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQog
ICAgICAgIHsKICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+OjpkaWZmZXJlbmNlX3R5
cGUgX19uOwogICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQog
ICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICByZXR1cm4gX19yZXN1bHQ7CiB9CiAgICB9
OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkPHRydWUsIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnPgogICAgewogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICAgICAgc3RhdGljIF9UcCoKICAgICAgICBjb3B5X2IoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgICB7CiAgIGNvbnN0IHB0cmRpZmZf
dCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgc3RkOjptZW1tb3ZlKF9fcmVzdWx0IC0gX051
bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgcmV0dXJuIF9fcmVzdWx0IC0gX051
bTsKIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg
ICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEg
X19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfQkkxPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTI7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTE+OjppdGVyYXRvcl9jYXRl
Z29yeSBfQ2F0ZWdvcnk7CiAgICAgIGNvbnN0IGJvb2wgX19zaW1wbGUgPSAoX19pc19zY2FsYXI8
X1ZhbHVlVHlwZTE+OjpfX3ZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2lzX3BvaW50
ZXI8X0JJMT46Ol9fdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICYmIF9faXNfcG9pbnRlcjxf
QkkyPjo6X192YWx1ZQogICAgICAgICYmIF9fYXJlX3NhbWU8X1ZhbHVlVHlwZTEsIF9WYWx1ZVR5
cGUyPjo6X192YWx1ZSk7CgogICAgICByZXR1cm4gc3RkOjpfX2NvcHlfYmFja3dhcmQ8X19zaW1w
bGUsIF9DYXRlZ29yeT46OmNvcHlfYihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgX19y
ZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTxib29sLCBib29sPgogICAgc3RydWN0IF9fY29weV9i
YWNrd2FyZF9ub3JtYWwKICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5h
bWUgX0JJMj4KICAgICAgICBzdGF0aWMgX0JJMgogICAgICAgIGNvcHlfYl9uKF9CSTEgX19maXJz
dCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICAgICAgeyByZXR1cm4gc3RkOjpfX2Nv
cHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX25vcm1hbDx0cnVlLCBmYWxzZT4K
ICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgICAg
ICBzdGF0aWMgX0JJMgogICAgICAgIGNvcHlfYl9uKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
IF9CSTIgX19yZXN1bHQpCiAgICAgICAgeyByZXR1cm4gc3RkOjpfX2NvcHlfYmFja3dhcmRfYXV4
KF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgX19yZXN1bHQpOyB9CiAgICB9
OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX25vcm1hbDxmYWxzZSwg
dHJ1ZT4KICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K
ICAgICAgICBzdGF0aWMgX0JJMgogICAgICAgIGNvcHlfYl9uKF9CSTEgX19maXJzdCwgX0JJMSBf
X2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICAgICAgeyByZXR1cm4gX0JJMihzdGQ6Ol9fY29weV9i
YWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCkp
KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9ub3Jt
YWw8dHJ1ZSwgdHJ1ZT4KICAgIHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5h
bWUgX0JJMj4KICAgICAgICBzdGF0aWMgX0JJMgogICAgICAgIGNvcHlfYl9uKF9CSTEgX19maXJz
dCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICAgICAgeyByZXR1cm4gX0JJMihzdGQ6
Ol9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAg
ICAgICAgIF9fcmVzdWx0LmJhc2UoKSkpOyB9CiAgICB9OwojIDUwMiAiL3Vzci9pbmNsdWRlL2Mr
Ky80LjAuMC9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEs
IHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgY29weV9iYWNrd2FyZChfQkkxIF9f
Zmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgICA7CgogICAgICBjb25zdCBib29sIF9fYmkxID0gX19pc19ub3JtYWxfaXRlcmF0
b3I8X0JJMT46Ol9fdmFsdWU7CiAgICAgIGNvbnN0IGJvb2wgX19iaTIgPSBfX2lzX25vcm1hbF9p
dGVyYXRvcjxfQkkyPjo6X192YWx1ZTsKICAgICAgcmV0dXJuIHN0ZDo6X19jb3B5X2JhY2t3YXJk
X25vcm1hbDxfX2JpMSwgX19iaTI+Ojpjb3B5X2JfbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg
IF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8Ym9vbD4KICAgIHN0cnVjdCBfX2ZpbGwKICAg
IHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1Rw
PgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgZmlsbChfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCiAg
ICAgICAgewogICBmb3IgKDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAqX19m
aXJzdCA9IF9fdmFsdWU7CiB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19maWxs
PHRydWU+CiAgICB7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5
cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIGZpbGwoX0ZvcndhcmRJdGVy
YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgY29uc3QgX1RwJiBf
X3ZhbHVlKQogICAgICAgIHsKICAgY29uc3QgX1RwIF9fdG1wID0gX192YWx1ZTsKICAgZm9yICg7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgKl9fZmlyc3QgPSBfX3RtcDsKIH0K
ICAgIH07CiMgNTU4ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAg
ICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICA7CgogICAg
ICBjb25zdCBib29sIF9fc2NhbGFyID0gX19pc19zY2FsYXI8X1RwPjo6X192YWx1ZTsKICAgICAg
c3RkOjpfX2ZpbGw8X19zY2FsYXI+OjpmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAg
ICB9CgoKICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWdu
ZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgOwogICAg
Y29uc3QgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIHN0ZDo6bWVtc2V0KF9fZmlyc3Qs
IF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChzaWdu
ZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3Qgc2lnbmVkIGNoYXIm
IF9fYykKICB7CiAgICA7CiAgICBjb25zdCBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIHN0
ZDo6bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19s
YXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwg
Y2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAgewogICAgOwogICAgY29uc3QgY2hhciBf
X3RtcCA9IF9fYzsKICAgIHN0ZDo6bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTxib29sPgog
ICAgc3RydWN0IF9fZmlsbF9uCiAgICB7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJ
dGVyYXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgX091
dHB1dEl0ZXJhdG9yCiAgICAgICAgZmlsbF9uKF9PdXRwdXRJdGVyYXRvciBfX2ZpcnN0LCBfU2l6
ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgICAgICB7CiAgIGZvciAoOyBfX24gPiAwOyAt
LV9fbiwgKytfX2ZpcnN0KQogICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgcmV0dXJuIF9fZmly
c3Q7CiB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19maWxsX248dHJ1ZT4KICAg
IHsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfU2l6
ZSwgdHlwZW5hbWUgX1RwPgogICAgICAgIHN0YXRpYyBfT3V0cHV0SXRlcmF0b3IKICAgICAgICBm
aWxsX24oX091dHB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3Zh
bHVlKQogICAgICAgIHsKICAgY29uc3QgX1RwIF9fdG1wID0gX192YWx1ZTsKICAgZm9yICg7IF9f
biA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgKl9fZmlyc3QgPSBfX3RtcDsKICAgcmV0dXJu
IF9fZmlyc3Q7CiB9CiAgICB9OwojIDYzNCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBl
bmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXJhdG9yCiAgICBmaWxsX24o
X091dHB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQog
ICAgewoKICAgICAKCiAgICAgIGNvbnN0IGJvb2wgX19zY2FsYXIgPSBfX2lzX3NjYWxhcjxfVHA+
OjpfX3ZhbHVlOwogICAgICByZXR1cm4gc3RkOjpfX2ZpbGxfbjxfX3NjYWxhcj46OmZpbGxfbihf
X2ZpcnN0LCBfX24sIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4K
ICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBzdGQ6
OmZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3Qg
KyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIHNpZ25l
ZCBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qgc2lnbmVk
IGNoYXImIF9fYykKICAgIHsKICAgICAgc3RkOjpmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24s
IF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9T
aXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBzdGQ6OmZpbGwoX19maXJzdCwg
X19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMg
NjgxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMj4K
ICAgIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+CiAgICBtaXNtYXRjaChf
SW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogICAgICBf
SW5wdXRJdGVyYXRvcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAg
IDsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19m
aXJzdDIpCiAgICAgICAgewogICArK19fZmlyc3QxOwogICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcmF0b3IxLCBfSW5wdXRJdGVyYXRvcjI+KF9fZmly
c3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNzE2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5
cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAg
ICBwYWlyPF9JbnB1dEl0ZXJhdG9yMSwgX0lucHV0SXRlcmF0b3IyPgogICAgbWlzbWF0Y2goX0lu
cHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgX0lu
cHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAogICAgICA7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICB7CiAgICsr
X19maXJzdDE7CiAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5w
dXRJdGVyYXRvcjEsIF9JbnB1dEl0ZXJhdG9yMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0K
IyA3NDYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3Iy
PgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcmF0b3IxIF9fbGFzdDEsCiAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MikKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAgOwoKICAgICAgZm9yICg7IF9fZmlyc3QxICE9IF9f
bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiBpZiAoISgqX19maXJzdDEgPT0gKl9fZmly
c3QyKSkKICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3NzggIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAogICAgdHlw
ZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVhbChfSW5wdXRJ
dGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogICBfSW5wdXRJdGVy
YXRvcjIgX19maXJzdDIsCiAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgIDsKCiAgICAgIGZvciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkKICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA4MTAg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyPgogICAg
Ym9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcmF0b3IxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgoKICAgICAgOwogICAgICA7CgogICAgICBmb3IgKDsgX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKIHsKICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICByZXR1cm4gdHJ1ZTsKICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAgICAgIHJldHVybiBfX2Zp
cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CiMgODUwICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMiwKICAgIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0
SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgIF9JbnB1
dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCiAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgICA7CiAgICAgIDsKCiAgICAgIGZv
ciAoOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICArK19f
Zmlyc3QxLCArK19fZmlyc3QyKQogewogICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkKICAgICByZXR1cm4gdHJ1ZTsKICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIs
CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICA7CiAgICA7CgogICAg
Y29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNvbnN0IHNpemVf
dCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19yZXN1bHQgPSBz
dGQ6Om1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsCiAgICAgICAgIHN0ZDo6bWluKF9fbGVuMSwg
X19sZW4yKSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVu
MSA8IF9fbGVuMjsKICB9CgogIGlubGluZSBib29sCiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo
Y29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgY29uc3QgY2hh
ciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCiAgewogICAgOwogICAgOwoKCiAgICBy
ZXR1cm4gc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2ZpcnN0MSwKICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIp
OwoKCgoKCgogIH0KCn0KIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9hbGdvcml0aG0iIDIg
MwojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwoj
IDY3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgog
ICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1
ZSkKICAgIHsKCgogICAgICA6Om5ldyhzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFs
dWUpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDE+CiAgICBpbmxpbmUgdm9p
ZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsKCgogICAgICA6Om5ldyhzdGF0aWNfY2Fz
dDx2b2lkKj4oX19wKSkgX1QxKCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3Bv
aW50ZXItPn5fVHAoKTsgfQojIDExNiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9j
b25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBp
bmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgX19mYWxzZV90eXBlKQogICAgewogICAgICBmb3Ig
KDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKIHN0ZDo6X0Rlc3Ryb3koJipfX2ZpcnN0
KTsKICAgIH0KIyAxMzQgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfY29uc3RydWN0
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZv
aWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwg
X190cnVlX3R5cGUpCiAgICB7IH0KIyAxNDYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9z
dGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgog
ICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAg
ICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpfX2lzX3NjYWxh
cjxfVmFsdWVfdHlwZT46Ol9fdHlwZQogICAgICAgICAgICAgICAgX0hhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CgogICAgICBzdGQ6Ol9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcigpKTsKICAgIH0KIyAxNjYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwPiBjbGFzcyBh
bGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1l
IF9BbGxvY2F0b3I+CiAgICB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICBfQWxsb2NhdG9yIF9fYWxsb2MpCiAg
ICB7CiAgICAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogX19hbGxvYy5k
ZXN0cm95KCYqX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cmF0b3IsIHR5cGVuYW1lIF9BbGxvY2F0b3IsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lk
CiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LAogICAgICBhbGxvY2F0b3I8X1RwPikKICAgIHsKICAgICAgX0Rlc3Ryb3koX19maXJz
dCwgX19sYXN0KTsKICAgIH0KCgp9CiMgNjcgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYWxnb3Jp
dGhtIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX3VuaW5pdGlhbGl6
ZWQuaCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfdW5pbml0aWFs
aXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy
YXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXJh
dG9yCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQs
CiAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBzdGQ6OmNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgogICAg
X191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LAogICAgICAg
IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2N1ciA9IF9fcmVz
dWx0OwogICAgICBpZiAodHJ1ZSkKIHsKICAgZm9yICg7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QsICsrX19jdXIpCiAgICAgc3RkOjpfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsK
ICAgcmV0dXJuIF9fY3VyOwogfQogICAgICBpZiAoZmFsc2UpCiB7CiAgIHN0ZDo6X0Rlc3Ryb3ko
X19yZXN1bHQsIF9fY3VyKTsKICAgOwogfQogICAgfQojIDEwNSAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSBfRm9yd2Fy
ZEl0ZXJhdG9yCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0
ZDo6X19pc19zY2FsYXI8X1ZhbHVlVHlwZT46Ol9fdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4g
c3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwK
ICAgICAgICBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioKICB1bmluaXRpYWxpemVk
X2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBfX3Jl
c3VsdCkKICB7CiAgICBzdGQ6Om1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9f
Zmlyc3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAg
aW5saW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmly
c3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQogIHsK
ICAgIHN0ZDo6bWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9f
bGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0
KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBzdGQ6OmZpbGwoX19maXJzdCwg
X19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5
cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19j
dXIgPSBfX2ZpcnN0OwogICAgICBpZiAodHJ1ZSkKIHsKICAgZm9yICg7IF9fY3VyICE9IF9fbGFz
dDsgKytfX2N1cikKICAgICBzdGQ6Ol9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKIH0KICAgICAg
aWYgKGZhbHNlKQogewogICBzdGQ6Ol9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgOwogfQog
ICAgfQojIDE2NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF91bmluaXRpYWxpemVk
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX194
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0
ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0
ZDo6X19pc19zY2FsYXI8X1ZhbHVlVHlwZT46Ol9fdHlwZSBfSXNfUE9EOwogICAgICBzdGQ6Ol9f
dW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsK
ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBf
U2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9m
aWxsX25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAg
Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBzdGQ6OmZpbGxfbihfX2ZpcnN0LCBf
X24sIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxs
X25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgY29u
c3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X2N1ciA9IF9fZmlyc3Q7CiAgICAgIGlmICh0cnVlKQogewogICBmb3IgKDsgX19uID4gMDsgLS1f
X24sICsrX19jdXIpCiAgICAgc3RkOjpfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiB9CiAgICAg
IGlmIChmYWxzZSkKIHsKICAgc3RkOjpfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgIDsKIH0K
ICAgIH0KIyAyMTIgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfdW5pbml0aWFsaXpl
ZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1Np
emUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICB1bmluaXRpYWxpemVkX2ZpbGxf
bihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpf
X2lzX3NjYWxhcjxfVmFsdWVUeXBlPjo6X190eXBlIF9Jc19QT0Q7CiAgICAgIHN0ZDo6X191bmlu
aXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9
CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXJhdG9yLAogICAgdHlwZW5hbWUgX0FsbG9jYXRvcj4KICAgIF9Gb3J3YXJkSXRlcmF0
b3IKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2EoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LAogICAg
ICBfQWxsb2NhdG9yIF9fYWxsb2MpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIg
PSBfX3Jlc3VsdDsKICAgICAgaWYgKHRydWUpCiB7CiAgIGZvciAoOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgIF9fYWxsb2MuY29uc3RydWN0KCYqX19jdXIsICpf
X2ZpcnN0KTsKICAgcmV0dXJuIF9fY3VyOwogfQogICAgICBpZiAoZmFsc2UpCiB7CiAgIHN0ZDo6
X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyLCBfX2FsbG9jKTsKICAgOwogfQogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwg
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IKICAgIF9fdW5pbml0aWFs
aXplZF9jb3B5X2EoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0LAogICAgICBhbGxvY2F0b3I8X1RwPikK
ICAgIHsKICAgICAgcmV0dXJuIHN0ZDo6dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9y
LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICB2b2lkCiAgICBfX3VuaW5p
dGlhbGl6ZWRfZmlsbF9hKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgIGNvbnN0IF9UcCYgX194LCBfQWxsb2NhdG9yIF9fYWxsb2MpCiAgICB7
CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19jdXIgPSBfX2ZpcnN0OwogICAgICBpZiAodHJ1ZSkK
IHsKICAgZm9yICg7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICBfX2FsbG9jLmNvbnN0
cnVjdCgmKl9fY3VyLCBfX3gpOwogfQogICAgICBpZiAoZmFsc2UpCiB7CiAgIHN0ZDo6X0Rlc3Ry
b3koX19maXJzdCwgX19jdXIsIF9fYWxsb2MpOwogICA7CiB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMj4KICAg
IGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hKF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgIGNvbnN0IF9UcCYgX194LCBh
bGxvY2F0b3I8X1RwMj4pCiAgICB7CiAgICAgIHN0ZDo6dW5pbml0aWFsaXplZF9maWxsKF9fZmly
c3QsIF9fbGFzdCwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
YXRvciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcCwKICAgIHR5cGVuYW1lIF9BbGxvY2F0
b3I+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2EoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgX0Fs
bG9jYXRvciBfX2FsbG9jKQogICAgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fY3VyID0gX19m
aXJzdDsKICAgICAgaWYgKHRydWUpCiB7CiAgIGZvciAoOyBfX24gPiAwOyAtLV9fbiwgKytfX2N1
cikKICAgICBfX2FsbG9jLmNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogfQogICAgICBpZiAoZmFs
c2UpCiB7CiAgIHN0ZDo6X0Rlc3Ryb3koX19maXJzdCwgX19jdXIsIF9fYWxsb2MpOwogICA7CiB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9T
aXplLCB0eXBlbmFtZSBfVHAsCiAgICB0eXBlbmFtZSBfVHAyPgogICAgdm9pZAogICAgX191bmlu
aXRpYWxpemVkX2ZpbGxfbl9hKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX1NpemUgX19uLAog
ICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgIGFsbG9jYXRvcjxfVHAyPikKICAgIHsKICAg
ICAgc3RkOjp1bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CiAgICB9CiMg
MzIzICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0
b3IyLAogICAgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX0FsbG9jYXRvcj4K
ICAgIGlubGluZSBfRm9yd2FyZEl0ZXJhdG9yCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5
KF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwKICAgICAgICAgX0lucHV0SXRlcmF0b3IxIF9fbGFz
dDEsCiAgICAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwKICAgICAgICAgX0lucHV0SXRl
cmF0b3IyIF9fbGFzdDIsCiAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsCiAgICAg
ICAgIF9BbGxvY2F0b3IgX19hbGxvYykKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21p
ZCA9IHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0MSwgX19sYXN0MSwKICAgICAg
ICAgIF9fcmVzdWx0LAogICAgICAgICAgX19hbGxvYyk7CiAgICAgIGlmICh0cnVlKQogewogICBy
ZXR1cm4gc3RkOjpfX3VuaW5pdGlhbGl6ZWRfY29weV9hKF9fZmlyc3QyLCBfX2xhc3QyLCBfX21p
ZCwgX19hbGxvYyk7CiB9CiAgICAgIGlmIChmYWxzZSkKIHsKICAgc3RkOjpfRGVzdHJveShfX3Jl
c3VsdCwgX19taWQsIF9fYWxsb2MpOwogICA7CiB9CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lucHV0SXRlcmF0
b3IsCiAgICB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcmF0b3IK
ICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCwg
X0ZvcndhcmRJdGVyYXRvciBfX21pZCwKICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
X0FsbG9jYXRvciBfX2FsbG9jKQogICAgewogICAgICBzdGQ6Ol9fdW5pbml0aWFsaXplZF9maWxs
X2EoX19yZXN1bHQsIF9fbWlkLCBfX3gsIF9fYWxsb2MpOwogICAgICBpZiAodHJ1ZSkKIHsKICAg
cmV0dXJuIHN0ZDo6X191bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlk
LCBfX2FsbG9jKTsKIH0KICAgICAgaWYgKGZhbHNlKQogewogICBzdGQ6Ol9EZXN0cm95KF9fcmVz
dWx0LCBfX21pZCwgX19hbGxvYyk7CiAgIDsKIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9U
cCwKICAgIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRp
YWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0MiwKICAgICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX2xhc3QyLCBjb25zdCBfVHAmIF9feCwKICAgICAgICAgX0FsbG9jYXRv
ciBfX2FsbG9jKQogICAgewogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkMiA9IHN0ZDo6X191
bmluaXRpYWxpemVkX2NvcHlfYShfX2ZpcnN0MSwgX19sYXN0MSwKICAgICAgICAgICBfX2ZpcnN0
MiwKICAgICAgICAgICBfX2FsbG9jKTsKICAgICAgaWYgKHRydWUpCiB7CiAgIHN0ZDo6X191bmlu
aXRpYWxpemVkX2ZpbGxfYShfX21pZDIsIF9fbGFzdDIsIF9feCwgX19hbGxvYyk7CiB9CiAgICAg
IGlmIChmYWxzZSkKIHsKICAgc3RkOjpfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyLCBfX2FsbG9j
KTsKICAgOwogfQogICAgfQoKfQojIDY4ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2FsZ29yaXRo
bSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDEgMwoj
IDY0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg
ICBib29sCiAgICBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0
YW5jZSBfX24pCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgICAgIGZvciAo
X0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpCiB7CiAgIGlm
IChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19jaGlsZF0pCiAgICAgcmV0dXJuIGZhbHNl
OwogICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICsrX19wYXJlbnQ7CiB9CiAgICAgIHJl
dHVybiB0cnVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfU3RyaWN0V2Vha09y
ZGVyaW5nPgogICAgYm9vbAogICAgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgIF9EaXN0YW5jZSBfX24pCiAg
ICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9f
Y2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpCiB7CiAgIGlmIChfX2NvbXAoX19m
aXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAgIHJldHVybiBmYWxzZTsKICAg
aWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAgICArK19fcGFyZW50OwogfQogICAgICByZXR1cm4g
dHJ1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgog
ICAgYm9vbAogICAgX19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgeyByZXR1cm4gc3RkOjpfX2lzX2hlYXAoX19m
aXJzdCwgc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9TdHJpY3RXZWFrT3JkZXJpbmc+
CiAgICBib29sCiAgICBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2Nv
bXApCiAgICB7IHJldHVybiBzdGQ6Ol9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIHN0ZDo6ZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0KSk7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9p
ZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgX0Rpc3Rh
bmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7
CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAg
d2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg
PCBfX3ZhbHVlKQogewogICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBf
X3BhcmVudCk7CiAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgIF9fcGFyZW50ID0gKF9faG9s
ZUluZGV4IC0gMSkgLyAyOwogfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh
bHVlOwogICAgfQojIDEzOSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9oZWFwLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUg
dm9pZAogICAgcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg
IAogICAgICA7CgoKICAgICAgc3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBl
KChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLAogICAgICAgICBfRGlzdGFuY2VUeXBlKDApLCBfVmFs
dWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgX0Rpc3RhbmNlIF9fdG9w
SW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j
ZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUlu
ZGV4ID4gX190b3BJbmRleAogICAgICAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBf
X3ZhbHVlKSkKIHsKICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19w
YXJlbnQpOwogICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICBfX3BhcmVudCA9IChfX2hvbGVJ
bmRleCAtIDEpIC8gMjsKIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1
ZTsKICAgIH0KIyAxODcgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfaGVhcC5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgIDsKICAgICAgOwoKICAg
ICAgc3RkOjpfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2Zp
cnN0KSAtIDEpLAogICAgICAgICBfRGlzdGFuY2VUeXBlKDApLCBfVmFsdWVUeXBlKCooX19sYXN0
IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAg
X19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9f
aG9sZUluZGV4LAogICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAg
Y29uc3QgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNl
IF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNv
bmRDaGlsZCA8IF9fbGVuKQogewogICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAq
KF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICBfX3NlY29uZENoaWxkLS07CiAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwog
ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9f
c2Vjb25kQ2hpbGQgKyAxKTsKIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pCiB7
CiAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
IC0gMSkpOwogICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogfQogICAgICBzdGQ6
Ol9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHN0
ZDo6X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3Qg
LSBfX2ZpcnN0KSwKICAgIF9fdmFsdWUpOwogICAgfQojIDI1MSAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF9oZWFwLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZh
bHVlX3R5cGUKIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCiAgICAgIDsKICAgICAgOwoKICAg
ICAgc3RkOjpfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsCiAgICAg
ICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgdHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fYWRqdXN0X2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgIF9EaXN0
YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgY29u
c3QgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9f
c2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRD
aGlsZCA8IF9fbGVuKQogewogICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQp
LAogICAgICAgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgIF9fc2Vjb25k
Q2hpbGQtLTsKICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNv
bmRDaGlsZCk7CiAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgX19zZWNvbmRDaGls
ZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9
PSBfX2xlbikKIHsKICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9f
c2Vjb25kQ2hpbGQgLSAxKSk7CiAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiB9
CiAgICAgIHN0ZDo6X19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgs
IF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2
b2lkCiAgICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jl
c3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCiBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBzdGQ6
Ol9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0g
X19maXJzdCksCiAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQojIDMxNyAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9iaXRzL3N0bF9oZWFwLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBv
cF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKICAgICAgOwog
ICAgICA7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFsdWVUeXBlOwogICAgICBzdGQ6Ol9fcG9wX2hl
YXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwKICAgICAgICBfVmFsdWVUeXBlKCoo
X19sYXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQojIDM0MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC9iaXRzL3N0bF9oZWFwLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgIF9EaXN0YW5jZVR5cGU7CgoK
ICAgICAKCiAgICAgCiAgICAgIDsKCiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikKIHJl
dHVybjsKCiAgICAgIGNvbnN0IF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikgLyAyOwogICAgICB3
aGlsZSAodHJ1ZSkKIHsKICAgc3RkOjpfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBf
X2xlbiwKICAgICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICBpZiAo
X19wYXJlbnQgPT0gMCkKICAgICByZXR1cm47CiAgIF9fcGFyZW50LS07CiB9CiAgICB9CiMgMzgy
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2hlYXAuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp
bmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlCiAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICBf
RGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgICA7CgogICAgICBpZiAoX19sYXN0IC0gX19maXJz
dCA8IDIpCiByZXR1cm47CgogICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0
IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpIC8g
MjsKICAgICAgd2hpbGUgKHRydWUpCiB7CiAgIHN0ZDo6X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
X3BhcmVudCwgX19sZW4sCiAgICAgICAgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkp
LCBfX2NvbXApOwogICBpZiAoX19wYXJlbnQgPT0gMCkKICAgICByZXR1cm47CiAgIF9fcGFyZW50
LS07CiB9CiAgICB9CiMgNDIwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2hlYXAu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQK
ICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKICAgICAgOwoKCiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKIHN0ZDo6cG9wX2hlYXAoX19maXJzdCwgX19sYXN0
LS0pOwogICAgfQojIDQ0NiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9oZWFwLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewoKICAgICAKCiAgICAgIDsKICAgICAgOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPiAxKQogc3RkOjpwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAg
IH0KCn0KIyA2NSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
bWVtb3J5IiAzCiAgICAgICAKIyA1MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9tZW1vcnkiIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9hbGxvY2F0b3IuaCIgMSAzCiMgNTIg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9hbGxvY2F0b3IuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvcG93ZXJwYy1hcHBsZS1kYXJ3aW45L2JpdHMvYysrYWxsb2NhdG9yLmgi
IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL3Bvd2VycGMtYXBwbGUtZGFyd2luOS9i
aXRzL2MrK2FsbG9jYXRvci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9leHQvbmV3
X2FsbG9jYXRvci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9leHQvbmV3X2Fs
bG9jYXRvci5oIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBjbGFzcyBuZXdfYWxsb2NhdG9yCiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25z
dCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAg
IHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCBy
ZWJpbmQKICAgICAgICB7IHR5cGVkZWYgbmV3X2FsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKCiAg
ICAgIG5ld19hbGxvY2F0b3IoKSB0aHJvdygpIHsgfQoKICAgICAgbmV3X2FsbG9jYXRvcihjb25z
dCBuZXdfYWxsb2NhdG9yJikgdGhyb3coKSB7IH0KCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cDE+CiAgICAgICAgbmV3X2FsbG9jYXRvcihjb25zdCBuZXdfYWxsb2NhdG9yPF9UcDE+JikgdGhy
b3coKSB7IH0KCiAgICAgIH5uZXdfYWxsb2NhdG9yKCkgdGhyb3coKSB7IH0KCiAgICAgIHBvaW50
ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9Cgog
ICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29u
c3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKHNpemVf
dHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogaWYgKF9fYnVpbHRpbl9leHBlY3Qo
X19uID4gdGhpcy0+bWF4X3NpemUoKSwgZmFsc2UpKQogICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9j
KCk7CgogcmV0dXJuIHN0YXRpY19jYXN0PF9UcCo+KDo6b3BlcmF0b3IgbmV3KF9fbiAqIHNpemVv
ZihfVHApKSk7CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBf
X3AsIHNpemVfdHlwZSkKICAgICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNp
emVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKCgogICAgICB2b2lkCiAgICAgIGNvbnN0cnVjdChw
b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgICAgeyA6Om5ldyhfX3ApIF9UcChfX3Zh
bCk7IH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAo
KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPT0oY29uc3QgbmV3X2FsbG9jYXRvcjxfVHA+JiwgY29uc3QgbmV3X2FsbG9jYXRv
cjxfVHA+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbmV3X2FsbG9jYXRvcjxfVHA+Jiwg
Y29uc3QgbmV3X2FsbG9jYXRvcjxfVHA+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9Cn0KIyAzNSAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9wb3dlcnBjLWFwcGxlLWRhcndpbjkvYml0cy9jKythbGxv
Y2F0b3IuaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9hbGxvY2F0b3Iu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFz
cyBhbGxvY2F0b3I7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRl
cjsKICAgICAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAg
c3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07
CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxvY2F0
b3I6IHB1YmxpYyBfX2dudV9jeHg6Om5ld19hbGxvY2F0b3I8X1RwPgogICAgewogICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRl
ZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0
cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOyB9OwoK
ICAgICAgYWxsb2NhdG9yKCkgdGhyb3coKSB7IH0KCiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxv
Y2F0b3ImIF9fYSkgdGhyb3coKQogICAgICA6IF9fZ251X2N4eDo6bmV3X2FsbG9jYXRvcjxfVHA+
KF9fYSkgeyB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGFsbG9jYXRv
cihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpIHsgfQoKICAgICAgfmFsbG9jYXRvcigp
IHRocm93KCkgeyB9CgoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUg
X1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UMSwgdHlwZW5hbWUgX1QyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
IT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCiAgICB7IHJl
dHVybiBmYWxzZTsgfQoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwoKCgoKfQojIDU1
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvdXNyL2lu
Y2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4K
ICAgIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRw
dXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVj
dGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBl
eHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkK
ICAgICAgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkKICAgICAgewogc3RkOjpf
Q29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKIHJldHVybiAqdGhpczsKICAgICAgfQoK
ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAg
b3BlcmF0b3IrKygpCiAgICAgIHsKICsrX01faXRlcjsKIHJldHVybiAqdGhpczsKICAgICAgfQoK
ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBv
cGVyYXRvcisrKGludCkKICAgICAgewogcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVy
YXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogKytfTV9pdGVyOwogcmV0dXJuIF9fdG1wOwogICAg
ICB9CiAgICB9Owp9CiMgNTkgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvbWVtb3J5IiAyIDMKCiMg
MSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9saW1pdHMiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUv
YysrLzQuMC4wL2xpbWl0cyIgMwogICAgICAgCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
bGltaXRzIiAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2xpbWl0cyIgMwpuYW1lc3Bh
Y2Ugc3RkCnsKCgoKCgogIGVudW0gZmxvYXRfcm91bmRfc3R5bGUKICB7CiAgICByb3VuZF9pbmRl
dGVybWluYXRlID0gLTEsCiAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICByb3VuZF90b19u
ZWFyZXN0ID0gMSwKICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICByb3VuZF90b3dh
cmRfbmVnX2luZmluaXR5ID0gMwogIH07CgoKCgoKCgogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxl
CiAgewoKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCgogICAgZGVub3JtX2Fic2VudCA9
IDAsCgogICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgfTsKIyAxOTEgIi91c3IvaW5jbHVkZS9jKysv
NC4wLjAvbGltaXRzIiAzCiAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQogIHsKCgogICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCgoKCiAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7
CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CgoKCgoKICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKCgoKCiAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IGZhbHNlOwoKCiAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCgoK
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKCgogICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CgoKCiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKCiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKCgogICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwoKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CgoKICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKCgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj
NTU5ID0gZmFsc2U7CgoKCiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7
CgoKCgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgoKICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CgoKCiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg
cm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICB9OwojIDI4NCAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9saW1pdHMiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CgoKICAg
ICAgc3RhdGljIF9UcCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7
IH0KCiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxf
VHA+KDApOyB9CgoKICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhy
b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICBzdGF0aWMgX1RwIGlu
ZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICBz
dGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigw
KTsgfQoKCiAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKCgogICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0
aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgIH07CgoKCgoKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wg
ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJv
b2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9v
bCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm
YWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8IDApID8g
KGNoYXIpMSA8PCAoc2l6ZW9mKGNoYXIpICogOCAtICgoY2hhcikoLTEpIDwgMCkpIDogKGNoYXIp
MCk7IH0KICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoKChj
aGFyKSgtMSkgPCAwKSA/ICgoY2hhcikxIDw8IChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgt
MSkgPCAwKSkpIC0gMSA6IH4oY2hhcikwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSAoc2l6ZW9mKGNoYXIpICogOCAtICgoY2hhcikoLTEpIDwgMCkpOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAw
KSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gKChj
aGFyKSgtMSkgPCAwKTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K
ICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFy
KCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWdu
ZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC0xMjcgLSAxOyB9CiAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHNpZ25lZCBjaGFyKSAqIDggLSAo
KHNpZ25lZCBjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSAoKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0gKChzaWduZWQgY2hhcikoLTEpIDwgMCkpICog
NjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg
fQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWdu
ZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxz
aWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVk
IGNoYXIpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6
ZW9mKHVuc2lnbmVkIGNoYXIpICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQz
IC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgogIHRlbXBsYXRl
PD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90PgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgd2NoYXJfdCBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKHdjaGFyX3QpKC0xKSA8IDApID8gKHdjaGFy
X3QpMSA8PCAoc2l6ZW9mKHdjaGFyX3QpICogOCAtICgod2NoYXJfdCkoLTEpIDwgMCkpIDogKHdj
aGFyX3QpMCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAoKCh3Y2hhcl90KSgtMSkgPCAwKSA/ICgod2NoYXJfdCkxIDw8IChzaXplb2Yod2NoYXJf
dCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkpIC0gMSA6IH4od2NoYXJfdCkwKTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHdjaGFyX3QpICogOCAtICgod2No
YXJfdCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXpl
b2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gKCh3Y2hhcl90KSgtMSkgPCAwKTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgc3RhdGljIHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx
MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hh
cl90IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAg
c3RhdGljIHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90
KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAtMzI3NjcgLSAxOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3OyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IChzaXplb2Yoc2hvcnQpICogOCAtICgoc2hvcnQpKC0xKSA8IDApKTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHNob3J0KSAqIDggLSAoKHNo
b3J0KSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0
eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgp
OyB9CiAgICAgIHN0YXRpYyBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2ln
bmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2NyAqIDJVICsg
MTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KSAqIDggLSAoKHVuc2lnbmVkIHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4IC0gKCh1bnNpZ25l
ZCBzaG9ydCkoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNo
b3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8aW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICBzdGF0aWMgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gLTIx
NDc0ODM2NDcgLSAxOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAyMTQ3NDgzNjQ3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXpl
b2YoaW50KSAqIDggLSAoKGludCkoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gKChzaXplb2YoaW50KSAqIDggLSAoKGludCkoLTEpIDwgMCkpICogNjQzIC8gMjEz
Nik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz
dGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh
dGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsg
fQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0
NyAqIDJVICsgMTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKHVu
c2lnbmVkIGludCkgKiA4IC0gKCh1bnNpZ25lZCBpbnQpKC0xKSA8IDApKTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiA4IC0gKCh1bnNp
Z25lZCBpbnQpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGlu
Z19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNf
ZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQg
c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nPgogICAgewog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0
aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC0yMTQ3NDgzNjQ3TCAtIDE7IH0K
ICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3
TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKGxvbmcpICogOCAt
ICgobG9uZykoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChz
aXplb2YobG9uZykgKiA4IC0gKChsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25n
IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWll
dF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAg
ICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3Rh
dGljIHVuc2lnbmVkIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4
MzY0N0wgKiAyVUwgKyAxOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXpl
b2YodW5zaWduZWQgbG9uZykgKiA4IC0gKCh1bnNpZ25lZCBsb25nKSgtMSkgPCAwKSk7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDgg
LSAoKHVuc2lnbmVkIGxvbmcpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu
c2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlu
ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8bG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDE7IH0KICAgICAgc3RhdGljIGxvbmcg
bG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9mKGxvbmcgbG9uZykgKiA4
IC0gKChsb25nIGxvbmcpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9ICgoc2l6ZW9mKGxvbmcgbG9uZykgKiA4IC0gKChsb25nIGxvbmcpKC0xKSA8IDApKSAqIDY0
MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
OyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBs
b25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg
ICB9OwoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxv
bmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0
cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZyBsb25n
KSAqIDggLSAoKHVuc2lnbmVkIGxvbmcgbG9uZykoLTEpIDwgMCkpOwogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSAqIDggLSAoKHVu
c2lnbmVkIGxvbmcgbG9uZykoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9
IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9u
ZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigw
KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGZs
b2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE3NTQ5
NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdl
ciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTdGOyB9CiAgICAgIHN0YXRpYyBm
bG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC41RjsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEyNSk7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAoLTM3KTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAz
ODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IDE7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSAxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogPSBib29sKDEuNDAxMjk4NDZlLTQ1RikgPyBkZW5v
cm1fcHJlc2VudCA6IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGZsb2F0IGluZmluaXR5KCkgdGhyb3co
KQogICAgICB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWxmICgpOyB9CiAgICAgIHN0YXRpYyBm
bG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5mICgi
Iik7IH0KICAgICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIF9fYnVpbHRpbl9uYW5zZiAoIiIpOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjQwMTI5ODQ2ZS00NUY7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OQogPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0X05h
TiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKICAgIH07
CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
c3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3
MjAxNGUtMzA4OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSA1MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZG91
YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUt
MTY7IH0KICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMC41OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9ICgtMTAy
MSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAoLTMwNyk7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IDE7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSAxOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogPSBib29s
KDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0KSA/IGRlbm9ybV9wcmVzZW50IDogZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0
aW5faHVnZV92YWwoKTsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbiAoIiIpOyB9CiAgICAgIHN0YXRpYyBkb3VibGUg
c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX25hbnMgKCIi
KTsgfQogICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkKID0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYgaGFzX2Rlbm9ybSA9
PSBkZW5vcm1fcHJlc2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7CiAgICB9OwoKCgoKCgogIHRlbXBsYXRl
PD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcg
ZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4wMDQxNjgzNjAwMDg5NzI3Nzc5
OTYxMDgwNTEzNTAxNmUtMjkyTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhy
b3coKQogICAgICB7IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTgwNzkzNzI4OTcxNDA1MzAxZSsz
MDhMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDEwNjsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gNC45NDA2NTY0NTg0MTI0NjU0NDE3NjU2ODc5Mjg2ODIyMWUtMzI0
TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDAuNUw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
KC05NjgpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gKC0yOTEpOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSAxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
MTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBoYXNfcXVpZXRf
TmFOOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0KID0g
Ym9vbCg0Ljk0MDY1NjQ1ODQxMjQ2NTQ0MTc2NTY4NzkyODY4MjIxZS0zMjRMKSA/IGRlbm9ybV9w
cmVzZW50IDogZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzCiA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5faHVnZV92YWxsICgpOyB9CiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRp
bl9uYW5sICgiIik7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5zbCAoIiIpOyB9CiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiA0Ljk0MDY1
NjQ1ODQxMjQ2NTQ0MTc2NTY4NzkyODY4MjIxZS0zMjRMOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkKID0gaGFzX2luZmluaXR5ICYmIGhhc19xdWlldF9OYU4gJiYgaGFzX2Rl
bm9ybSA9PSBkZW5vcm1fcHJlc2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3RvX25lYXJlc3Q7CiAgICB9OwoKCgoKCn0KIyA2
MSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9tZW1vcnkiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMg
NzIgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CiAgICBfX2dldF90ZW1wb3JhcnlfYnVmZmVy
KHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKICAgIHsKICAgICAgY29uc3QgcHRyZGlmZl90IF9fbWF4
ID0gbnVtZXJpY19saW1pdHM8cHRyZGlmZl90Pjo6bWF4KCkgLyBzaXplb2YoX1RwKTsKICAgICAg
aWYgKF9fbGVuID4gX19tYXgpCiBfX2xlbiA9IF9fbWF4OwoKICAgICAgd2hpbGUgKF9fbGVuID4g
MCkKIHsKICAgX1RwKiBfX3RtcCA9IHN0YXRpY19jYXN0PF9UcCo+KDo6b3BlcmF0b3IgbmV3KF9f
bGVuICogc2l6ZW9mKF9UcCksCiAgICAgICBub3Rocm93KSk7CiAgIGlmIChfX3RtcCAhPSAwKQog
ICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgX19sZW4g
Lz0gMjsKIH0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihzdGF0aWNfY2FzdDxf
VHAqPigwKSwgMCk7CiAgICB9CiMgMTA4ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZf
dD4KICAgIGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikKICAgIHsgcmV0dXJu
IHN0ZDo6X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgc3RhdGljX2Nhc3Q8X1RwKj4oMCkp
OyB9CiMgMTIwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19w
KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3AsIG5vdGhyb3cpOyB9CiMgMTMyICIvdXNyL2lu
Y2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBz
dHJ1Y3QgYXV0b19wdHJfcmVmCiAgICB7CiAgICAgIF9UcDEqIF9NX3B0cjsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApOiBfTV9wdHIoX19wKSB7IH0KICAgIH07
CiMgMTczICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGNsYXNzIGF1dG9fcHRyCiAgICB7CiAgICBwcml2YXRlOgogICAgICBfVHAq
IF9NX3B0cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoK
CgoKCgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cihlbGVtZW50X3R5cGUqIF9fcCA9IDAp
IHRocm93KCkgOiBfTV9wdHIoX19wKSB7IH0KIyAxOTkgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
bWVtb3J5IiAzCiAgICAgIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIo
X19hLnJlbGVhc2UoKSkgeyB9CiMgMjExICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIg
MwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGF1dG9fcHRyKGF1dG9fcHRy
PF9UcDE+JiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjIyICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogICAgICBhdXRvX3B0ciYKICAgICAgb3Bl
cmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICAgICAgewogcmVzZXQoX19hLnJlbGVhc2Uo
KSk7CiByZXR1cm4gKnRoaXM7CiAgICAgIH0KIyAyMzkgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
bWVtb3J5IiAzCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYXV0b19wdHIm
CiAgICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgICAgICB7
CiAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICByZXR1cm4gKnRoaXM7CiB9CiMgMjU5ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogICAgICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBf
TV9wdHI7IH0KIyAyNjkgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvbWVtb3J5IiAzCiAgICAgIGVs
ZW1lbnRfdHlwZSYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKQogICAgICB7CiA7CiBy
ZXR1cm4gKl9NX3B0cjsKICAgICAgfQoKCgoKCgoKICAgICAgZWxlbWVudF90eXBlKgogICAgICBv
cGVyYXRvci0+KCkgY29uc3QgdGhyb3coKQogICAgICB7CiA7CiByZXR1cm4gX01fcHRyOwogICAg
ICB9CiMgMjk5ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogICAgICBlbGVtZW50
X3R5cGUqCiAgICAgIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMzEz
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogICAgICBlbGVtZW50X3R5cGUqCiAg
ICAgIHJlbGVhc2UoKSB0aHJvdygpCiAgICAgIHsKIGVsZW1lbnRfdHlwZSogX190bXAgPSBfTV9w
dHI7CiBfTV9wdHIgPSAwOwogcmV0dXJuIF9fdG1wOwogICAgICB9CiMgMzI4ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL21lbW9yeSIgMwogICAgICB2b2lkCiAgICAgIHJlc2V0KGVsZW1lbnRfdHlw
ZSogX19wID0gMCkgdGhyb3coKQogICAgICB7CiBpZiAoX19wICE9IF9NX3B0cikKICAgewogICAg
IGRlbGV0ZSBfTV9wdHI7CiAgICAgX01fcHRyID0gX19wOwogICB9CiAgICAgIH0KIyAzNDkgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvbWVtb3J5IiAzCiAgICAgIGF1dG9fcHRyKGF1dG9fcHRyX3Jl
ZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAgIDogX01fcHRyKF9fcmVmLl9NX3B0
cikgeyB9CgogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVt
ZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICAgIHsKIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhp
cy0+Z2V0KCkpCiAgIHsKICAgICBkZWxldGUgX01fcHRyOwogICAgIF9NX3B0ciA9IF9fcmVmLl9N
X3B0cjsKICAgfQogcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAxPgogICAgICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsgfQoKICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBvcGVyYXRvciBhdXRvX3B0cjxfVHAx
PigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNl
KCkpOyB9CiAgfTsKfQojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX3RlbXBi
dWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIK
ICAgIHsKCiAgICAgCgogcHVibGljOgogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAg
ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgcG9pbnRlciBpdGVy
YXRvcjsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3Qgc2l6ZV90eXBlOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgc2l6ZV90eXBlIF9NX29yaWdpbmFsX2xlbjsKICAgICAgc2l6ZV90eXBlIF9NX2xlbjsK
ICAgICAgcG9pbnRlciBfTV9idWZmZXI7CgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVf
YnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01f
aW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBz
dGQ6OnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOyB9CgogICAg
cHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9sZW47IH0KCgogICAgICBzaXplX3R5cGUKICAgICAgcmVxdWVzdGVkX3NpemUoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCgogICAgICBpdGVyYXRvcgogICAg
ICBiZWdpbigpCiAgICAgIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGVuZCgpCiAgICAgIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKCgoKCiAgICAg
IF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QpOwoKICAgICAgfl9UZW1wb3JhcnlfYnVmZmVyKCkKICAgICAgewogc3RkOjpf
RGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiBzdGQ6OnJldHVybl90ZW1w
b3JhcnlfYnVmZmVyKF9NX2J1ZmZlcik7CiAgICAgIH0KCiAgICBwcml2YXRlOgoKICAgICAgX1Rl
bXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKTsKCiAgICAgIHZvaWQKICAg
ICAgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJik7CiAgICB9OwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgX1RlbXBvcmFy
eV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPjo6CiAgICBfVGVtcG9yYXJ5X2J1ZmZlcihf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBf
TV9vcmlnaW5hbF9sZW4oc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpKSwKICAgICAgX01f
bGVuKDApLCBfTV9idWZmZXIoMCkKICAgIHsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjpf
X2lzX3NjYWxhcjxfVHA+OjpfX3R5cGUgX1RyaXZpYWw7CgogICAgICBpZiAodHJ1ZSkKIHsKICAg
cGFpcjxwb2ludGVyLCBzaXplX3R5cGU+IF9fcChnZXRfdGVtcG9yYXJ5X2J1ZmZlcjwKICAgICAg
ICAgICB2YWx1ZV90eXBlPihfTV9vcmlnaW5hbF9sZW4pKTsKICAgX01fYnVmZmVyID0gX19wLmZp
cnN0OwogICBfTV9sZW4gPSBfX3Auc2Vjb25kOwogICBpZiAoX01fbGVuID4gMCkKICAgICBfTV9p
bml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiB9CiAgICAgIGlmIChmYWxz
ZSkKIHsKICAgc3RkOjpyZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfTV9idWZmZXIpOwogICBfTV9i
dWZmZXIgPSAwOwogICBfTV9sZW4gPSAwOwogICA7CiB9CiAgICB9Cn0KIyA2NiAiL3Vzci9pbmNs
dWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiMg
ODQgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9U
cCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAg
ICBpZiAoX19hIDwgX19iKQogaWYgKF9fYiA8IF9fYykKICAgcmV0dXJuIF9fYjsKIGVsc2UgaWYg
KF9fYSA8IF9fYykKICAgcmV0dXJuIF9fYzsKIGVsc2UKICAgcmV0dXJuIF9fYTsKICAgICAgZWxz
ZSBpZiAoX19hIDwgX19jKQogcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQog
cmV0dXJuIF9fYzsKICAgICAgZWxzZQogcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihj
b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKIGlmIChfX2Nv
bXAoX19iLCBfX2MpKQogICByZXR1cm4gX19iOwogZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkK
ICAgcmV0dXJuIF9fYzsKIGVsc2UKICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21w
KF9fYSwgX19jKSkKIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykp
CiByZXR1cm4gX19jOwogICAgICBlbHNlCiByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9p
bmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3Jf
ZWFjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9GdW5j
dGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKIF9fZigqX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Y7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBfSW5wdXRJdGVyYXRvcgogICAgZmluZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgY29uc3QgX1RwJiBfX3ZhbCwgaW5wdXRfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJz
dCA9PSBfX3ZhbCkpCiArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRl
PgogICAgaW5saW5lIF9JbnB1dEl0ZXJhdG9yCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICBfUHJlZGljYXRlIF9fcHJlZCwgaW5w
dXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYg
IV9fcHJlZCgqX19maXJzdCkpCiArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h
bWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogIGNvbnN0IF9U
cCYgX192YWwsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiBfX3RyaXBfY291bnQgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsg
X190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KQogewogICBpZiAoKl9fZmlyc3QgPT0g
X192YWwpCiAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICsrX19maXJzdDsKCiAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkKICAgICByZXR1cm4gX19maXJzdDsKICAgKytfX2ZpcnN0OwoKICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsKQogICAgIHJldHVybiBfX2ZpcnN0OwogICArK19fZmlyc3Q7CgogICBp
ZiAoKl9fZmlyc3QgPT0gX192YWwpCiAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICsrX19maXJzdDsK
IH0KCiAgICAgIHN3aXRjaCAoX19sYXN0IC0gX19maXJzdCkKIHsKIGNhc2UgMzoKICAgaWYgKCpf
X2ZpcnN0ID09IF9fdmFsKQogICAgIHJldHVybiBfX2ZpcnN0OwogICArK19fZmlyc3Q7CiBjYXNl
IDI6CiAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkKICAgICByZXR1cm4gX19maXJzdDsKICAgKytf
X2ZpcnN0OwogY2FzZSAxOgogICBpZiAoKl9fZmlyc3QgPT0gX192YWwpCiAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICsrX19maXJzdDsKIGNhc2UgMDoKIGRlZmF1bHQ6CiAgIHJldHVybiBfX2xhc3Q7
CiB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCiAgICBmaW5k
X2lmKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0LAogICAgIF9QcmVkaWNhdGUgX19wcmVkLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZQogX190cmlwX2NvdW50ID0gKF9fbGFzdCAtIF9fZmlyc3Qp
ID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkK
IHsKICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICsrX19m
aXJzdDsKCiAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgIHJldHVybiBfX2ZpcnN0OwogICAr
K19fZmlyc3Q7CgogICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICByZXR1cm4gX19maXJzdDsK
ICAgKytfX2ZpcnN0OwoKICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgcmV0dXJuIF9fZmly
c3Q7CiAgICsrX19maXJzdDsKIH0KCiAgICAgIHN3aXRjaCAoX19sYXN0IC0gX19maXJzdCkKIHsK
IGNhc2UgMzoKICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICsrX19maXJzdDsKIGNhc2UgMjoKICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICsrX19maXJzdDsKIGNhc2UgMToKICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
CiAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICsrX19maXJzdDsKIGNhc2UgMDoKIGRlZmF1bHQ6CiAg
IHJldHVybiBfX2xhc3Q7CiB9CiAgICB9CiMgMzA0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcmF0b3IKICAgIGZpbmQoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogIGNvbnN0IF9UcCYgX192YWwpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAgOwogICAgICByZXR1cm4gc3RkOjpmaW5kKF9fZmlyc3Qs
IF9fbGFzdCwgX192YWwsCiAgICAgICAgIHN0ZDo6X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7CiAgICB9CiMgMzI2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRl
PgogICAgaW5saW5lIF9JbnB1dEl0ZXJhdG9yCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgogICAgICA7CiAgICAgIHJldHVybiBzdGQ6OmZpbmRfaWYoX19maXJz
dCwgX19sYXN0LCBfX3ByZWQsCiAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsKICAgIH0KIyAzNDggIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgIF9Gb3J3YXJkSXRlcmF0
b3IKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICA7CiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19u
ZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KQogewogICBpZiAo
Kl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICByZXR1cm4gX19maXJzdDsKICAgX19maXJzdCA9IF9f
bmV4dDsKIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzNzkgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyYXRvciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcmF0b3IK
ICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgOwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4g
X19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdo
aWxlKCsrX19uZXh0ICE9IF9fbGFzdCkKIHsKICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qs
ICpfX25leHQpKQogICAgIHJldHVybiBfX2ZpcnN0OwogICBfX2ZpcnN0ID0gX19uZXh0OwogfQog
ICAgICByZXR1cm4gX19sYXN0OwogICAgfQojIDQxMCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlw
ZW5hbWUgX1RwPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgIAogICAgICA7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgKytfX247CiAgICAg
IHJldHVybiBfX247CiAgICB9CiMgNDM1ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBf
UHJlZGljYXRlPgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAK
CiAgICAgIDsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICArK19fbjsKICAgICAgcmV0dXJu
IF9fbjsKICAgIH0KIyA0NzQgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcmF0b3IyPgogICAgX0ZvcndhcmRJdGVyYXRvcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0
ZXJhdG9yMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyYXRvcjEgX19sYXN0MSwKICAgIF9Gb3J3YXJk
SXRlcmF0b3IyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXJhdG9yMiBfX2xhc3QyKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgogICAgICA7CiAgICAgIDsKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBf
X2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiByZXR1cm4gX19maXJzdDE7CgoKICAgICAg
X0ZvcndhcmRJdGVyYXRvcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBp
ZiAoX190bXAgPT0gX19sYXN0MikKIHJldHVybiBzdGQ6OmZpbmQoX19maXJzdDEsIF9fbGFzdDEs
ICpfX2ZpcnN0Mik7CgoKICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19wMSwgX19wOwogICAgICBf
X3AxID0gX19maXJzdDI7ICsrX19wMTsKICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19jdXJyZW50
ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkKIHsKICAgX19m
aXJzdDEgPSBzdGQ6OmZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgIGlmIChf
X2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgIHJldHVybiBfX2xhc3QxOwoKICAgX19wID0gX19wMTsK
ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQog
ICAgIHJldHVybiBfX2xhc3QxOwoKICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkKICAgICB7
CiAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICByZXR1cm4gX19maXJzdDE7CiAgICAgICBp
ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICByZXR1cm4gX19sYXN0MTsKICAgICB9CiAgICsr
X19maXJzdDE7CiB9CiAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1NDUgIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyLAogICAgdHlwZW5hbWUg
X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcmF0b3IxCiAgICBzZWFyY2goX0Zvcndh
cmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9fbGFzdDEsCiAgICBfRm9y
d2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyYXRvcjIgX19sYXN0MiwKICAgIF9C
aW5hcnlQcmVkaWNhdGUgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgIDsKICAgICAgOwoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3Qy
ID09IF9fbGFzdDIpCiByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyYXRvcjIg
X190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0
MikKIHsKICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2Zp
cnN0MSwgKl9fZmlyc3QyKSkKICAgICArK19fZmlyc3QxOwogICByZXR1cm4gX19maXJzdDE7CiB9
CgoKICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19wMSwgX19wOwogICAgICBfX3AxID0gX19maXJz
dDI7ICsrX19wMTsKICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19jdXJyZW50ID0gX19maXJzdDE7
CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkKIHsKICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEpCiAgICAgewogICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9f
Zmlyc3QyKSkKICBicmVhazsKICAgICAgICsrX19maXJzdDE7CiAgICAgfQogICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQog
ICAgICsrX19maXJzdDE7CiAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgIHJldHVybiBf
X2xhc3QxOwoKICAgX19wID0gX19wMTsKICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgIGlmICgr
K19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgIHJldHVybiBfX2xhc3QxOwoKICAgd2hpbGUgKF9f
cHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKQogICAgIHsKICAgICAgIGlmICgrK19fcCA9PSBf
X2xhc3QyKQogIHJldHVybiBfX2ZpcnN0MTsKICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xh
c3QxKQogIHJldHVybiBfX2xhc3QxOwogICAgIH0KICAgKytfX2ZpcnN0MTsKIH0KICAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgfQojIDYyMyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFt
ZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAgc2VhcmNo
X24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAg
CgogICAgIAogICAgICA7CgogICAgICBpZiAoX19jb3VudCA8PSAwKQogcmV0dXJuIF9fZmlyc3Q7
CiAgICAgIGVsc2UKIHsKICAgX19maXJzdCA9IHN0ZDo6ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9f
dmFsKTsKICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgIHsKICAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19u
ID0gX19jb3VudDsKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19pID0gX19maXJzdDsKICAgICAg
ICsrX19pOwogICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDEgJiYgKl9faSA9
PSBfX3ZhbCkKICB7CiAgICArK19faTsKICAgIC0tX19uOwogIH0KICAgICAgIGlmIChfX24gPT0g
MSkKICByZXR1cm4gX19maXJzdDsKICAgICAgIGVsc2UKICBfX2ZpcnN0ID0gc3RkOjpmaW5kKF9f
aSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgfQogICByZXR1cm4gX19sYXN0OwogfQogICAgfQojIDY3
NSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1Rw
LAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXJh
dG9yCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0LAogICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAogICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAg
ICAgOwoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNl
CiB7CiAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICB7CiAgICAgICBpZiAoX19iaW5h
cnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogIGJyZWFrOwogICAgICAgKytfX2ZpcnN0OwogICAg
IH0KICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgIHsKICAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19uID0g
X19jb3VudDsKICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19pID0gX19maXJzdDsKICAgICAgICsr
X19pOwogICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDEgJiYgX19iaW5hcnlf
cHJlZCgqX19pLCBfX3ZhbCkpCiAgewogICAgKytfX2k7CiAgICAtLV9fbjsKICB9CiAgICAgICBp
ZiAoX19uID09IDEpCiAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICBlbHNlCiAgewogICAgd2hpbGUg
KF9faSAhPSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBf
X3ZhbCkpCiAgIGJyZWFrOwogICAgICAgICsrX19pOwogICAgICB9CiAgICBfX2ZpcnN0ID0gX19p
OwogIH0KICAgICB9CiAgIHJldHVybiBfX2xhc3Q7CiB9CiAgICB9CiMgNzM3ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMj4KICAgIF9Gb3J3YXJkSXRl
cmF0b3IyCiAgICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0Zvcndh
cmRJdGVyYXRvcjEgX19sYXN0MSwKICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0MikKICAgIHsK
CiAgICAgCgogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIDsKCiAgICAgIGZvciAoIDsgX19m
aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKIHN0ZDo6aXRlcl9zd2Fw
KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3NzUg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwKICAgIHR5cGVu
YW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgdHJhbnNmb3JtKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIF9PdXRw
dXRJdGVyYXRvciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7Cgog
ICAgIAogICAgIAoKCiAgICAgIDsKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCwgKytfX3Jlc3VsdCkKICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODEwICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwg
dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAogICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0
eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXJhdG9yCiAgICB0cmFuc2Zv
cm0oX0lucHV0SXRlcmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAg
ICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAog
ICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAgOwoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmly
c3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9f
Zmlyc3QxLCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODQyICIv
dXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2Uo
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICBj
b25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAg
ICAKCiAgICAgCgogICAgIAoKICAgICAgOwoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAqX19maXJzdCA9
IF9fbmV3X3ZhbHVlOwogICAgfQojIDg3MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFt
ZSBfUHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAoKICAg
ICAKCiAgICAgCgogICAgICA7CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
Zmlyc3QpCiBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsK
ICAgIH0KIyA5MDYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRv
ciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXJhdG9yCiAgICByZXBsYWNlX2NvcHkoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICBfT3V0cHV0SXRl
cmF0b3IgX19yZXN1bHQsCiAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19u
ZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCiAgICAgIDsKCiAgICAgIGZvciAo
IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDkzOSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h
bWUgX091dHB1dEl0ZXJhdG9yLAogICAgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX1Rw
PgogICAgX091dHB1dEl0ZXJhdG9yCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICBfT3V0cHV0SXRlcmF0b3IgX19y
ZXN1bHQsCiAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQog
ICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICA7CgogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAqX19yZXN1bHQgPSBfX3ByZWQoKl9f
Zmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQojIDk3MCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgog
ICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAg
CgogICAgICA7CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAq
X19maXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTk2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlw
ZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAg
IGdlbmVyYXRlX24oX091dHB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRv
ciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsr
X19maXJzdCkKICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9
CiMgMTAyMyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0
eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAgIHJlbW92ZV9jb3B5KF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICBfT3V0cHV0SXRlcmF0b3Ig
X19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK
ICAgICAgOwoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogaWYg
KCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpCiAgIHsKICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK
ICAgICArK19fcmVzdWx0OwogICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDU5
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3IsCiAgICB0eXBl
bmFtZSBfUHJlZGljYXRlPgogICAgX091dHB1dEl0ZXJhdG9yCiAgICByZW1vdmVfY29weV9pZihf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgX091dHB1
dEl0ZXJhdG9yIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg
CgogICAgIAoKICAgICAgOwoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogaWYgKCFfX3ByZWQoKl9fZmlyc3QpKQogICB7CiAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgICAgKytfX3Jlc3VsdDsKICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMg
MTA5OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0
ZXJhdG9yCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgIAoK
ICAgICAgOwoKICAgICAgX19maXJzdCA9IHN0ZDo6ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
dWUpOwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBf
X2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgIDogc3RkOjpyZW1vdmVfY29weSgr
K19faSwgX19sYXN0LAogICAgICAgIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDExMzMgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRl
cmF0b3IKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0LAogICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAoKICAg
ICAKCiAgICAgIDsKCiAgICAgIF9fZmlyc3QgPSBzdGQ6OmZpbmRfaWYoX19maXJzdCwgX19sYXN0
LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJl
dHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgIDogc3RkOjpyZW1vdmVf
Y29weV9pZigrK19faSwgX19sYXN0LAogICAgICAgICAgIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9
CiMgMTE1OSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgog
ICAgX091dHB1dEl0ZXJhdG9yCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwK
ICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAg
ICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3Qp
CiBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkKICAgewogICAgIF9fdmFsdWUgPSAqX19maXJz
dDsKICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1
bHQ7CiAgICB9CiMgMTE4NCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJ
dGVyYXRvcj4KICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgX0ZvcndhcmRJdGVyYXRv
ciBfX3Jlc3VsdCwKICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKCEo
Kl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
cmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIwNiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXJhdG9yLAogICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAg
IF9PdXRwdXRJdGVyYXRvcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsCiAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICBvdXRwdXRfaXRlcmF0b3JfdGFn
KQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9
IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKCFfX2JpbmFy
eV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkKICAgewogICAgIF9fdmFsdWUgPSAqX19maXJzdDsK
ICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7
CiAgICB9CiMgMTIzOCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
YXRvciwKICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXJhdG9y
CiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCwKICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19yZXN1bHQsCiAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fYmluYXJ5X3ByZWQsCiAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAg
CgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9
IF9fbGFzdCkKIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19y
ZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTI3MCAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgogICAgaW5saW5l
IF9PdXRwdXRJdGVyYXRvcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LAogIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgIAoKICAgICAgOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKIF9JdGVyVHlw
ZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICBy
ZXR1cm4gc3RkOjpfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVy
VHlwZSgpKTsKICAgIH0KIyAxMzA1ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfT3V0
cHV0SXRlcmF0b3IsCiAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9P
dXRwdXRJdGVyYXRvcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LAogIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwKICBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgOwoKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXJhdG9yPjo6aXRl
cmF0b3JfY2F0ZWdvcnkKIF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1cm4gc3RkOjpfX3VuaXF1ZV9jb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQsCiAgICBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7CiAgICB9
CiMgMTMzOSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAg
dW5pcXVlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
CiAgICB7CgogICAgIAoKICAgICAKCiAgICAgIDsKCgogICAgICBfX2ZpcnN0ID0gc3RkOjphZGph
Y2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
IHJldHVybiBfX2xhc3Q7CgoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Rlc3QgPSBfX2ZpcnN0
OwogICAgICArK19fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYg
KCEoKl9fZGVzdCA9PSAqX19maXJzdCkpCiAgICorK19fZGVzdCA9ICpfX2ZpcnN0OwogICAgICBy
ZXR1cm4gKytfX2Rlc3Q7CiAgICB9CiMgMTM3OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBl
bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAgdW5pcXVlKF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKCiAgICAgCgoK
ICAgICAgOwoKCiAgICAgIF9fZmlyc3QgPSBzdGQ6OmFkamFjZW50X2ZpbmQoX19maXJzdCwgX19s
YXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogcmV0dXJu
IF9fbGFzdDsKCgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZGVzdCA9IF9fZmlyc3Q7CiAgICAg
ICsrX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoIV9fYmlu
YXJ5X3ByZWQoKl9fZGVzdCwgKl9fZmlyc3QpKQogICAqKytfX2Rlc3QgPSAqX19maXJzdDsKICAg
ICAgcmV0dXJuICsrX19kZXN0OwogICAgfQojIDE0MTIgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
YXRvcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmly
c3QsIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0LAogICAgICAgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKQogaWYgKF9fZmlyc3QgPT0gX19s
YXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgIHJldHVybjsKIGVsc2UKICAgewogICAgIHN0
ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgKytfX2ZpcnN0OwogICB9CiAgICB9
CiMgMTQzNCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBfX3JldmVy
c2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsCiAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogcmV0dXJuOwogICAgICAtLV9fbGFzdDsKICAgICAgd2hpbGUg
KF9fZmlyc3QgPCBfX2xhc3QpCiB7CiAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICsrX19maXJzdDsKICAgLS1fX2xhc3Q7CiB9CiAgICB9CiMgMTQ2MSAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsK
CiAgICAgCgogICAgICA7CiAgICAgIHN0ZDo6X19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgc3Rk
OjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxNDg3ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KICAgIF9PdXRwdXRJ
dGVyYXRvcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9f
cmVzdWx0KQogICAgewoKICAgICAKCiAgICAgCgogICAgICA7CgogICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpCiB7CiAgIC0tX19sYXN0OwogICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAr
K19fcmVzdWx0OwogfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTUxNSAiL3Vzci9p
bmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2Nk
KF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAg
ICB7CiAgICAgIHdoaWxlIChfX24gIT0gMCkKIHsKICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9f
dCA9IF9fbSAlIF9fbjsKICAgX19tID0gX19uOwogICBfX24gPSBfX3Q7CiB9CiAgICAgIHJldHVy
biBfX207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4K
ICAgIHZvaWQKICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX21pZGRsZSwKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX21p
ZGRsZSB8fCBfX2xhc3QgPT0gX19taWRkbGUpCiByZXR1cm47CgogICAgICBfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvCiB7CiAgIHN3YXAoKl9fZmlyc3QsICpf
X2ZpcnN0Mik7CiAgICsrX19maXJzdDsKICAgKytfX2ZpcnN0MjsKICAgaWYgKF9fZmlyc3QgPT0g
X19taWRkbGUpCiAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKIH0KICAgICAgd2hpbGUgKF9fZmly
c3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUg
KF9fZmlyc3QyICE9IF9fbGFzdCkKIHsKICAgc3dhcCgqX19maXJzdCwgKl9fZmlyc3QyKTsKICAg
KytfX2ZpcnN0OwogICArK19fZmlyc3QyOwogICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAg
ICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAg
ICAgX19maXJzdDIgPSBfX21pZGRsZTsKIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0
aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlk
ZGxlLAogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIGJpZGlyZWN0
aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X21pZGRsZSB8fCBfX2xhc3QgPT0gX19taWRkbGUpCiByZXR1cm47CgogICAgICBzdGQ6Ol9fcmV2
ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAg
ICAgIHN0ZDo6X19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRkbGUg
IT0gX19sYXN0KQogewogICBzd2FwKCpfX2ZpcnN0LCAqLS1fX2xhc3QpOwogICArK19fZmlyc3Q7
CiB9CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKIHN0ZDo6X19yZXZlcnNlKF9fbWlk
ZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICBlbHNlCiBz
dGQ6Ol9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcoKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSwKICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7
CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbGFzdCA9PSBfX21p
ZGRsZSkKIHJldHVybjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogX0Rpc3RhbmNlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2
YWx1ZV90eXBlCiBfVmFsdWVUeXBlOwoKICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbiA9IF9fbGFz
dCAtIF9fZmlyc3Q7CiAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmly
c3Q7CiAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBpZiAoX19r
ID09IF9fbCkKIHsKICAgc3RkOjpzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRk
bGUpOwogICByZXR1cm47CiB9CgogICAgICBjb25zdCBfRGlzdGFuY2UgX19kID0gX19nY2QoX19u
LCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykK
IHsKICAgY29uc3QgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19wID0gX19maXJzdDsKCiAgIGlmIChfX2sgPCBfX2wpCiAgICAgewogICAgICAg
Zm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sIC8gX19kOyBfX2orKykKICB7CiAgICBp
ZiAoX19wID4gX19maXJzdCArIF9fbCkKICAgICAgewogICAgICAgICpfX3AgPSAqKF9fcCAtIF9f
bCk7CiAgICAgICAgX19wIC09IF9fbDsKICAgICAgfQoKICAgICpfX3AgPSAqKF9fcCArIF9fayk7
CiAgICBfX3AgKz0gX19rOwogIH0KICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBmb3IgKF9E
aXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2sgLyBfX2QgLSAxOyBfX2ogKyspCiAgewogICAgaWYg
KF9fcCA8IF9fbGFzdCAtIF9faykKICAgICAgewogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7
CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAg
ICBfX3AgLT0gX19sOwogIH0KICAgICB9CgogICAqX19wID0gX190bXA7CiAgICsrX19maXJzdDsK
IH0KICAgIH0KIyAxNjk0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAog
ICAgcm90YXRlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX21p
ZGRsZSwKICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIDsK
ICAgICAgOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiBfSXRlclR5cGU7CiAgICAgIHN0ZDo6X19yb3Rh
dGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDE3Mjcg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgogICAgX091
dHB1dEl0ZXJhdG9yCiAgICByb3RhdGVfY29weShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCwgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCiAg
ICAgIDsKICAgICAgOwoKICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0LCBfX21pZGRsZSwg
Y29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE3NTIgIi91c3IvaW5j
bHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
KQogICAgewoKICAgICAKCiAgICAgIDsKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkKIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0
OyArK19faSkKICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgKHN0ZDo6cmFuZCgpICUg
KChfX2kgLSBfX2ZpcnN0KSArIDEpKSk7CiAgICB9CiMgMTc3OSAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAgICB2b2lkCiAgICBy
YW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fbGFzdCwKICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCiAg
ICB7CgogICAgIAoKICAgICAgOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogcmV0dXJu
OwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19p
ICE9IF9fbGFzdDsgKytfX2kpCiBzdGQ6Oml0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQo
KF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyYXRv
cgogICAgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICBfUHJlZGljYXRlIF9fcHJlZCwKICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK
ICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogcmV0dXJuIF9fZmlyc3Q7CgogICAg
ICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KQogICBy
ZXR1cm4gX19maXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsK
CiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiBpZiAoX19wcmVkKCpfX25leHQpKQog
ICB7CiAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7CiAgICAgKytfX2ZpcnN0OwogICB9Cgog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9u
YWxJdGVyYXRvcgogICAgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0
LCBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbGFzdCwKICBfUHJlZGljYXRlIF9fcHJlZCwKICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpCiB7CiAg
IHdoaWxlICh0cnVlKQogICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgIHJldHVybiBf
X2ZpcnN0OwogICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICArK19fZmlyc3Q7
CiAgICAgZWxzZQogICAgICAgYnJlYWs7CiAgIC0tX19sYXN0OwogICB3aGlsZSAodHJ1ZSkKICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICByZXR1cm4gX19maXJzdDsKICAgICBlbHNl
IGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgLS1fX2xhc3Q7CiAgICAgZWxzZQogICAgICAg
YnJlYWs7CiAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICsrX19maXJzdDsK
IH0KICAgIH0KIyAxODczICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNh
dGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyYXRvcgogICAgcGFydGl0aW9uKF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCkKICAgIHsKCiAgICAgCgogICAgIAoKICAgICAgOwoKICAgICAgcmV0dXJuIHN0ZDo6
X19wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgIHN0ZDo6X19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5j
ZT4KICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKICAgIHsKICAg
ICAgaWYgKF9fbGVuID09IDEpCiByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9f
Zmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICBz
dGQ6OmFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig
X19iZWdpbiA9IHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwKICAgICAg
ICAgX19taWRkbGUsCiAgICAgICAgIF9fcHJlZCwKICAgICAgICAgX19sZW4gLyAyKTsKICAgICAg
X0ZvcndhcmRJdGVyYXRvciBfX2VuZCA9IHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o
X19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgX19s
ZW4KICAgICAgICAgICAgICAtIF9fbGVuIC8gMik7CiAgICAgIHN0ZDo6cm90YXRlKF9fYmVnaW4s
IF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIHN0ZDo6YWR2YW5jZShfX2JlZ2luLCBzdGQ6OmRpc3Rh
bmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfUG9pbnRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJk
SXRlcmF0b3IKICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgIF9EaXN0YW5j
ZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkK
IHsKICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICBfUG9pbnRlciBf
X3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19m
aXJzdCkKICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgIHsKICAqX19yZXN1bHQxID0g
Kl9fZmlyc3Q7CiAgKytfX3Jlc3VsdDE7CiAgICAgICB9CiAgICAgZWxzZQogICAgICAgewogICpf
X3Jlc3VsdDIgPSAqX19maXJzdDsKICArK19fcmVzdWx0MjsKICAgICAgIH0KICAgc3RkOjpjb3B5
KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgIHJldHVybiBfX3Jlc3VsdDE7CiB9
CiAgICAgIGVsc2UKIHsKICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
IHN0ZDo6YWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgX0ZvcndhcmRJdGVyYXRvciBf
X2JlZ2luID0KICAgICBzdGQ6Ol9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBf
X21pZGRsZSwgX19wcmVkLAogICAgICAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwKICAgICAgICAg
IF9fYnVmZmVyX3NpemUpOwogICBfRm9yd2FyZEl0ZXJhdG9yIF9fZW5kID0KICAgICBzdGQ6Ol9f
c3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAg
ICAgICBfX2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl
KTsKICAgc3RkOjpyb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgc3RkOjphZHZh
bmNlKF9fYmVnaW4sIHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgIHJldHVybiBf
X2JlZ2luOwogfQogICAgfQojIDE5ODQgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUg
X1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIF9Q
cmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKCiAgICAgCgogICAgICA7CgogICAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogewogICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlw
ZQogICAgIF9WYWx1ZVR5cGU7CiAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICBfRGlzdGFuY2VUeXBlOwoKICAg
X1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1ZhbHVlVHlwZT4gX19idWYoX19m
aXJzdCwKICAgICAgICBfX2xhc3QpOwogaWYgKF9fYnVmLnNpemUoKSA+IDApCiAgIHJldHVybgog
ICAgIHN0ZDo6X19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19w
cmVkLAogICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAg
IF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7CiBlbHNlCiAgIHJldHVybgogICAgIHN0ZDo6
X19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAg
IF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgog
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKQogewogICB3aGlsZSAoKl9f
Zmlyc3QgPCBfX3Bpdm90KQogICAgICsrX19maXJzdDsKICAgLS1fX2xhc3Q7CiAgIHdoaWxlIChf
X3Bpdm90IDwgKl9fbGFzdCkKICAgICAtLV9fbGFzdDsKICAgaWYgKCEoX19maXJzdCA8IF9fbGFz
dCkpCiAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICsrX19maXJzdDsKIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog
ICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdoaWxlICh0cnVl
KQogewogICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICArK19fZmlyc3Q7
CiAgIC0tX19sYXN0OwogICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgIC0t
X19sYXN0OwogICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICByZXR1cm4gX19maXJzdDsK
ICAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgKytfX2ZpcnN0OwogfQogICAg
fQoKCgoKCgoKICBlbnVtIHsgX1NfdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAg
IF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
X1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19uZXh0ID0gX19s
YXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkKIHsKICAg
Kl9fbGFzdCA9ICpfX25leHQ7CiAgIF9fbGFzdCA9IF9fbmV4dDsKICAgLS1fX25leHQ7CiB9CiAg
ICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QsIF9UcCBfX3ZhbCwKICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAg
ICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpCiB7CiAgICpfX2xhc3QgPSAqX19uZXh0
OwogICBfX2xhc3QgPSBfX25leHQ7CiAgIC0tX19uZXh0OwogfQogICAgICAqX19sYXN0ID0gX192
YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19m
aXJzdCwKICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKIHsKICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUK
ICAgICBfX3ZhbCA9ICpfX2k7CiAgIGlmIChfX3ZhbCA8ICpfX2ZpcnN0KQogICAgIHsKICAgICAg
IHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgKl9fZmly
c3QgPSBfX3ZhbDsKICAgICB9CiAgIGVsc2UKICAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9p
bnNlcnQoX19pLCBfX3ZhbCk7CiB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogewogICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAg
IF9fdmFsID0gKl9faTsKICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKQogICAgIHsKICAg
ICAgIHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgKl9f
Zmlyc3QgPSBfX3ZhbDsKICAgICB9CiAgIGVsc2UKICAgICBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
CiBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19m
aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNl
cnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv
aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kp
CiBzdGQ6Ol9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpLCBf
X2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7
CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gaW50KF9TX3RocmVzaG9sZCkpCiB7CiAgIHN0
ZDo6X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgaW50KF9TX3RocmVzaG9sZCkp
OwogICBzdGQ6Ol9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBpbnQoX1NfdGhy
ZXNob2xkKSwgX19sYXN0KTsKIH0KICAgICAgZWxzZQogc3RkOjpfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fZmluYWxfaW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKIHsKICAgc3RkOjpfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBpbnQoX1NfdGhyZXNob2xkKSwgX19jb21wKTsKICAg
c3RkOjpfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgaW50KF9TX3RocmVzaG9s
ZCksIF9fbGFzdCwKICAgICAgIF9fY29tcCk7CiB9CiAgICAgIGVsc2UKIHN0ZDo6X19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgX1NpemUKICAgIF9fbGcoX1NpemUgX19uKQogICAg
ewogICAgICBfU2l6ZSBfX2s7CiAgICAgIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0g
MSkKICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQojIDIyNzMgIi91c3IvaW5jbHVkZS9j
KysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LAogICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUsCiAgIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIF9WYWx1ZVR5
cGU7CgoKICAgICAKCiAgICAgCiAgICAgIDsKICAgICAgOwoKICAgICAgc3RkOjptYWtlX2hlYXAo
X19maXJzdCwgX19taWRkbGUpOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2kg
PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKIGlmICgqX19pIDwgKl9fZmlyc3QpCiAg
IHN0ZDo6X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kp
KTsKICAgICAgc3RkOjpzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDIzMTQg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK
ICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlLAogICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
LAogICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIF9WYWx1ZVR5cGU7
CgoKICAgICAKCiAgICAgCgogICAgICA7CiAgICAgIDsKCiAgICAgIHN0ZDo6bWFrZV9oZWFwKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKIGlmIChfX2NvbXAoKl9faSwg
Kl9fZmlyc3QpKQogICBzdGQ6Ol9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1Zh
bHVlVHlwZSgqX19pKSwgX19jb21wKTsKICAgICAgc3RkOjpzb3J0X2hlYXAoX19maXJzdCwgX19t
aWRkbGUsIF9fY29tcCk7CiAgICB9CiMgMjM1NiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yCiAgICBw
YXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0X2ZpcnN0LAogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdF9sYXN0KQogICAgewogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUK
IF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogX091dHB1dFZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgIAog
ICAgIAogICAgICA7CiAgICAgIDsKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3Vs
dF9sYXN0KQogcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hpbGUoX19maXJz
dCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpCiB7CiAg
ICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7
CiAgICsrX19maXJzdDsKIH0KICAgICAgc3RkOjptYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9f
cmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKIHsKICAg
aWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0KQogICAgIHN0ZDo6X19hZGp1c3RfaGVhcChf
X3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgIF9EaXN0YW5jZVR5cGUo
X19yZXN1bHRfcmVhbF9sYXN0CiAgICAgICAgICAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAg
IF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCkpOwogICArK19fZmlyc3Q7CiB9CiAgICAgIHN0ZDo6
c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1
cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI0MjAgIi91c3IvaW5jbHVkZS9jKysvNC4w
LjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3Is
IHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVz
dWx0X2xhc3QsCiAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OnZhbHVlX3R5cGUKIF9JbnB1
dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCiBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAK
CiAgICAgIDsKICAgICAgOwoKICAgICAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xh
c3QpCiByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
cmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9
IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkKIHsKICAgKl9f
cmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAg
KytfX2ZpcnN0OwogfQogICAgICBzdGQ6Om1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1
bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiB7
CiAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgc3RkOjpfX2Fk
anVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgX0Rp
c3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QKICAgICAgICAgIC0gX19yZXN1bHRfZmlyc3Qp
LAogICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAgICAgICAgIF9fY29tcCk7
CiAgICsrX19maXJzdDsKIH0KICAgICAgc3RkOjpzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9f
cmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFz
dDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is
IHR5cGVuYW1lIF9TaXplPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
CiAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFs
dWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xk
KSkKIHsKICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkKICAgICB7CiAgICAgICBzdGQ6OnBhcnRp
YWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICByZXR1cm47CiAgICAgfQog
ICAtLV9fZGVwdGhfbGltaXQ7CiAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2N1dCA9CiAgICAg
c3RkOjpfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgIF9W
YWx1ZVR5cGUoc3RkOjpfX21lZGlhbigqX19maXJzdCwKICAgICAgICAqKF9fZmlyc3QKICAgICAg
ICAgICsgKF9fbGFzdAogICAgICAgICAgICAgLSBfX2ZpcnN0KQogICAgICAgICAgLyAyKSwKICAg
ICAgICAqKF9fbGFzdAogICAgICAgICAgLSAxKSkpKTsKICAgc3RkOjpfX2ludHJvc29ydF9sb29w
KF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQpOwogICBfX2xhc3QgPSBfX2N1dDsKIH0KICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu
YW1lIF9TaXplLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW50cm9zb3J0X2xv
b3AoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFsdWVUeXBlOwoKICAgICAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiBpbnQoX1NfdGhyZXNob2xkKSkKIHsKICAgaWYgKF9fZGVwdGhfbGltaXQg
PT0gMCkKICAgICB7CiAgICAgICBzdGQ6OnBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
bGFzdCwgX19jb21wKTsKICAgICAgIHJldHVybjsKICAgICB9CiAgIC0tX19kZXB0aF9saW1pdDsK
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fY3V0ID0KICAgICBzdGQ6Ol9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgX1ZhbHVlVHlwZShzdGQ6Ol9fbWVk
aWFuKCpfX2ZpcnN0LAogICAgICAgICooX19maXJzdAogICAgICAgICAgKyAoX19sYXN0CiAgICAg
ICAgICAgICAtIF9fZmlyc3QpCiAgICAgICAgICAvIDIpLAogICAgICAgICooX19sYXN0IC0gMSks
CiAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgc3RkOjpfX2ludHJvc29y
dF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgIF9fbGFzdCA9
IF9fY3V0OwogfQogICAgfQojIDI1NTUgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg
aW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIF9WYWx1ZVR5
cGU7CgoKICAgICAKCiAgICAgCiAgICAgIDsKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkK
IHsKICAgc3RkOjpfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3Qg
LSBfX2ZpcnN0KSAqIDIpOwogICBzdGQ6Ol9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKIH0KICAgIH0KIyAyNTg5ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAg
CgogICAgICA7CgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpCiB7CiAgIHN0ZDo6X19pbnRy
b3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLAog
ICAgX19jb21wKTsKICAgc3RkOjpfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19jb21wKTsKIH0KICAgIH0KIyAyNjIyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVu
YW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRl
cmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgY29uc3QgX1RwJiBfX3Zh
bCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyYXRvcj46OnZhbHVlX3R5cGUKIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKIF9EaXN0
YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgIDsKCiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0
YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOwoKICAgICAg
d2hpbGUgKF9fbGVuID4gMCkKIHsKICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgX19taWRkbGUg
PSBfX2ZpcnN0OwogICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgIGlmICgqX19t
aWRkbGUgPCBfX3ZhbCkKICAgICB7CiAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAr
K19fZmlyc3Q7CiAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICB9CiAgIGVs
c2UKICAgICBfX2xlbiA9IF9faGFsZjsKIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMg
MjY3NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICBjb25zdCBfVHAmIF9fdmFsLCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCiBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICA7CgogICAgICBfRGlz
dGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBf
RGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZTsKCiAg
ICAgIHdoaWxlIChfX2xlbiA+IDApCiB7CiAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgc3RkOjphZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICBpZiAo
X19jb21wKCpfX21pZGRsZSwgX192YWwpKQogICAgIHsKICAgICAgIF9fZmlyc3QgPSBfX21pZGRs
ZTsKICAgICAgICsrX19maXJzdDsKICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwog
ICAgIH0KICAgZWxzZQogICAgIF9fbGVuID0gX19oYWxmOwogfQogICAgICByZXR1cm4gX19maXJz
dDsKICAgIH0KIyAyNzI0ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAg
IF9Gb3J3YXJkSXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZh
bHVlX3R5cGUKIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKIF9EaXN0YW5jZVR5cGU7CgoK
CiAgICAgCiAgICAgCiAgICAgCiAgICAgIDsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBz
dGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm
OwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4g
MCkKIHsKICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICBz
dGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkK
ICAgICBfX2xlbiA9IF9faGFsZjsKICAgZWxzZQogICAgIHsKICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICsrX19maXJzdDsKICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAx
OwogICAgIH0KIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjc3NiAiL3Vzci9pbmNs
dWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0Zvcndh
cmRJdGVyYXRvcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiBfRGlzdGFu
Y2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICA7CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVu
ID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f
aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl
biA+IDApCiB7CiAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgIF9fbWlkZGxlID0gX19maXJzdDsK
ICAgc3RkOjphZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICBpZiAoX19jb21wKF9fdmFsLCAq
X19taWRkbGUpKQogICAgIF9fbGVuID0gX19oYWxmOwogICBlbHNlCiAgICAgewogICAgICAgX19m
aXJzdCA9IF9fbWlkZGxlOwogICAgICAgKytfX2ZpcnN0OwogICAgICAgX19sZW4gPSBfX2xlbiAt
IF9faGFsZiAtIDE7CiAgICAgfQogfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlz
dGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3IgX19maXJzdCwKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCiAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xl
bjIgPT0gMCkKIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKQogewogICBp
ZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgc3RkOjppdGVyX3N3YXAoX19maXJzdCwgX19t
aWRkbGUpOwogICByZXR1cm47CiB9CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJz
dF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fc2Vjb25kX2N1
dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5j
ZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikKIHsKICAgX19sZW4xMSA9
IF9fbGVuMSAvIDI7CiAgIHN0ZDo6YWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgIF9f
c2Vjb25kX2N1dCA9IHN0ZDo6bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3Rf
Y3V0KTsKICAgX19sZW4yMiA9IHN0ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7
CiB9CiAgICAgIGVsc2UKIHsKICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgIHN0ZDo6YWR2YW5j
ZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICBfX2ZpcnN0X2N1dCA9IHN0ZDo6dXBwZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICBfX2xlbjExID0gc3RkOjpk
aXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiB9CiAgICAgIHN0ZDo6cm90YXRlKF9fZmly
c3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgc3RkOjphZHZhbmNlKF9fbmV3
X21pZGRsZSwgc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIHN0
ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlk
ZGxlLAogICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICAgICAgc3RkOjpfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgIF9fbGVuMSAt
IF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IgX19taWRkbGUsCiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
X19sYXN0LAogICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0g
MCkKIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKQogewogICBpZiAoX19j
b21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgIHN0ZDo6aXRlcl9zd2FwKF9fZmlyc3QsIF9f
bWlkZGxlKTsKICAgcmV0dXJuOwogfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fZmly
c3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3NlY29uZF9j
dXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFu
Y2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpCiB7CiAgIF9fbGVuMTEg
PSBfX2xlbjEgLyAyOwogICBzdGQ6OmFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICBf
X3NlY29uZF9jdXQgPSBzdGQ6Omxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0
X2N1dCwKICAgICAgIF9fY29tcCk7CiAgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxl
LCBfX3NlY29uZF9jdXQpOwogfQogICAgICBlbHNlCiB7CiAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy
OwogICBzdGQ6OmFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgX19maXJzdF9jdXQg
PSBzdGQ6OnVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAogICAg
ICBfX2NvbXApOwogICBfX2xlbjExID0gc3RkOjpkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCk7CiB9CiAgICAgIHN0ZDo6cm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRf
Y3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX25ld19taWRkbGUgPSBfX2ZpcnN0
X2N1dDsKICAgICAgc3RkOjphZHZhbmNlKF9fbmV3X21pZGRsZSwgc3RkOjpkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICBfX2xlbjExLCBfX2xlbjIy
LCBfX2NvbXApOwogICAgICBzdGQ6Ol9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0g
X19sZW4yMiwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkKIHsKICAgc3RkOjpfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgIHJldHVybjsKIH0KICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAv
IDI7CiAgICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsK
ICAgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAg
IHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAog
ICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2ZpcnN0LAogICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkKIHsK
ICAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgcmV0
dXJuOwogfQogICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19taWRkbGUgPSBfX2ZpcnN0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgc3RkOjpfX2lucGxhY2Vfc3RhYmxlX3NvcnQo
X19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIHN0ZDo6X19pbnBsYWNlX3N0YWJsZV9z
b3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHN0ZDo6X19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICBfX21pZGRsZSAtIF9fZmly
c3QsCiAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICBfX2NvbXApOwogICAgfQojIDI5NzQg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCiAgICB0eXBl
bmFtZSBfT3V0cHV0SXRlcmF0b3I+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAgIG1lcmdlKF9JbnB1
dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCiAgIF9JbnB1dEl0
ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIsCiAgIF9PdXRwdXRJdGVy
YXRvciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgog
ICAgICA7CiAgICAgIDsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpCiB7CiAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgewog
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgKytfX2ZpcnN0MjsKICAgICB9CiAg
IGVsc2UKICAgICB7CiAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICArK19fZmly
c3QxOwogICAgIH0KICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0dXJuIHN0ZDo6Y29weShfX2Zp
cnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLAogICAgICAgICAgX19y
ZXN1bHQpKTsKICAgIH0KIyAzMDMyICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcmF0b3IyLAogICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t
cGFyZT4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgbWVyZ2UoX0lucHV0SXRlcmF0b3IxIF9fZmly
c3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK
CiAgICAgIDsKICAgICAgOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikKIHsKICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
CiAgICAgewogICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgKytfX2ZpcnN0MjsK
ICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICArK19fZmlyc3QxOwogICAgIH0KICAgKytfX3Jlc3VsdDsKIH0KICAgICAgcmV0dXJuIHN0ZDo6
Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLAogICAg
ICAgICAgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yMSwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMiwKICAgIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcjEgX19maXJzdCwKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IxIF9fbGFzdCwK
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IyIF9fcmVzdWx0LAogICAgICAgIF9EaXN0YW5j
ZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAy
ICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z
dGVwKQogewogICBfX3Jlc3VsdCA9IHN0ZDo6bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLAogICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwK
ICAgIF9fcmVzdWx0KTsKICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogfQoKICAgICAgX19zdGVw
X3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKICAgICAgc3RkOjptZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvcjIsCiAgICB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
dm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yMSBfX2ZpcnN0
LAogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvcjEgX19sYXN0LAogICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX3R3b19zdGVwID0g
MiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29f
c3RlcCkKIHsKICAgX19yZXN1bHQgPSBzdGQ6Om1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwKICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAs
CiAgICBfX3Jlc3VsdCwKICAgIF9fY29tcCk7CiAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKIH0K
ICAgICAgX19zdGVwX3NpemUgPSBzdGQ6Om1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCks
IF9fc3RlcF9zaXplKTsKCiAgICAgIHN0ZDo6bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLAogICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgX19yZXN1bHQsCiAg
IF9fY29tcCk7CiAgICB9CgogIGVudW0geyBfU19jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAg
IHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
Zmlyc3QsCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgIF9EaXN0YW5j
ZSBfX2NodW5rX3NpemUpCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9f
Y2h1bmtfc2l6ZSkKIHsKICAgc3RkOjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3Qg
KyBfX2NodW5rX3NpemUpOwogICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKIH0KICAgICAgc3Rk
OjpfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qs
CiAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKQogewogICBzdGQ6Ol9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsK
ICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiB9CiAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlcikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiBfRGlz
dGFuY2U7CgogICAgICBjb25zdCBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICBjb25zdCBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAg
ICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9TX2NodW5rX3NpemU7CiAgICAgIHN0ZDo6X19j
aHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAg
IHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKQogewogICBzdGQ6Ol9fbWVyZ2Vfc29ydF9sb29w
KF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgX19zdGVwX3NpemUg
Kj0gMjsKICAgc3RkOjpfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwg
X19maXJzdCwgX19zdGVwX3NpemUpOwogICBfX3N0ZXBfc2l6ZSAqPSAyOwogfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Qb2ludGVy
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZl
cihfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogX0Rpc3Rh
bmNlOwoKICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAg
ICAgY29uc3QgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAg
ICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfU19jaHVua19zaXplOwogICAgICBzdGQ6Ol9fY2h1
bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsK
CiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKQogewogICBzdGQ6Ol9fbWVyZ2Vfc29y
dF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsCiAgICAgX19zdGVwX3NpemUsIF9fY29t
cCk7CiAgIF9fc3RlcF9zaXplICo9IDI7CiAgIHN0ZDo6X19tZXJnZV9zb3J0X2xvb3AoX19idWZm
ZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsCiAgICAgX19zdGVwX3NpemUsIF9fY29tcCk7CiAg
IF9fc3RlcF9zaXplICo9IDI7CiB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyLAog
ICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2Zp
cnN0MSwKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fbGFzdDEsCiAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2ZpcnN0MiwKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IyIF9fbGFzdDIsCiAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMyBfX3Jlc3VsdCkKICAg
IHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiByZXR1cm4gc3RkOjpjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRy
dWUpCiB7CiAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKQogICAgIHsKICAgICAgICotLV9fcmVz
dWx0ID0gKl9fbGFzdDE7CiAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICByZXR1cm4g
c3RkOjpjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAg
IC0tX19sYXN0MTsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICAqLS1fX3Jlc3VsdCA9ICpf
X2xhc3QyOwogICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgcmV0dXJuIHN0ZDo6Y29w
eV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAtLV9fbGFz
dDI7CiAgICAgfQogfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKICAgIHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IzLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IxIF9fZmlyc3QxLAogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0MSwK
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fZmlyc3QyLAogICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyYXRvcjIgX19sYXN0MiwKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IzIF9f
cmVzdWx0LAogICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSkKIHJldHVybiBzdGQ6OmNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIs
IF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiByZXR1cm4gc3RkOjpj
b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0
MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAodHJ1ZSkKIHsKICAgaWYgKF9fY29tcCgq
X19sYXN0MiwgKl9fbGFzdDEpKQogICAgIHsKICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7
CiAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICByZXR1cm4gc3RkOjpjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgIC0tX19sYXN0MTsKICAg
ICB9CiAgIGVsc2UKICAgICB7CiAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAg
aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgcmV0dXJuIHN0ZDo6Y29weV9iYWNrd2FyZChfX2Zp
cnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAtLV9fbGFzdDI7CiAgICAgfQogfQog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxLCB0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4K
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yMSBfX2ZpcnN0LAogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ix
IF9fbWlkZGxlLAogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IxIF9fbGFzdCwKICAgICAg
ICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IyIF9fYnVmZmVyLAogICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQog
ICAgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlm
IChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpCiB7CiAgIF9fYnVm
ZmVyX2VuZCA9IHN0ZDo6Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgIHN0ZDo6
Y29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgcmV0dXJuIHN0ZDo6
Y29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsKIH0KICAgICAgZWxzZSBpZiAo
X19sZW4xIDw9IF9fYnVmZmVyX3NpemUpCiB7CiAgIF9fYnVmZmVyX2VuZCA9IHN0ZDo6Y29weShf
X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICBzdGQ6OmNvcHkoX19taWRkbGUsIF9fbGFz
dCwgX19maXJzdCk7CiAgIHJldHVybiBzdGQ6OmNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVm
ZmVyX2VuZCwgX19sYXN0KTsKIH0KICAgICAgZWxzZQogewogICBzdGQ6OnJvdGF0ZShfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0KTsKICAgc3RkOjphZHZhbmNlKF9fZmlyc3QsIHN0ZDo6ZGlzdGFu
Y2UoX19taWRkbGUsIF9fbGFzdCkpOwogICByZXR1cm4gX19maXJzdDsKIH0KICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlz
dGFuY2UsCiAgICB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRp
dmUoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciBfX2xhc3QsCiAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAog
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewog
ICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkKIHsK
ICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gc3RkOjpjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlcik7CiAgIHN0ZDo6bWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUs
IF9fbGFzdCwgX19maXJzdCk7CiB9CiAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9z
aXplKQogewogICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBzdGQ6OmNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogICBzdGQ6Ol9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRk
bGUsIF9fYnVmZmVyLAogICAgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogfQogICAgICBlbHNlCiB7
CiAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICBfRGlzdGFuY2Ug
X19sZW4xMSA9IDA7CiAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgaWYgKF9fbGVuMSA+IF9f
bGVuMikKICAgICB7CiAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgIHN0ZDo6YWR2
YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICBfX3NlY29uZF9jdXQgPSBzdGQ6Omxv
d2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgKl9fZmlyc3RfY3V0KTsKICAg
ICAgIF9fbGVuMjIgPSBzdGQ6OmRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAg
IH0KICAgZWxzZQogICAgIHsKICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgc3Rk
OjphZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICBfX2ZpcnN0X2N1dCA9IHN0
ZDo6dXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAqX19zZWNvbmRfY3V0
KTsKICAgICAgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsK
ICAgICB9CiAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19uZXdfbWlkZGxlID0KICAgICBzdGQ6
Ol9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAog
ICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICBfX2J1ZmZl
cl9zaXplKTsKICAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf
X25ld19taWRkbGUsIF9fbGVuMTEsCiAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sYXN0LAogICAgX19sZW4xIC0gX19sZW4xMSwKICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9zaXplKTsKIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2lu
dGVyLAogICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZl
KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciBfX21pZGRsZSwKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IgX19sYXN0LAogICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAg
ICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4x
IDw9IF9fYnVmZmVyX3NpemUpCiB7CiAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IHN0ZDo6Y29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICBzdGQ6Om1lcmdlKF9fYnVmZmVyLCBf
X2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiB9CiAgICAg
IGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKQogewogICBfUG9pbnRlciBfX2J1ZmZl
cl9lbmQgPSBzdGQ6OmNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICBzdGQ6Ol9f
bWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
CiAgICBfX2xhc3QsIF9fY29tcCk7CiB9CiAgICAgIGVsc2UKIHsKICAgX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig
X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgX0Rp
c3RhbmNlIF9fbGVuMjIgPSAwOwogICBpZiAoX19sZW4xID4gX19sZW4yKQogICAgIHsKICAgICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3RfY3V0LCBf
X2xlbjExKTsKICAgICAgIF9fc2Vjb25kX2N1dCA9IHN0ZDo6bG93ZXJfYm91bmQoX19taWRkbGUs
IF9fbGFzdCwgKl9fZmlyc3RfY3V0LAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICBfX2xlbjIy
ID0gc3RkOjpkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICB9CiAgIGVsc2UK
ICAgICB7CiAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgIHN0ZDo6YWR2YW5jZShf
X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgX19maXJzdF9jdXQgPSBzdGQ6OnVwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LAogICAgICAgICAgX19jb21wKTsK
ICAgICAgIF9fbGVuMTEgPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAg
ICB9CiAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19uZXdfbWlkZGxlID0KICAgICBzdGQ6Ol9f
cm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAg
ICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICBfX2J1ZmZlcl9z
aXplKTsKICAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25l
d19taWRkbGUsIF9fbGVuMTEsCiAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwg
X19jb21wKTsKICAgc3RkOjpfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRf
Y3V0LCBfX2xhc3QsCiAgICBfX2xlbjEgLSBfX2xlbjExLAogICAgX19sZW4yIC0gX19sZW4yMiwg
X19idWZmZXIsCiAgICBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogfQogICAgfQojIDM0NTIgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBf
X21pZGRsZSwKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6
dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog
ICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKICAgICAgOwogICAgICA7Cgog
ICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiByZXR1
cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IHN0ZDo6ZGlzdGFuY2UoX19maXJzdCwg
X19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IHN0ZDo6ZGlzdGFuY2UoX19t
aWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LAogICAgICAgICAgX19sYXN0KTsKICAg
ICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKIHN0ZDo6X19tZXJnZV93aXRob3V0X2J1ZmZlcihf
X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgICAgIGVsc2UKIHN0
ZDo6X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9f
bGVuMiwKICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkp
KTsKICAgIH0KIyAzNTA2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fbWlkZGxlLAogICAgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciBfX2xhc3QsCiAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
CiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgOwogICAgICA7
CgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiBy
ZXR1cm47CgogICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IHN0ZDo6ZGlzdGFuY2Uo
X19maXJzdCwgX19taWRkbGUpOwogICAgICBjb25zdCBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IHN0
ZDo6ZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LAogICAgICAg
ICAgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKIHN0ZDo6X19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsCiAgICAgICAg
X19sZW4yLCBfX2NvbXApOwogICAgICBlbHNlCiBzdGQ6Ol9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgIF9fYnVmLmJlZ2lu
KCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKICAgICAgICAgX19jb21wKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfUG9p
bnRlciwKICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRf
YWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgY29uc3QgX0Rpc3Rh
bmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIGNvbnN0IF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9f
bGVuID4gX19idWZmZXJfc2l6ZSkKIHsKICAgc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbWlkZGxlLAogICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICBz
dGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKIH0KICAgICAgZWxzZQogewogICBzdGQ6Ol9fbWVyZ2Vf
c29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICBzdGQ6Ol9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiB9CiAg
ICAgIHN0ZDo6X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAg
ICAgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICBfRGlzdGFuY2UoX19sYXN0
IC0gX19taWRkbGUpLAogICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Qb2ludGVy
LAogICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBjb25zdCBfRGlz
dGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgY29uc3QgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAo
X19sZW4gPiBfX2J1ZmZlcl9zaXplKQogewogICBzdGQ6Ol9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLAogICAgICAgICAgX19idWZmZXJfc2l6ZSwgX19j
b21wKTsKICAgc3RkOjpfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9f
YnVmZmVyLAogICAgICAgICAgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKIH0KICAgICAgZWxzZQog
ewogICBzdGQ6Ol9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19i
dWZmZXIsIF9fY29tcCk7CiAgIHN0ZDo6X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NvbXApOwogfQogICAgICBzdGQ6Ol9fbWVyZ2VfYWRhcHRp
dmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgIF9EaXN0YW5jZShfX21pZGRsZSAt
IF9fZmlyc3QpLAogICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwKICAgICAgIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgX19jb21wKTsKICAgIH0KIyAzNjE1ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29ydChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCiBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAogICAgICA7CgogICAgICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIF9WYWx1ZVR5cGU+CiBidWYoX19maXJz
dCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiBzdGQ6Ol9faW5wbGFjZV9z
dGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiBzdGQ6Ol9fc3RhYmxlX3Nv
cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICBfRGlzdGFu
Y2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAzNjU2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4w
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsCiAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBfVmFsdWVUeXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoK
ICAgICAgOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBf
VmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09
IDApCiBzdGQ6Ol9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
CiAgICAgIGVsc2UKIHN0ZDo6X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs
IGJ1Zi5iZWdpbigpLAogICAgICAgIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksIF9fY29tcCk7
CiAgICB9CiMgMzY5NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBu
dGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19udGgsCiAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
Pjo6dmFsdWVfdHlwZQogX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKICAgICAgOwogICAgICA7
CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpCiB7CiAgIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2N1dCA9CiAgICAgc3RkOjpfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgIF9WYWx1ZVR5cGUoc3RkOjpfX21lZGlhbigqX19maXJzdCwKICAg
ICAgICAqKF9fZmlyc3QKICAgICAgICAgICsgKF9fbGFzdAogICAgICAgICAgICAgLSBfX2ZpcnN0
KQogICAgICAgICAgLyAyKSwKICAgICAgICAqKF9fbGFzdAogICAgICAgICAgLSAxKSkpKTsKICAg
aWYgKF9fY3V0IDw9IF9fbnRoKQogICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgZWxzZQogICAgIF9f
bGFzdCA9IF9fY3V0OwogfQogICAgICBzdGQ6Ol9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0KTsKICAgIH0KIyAzNzQ4ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwKICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19udGgsCiAgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCwKICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf
dHlwZQogX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIDsKICAgICAgOwoKICAgICAg
d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKQogewogICBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19jdXQgPQogICAgIHN0ZDo6X191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICBfVmFsdWVUeXBlKHN0ZDo6X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgKihf
X2ZpcnN0CiAgICAgICAgICArIChfX2xhc3QKICAgICAgICAgICAgIC0gX19maXJzdCkKICAgICAg
ICAgIC8gMiksCiAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgIF9fY29tcCkpLCBf
X2NvbXApOwogICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgX19maXJzdCA9IF9fY3V0OwogICBl
bHNlCiAgICAgX19sYXN0ID0gX19jdXQ7CiB9CiAgICAgIHN0ZDo6X19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9CiMgMzgwMSAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJh
dG9yLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlcmF0b3IgX19sYXN0LAogIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiBf
VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2Fy
ZEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiBfRGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAg
IAogICAgIAogICAgICA7CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gc3RkOjpkaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zv
cndhcmRJdGVyYXRvciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9f
bGVuID4gMCkKIHsKICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgX19taWRkbGUgPSBfX2ZpcnN0
OwogICBzdGQ6OmFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgIGlmICgqX19taWRkbGUgPCBf
X3ZhbCkKICAgICB7CiAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICArK19fZmlyc3Q7
CiAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICB9CiAgIGVsc2UgaWYgKF9f
dmFsIDwgKl9fbWlkZGxlKQogICAgIF9fbGVuID0gX19oYWxmOwogICBlbHNlCiAgICAgewogICAg
ICAgX19sZWZ0ID0gc3RkOjpsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwog
ICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgIF9fcmlnaHQgPSBzdGQ6
OnVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgIHJldHVybiBw
YWlyPF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+KF9fbGVmdCwgX19yaWdodCk7
CiAgICAgfQogfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0
ZXJhdG9yPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0KIyAzODYzICIvdXNyL2luY2x1ZGUvYysr
LzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9Gb3J3YXJk
SXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogIGNvbnN0IF9UcCYgX192YWws
CiAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogX1ZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAKCiAgICAgIDsK
CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBzdGQ6OmRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f
bWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKQogewogICBf
X2hhbGYgPSBfX2xlbiA+PiAxOwogICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgIHN0ZDo6YWR2YW5j
ZShfX21pZGRsZSwgX19oYWxmKTsKICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkKICAg
ICB7CiAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICArK19fZmlyc3Q7CiAgICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICB9CiAgIGVsc2UgaWYgKF9fY29tcChfX3Zh
bCwgKl9fbWlkZGxlKSkKICAgICBfX2xlbiA9IF9faGFsZjsKICAgZWxzZQogICAgIHsKICAgICAg
IF9fbGVmdCA9IHN0ZDo6bG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2Nv
bXApOwogICAgICAgc3RkOjphZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgIF9fcmlnaHQg
PSBzdGQ6OnVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwog
ICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvcj4oX19s
ZWZ0LCBfX3JpZ2h0KTsKICAgICB9CiB9CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlcmF0
b3IsIF9Gb3J3YXJkSXRlcmF0b3I+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDM5MjEgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgYm9vbAogICAgYmluYXJ5X3Nl
YXJjaChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgog
ICAgIAogICAgICA7CgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9faSA9IHN0ZDo6bG93ZXJfYm91
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYm
ICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzOTUzICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNo
KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAoKICAgICAgOwoKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2kgPSBz
dGQ6Omxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJl
dHVybiBfX2kgIT0gX19sYXN0ICYmICFfX2NvbXAoX192YWwsICpfX2kpOwogICAgfQojIDM5OTEg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjI+CiAgICBib29s
CiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBf
X2xhc3QxLAogICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBf
X2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAgOwogICAgICA7
CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgcmV0dXJuIGZhbHNlOwogZWxzZSBpZigq
X19maXJzdDEgPCAqX19maXJzdDIpCiAgICsrX19maXJzdDE7CiBlbHNlCiAgICsrX19maXJzdDEs
ICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KIyA0
MDM3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAogICAg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyYXRvcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogICAgICBfSW5wdXRJdGVyYXRvcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAgOwogICAgICA7CgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogaWYgKF9fY29t
cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgIHJldHVybiBmYWxzZTsKIGVsc2UgaWYoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgKytfX2ZpcnN0MTsKIGVsc2UKICAgKytfX2ZpcnN0
MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoj
IDQwODMgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjIsCiAg
ICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAgIHNldF91
bmlvbihfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAog
ICAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwK
ICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgogICAgIAoKCiAgICAgCgogICAgICA7CiAgICAgIDsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiB7CiAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpCiAgICAgewogICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgKytf
X2ZpcnN0MTsKICAgICB9CiAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICB7
CiAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICArK19fZmlyc3QyOwogICAgIH0K
ICAgZWxzZQogICAgIHsKICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICsrX19m
aXJzdDE7CiAgICAgICArK19fZmlyc3QyOwogICAgIH0KICAgKytfX3Jlc3VsdDsKIH0KICAgICAg
cmV0dXJuIHN0ZDo6Y29weShfX2ZpcnN0MiwgX19sYXN0Miwgc3RkOjpjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLAogICAgICAgICAgX19yZXN1bHQpKTsKICAgIH0KIyA0MTQ1ICIvdXNyL2luY2x1ZGUv
YysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAogICAgdHlwZW5hbWUgX091dHB1dEl0
ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgc2V0X3Vu
aW9uKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCiAg
ICAgICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAog
ICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog
ICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCiAgICAgIDsKICAgICAgOwoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKIHsKICAg
aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgewogICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICAgKytfX2ZpcnN0MTsKICAgICB9CiAgIGVsc2UgaWYgKF9fY29t
cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgewogICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICAgKytfX2ZpcnN0MjsKICAgICB9CiAgIGVsc2UKICAgICB7CiAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICArK19fZmlyc3QxOwogICAgICAgKytfX2ZpcnN0MjsK
ICAgICB9CiAgICsrX19yZXN1bHQ7CiB9CiAgICAgIHJldHVybiBzdGQ6OmNvcHkoX19maXJzdDIs
IF9fbGFzdDIsIHN0ZDo6Y29weShfX2ZpcnN0MSwgX19sYXN0MSwKICAgICAgICAgIF9fcmVzdWx0
KSk7CiAgICB9CiMgNDIwNiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXJhdG9yMiwKICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvcj4KICAgIF9PdXRwdXRJdGVyYXRv
cgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXJhdG9yMSBfX2xhc3QxLAogICAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyYXRvcjIgX19sYXN0MiwKICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgogICAgICA7CiAgICAgIDsKCiAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiBpZiAo
Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICArK19fZmlyc3QxOwogZWxzZSBpZiAoKl9fZmlyc3Qy
IDwgKl9fZmlyc3QxKQogICArK19fZmlyc3QyOwogZWxzZQogICB7CiAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICsrX19maXJzdDE7CiAgICAgKytfX2ZpcnN0MjsKICAgICArK19fcmVz
dWx0OwogICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA0MjYwICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lucHV0SXRlcmF0b3IyLAogICAgdHlwZW5hbWUgX091dHB1
dEl0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyYXRvcgogICAgc2V0
X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBf
X2xhc3QxLAogICAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIg
X19sYXN0MiwKICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21w
KQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgogICAgICA7CiAgICAg
IDsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIpCiBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgKytfX2ZpcnN0MTsKIGVs
c2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICsrX19maXJzdDI7CiBlbHNl
CiAgIHsKICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgKytfX2ZpcnN0MTsKICAgICAr
K19fZmlyc3QyOwogICAgICsrX19yZXN1bHQ7CiAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQojIDQzMTQgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBfSW5wdXRJdGVyYXRv
cjIsCiAgICB0eXBlbmFtZSBfT3V0cHV0SXRlcmF0b3I+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAg
IHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3Ix
IF9fbGFzdDEsCiAgICAgX0lucHV0SXRlcmF0b3IyIF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIg
X19sYXN0MiwKICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAg
IAogICAgIAoKICAgICAKCgogICAgIAoKICAgICAgOwogICAgICA7CgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogaWYgKCpfX2ZpcnN0MSA8
ICpfX2ZpcnN0MikKICAgewogICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICArK19fZmly
c3QxOwogICAgICsrX19yZXN1bHQ7CiAgIH0KIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0
MSkKICAgKytfX2ZpcnN0MjsKIGVsc2UKICAgewogICAgICsrX19maXJzdDE7CiAgICAgKytfX2Zp
cnN0MjsKICAgfQogICAgICByZXR1cm4gc3RkOjpjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCk7CiAgICB9CiMgNDM3MiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXJhdG9yMiwKICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9y
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcmF0b3IxIF9fbGFzdDEsCiAgICAgX0lucHV0SXRlcmF0b3Iy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyYXRvcjIgX19sYXN0MiwKICAgICBfT3V0cHV0SXRlcmF0b3Ig
X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAg
ICAKCiAgICAgCgoKICAgICAgOwogICAgICA7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2Zp
cnN0MikpCiAgIHsKICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgKytfX2ZpcnN0MTsK
ICAgICArK19fcmVzdWx0OwogICB9CiBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKQogICArK19fZmlyc3QyOwogZWxzZQogICB7CiAgICAgKytfX2ZpcnN0MTsKICAgICArK19f
Zmlyc3QyOwogICB9CiAgICAgIHJldHVybiBzdGQ6OmNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKICAgIH0KIyA0NDI2ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcmF0b3IyLAogICAgdHlwZW5hbWUgX091dHB1dEl0ZXJhdG9yPgogICAgX091dHB1dEl0
ZXJhdG9yCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IxIF9fZmly
c3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgICBfSW5wdXRJdGVyYXRvcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXJhdG9yMiBfX2xhc3QyLAogICAgICAgIF9PdXRwdXRJdGVyYXRvciBf
X3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgogICAgICA7
CiAgICAgIDsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpCiBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICB7CiAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICsrX19maXJzdDE7CiAgICAgKytfX3Jlc3VsdDsKICAgfQogZWxz
ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICB7CiAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICsrX19maXJzdDI7CiAgICAgKytfX3Jlc3VsdDsKICAgfQogZWxzZQogICB7CiAg
ICAgKytfX2ZpcnN0MTsKICAgICArK19fZmlyc3QyOwogICB9CiAgICAgIHJldHVybiBzdGQ6OmNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIHN0ZDo6Y29weShfX2ZpcnN0MSwKICAgICAgICAgIF9fbGFz
dDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgNDQ4NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcjEsIHR5cGVu
YW1lIF9JbnB1dEl0ZXJhdG9yMiwKICAgIHR5cGVuYW1lIF9PdXRwdXRJdGVyYXRvciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcmF0b3IKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVy
ZW5jZShfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAog
ICAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2ZpcnN0MiwgX0lucHV0SXRlcmF0b3IyIF9fbGFzdDIs
CiAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LAogICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKICAgICAgOwogICAg
ICA7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgIHsKICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgKytfX2ZpcnN0MTsKICAgICArK19fcmVzdWx0OwogICB9CiBl
bHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICB7CiAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICsrX19maXJzdDI7CiAgICAgKytfX3Jlc3VsdDsKICAgfQogZWxz
ZQogICB7CiAgICAgKytfX2ZpcnN0MTsKICAgICArK19fZmlyc3QyOwogICB9CiAgICAgIHJldHVy
biBzdGQ6OmNvcHkoX19maXJzdDIsIF9fbGFzdDIsIHN0ZDo6Y29weShfX2ZpcnN0MSwKICAgICAg
ICAgIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgNDU0MCAiL3Vzci9pbmNsdWRlL2MrKy80
LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJh
dG9yPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgICA7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4gX19maXJzdDsKICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19f
Zmlyc3QgIT0gX19sYXN0KQogaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICBfX3Jlc3VsdCA9
IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA0NTY3ICIvdXNyL2luY2x1
ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAg
bWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwKICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIDsKCiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJk
SXRlcmF0b3IgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f
bGFzdCkKIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJz
dDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgX0ZvcndhcmRJdGVyYXRvcgogICAgbWluX2VsZW1lbnQo
X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgICA7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiByZXR1
cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg
ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0
KQogICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA0
NjE5ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0Zvcndh
cmRJdGVyYXRvcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAg
IAoKCiAgICAgIDsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBfX2ZpcnN0
OwogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUg
KCsrX19maXJzdCAhPSBfX2xhc3QpCiBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQog
ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA0NjU0
ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3I+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0
aW9uKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgogICAgICA7CgogICAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3IgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0
KQogcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAg
Zm9yKDs7KQogewogICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBfX2k7CiAgIC0tX19p
OwogICBpZiAoKl9faSA8ICpfX2lpKQogICAgIHsKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IgX19qID0gX19sYXN0OwogICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAge30KICAg
ICAgIHN0ZDo6aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgIHN0ZDo6cmV2ZXJzZShfX2lpLCBf
X2xhc3QpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICBpZiAoX19pID09IF9fZmlyc3Qp
CiAgICAgewogICAgICAgc3RkOjpyZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogfQogICAgfQojIDQ3MTAgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IgX19maXJzdCwKICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0
b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKICAgICAKCgogICAgICA7
CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3IgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChf
X2kgPT0gX19sYXN0KQogcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0t
X19pOwoKICAgICAgZm9yKDs7KQogewogICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faWkgPSBf
X2k7CiAgIC0tX19pOwogICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkKICAgICB7CiAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9faiA9IF9fbGFzdDsKICAgICAgIHdoaWxlICghX19jb21w
KCpfX2ksICotLV9faikpCiAge30KICAgICAgIHN0ZDo6aXRlcl9zd2FwKF9faSwgX19qKTsKICAg
ICAgIHN0ZDo6cmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICBpZiAoX19pID09IF9fZmlyc3QpCiAgICAgewogICAgICAgc3RkOjpyZXZlcnNlKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogICAgfQojIDQ3NjUg
Ii91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcj4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRp
b24oX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCiAgICAgIDsKCiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3Qp
CiByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBm
b3IoOzspCiB7CiAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19paSA9IF9faTsKICAgLS1fX2k7
CiAgIGlmICgqX19paSA8ICpfX2kpCiAgICAgewogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciBfX2ogPSBfX2xhc3Q7CiAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICB7fQogICAg
ICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgc3RkOjpyZXZlcnNlKF9faWksIF9f
bGFzdCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgIGlmIChfX2kgPT0gX19maXJzdCkK
ICAgICB7CiAgICAgICBzdGQ6OnJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiB9CiAgICB9CiMgNDgyMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJh
dG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0Jp
ZGlyZWN0aW9uYWxJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIDsK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9f
aSA9PSBfX2xhc3QpCiByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1f
X2k7CgogICAgICBmb3IoOzspCiB7CiAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX19paSA9IF9f
aTsKICAgLS1fX2k7CiAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKQogICAgIHsKICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IgX19qID0gX19sYXN0OwogICAgICAgd2hpbGUgKCFfX2NvbXAo
Ki0tX19qLCAqX19pKSkKICB7fQogICAgICAgc3RkOjppdGVyX3N3YXAoX19pLCBfX2opOwogICAg
ICAgc3RkOjpyZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgIGlmIChfX2kgPT0gX19maXJzdCkKICAgICB7CiAgICAgICBzdGQ6OnJldmVyc2UoX19maXJz
dCwgX19sYXN0KTsKICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAgICB9CiMgNDg4MCAi
L3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgIF9JbnB1
dEl0ZXJhdG9yCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QxLCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QxLAogICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0MiwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgICA7CiAg
ICAgIDsKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKIGZv
ciAoX0ZvcndhcmRJdGVyYXRvciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7
ICsrX19pdGVyKQogICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgcmV0dXJuIF9fZmly
c3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KIyA0OTE2ICIvdXNyL2luY2x1ZGUvYysr
LzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh
dG9yLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yLAogICAgdHlwZW5hbWUgX0JpbmFyeVByZWRp
Y2F0ZT4KICAgIF9JbnB1dEl0ZXJhdG9yCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvciBfX2xhc3QxLAogICAgX0ZvcndhcmRJdGVyYXRvciBf
X2ZpcnN0MiwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QyLAogICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgIDsKICAgICAgOwoKICAgICAg
Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogZm9yIChfRm9yd2FyZEl0
ZXJhdG9yIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAg
IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICByZXR1cm4gX19maXJzdDE7CiAg
ICAgIHJldHVybiBfX2xhc3QxOwogICAgfQojIDQ5NDYgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcjEs
IHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgogICAgX0ZvcndhcmRJdGVyYXRvcjEKICAgIF9f
ZmluZF9lbmQoX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcmF0b3IxIF9f
bGFzdDEsCiAgICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcmF0
b3IyIF9fbGFzdDIsCiAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKIHJldHVybiBfX2xh
c3QxOwogICAgICBlbHNlCiB7CiAgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fcmVzdWx0ID0gX19sYXN0
MTsKICAgd2hpbGUgKDEpCiAgICAgewogICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19uZXdfcmVz
dWx0CiAgPSBzdGQ6OnNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp
OwogICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogIHJldHVybiBfX3Jlc3VsdDsK
ICAgICAgIGVsc2UKICB7CiAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgIF9fZmlyc3Qx
ID0gX19uZXdfcmVzdWx0OwogICAgKytfX2ZpcnN0MTsKICB9CiAgICAgfQogfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVy
YXRvcjIsCiAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyYXRv
cjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyYXRvcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl
cmF0b3IxIF9fbGFzdDEsCiAgICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIsIF9Gb3J3
YXJkSXRlcmF0b3IyIF9fbGFzdDIsCiAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndh
cmRfaXRlcmF0b3JfdGFnLAogICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewog
ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNl
CiB7CiAgIF9Gb3J3YXJkSXRlcmF0b3IxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgd2hpbGUgKDEp
CiAgICAgewogICAgICAgX0ZvcndhcmRJdGVyYXRvcjEgX19uZXdfcmVzdWx0CiAgPSBzdGQ6OnNl
YXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAg
ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAg
ZWxzZQogIHsKICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgX19maXJzdDEgPSBfX25l
d19yZXN1bHQ7CiAgICArK19fZmlyc3QxOwogIH0KICAgICB9CiB9CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyYXRvcjI+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMQogICAgX19maW5kX2VuZChf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX2ZpcnN0MSwKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yMSBfX2xhc3QxLAogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fZmlyc3Qy
LAogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyIF9fbGFzdDIsCiAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoK
ICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IxPiBfUmV2SXRlcmF0b3IxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0
b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvcjI+IF9SZXZJdGVyYXRvcjI7CgogICAgICBfUmV2SXRl
cmF0b3IxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXJhdG9yMiBfX3JsYXN0Mihf
X2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyYXRvcjEgX19ycmVzdWx0ID0gc3RkOjpzZWFyY2goX1Jl
dkl0ZXJhdG9yMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgIF9SZXZJdGVyYXRvcjIoX19s
YXN0MiksIF9fcmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiByZXR1
cm4gX19sYXN0MTsKICAgICAgZWxzZQogewogICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX3Jl
c3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgIHN0ZDo6YWR2YW5jZShfX3Jlc3VsdCwgLXN0ZDo6
ZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgcmV0dXJuIF9fcmVzdWx0OwogfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvcjIsCiAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgog
ICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ
dGVyYXRvcjEgX19maXJzdDEsCiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvcjEgX19sYXN0
MSwKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2ZpcnN0MiwKICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yMiBfX2xhc3QyLAogICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fY29tcCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMT4gX1Jldkl0ZXJhdG9yMTsKICAgICAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IyPiBfUmV2SXRlcmF0
b3IyOwoKICAgICAgX1Jldkl0ZXJhdG9yMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJ
dGVyYXRvcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRlcmF0b3IxIF9fcnJlc3Vs
dCA9IHN0ZDo6c2VhcmNoKF9SZXZJdGVyYXRvcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAg
ICBfUmV2SXRlcmF0b3IyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgX19jb21wKTsKCiAg
ICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiByZXR1cm4gX19sYXN0MTsKICAgICAgZWxz
ZQogewogICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNl
KCk7CiAgIHN0ZDo6YWR2YW5jZShfX3Jlc3VsdCwgLXN0ZDo6ZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgcmV0dXJuIF9fcmVzdWx0OwogfQogICAgfQojIDUwOTYgIi91c3IvaW5jbHVk
ZS9jKysvNC4wLjAvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyYXRvcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IyPgogICAgaW5saW5lIF9Gb3J3
YXJkSXRlcmF0b3IxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXJhdG9yMSBfX2ZpcnN0MSwgX0Zv
cndhcmRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgX0ZvcndhcmRJdGVyYXRvcjIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlcmF0b3IyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgIDsKICAgICAgOwoKICAgICAgcmV0dXJuIHN0ZDo6X19maW5kX2VuZChfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9fZmlyc3QxKSwKICAgICAgICBzdGQ6Ol9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpKTsK
ICAgIH0KIyA1MTQxICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3IxLCB0eXBlbmFtZSBfRm9yd2FyZEl0
ZXJhdG9yMiwKICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyYXRvcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcmF0b3IxIF9fZmlyc3QxLCBfRm9y
d2FyZEl0ZXJhdG9yMSBfX2xhc3QxLAogICAgICBfRm9yd2FyZEl0ZXJhdG9yMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyYXRvcjIgX19sYXN0MiwKICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgIDsKICAgICAgOwoKICAgICAgcmV0dXJu
IHN0ZDo6X19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAg
ICAgICAgc3RkOjpfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICBzdGQ6Ol9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgIF9fY29tcCk7CiAgICB9Cgp9CiMg
NjkgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYWxnb3JpdGhtIiAyIDMKIyAzMCAiLi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9jKysv
NC4wLjAvY21hdGgiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUvYysrLzQuMC4wL2NtYXRoIiAzCiAg
ICAgICAKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jbWF0aCIgMwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvbWF0aC5oIiAxIDMgNAojIDI2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvYXJjaGl0ZWN0dXJlL3BwYy9tYXRoLmgiIDEgMyA0CiMgNTIgIi91c3Iv
aW5jbHVkZS9hcmNoaXRlY3R1cmUvcHBjL21hdGguaCIgMyA0CmV4dGVybiAiQyIgewojIDY1ICIv
dXNyL2luY2x1ZGUvYXJjaGl0ZWN0dXJlL3BwYy9tYXRoLmgiIDMgNAogdHlwZWRlZiBmbG9hdCBm
bG9hdF90OwogdHlwZWRlZiBkb3VibGUgZG91YmxlX3Q7CiMgOTggIi91c3IvaW5jbHVkZS9hcmNo
aXRlY3R1cmUvcHBjL21hdGguaCIgMyA0CmVudW0gewogX0ZQX05BTiA9IDEsCiBfRlBfSU5GSU5J
VEUgPSAyLAogX0ZQX1pFUk8gPSAzLAogX0ZQX05PUk1BTCA9IDQsCiBfRlBfU1VCTk9STUFMID0g
NSwKIF9GUF9TVVBFUk5PUk1BTCA9IDYKfTsKIyAxMjggIi91c3IvaW5jbHVkZS9hcmNoaXRlY3R1
cmUvcHBjL21hdGguaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBpbnQgX19tYXRoX2VycmhhbmRsaW5n
ICggdm9pZCApOwojIDE0OSAiL3Vzci9pbmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMvbWF0aC5oIiAz
IDQKIGV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZihmbG9hdCApOwogZXh0ZXJuIGludCBfX2ZwY2xh
c3NpZnlkKGRvdWJsZSApOwogZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGxvbmcgZG91YmxlKTsK
IyAxODggIi91c3IvaW5jbHVkZS9hcmNoaXRlY3R1cmUvcHBjL21hdGguaCIgMyA0CiAgc3RhdGlj
IF9faW5saW5lX18gaW50IF9faW5saW5lX2lzZmluaXRlZiAoZmxvYXQgKSBfX2F0dHJpYnV0ZV9f
ICgoYWx3YXlzX2lubGluZSkpOwogIHN0YXRpYyBfX2lubGluZV9fIGludCBfX2lubGluZV9pc2Zp
bml0ZWQgKGRvdWJsZSApIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSk7CiAgc3RhdGlj
IF9faW5saW5lX18gaW50IF9faW5saW5lX2lzZmluaXRlIChsb25nIGRvdWJsZSkgX19hdHRyaWJ1
dGVfXyAoKGFsd2F5c19pbmxpbmUpKTsKICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVf
aXNpbmZmIChmbG9hdCApIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSk7CiAgc3RhdGlj
IF9faW5saW5lX18gaW50IF9faW5saW5lX2lzaW5mZCAoZG91YmxlICkgX19hdHRyaWJ1dGVfXyAo
KGFsd2F5c19pbmxpbmUpKTsKICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVfaXNpbmYg
KGxvbmcgZG91YmxlKSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpOwogIHN0YXRpYyBf
X2lubGluZV9fIGludCBfX2lubGluZV9pc25hbmYgKGZsb2F0ICkgX19hdHRyaWJ1dGVfXyAoKGFs
d2F5c19pbmxpbmUpKTsKICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVfaXNuYW5kIChk
b3VibGUgKSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpOwogIHN0YXRpYyBfX2lubGlu
ZV9fIGludCBfX2lubGluZV9pc25hbiAobG9uZyBkb3VibGUpIF9fYXR0cmlidXRlX18gKChhbHdh
eXNfaW5saW5lKSk7CiAgc3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzbm9ybWFsZiAo
ZmxvYXQgKSBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpOwogIHN0YXRpYyBfX2lubGlu
ZV9fIGludCBfX2lubGluZV9pc25vcm1hbGQgKGRvdWJsZSApIF9fYXR0cmlidXRlX18gKChhbHdh
eXNfaW5saW5lKSk7CiAgc3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzbm9ybWFsIChs
b25nIGRvdWJsZSkgX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKTsKICBzdGF0aWMgX19p
bmxpbmVfXyBpbnQgX19pbmxpbmVfc2lnbmJpdGYgKGZsb2F0ICkgX19hdHRyaWJ1dGVfXyAoKGFs
d2F5c19pbmxpbmUpKTsKICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVfc2lnbmJpdGQg
KGRvdWJsZSApIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSk7CiAgc3RhdGljIF9faW5s
aW5lX18gaW50IF9faW5saW5lX3NpZ25iaXQgKGxvbmcgZG91YmxlKSBfX2F0dHJpYnV0ZV9fICgo
YWx3YXlzX2lubGluZSkpOwoKICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVfaXNpbmZm
KCBmbG9hdCBfX3ggKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KSA9PSBfX2J1aWx0aW5f
aW5mZigpOyB9CiAgc3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzaW5mZCggZG91Ymxl
IF9feCApIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzKF9feCkgPT0gX19idWlsdGluX2luZigpOyB9
CiAgc3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzaW5mKCBsb25nIGRvdWJsZSBfX3gg
KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KSA9PSBfX2J1aWx0aW5faW5mbCgpOyB9CiAg
c3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzZmluaXRlZiggZmxvYXQgX194ICkgeyBy
ZXR1cm4gX194ID09IF9feCAmJiBfX2J1aWx0aW5fZmFic2YoX194KSAhPSBfX2J1aWx0aW5faW5m
ZigpOyB9CiAgc3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzZmluaXRlZCggZG91Ymxl
IF9feCApIHsgcmV0dXJuIF9feCA9PSBfX3ggJiYgX19idWlsdGluX2ZhYnMoX194KSAhPSBfX2J1
aWx0aW5faW5mKCk7IH0KICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVfaXNmaW5pdGUo
IGxvbmcgZG91YmxlIF9feCApIHsgcmV0dXJuIF9feCA9PSBfX3ggJiYgX19idWlsdGluX2ZhYnNs
KF9feCkgIT0gX19idWlsdGluX2luZmwoKTsgfQogIHN0YXRpYyBfX2lubGluZV9fIGludCBfX2lu
bGluZV9pc25hbmYoIGZsb2F0IF9feCApIHsgcmV0dXJuIF9feCAhPSBfX3g7IH0KICBzdGF0aWMg
X19pbmxpbmVfXyBpbnQgX19pbmxpbmVfaXNuYW5kKCBkb3VibGUgX194ICkgeyByZXR1cm4gX194
ICE9IF9feDsgfQogIHN0YXRpYyBfX2lubGluZV9fIGludCBfX2lubGluZV9pc25hbiggbG9uZyBk
b3VibGUgX194ICkgeyByZXR1cm4gX194ICE9IF9feDsgfQogIHN0YXRpYyBfX2lubGluZV9fIGlu
dCBfX2lubGluZV9zaWduYml0ZiggZmxvYXQgX194ICkgeyB1bmlvbnsgZmxvYXQgX19mOyB1bnNp
Z25lZCBpbnQgX191OyB9X191OyBfX3UuX19mID0gX194OyByZXR1cm4gKGludCkoX191Ll9fdSA+
PiAzMSk7IH0KICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVfc2lnbmJpdGQoIGRvdWJs
ZSBfX3ggKSB7IHVuaW9ueyBkb3VibGUgX19mOyB1bnNpZ25lZCBsb25nIF9fdTsgfV9fdTsgX191
Ll9fZiA9IF9feDsgcmV0dXJuIChpbnQpKF9fdS5fX3UgPj4gKCA4ICogc2l6ZW9mKCBfX3UuX191
KSAtIDEpKTsgfQogIHN0YXRpYyBfX2lubGluZV9fIGludCBfX2lubGluZV9zaWduYml0KCBsb25n
IGRvdWJsZSBfX3ggKXsgdW5pb257IGxvbmcgZG91YmxlIF9fbGQ7IHVuc2lnbmVkIGxvbmcgX19w
OyB9X191OyBfX3UuX19sZCA9IF9feDsgcmV0dXJuIChpbnQpIChfX3UuX19wID4+ICggOCAqIHNp
emVvZiggX191Ll9fcCkgLSAxKSk7IH0KICBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX19pbmxpbmVf
aXNub3JtYWxmKCBmbG9hdCBfX3ggKSB7IGZsb2F0IGZhYnNmID0gX19idWlsdGluX2ZhYnNmKF9f
eCk7IGlmKCBfX3ggIT0gX194ICkgcmV0dXJuIDA7IHJldHVybiBmYWJzZiA8IF9fYnVpbHRpbl9p
bmZmKCkgJiYgZmFic2YgPj0gMS4xNzU0OTQzNWUtMzhGOyB9CiAgc3RhdGljIF9faW5saW5lX18g
aW50IF9faW5saW5lX2lzbm9ybWFsZCggZG91YmxlIF9feCApIHsgZG91YmxlIGZhYnNmID0gX19i
dWlsdGluX2ZhYnMoX194KTsgaWYoIF9feCAhPSBfX3ggKSByZXR1cm4gMDsgcmV0dXJuIGZhYnNm
IDwgX19idWlsdGluX2luZigpICYmIGZhYnNmID49IDIuMjI1MDczODU4NTA3MjAxNGUtMzA4OyB9
CiAgc3RhdGljIF9faW5saW5lX18gaW50IF9faW5saW5lX2lzbm9ybWFsKCBsb25nIGRvdWJsZSBf
X3ggKSB7IGxvbmcgZG91YmxlIGZhYnNmID0gX19idWlsdGluX2ZhYnNsKF9feCk7IGlmKCBfX3gg
IT0gX194ICkgcmV0dXJuIDA7IHJldHVybiBmYWJzZiA8IF9fYnVpbHRpbl9pbmZsKCkgJiYgZmFi
c2YgPj0gMi4wMDQxNjgzNjAwMDg5NzI3Nzc5OTYxMDgwNTEzNTAxNmUtMjkyTDsgfQojIDM3NyAi
L3Vzci9pbmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMvbWF0aC5oIiAzIDQKZXh0ZXJuIGRvdWJsZSBh
Y29zKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGFjb3NmKCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJs
ZSBhc2luKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGFzaW5mKCBmbG9hdCApOwoKZXh0ZXJuIGRv
dWJsZSBhdGFuKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGF0YW5mKCBmbG9hdCApOwoKZXh0ZXJu
IGRvdWJsZSBhdGFuMiggZG91YmxlLCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGF0YW4yZiggZmxv
YXQsIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIGNvcyggZG91YmxlICk7CmV4dGVybiBmbG9hdCBj
b3NmKCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBzaW4oIGRvdWJsZSApOwpleHRlcm4gZmxvYXQg
c2luZiggZmxvYXQgKTsKCmV4dGVybiBkb3VibGUgdGFuKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0
IHRhbmYoIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIGFjb3NoKCBkb3VibGUgKTsKZXh0ZXJuIGZs
b2F0IGFjb3NoZiggZmxvYXQgKTsKCmV4dGVybiBkb3VibGUgYXNpbmgoIGRvdWJsZSApOwpleHRl
cm4gZmxvYXQgYXNpbmhmKCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCggZG91YmxlICk7
CmV4dGVybiBmbG9hdCBhdGFuaGYoIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIGNvc2goIGRvdWJs
ZSApOwpleHRlcm4gZmxvYXQgY29zaGYoIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIHNpbmgoIGRv
dWJsZSApOwpleHRlcm4gZmxvYXQgc2luaGYoIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIHRhbmgo
IGRvdWJsZSApOwpleHRlcm4gZmxvYXQgdGFuaGYoIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIGV4
cCggZG91YmxlICk7CmV4dGVybiBmbG9hdCBleHBmKCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBl
eHAyKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGV4cDJmKCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJs
ZSBleHBtMSggZG91YmxlICk7CmV4dGVybiBmbG9hdCBleHBtMWYoIGZsb2F0ICk7CgpleHRlcm4g
ZG91YmxlIGxvZyggZG91YmxlICk7CmV4dGVybiBmbG9hdCBsb2dmKCBmbG9hdCApOwoKZXh0ZXJu
IGRvdWJsZSBsb2cxMCggZG91YmxlICk7CmV4dGVybiBmbG9hdCBsb2cxMGYoIGZsb2F0ICk7Cgpl
eHRlcm4gZG91YmxlIGxvZzIoIGRvdWJsZSApOwpleHRlcm4gZmxvYXQgbG9nMmYoIGZsb2F0ICk7
CgpleHRlcm4gZG91YmxlIGxvZzFwKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGxvZzFwZiggZmxv
YXQgKTsKCmV4dGVybiBkb3VibGUgbG9nYiggZG91YmxlICk7CmV4dGVybiBmbG9hdCBsb2diZigg
ZmxvYXQgKTsKCmV4dGVybiBkb3VibGUgbW9kZiggZG91YmxlLCBkb3VibGUgKiApOwpleHRlcm4g
ZmxvYXQgbW9kZmYoIGZsb2F0LCBmbG9hdCAqICk7CgpleHRlcm4gZG91YmxlIGxkZXhwKCBkb3Vi
bGUsIGludCApOwpleHRlcm4gZmxvYXQgbGRleHBmKCBmbG9hdCwgaW50ICk7CgpleHRlcm4gZG91
YmxlIGZyZXhwKCBkb3VibGUsIGludCAqICk7CmV4dGVybiBmbG9hdCBmcmV4cGYoIGZsb2F0LCBp
bnQgKiApOwoKZXh0ZXJuIGludCBpbG9nYiggZG91YmxlICk7CmV4dGVybiBpbnQgaWxvZ2JmKCBm
bG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4oIGRvdWJsZSwgaW50ICk7CmV4dGVybiBmbG9h
dCBzY2FsYm5mKCBmbG9hdCwgaW50ICk7CgpleHRlcm4gZG91YmxlIHNjYWxibG4oIGRvdWJsZSwg
bG9uZyBpbnQgKTsKZXh0ZXJuIGZsb2F0IHNjYWxibG5mKCBmbG9hdCwgbG9uZyBpbnQgKTsKCmV4
dGVybiBkb3VibGUgZmFicyggZG91YmxlICk7CmV4dGVybiBmbG9hdCBmYWJzZiggZmxvYXQgKTsK
CmV4dGVybiBkb3VibGUgY2JydCggZG91YmxlICk7CmV4dGVybiBmbG9hdCBjYnJ0ZiggZmxvYXQg
KTsKCmV4dGVybiBkb3VibGUgaHlwb3QoIGRvdWJsZSwgZG91YmxlICk7CmV4dGVybiBmbG9hdCBo
eXBvdGYoIGZsb2F0LCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBwb3coIGRvdWJsZSwgZG91Ymxl
ICk7CmV4dGVybiBmbG9hdCBwb3dmKCBmbG9hdCwgZmxvYXQgKTsKCmV4dGVybiBkb3VibGUgc3Fy
dCggZG91YmxlICk7CmV4dGVybiBmbG9hdCBzcXJ0ZiggZmxvYXQgKTsKCmV4dGVybiBkb3VibGUg
ZXJmKCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGVyZmYoIGZsb2F0ICk7CgpleHRlcm4gZG91Ymxl
IGVyZmMoIGRvdWJsZSApOwpleHRlcm4gZmxvYXQgZXJmY2YoIGZsb2F0ICk7CgpleHRlcm4gZG91
YmxlIGxnYW1tYSggZG91YmxlICk7CmV4dGVybiBmbG9hdCBsZ2FtbWFmKCBmbG9hdCApOwoKZXh0
ZXJuIGRvdWJsZSB0Z2FtbWEoIGRvdWJsZSApOwpleHRlcm4gZmxvYXQgdGdhbW1hZiggZmxvYXQg
KTsKCmV4dGVybiBkb3VibGUgY2VpbCggZG91YmxlICk7CmV4dGVybiBmbG9hdCBjZWlsZiggZmxv
YXQgKTsKCmV4dGVybiBkb3VibGUgZmxvb3IoIGRvdWJsZSApOwpleHRlcm4gZmxvYXQgZmxvb3Jm
KCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBuZWFyYnlpbnQoIGRvdWJsZSApOwpleHRlcm4gZmxv
YXQgbmVhcmJ5aW50ZiggZmxvYXQgKTsKCmV4dGVybiBkb3VibGUgcmludCggZG91YmxlICk7CmV4
dGVybiBmbG9hdCByaW50ZiggZmxvYXQgKTsKCmV4dGVybiBsb25nIGludCBscmludCggZG91Ymxl
ICk7CmV4dGVybiBsb25nIGludCBscmludGYoIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIHJvdW5k
KCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IHJvdW5kZiggZmxvYXQgKTsKCmV4dGVybiBsb25nIGlu
dCBscm91bmQoIGRvdWJsZSApOwpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiggZmxvYXQgKTsKCgoK
ICAgIGV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCggZG91YmxlICk7CiAgICBleHRlcm4gbG9u
ZyBsb25nIGludCBsbHJpbnRmKCBmbG9hdCApOwoKICAgIGV4dGVybiBsb25nIGxvbmcgaW50IGxs
cm91bmQoIGRvdWJsZSApOwogICAgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYoIGZsb2F0
ICk7CgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyggZG91YmxlICk7CmV4dGVybiBmbG9hdCB0cnVuY2Yo
IGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIGZtb2QoIGRvdWJsZSwgZG91YmxlICk7CmV4dGVybiBm
bG9hdCBmbW9kZiggZmxvYXQsIGZsb2F0ICk7CgpleHRlcm4gZG91YmxlIHJlbWFpbmRlciggZG91
YmxlLCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYoIGZsb2F0LCBmbG9hdCApOwoK
ZXh0ZXJuIGRvdWJsZSByZW1xdW8oIGRvdWJsZSwgZG91YmxlLCBpbnQgKiApOwpleHRlcm4gZmxv
YXQgcmVtcXVvZiggZmxvYXQsIGZsb2F0LCBpbnQgKiApOwoKZXh0ZXJuIGRvdWJsZSBjb3B5c2ln
biggZG91YmxlLCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiggZmxvYXQsIGZsb2F0
ICk7CgpleHRlcm4gZG91YmxlIG5hbiggY29uc3QgY2hhciAqICk7CmV4dGVybiBmbG9hdCBuYW5m
KCBjb25zdCBjaGFyICogKTsKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyKCBkb3VibGUsIGRvdWJs
ZSApOwpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiggZmxvYXQsIGZsb2F0ICk7CgoKZXh0ZXJuIGRv
dWJsZSBmZGltKCBkb3VibGUsIGRvdWJsZSApOwpleHRlcm4gZmxvYXQgZmRpbWYoIGZsb2F0LCBm
bG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBmbWF4KCBkb3VibGUsIGRvdWJsZSApOwpleHRlcm4gZmxv
YXQgZm1heGYoIGZsb2F0LCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJsZSBmbWluKCBkb3VibGUsIGRv
dWJsZSApOwpleHRlcm4gZmxvYXQgZm1pbmYoIGZsb2F0LCBmbG9hdCApOwoKZXh0ZXJuIGRvdWJs
ZSBmbWEoIGRvdWJsZSwgZG91YmxlLCBkb3VibGUgKTsKZXh0ZXJuIGZsb2F0IGZtYWYoIGZsb2F0
LCBmbG9hdCwgZmxvYXQgKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2woIGxvbmcgZG91Ymxl
ICkgX19hc20oIl8iICJhY29zbCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBhc2lu
bCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgImFzaW5sIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIGF0YW5sKCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiYXRhbmwiICIkTERCTDEy
OCIpOwpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsKCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUg
KSBfX2FzbSgiXyIgImF0YW4ybCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBjb3Ns
KCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiY29zbCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25n
IGRvdWJsZSBzaW5sKCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAic2lubCIgIiRMREJMMTI4Iik7
CmV4dGVybiBsb25nIGRvdWJsZSB0YW5sKCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAidGFubCIg
IiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwoIGxvbmcgZG91YmxlICkgX19h
c20oIl8iICJhY29zaGwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsKCBs
b25nIGRvdWJsZSApIF9fYXNtKCJfIiAiYXNpbmhsIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIGF0YW5obCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgImF0YW5obCIgIiRMREJMMTI4
Iik7CmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgImNv
c2hsIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsKCBsb25nIGRvdWJsZSAp
IF9fYXNtKCJfIiAic2luaGwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwo
IGxvbmcgZG91YmxlICkgX19hc20oIl8iICJ0YW5obCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25n
IGRvdWJsZSBleHBsKCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiZXhwbCIgIiRMREJMMTI4Iik7
CmV4dGVybiBsb25nIGRvdWJsZSBleHAybCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgImV4cDJs
IiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCggbG9uZyBkb3VibGUgKSBf
X2FzbSgiXyIgImV4cG0xbCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBsb2dsKCBs
b25nIGRvdWJsZSApIF9fYXNtKCJfIiAibG9nbCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRv
dWJsZSBsb2cxMGwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJsb2cxMGwiICIkTERCTDEyOCIp
OwpleHRlcm4gbG9uZyBkb3VibGUgbG9nMmwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJsb2cy
bCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwoIGxvbmcgZG91YmxlICkg
X19hc20oIl8iICJsb2cxcGwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwo
IGxvbmcgZG91YmxlICkgX19hc20oIl8iICJsb2dibCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25n
IGRvdWJsZSBtb2RmbCggbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlICogKSBfX2FzbSgiXyIgIm1v
ZGZsIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCggbG9uZyBkb3VibGUs
IGludCApIF9fYXNtKCJfIiAibGRleHBsIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91Ymxl
IGZyZXhwbCggbG9uZyBkb3VibGUsIGludCAqICkgX19hc20oIl8iICJmcmV4cGwiICIkTERCTDEy
OCIpOwpleHRlcm4gaW50IGlsb2dibCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgImlsb2dibCIg
IiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sKCBsb25nIGRvdWJsZSwgaW50
ICkgX19hc20oIl8iICJzY2FsYm5sIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHNj
YWxibG5sKCBsb25nIGRvdWJsZSwgbG9uZyBpbnQgKSBfX2FzbSgiXyIgInNjYWxibG5sIiAiJExE
QkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsKCBsb25nIGRvdWJsZSApIF9fYXNtKCJf
IiAiZmFic2wiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwoIGxvbmcgZG91
YmxlICkgX19hc20oIl8iICJjYnJ0bCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBo
eXBvdGwoIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiaHlwb3RsIiAiJExE
QkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2woIGxvbmcgZG91YmxlLCBsb25nIGRvdWJs
ZSApIF9fYXNtKCJfIiAicG93bCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0
bCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgInNxcnRsIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIGVyZmwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJlcmZsIiAiJExEQkwxMjgi
KTsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsKCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiZXJm
Y2wiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCggbG9uZyBkb3VibGUg
KSBfX2FzbSgiXyIgImxnYW1tYWwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgdGdh
bW1hbCggbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgInRnYW1tYWwiICIkTERCTDEyOCIpOwpleHRl
cm4gbG9uZyBkb3VibGUgY2VpbGwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJjZWlsbCIgIiRM
REJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwoIGxvbmcgZG91YmxlICkgX19hc20o
Il8iICJmbG9vcmwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCgg
bG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgIm5lYXJieWludGwiICIkTERCTDEyOCIpOwpleHRlcm4g
bG9uZyBkb3VibGUgcmludGwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJyaW50bCIgIiRMREJM
MTI4Iik7CmV4dGVybiBsb25nIGludCBscmludGwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJs
cmludGwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsKCBsb25nIGRvdWJs
ZSApIF9fYXNtKCJfIiAicm91bmRsIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu
ZGwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJscm91bmRsIiAiJExEQkwxMjgiKTsKCgoKICAg
IGV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwoIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJs
bHJpbnRsIiAiJExEQkwxMjgiKTsKICAgIGV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRsKCBs
b25nIGRvdWJsZSApIF9fYXNtKCJfIiAibGxyb3VuZGwiICIkTERCTDEyOCIpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSB0cnVuY2woIGxvbmcgZG91YmxlICkgX19hc20oIl8iICJ0cnVuY2wiICIkTERC
TDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwoIGxvbmcgZG91YmxlLCBsb25nIGRvdWJs
ZSkgX19hc20oIl8iICJmbW9kbCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRvdWJsZSByZW1h
aW5kZXJsKCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgInJlbWFpbmRlcmwi
ICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCggbG9uZyBkb3VibGUsIGxv
bmcgZG91YmxlLCBpbnQgKiApIF9fYXNtKCJfIiAicmVtcXVvbCIgIiRMREJMMTI4Iik7CmV4dGVy
biBsb25nIGRvdWJsZSBjb3B5c2lnbmwoIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSApIF9fYXNt
KCJfIiAiY29weXNpZ25sIiAiJExEQkwxMjgiKTsKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwoIGNv
bnN0IGNoYXIgKiApIF9fYXNtKCJfIiAibmFubCIgIiRMREJMMTI4Iik7CmV4dGVybiBsb25nIGRv
dWJsZSBuZXh0YWZ0ZXJsKCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgIm5l
eHRhZnRlcmwiICIkTERCTDEyOCIpOwpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQoIGRvdWJsZSwg
bG9uZyBkb3VibGUgKSBfX2FzbSgiXyIgIm5leHR0b3dhcmQiICIkTERCTDEyOCIpOwpleHRlcm4g
ZmxvYXQgbmV4dHRvd2FyZGYoIGZsb2F0LCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAibmV4dHRv
d2FyZGYiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwoIGxvbmcg
ZG91YmxlLCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAibmV4dHRvd2FyZGwiICIkTERCTDEyOCIp
OwpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwoIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSApIF9f
YXNtKCJfIiAiZmRpbWwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwoIGxv
bmcgZG91YmxlLCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiZm1heGwiICIkTERCTDEyOCIpOwpl
eHRlcm4gbG9uZyBkb3VibGUgZm1pbmwoIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSApIF9fYXNt
KCJfIiAiZm1pbmwiICIkTERCTDEyOCIpOwpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCggbG9uZyBk
b3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSApIF9fYXNtKCJfIiAiZm1hbCIgIiRMREJM
MTI4Iik7CiMgNjIzICIvdXNyL2luY2x1ZGUvYXJjaGl0ZWN0dXJlL3BwYy9tYXRoLmgiIDMgNApl
eHRlcm4gZG91YmxlIF9faW5mKCB2b2lkICk7CmV4dGVybiBmbG9hdCBfX2luZmYoIHZvaWQgKTsK
ZXh0ZXJuIGZsb2F0IF9fbmFuKCB2b2lkICk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoIGRvdWJsZSAp
OwpleHRlcm4gZG91YmxlIGoxICggZG91YmxlICk7CmV4dGVybiBkb3VibGUgam4gKCBpbnQsIGRv
dWJsZSApOwoKZXh0ZXJuIGRvdWJsZSB5MCAoIGRvdWJsZSApOwpleHRlcm4gZG91YmxlIHkxICgg
ZG91YmxlICk7CmV4dGVybiBkb3VibGUgeW4gKCBpbnQsIGRvdWJsZSApOwojIDY3MyAiL3Vzci9p
bmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMvbWF0aC5oIiAzIDQKICAgICAgICBleHRlcm4gZG91Ymxl
IHNjYWxiICggZG91YmxlLCBkb3VibGUgKSBfX2FzbSgiX3NjYWxiJFVOSVgyMDAzIiApOwojIDY5
NiAiL3Vzci9pbmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMvbWF0aC5oIiAzIDQKZXh0ZXJuIGludCBz
aWduZ2FtOwojIDcwOSAiL3Vzci9pbmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMvbWF0aC5oIiAzIDQK
ZXh0ZXJuIGxvbmcgaW50IHJpbnR0b2wgKCBkb3VibGUgKTsKCmV4dGVybiBsb25nIGludCByb3Vu
ZHRvbCAoIGRvdWJsZSApOwoKdHlwZWRlZiBzdHJ1Y3QgX19jb21wbGV4X3MgewogICAgICAgIGRv
dWJsZSBSZWFsOwogICAgICAgIGRvdWJsZSBJbWFnOwp9IF9fY29tcGxleF90OwoKCgoKCgoKZW51
bSBmZHZlcnNpb24ge19mZGxpYm1faWVlZSA9IC0xLCBfZmRsaWJtX3N2aWQsIF9mZGxpYm1feG9w
ZW4sIF9mZGxpYm1fcG9zaXh9OwojIDc0MCAiL3Vzci9pbmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMv
bWF0aC5oIiAzIDQKZXh0ZXJuIGVudW0gZmR2ZXJzaW9uIF9mZGxpYl92ZXJzaW9uOwojIDc3OCAi
L3Vzci9pbmNsdWRlL2FyY2hpdGVjdHVyZS9wcGMvbWF0aC5oIiAzIDQKZXh0ZXJuIGludCBmaW5p
dGUgKCBkb3VibGUgKTsKCmV4dGVybiBkb3VibGUgZ2FtbWEgKCBkb3VibGUgKTsKIyA3OTEgIi91
c3IvaW5jbHVkZS9hcmNoaXRlY3R1cmUvcHBjL21hdGguaCIgMyA0CmV4dGVybiBkb3VibGUgc2ln
bmlmaWNhbmQgKCBkb3VibGUgKTsKCgoKCmV4dGVybiBkb3VibGUgZHJlbSAoIGRvdWJsZSwgZG91
YmxlICk7CgoKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWFfciAoIGRvdWJsZSwgaW50ICogKTsKZXh0
ZXJuIGRvdWJsZSBsZ2FtbWFfciAoIGRvdWJsZSwgaW50ICogKTsKIyA4ODkgIi91c3IvaW5jbHVk
ZS9hcmNoaXRlY3R1cmUvcHBjL21hdGguaCIgMyA0Cn0KIyAyNyAiL3Vzci9pbmNsdWRlL21hdGgu
aCIgMiAzIDQKIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9jbWF0aCIgMiAzCiMgODEgIi91
c3IvaW5jbHVkZS9jKysvNC4wLjAvY21hdGgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2NtYXRoX3Bvd2VyKF9UcCwgdW5zaWduZWQgaW50KTsKCiAg
aW5saW5lIGRvdWJsZQogIGFicyhkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJz
KF9feCk7IH0KCiAgaW5saW5lIGZsb2F0CiAgYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1
aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3Vi
bGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6YWNv
czsKCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGlu
X2Fjb3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBf
X3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Fjb3NsKF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIHR5cGVuYW1lIF9fZW5hYmxlX2lmPGRvdWJsZSwgX19pc19pbnRl
Z2VyPF9UcD46Ol9fdmFsdWU+OjpfX3R5cGUKICAgIGFjb3MoX1RwIF9feCkKICAgIHsKICAgICAg
cmV0dXJuIF9fYnVpbHRpbl9hY29zKF9feCk7CiAgICB9CgogIHVzaW5nIDo6YXNpbjsKCiAgaW5s
aW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2FzaW5mKF9f
eCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyBy
ZXR1cm4gX19idWlsdGluX2FzaW5sKF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIHR5cGVuYW1lIF9fZW5hYmxlX2lmPGRvdWJsZSwgX19pc19pbnRlZ2VyPF9UcD46
Ol9fdmFsdWU+OjpfX3R5cGUKICAgIGFzaW4oX1RwIF9feCkKICAgIHsgcmV0dXJuIF9fYnVpbHRp
bl9hc2luKF9feCk7IH0KCiAgdXNpbmcgOjphdGFuOwoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZs
b2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbmYoX194KTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBhdGFuKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fYXRh
bmwoX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdHlwZW5hbWUg
X19lbmFibGVfaWY8ZG91YmxlLCBfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZT46Ol9fdHlwZQog
ICAgYXRhbihfVHAgX194KQogICAgeyByZXR1cm4gX19idWlsdGluX2F0YW4oX194KTsgfQoKICB1
c2luZyA6OmF0YW4yOwoKICBpbmxpbmUgZmxvYXQKICBhdGFuMihmbG9hdCBfX3ksIGZsb2F0IF9f
eCkKICB7IHJldHVybiBfX2J1aWx0aW5fYXRhbjJmKF9feSwgX194KTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkKICB7IHJl
dHVybiBfX2J1aWx0aW5fYXRhbjJsKF9feSwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9VcD4KICAgIGlubGluZSB0eXBlbmFtZSBfX2VuYWJsZV9pZjxkb3VibGUs
IF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBfX2lzX2ludGVnZXI8X1VwPjo6X192YWx1ZT46Ol9fdHlwZQogICAgYXRh
bjIoX1RwIF9feSwgX1VwIF9feCkKICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9hdGFuMihfX3ksIF9f
eCk7IH0KCiAgdXNpbmcgOjpjZWlsOwoKICBpbmxpbmUgZmxvYXQKICBjZWlsKGZsb2F0IF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fY2VpbGYoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBjZWlsKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY2VpbGwoX194KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdHlwZW5hbWUgX19lbmFibGVf
aWY8ZG91YmxlLCBfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZT46Ol9fdHlwZQogICAgY2VpbChf
VHAgX194KQogICAgeyByZXR1cm4gX19idWlsdGluX2NlaWwoX194KTsgfQoKICB1c2luZyA6OmNv
czsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5f
Y29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gp
CiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgdHlwZW5hbWUgX19lbmFibGVfaWY8ZG91YmxlLCBfX2lzX2ludGVnZXI8
X1RwPjo6X192YWx1ZT46Ol9fdHlwZQogICAgY29zKF9UcCBfX3gpCiAgICB7IHJldHVybiBfX2J1
aWx0aW5fY29zKF9feCk7IH0KCiAgdXNpbmcgOjpjb3NoOwoKICBpbmxpbmUgZmxvYXQKICBjb3No
KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zaGYoX194KTsgfQoKICBpbmxpbmUg
bG9uZyBkb3VibGUKICBjb3NoKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5f
Y29zaGwoX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdHlwZW5h
bWUgX19lbmFibGVfaWY8ZG91YmxlLCBfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZT46Ol9fdHlw
ZQogICAgY29zaChfVHAgX194KQogICAgeyByZXR1cm4gX19idWlsdGluX2Nvc2goX194KTsgfQoK
ICB1c2luZyA6OmV4cDsKCiAgaW5saW5lIGZsb2F0CiAgZXhwKGZsb2F0IF9feCkKICB7IHJldHVy
biBfX2J1aWx0aW5fZXhwZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25n
IGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2V4cGwoX194KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdHlwZW5hbWUgX19lbmFibGVfaWY8ZG91YmxlLCBf
X2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZT46Ol9fdHlwZQogICAgZXhwKF9UcCBfX3gpCiAgICB7
IHJldHVybiBfX2J1aWx0aW5fZXhwKF9feCk7IH0KCiAgdXNpbmcgOjpmYWJzOwoKICBpbmxpbmUg
ZmxvYXQKICBmYWJzKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsg
fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmYWJzKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy
biBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgdHlwZW5hbWUgX19lbmFibGVfaWY8ZG91YmxlLCBfX2lzX2ludGVnZXI8X1RwPjo6X192
YWx1ZT46Ol9fdHlwZQogICAgZmFicyhfVHAgX194KQogICAgeyByZXR1cm4gX19idWlsdGluX2Zh
YnMoX194KTsgfQoKICB1c2luZyA6OmZsb29yOwoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9h
dCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Zsb29yZihfX3gpOyB9CgogIGlubGluZSBsb25n
IGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmxv
b3JsKF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHR5cGVuYW1l
IF9fZW5hYmxlX2lmPGRvdWJsZSwgX19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWU+OjpfX3R5cGUK
ICAgIGZsb29yKF9UcCBfX3gpCiAgICB7IHJldHVybiBfX2J1aWx0aW5fZmxvb3IoX194KTsgfQoK
ICB1c2luZyA6OmZtb2Q7CgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBf
X3kpCiAgeyByZXR1cm4gX19idWlsdGluX2Ztb2RmKF9feCwgX195KTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBmbW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9mbW9kbChfX3gsIF9feSk7IH0KCiAgdXNpbmcgOjpmcmV4cDsKCiAgaW5s
aW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9fZXhwKQogIHsgcmV0dXJuIF9fYnVp
bHRpbl9mcmV4cGYoX194LCBfX2V4cCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZnJleHAo
bG9uZyBkb3VibGUgX194LCBpbnQqIF9fZXhwKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mcmV4cGwo
X194LCBfX2V4cCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHR5cGVu
YW1lIF9fZW5hYmxlX2lmPGRvdWJsZSwgX19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWU+OjpfX3R5
cGUKICAgIGZyZXhwKF9UcCBfX3gsIGludCogX19leHApCiAgICB7IHJldHVybiBfX2J1aWx0aW5f
ZnJleHAoX194LCBfX2V4cCk7IH0KCiAgdXNpbmcgOjpsZGV4cDsKCiAgaW5saW5lIGZsb2F0CiAg
bGRleHAoZmxvYXQgX194LCBpbnQgX19leHApCiAgeyByZXR1cm4gX19idWlsdGluX2xkZXhwZihf
X3gsIF9fZXhwKTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBf
X3gsIGludCBfX2V4cCkKICB7IHJldHVybiBfX2J1aWx0aW5fbGRleHBsKF9feCwgX19leHApOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgdHlwZW5hbWUgX19lbmFibGVfaWY8
ZG91YmxlLCBfX2lzX2ludGVnZXI8X1RwPjo6X192YWx1ZT46Ol9fdHlwZQogIGxkZXhwKF9UcCBf
X3gsIGludCBfX2V4cCkKICB7IHJldHVybiBfX2J1aWx0aW5fbGRleHAoX194LCBfX2V4cCk7IH0K
CiAgdXNpbmcgOjpsb2c7CgogIGlubGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpCiAgeyByZXR1
cm4gX19idWlsdGluX2xvZ2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9u
ZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9sb2dsKF9feCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHR5cGVuYW1lIF9fZW5hYmxlX2lmPGRvdWJsZSwg
X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWU+OjpfX3R5cGUKICAgIGxvZyhfVHAgX194KQogICAg
eyByZXR1cm4gX19idWlsdGluX2xvZyhfX3gpOyB9CgogIHVzaW5nIDo6bG9nMTA7CgogIGlubGlu
ZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fbG9nMTBmKF9f
eCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nMTAobG9uZyBkb3VibGUgX194KQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9sb2cxMGwoX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgdHlwZW5hbWUgX19lbmFibGVfaWY8ZG91YmxlLCBfX2lzX2ludGVnZXI8X1Rw
Pjo6X192YWx1ZT46Ol9fdHlwZQogICAgbG9nMTAoX1RwIF9feCkKICAgIHsgcmV0dXJuIF9fYnVp
bHRpbl9sb2cxMChfX3gpOyB9CgogIHVzaW5nIDo6bW9kZjsKCiAgaW5saW5lIGZsb2F0CiAgbW9k
ZihmbG9hdCBfX3gsIGZsb2F0KiBfX2lwdHIpCiAgeyByZXR1cm4gX19idWlsdGluX21vZGZmKF9f
eCwgX19pcHRyKTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUqIF9faXB0cikKICB7IHJldHVybiBfX2J1aWx0aW5fbW9kZmwoX194LCBf
X2lwdHIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9f
cG93X2hlbHBlcihfVHAgX194LCBpbnQgX19uKQogICAgewogICAgICByZXR1cm4gX19uIDwgMAog
ICAgICAgID8gX1RwKDEpL19fY21hdGhfcG93ZXIoX194LCAtX19uKQogICAgICAgIDogX19jbWF0
aF9wb3dlcihfX3gsIF9fbik7CiAgICB9CgogIHVzaW5nIDo6cG93OwoKICBpbmxpbmUgZmxvYXQK
ICBwb3coZmxvYXQgX194LCBmbG9hdCBfX3kpCiAgeyByZXR1cm4gX19idWlsdGluX3Bvd2YoX194
LCBfX3kpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkKICB7IHJldHVybiBfX2J1aWx0aW5fcG93bChfX3gsIF9feSk7IH0KCiAg
aW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fYnVp
bHRpbl9wb3dpKF9feCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBp
bnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9wb3dpZihfX3gsIF9fbik7IH0KCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBf
X2J1aWx0aW5fcG93aWwoX194LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxv
YXQKICBzaW4oZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1
aWx0aW5fc2lubChfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB0
eXBlbmFtZSBfX2VuYWJsZV9pZjxkb3VibGUsIF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlPjo6
X190eXBlCiAgICBzaW4oX1RwIF9feCkKICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW4oX194KTsg
fQoKICB1c2luZyA6OnNpbmg7CgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9zaW5oZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNp
bmgobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5obChfX3gpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB0eXBlbmFtZSBfX2VuYWJsZV9pZjxk
b3VibGUsIF9faXNfaW50ZWdlcjxfVHA+OjpfX3ZhbHVlPjo6X190eXBlCiAgICBzaW5oKF9UcCBf
X3gpCiAgICB7IHJldHVybiBfX2J1aWx0aW5fc2luaChfX3gpOyB9CgogIHVzaW5nIDo6c3FydDsK
CiAgaW5saW5lIGZsb2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3Nx
cnRmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gp
CiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIHR5cGVuYW1lIF9fZW5hYmxlX2lmPGRvdWJsZSwgX19pc19pbnRlZ2Vy
PF9UcD46Ol9fdmFsdWU+OjpfX3R5cGUKICAgIHNxcnQoX1RwIF9feCkKICAgIHsgcmV0dXJuIF9f
YnVpbHRpbl9zcXJ0KF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgogIGlubGluZSBmbG9hdAogIHRh
bihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3RhbmYoX194KTsgfQoKICBpbmxpbmUg
bG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl90
YW5sKF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHR5cGVuYW1l
IF9fZW5hYmxlX2lmPGRvdWJsZSwgX19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWU+OjpfX3R5cGUK
ICAgIHRhbihfVHAgX194KQogICAgeyByZXR1cm4gX19idWlsdGluX3RhbihfX3gpOyB9CgogIHVz
aW5nIDo6dGFuaDsKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpCiAgeyByZXR1cm4g
X19idWlsdGluX3RhbmhmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuaChsb25n
IGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3RhbmhsKF9feCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHR5cGVuYW1lIF9fZW5hYmxlX2lmPGRvdWJsZSwg
X19pc19pbnRlZ2VyPF9UcD46Ol9fdmFsdWU+OjpfX3R5cGUKICAgIHRhbmgoX1RwIF9feCkKICAg
IHsgcmV0dXJuIF9fYnVpbHRpbl90YW5oKF9feCk7IH0KfQoKCgoKCgpuYW1lc3BhY2UgX19nbnVf
Y3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9mcGNs
YXNzaWZ5KF9UcCBfX2YpIHsgcmV0dXJuICggc2l6ZW9mIChfX2YpID09IHNpemVvZihmbG9hdCAp
ID8gX19mcGNsYXNzaWZ5ZigoZmxvYXQpX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YoZG91
YmxlKSA/IF9fZnBjbGFzc2lmeWQoKGRvdWJsZSlfX2YpIDogX19mcGNsYXNzaWZ5ICgobG9uZyBk
b3VibGUpX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2Nh
cHR1cmVfaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKCBzaXplb2YgKF9fZikgPT0gc2l6ZW9m
KGZsb2F0ICkgPyBfX2lubGluZV9pc2Zpbml0ZWYoKGZsb2F0KShfX2YpKSA6IHNpemVvZiAoX19m
KSA9PSBzaXplb2YoZG91YmxlKSA/IF9faW5saW5lX2lzZmluaXRlZCgoZG91YmxlKShfX2YpKSA6
IF9faW5saW5lX2lzZmluaXRlICgobG9uZyBkb3VibGUpKF9fZikpKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVy
biAoIHNpemVvZiAoX19mKSA9PSBzaXplb2YoZmxvYXQgKSA/IF9faW5saW5lX2lzaW5mZigoZmxv
YXQpKF9fZikpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZihkb3VibGUpID8gX19pbmxpbmVfaXNp
bmZkKChkb3VibGUpKF9fZikpIDogX19pbmxpbmVfaXNpbmYgKChsb25nIGRvdWJsZSkoX19mKSkp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzbmFu
KF9UcCBfX2YpIHsgcmV0dXJuICggc2l6ZW9mIChfX2YpID09IHNpemVvZihmbG9hdCApID8gX19p
bmxpbmVfaXNuYW5mKChmbG9hdCkoX19mKSkgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mKGRvdWJs
ZSkgPyBfX2lubGluZV9pc25hbmQoKGRvdWJsZSkoX19mKSkgOiBfX2lubGluZV9pc25hbiAoKGxv
bmcgZG91YmxlKShfX2YpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg
ICBfX2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gKCBzaXplb2YgKF9fZikgPT0g
c2l6ZW9mKGZsb2F0ICkgPyBfX2lubGluZV9pc25vcm1hbGYoKGZsb2F0KShfX2YpKSA6IHNpemVv
ZiAoX19mKSA9PSBzaXplb2YoZG91YmxlKSA/IF9faW5saW5lX2lzbm9ybWFsZCgoZG91YmxlKShf
X2YpKSA6IF9faW5saW5lX2lzbm9ybWFsICgobG9uZyBkb3VibGUpKF9fZikpKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2Yp
IHsgcmV0dXJuICggc2l6ZW9mIChfX2YpID09IHNpemVvZihmbG9hdCApID8gX19pbmxpbmVfc2ln
bmJpdGYoKGZsb2F0KShfX2YpKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YoZG91YmxlKSA/IF9f
aW5saW5lX3NpZ25iaXRkKChkb3VibGUpKF9fZikpIDogX19pbmxpbmVfc2lnbmJpdCgobG9uZyBk
b3VibGUpKF9fZikpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9f
Y2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19idWls
dGluX2lzZ3JlYXRlciAoKF9fZjEpLChfX2YyKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9f
ZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlcmVxdWFsICgoX19mMSksKF9fZjIp
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lz
bGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3MgKChfX2Yx
KSwoX19mMikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2Nh
cHR1cmVfaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIF9fYnVp
bHRpbl9pc2xlc3NlcXVhbCAoKF9fZjEpLChfX2YyKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAg
X19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzZ3JlYXRlciAoKF9fZjEpLChfX2Yy
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9p
c3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lz
dW5vcmRlcmVkICgoX19mMSksKF9fZjIpKTsgfQp9CiMgNTE0ICIvdXNyL2luY2x1ZGUvYysrLzQu
MC4wL2NtYXRoIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiBfX2dudV9jeHg6Ol9fY2FwdHVy
ZV9mcGNsYXNzaWZ5KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg
ICBpc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiBfX2dudV9jeHg6Ol9fY2FwdHVyZV9pc2Zpbml0
ZShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNpbmYoX1Rw
IF9fZikgeyByZXR1cm4gX19nbnVfY3h4OjpfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9f
Z251X2N4eDo6X19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBfX2dudV9jeHg6Ol9fY2Fw
dHVyZV9pc25vcm1hbChfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiBfX2dudV9jeHg6Ol9fY2FwdHVyZV9zaWduYml0
KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIo
X1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19nbnVfY3h4OjpfX2NhcHR1cmVfaXNn
cmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19nbnVf
Y3h4OjpfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg
eyByZXR1cm4gX19nbnVfY3h4OjpfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9U
cCBfX2YyKQogICAgeyByZXR1cm4gX19nbnVfY3h4OjpfX2NhcHR1cmVfaXNsZXNzZXF1YWwoX19m
MSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3Nn
cmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fZ251X2N4eDo6X19jYXB0
dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVy
biBfX2dudV9jeHg6Ol9fY2FwdHVyZV9pc3Vub3JkZXJlZChfX2YxLCBfX2YyKTsgfQp9CgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9jbWF0aC50Y2MiIDEgMwojIDM1ICIvdXNy
L2luY2x1ZGUvYysrLzQuMC4wL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9fY21hdGhfcG93ZXIoX1Rw
IF9feCwgdW5zaWduZWQgaW50IF9fbikKICAgIHsKICAgICAgX1RwIF9feSA9IF9fbiAlIDIgPyBf
X3ggOiAxOwoKICAgICAgd2hpbGUgKF9fbiA+Pj0gMSkKICAgICAgICB7CiAgICAgICAgICBfX3gg
PSBfX3ggKiBfX3g7CiAgICAgICAgICBpZiAoX19uICUgMikKICAgICAgICAgICAgX195ID0gX195
ICogX194OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX3k7CiAgICB9Cn0KIyA1NzUgIi91c3Iv
aW5jbHVkZS9jKysvNC4wLjAvY21hdGgiIDIgMwojIDMxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvTWF0aEV4dHJhcy5oIiAyCiMgMSAiL3Vzci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFy
d2luOS80LjIuMS9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgMzIgIi4vU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NYXRoRXh0cmFzLmgiIDIKCgoKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvU3RkTGliRXh0cmFzLmgiIDEKIyAyOSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1N0ZExpYkV4dHJhcy5oIgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DaGVja2Vk
QXJpdGhtZXRpYy5oIiAxCiMgMzAgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DaGVja2Vk
QXJpdGhtZXRpYy5oIgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRz
LmgiIDEKIyAzNCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1R5cGVUcmFpdHMuaCIKbmFt
ZXNwYWNlIFdURiB7CiMgNTkgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRz
LmgiCiAgICB0ZW1wbGF0ZSA8Ym9vbCBQcmVkaWNhdGUsIGNsYXNzIElmLCBjbGFzcyBUaGVuPiBz
dHJ1Y3QgQ29uZGl0aW9uYWwgeyB0eXBlZGVmIElmIFR5cGU7IH07CiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgSWYsIGNsYXNzIFRoZW4+IHN0cnVjdCBDb25kaXRpb25hbDxmYWxzZSwgSWYsIFRoZW4+IHsg
dHlwZWRlZiBUaGVuIFR5cGU7IH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IElz
SW50ZWdlciB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7IH07CiAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBJc0ludGVnZXI8Ym9vbD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7IH07CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJc0ludGVnZXI8Y2hhcj4geyBzdGF0aWMgY29u
c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJc0ludGVnZXI8
c2lnbmVkIGNoYXI+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwogICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgSXNJbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsgc3RhdGljIGNvbnN0IGJv
b2wgdmFsdWUgPSB0cnVlOyB9OwogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSXNJbnRlZ2VyPHNob3J0
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IElzSW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9
IHRydWU7IH07CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJc0ludGVnZXI8aW50PiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKICAgIHRlbXBsYXRlPD4gc3RydWN0IElzSW50ZWdl
cjx1bnNpZ25lZCBpbnQ+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwogICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgSXNJbnRlZ2VyPGxvbmc+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs
dWUgPSB0cnVlOyB9OwogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSXNJbnRlZ2VyPHVuc2lnbmVkIGxv
bmc+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwogICAgdGVtcGxhdGU8PiBz
dHJ1Y3QgSXNJbnRlZ2VyPGxvbmcgbG9uZz4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRy
dWU7IH07CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBJc0ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n
PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBJc0ludGVnZXI8d2NoYXJfdD4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7
IH07CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBJc0Zsb2F0aW5nUG9pbnQgeyBz
dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9OwogICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
SXNGbG9hdGluZ1BvaW50PGZsb2F0PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKICAgIHRlbXBsYXRlPD4gc3RydWN0IElzRmxvYXRpbmdQb2ludDxkb3VibGU+IHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgSXNGbG9h
dGluZ1BvaW50PGxvbmcgZG91YmxlPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSXNBcml0aG1ldGljIHsgc3RhdGlj
IGNvbnN0IGJvb2wgdmFsdWUgPSBJc0ludGVnZXI8VD46OnZhbHVlIHx8IElzRmxvYXRpbmdQb2lu
dDxUPjo6dmFsdWU7IH07CgoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IElzUG9k
IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBJc0FyaXRobWV0aWM8VD46OnZhbHVlOyB9Owog
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFA+IHN0cnVjdCBJc1BvZDxQKj4geyBzdGF0aWMgY29uc3Qg
Ym9vbCB2YWx1ZSA9IHRydWU7IH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSXND
b252ZXJ0aWJsZVRvSW50ZWdlciB7CgoKICAgICAgICB0ZW1wbGF0ZTxib29sIHBlcmZvcm1DaGVj
aywgdHlwZW5hbWUgVT4gY2xhc3MgSXNDb252ZXJ0aWJsZVRvRG91YmxlOwogICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IGNsYXNzIElzQ29udmVydGlibGVUb0RvdWJsZTxmYWxzZSwgVT4gewog
ICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxz
ZTsKICAgICAgICB9OwoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBjbGFzcyBJc0NvbnZl
cnRpYmxlVG9Eb3VibGU8dHJ1ZSwgVT4gewogICAgICAgICAgICB0eXBlZGVmIGNoYXIgWWVzVHlw
ZTsKICAgICAgICAgICAgc3RydWN0IE5vVHlwZSB7CiAgICAgICAgICAgICAgICBjaGFyIHBhZGRp
bmdbOF07CiAgICAgICAgICAgIH07CgogICAgICAgICAgICBzdGF0aWMgWWVzVHlwZSBmbG9hdENo
ZWNrKGxvbmcgZG91YmxlKTsKICAgICAgICAgICAgc3RhdGljIE5vVHlwZSBmbG9hdENoZWNrKC4u
Lik7CiAgICAgICAgICAgIHN0YXRpYyBUJiB0OwogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoZmxvYXRDaGVjayh0KSkgPT0gc2l6ZW9m
KFllc1R5cGUpOwogICAgICAgIH07CgogICAgcHVibGljOgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gSXNJbnRlZ2VyPFQ+Ojp2YWx1ZSB8fCBJc0NvbnZlcnRpYmxlVG9Eb3VibGU8
IUlzSW50ZWdlcjxUPjo6dmFsdWUsIFQ+Ojp2YWx1ZTsKICAgIH07CgoKICAgIHRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgSXNBcnJheSB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg
PSBmYWxzZTsKICAgIH07CgogICAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBJc0FycmF5PFRb
XT4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKICAgIH07CgogICAg
dGVtcGxhdGUgPGNsYXNzIFQsIHNpemVfdCBOPiBzdHJ1Y3QgSXNBcnJheTxUW05dPiB7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOwogICAgfTsKCgogICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0cnVjdCBJc1NhbWVUeXBlIHsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gc3RydWN0IElzU2FtZVR5cGU8VCwgVD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsKICAgIH07CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+IGNsYXNzIElzU3ViY2xhc3MgewogICAgICAgIHR5cGVkZWYgY2hhciBZZXNUeXBlOwogICAg
ICAgIHN0cnVjdCBOb1R5cGUgewogICAgICAgICAgICBjaGFyIHBhZGRpbmdbOF07CiAgICAgICAg
fTsKCiAgICAgICAgc3RhdGljIFllc1R5cGUgc3ViY2xhc3NDaGVjayhVKik7CiAgICAgICAgc3Rh
dGljIE5vVHlwZSBzdWJjbGFzc0NoZWNrKC4uLik7CiAgICAgICAgc3RhdGljIFQqIHQ7CiAgICBw
dWJsaWM6CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2Yoc3ViY2xhc3ND
aGVjayh0KSkgPT0gc2l6ZW9mKFllc1R5cGUpOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdGVtcGxhdGU8Y2xhc3MgVj4gY2xhc3MgVT4gY2xhc3MgSXNTdWJjbGFzc09mVGVtcGxh
dGUgewogICAgICAgIHR5cGVkZWYgY2hhciBZZXNUeXBlOwogICAgICAgIHN0cnVjdCBOb1R5cGUg
ewogICAgICAgICAgICBjaGFyIHBhZGRpbmdbOF07CiAgICAgICAgfTsKCiAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVz4gc3RhdGljIFllc1R5cGUgc3ViY2xhc3NDaGVjayhVPFc+Kik7CiAgICAg
ICAgc3RhdGljIE5vVHlwZSBzdWJjbGFzc0NoZWNrKC4uLik7CiAgICAgICAgc3RhdGljIFQqIHQ7
CiAgICBwdWJsaWM6CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2Yoc3Vi
Y2xhc3NDaGVjayh0KSkgPT0gc2l6ZW9mKFllc1R5cGUpOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdGVtcGxhdGUgPGNsYXNzIFY+IGNsYXNzIE91dGVyVGVtcGxhdGU+IHN0cnVj
dCBSZW1vdmVUZW1wbGF0ZSB7CiAgICAgICAgdHlwZWRlZiBUIFR5cGU7CiAgICB9OwoKICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0ZW1wbGF0ZSA8Y2xhc3MgVj4gY2xhc3MgT3V0ZXJUZW1wbGF0
ZT4gc3RydWN0IFJlbW92ZVRlbXBsYXRlPE91dGVyVGVtcGxhdGU8VD4sIE91dGVyVGVtcGxhdGU+
IHsKICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAgIH07CgogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IHN0cnVjdCBSZW1vdmVDb25zdCB7CiAgICAgICAgdHlwZWRlZiBUIFR5cGU7CiAgICB9OwoK
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ29uc3Q8Y29uc3QgVD4gewog
ICAgICAgIHR5cGVkZWYgVCBUeXBlOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IFJlbW92ZVZvbGF0aWxlIHsKICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAgIH07Cgog
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVWb2xhdGlsZTx2b2xhdGlsZSBU
PiB7CiAgICAgICAgdHlwZWRlZiBUIFR5cGU7CiAgICB9OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVtb3ZlQ29uc3RWb2xhdGlsZSB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBSZW1vdmVWb2xhdGlsZTx0eXBlbmFtZSBSZW1vdmVDb25zdDxUPjo6VHlwZT46OlR5cGUgVHlw
ZTsKICAgIH07CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVQb2ludGVy
IHsKICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAgIH07CgogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+IHN0cnVjdCBSZW1vdmVQb2ludGVyPFQqPiB7CiAgICAgICAgdHlwZWRlZiBUIFR5cGU7CiAg
ICB9OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlUmVmZXJlbmNlIHsK
ICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAgIH07CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IHN0cnVjdCBSZW1vdmVSZWZlcmVuY2U8VCY+IHsKICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAg
IH07CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVFeHRlbnQgewogICAg
ICAgIHR5cGVkZWYgVCBUeXBlOwogICAgfTsKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3Ry
dWN0IFJlbW92ZUV4dGVudDxUW10+IHsKICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAgIH07Cgog
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPiBzdHJ1Y3QgUmVtb3ZlRXh0ZW50PFRb
Tl0+IHsKICAgICAgICB0eXBlZGVmIFQgVHlwZTsKICAgIH07CgogICAgdGVtcGxhdGUgPGNsYXNz
IFQ+IHN0cnVjdCBEZWNheUFycmF5IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZVJl
ZmVyZW5jZTxUPjo6VHlwZSBVOwogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q29uZGl0aW9uYWw8CiAgICAgICAgICAgIElzQXJyYXk8VT46OnZhbHVlLAogICAgICAgICAgICB0
eXBlbmFtZSBSZW1vdmVFeHRlbnQ8VT46OlR5cGUqLAogICAgICAgICAgICB0eXBlbmFtZSBSZW1v
dmVDb25zdFZvbGF0aWxlPFU+OjpUeXBlCiAgICAgICAgPjo6VHlwZSBUeXBlOwogICAgfTsKIyAy
NDQgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UeXBlVHJhaXRzLmgiCiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgVCB2PgogICAgc3RydWN0IEludGVncmFsQ29uc3RhbnQgewogICAgICAg
IHN0YXRpYyBjb25zdCBUIHZhbHVlID0gdjsKICAgICAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsK
ICAgICAgICB0eXBlZGVmIEludGVncmFsQ29uc3RhbnQ8VCwgdj4gdHlwZTsKICAgIH07CgogICAg
dHlwZWRlZiBJbnRlZ3JhbENvbnN0YW50PGJvb2wsIHRydWU+IHRydWVfdHlwZTsKICAgIHR5cGVk
ZWYgSW50ZWdyYWxDb25zdGFudDxib29sLCBmYWxzZT4gZmFsc2VfdHlwZTsKCgoKCgoKCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBmYWxzZV90eXBleyB9OwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNUcml2
aWFsRGVzdHJ1Y3RvciA6IHB1YmxpYyBmYWxzZV90eXBleyB9OwoKCiAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gc3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1Y3RvcjxUKj4gOiBwdWJsaWMgdHJ1ZV90
eXBleyB9OwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1
Y3RvcjxUKj4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwoKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBI
YXNUcml2aWFsQ29uc3RydWN0b3I8ZmxvYXQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRl
bXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3QgZmxvYXQ+IDogcHVi
bGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3Ry
dWN0b3I8dm9sYXRpbGUgZmxvYXQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRl
IDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgZmxvYXQ+IDog
cHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENv
bnN0cnVjdG9yPGRvdWJsZT4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4g
c3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjxjb25zdCBkb3VibGU+IDogcHVibGljIHRydWVf
dHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8dm9s
YXRpbGUgZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIGRvdWJsZT4gOiBwdWJsaWMg
dHJ1ZV90eXBleyB9OwoKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0
b3I8bG9uZyBkb3VibGU+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3QgbG9uZyBkb3VibGU+IDogcHVibGljIHRy
dWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8
dm9sYXRpbGUgbG9uZyBkb3VibGU+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRl
IDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgbG9uZyBkb3Vi
bGU+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJp
dmlhbENvbnN0cnVjdG9yPHVuc2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAg
IHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3QgdW5zaWduZWQg
Y2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1Ry
aXZpYWxDb25zdHJ1Y3Rvcjx2b2xhdGlsZSB1bnNpZ25lZCBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5
cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPGNvbnN0
IHZvbGF0aWxlIHVuc2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPHVuc2lnbmVkIHNob3J0PiA6IHB1
YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0
cnVjdG9yPGNvbnN0IHVuc2lnbmVkIHNob3J0PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFz
VHJpdmlhbENvbnN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0PiA6IHB1Ymxp
YyB0cnVlX3R5cGV7IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1
Y3Rvcjx1bnNpZ25lZCBpbnQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+
IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3QgdW5zaWduZWQgaW50PiA6IHB1Ymxp
YyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVj
dG9yPHZvbGF0aWxlIHVuc2lnbmVkIGludD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVt
cGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjxjb25zdCB2b2xhdGlsZSB1bnNp
Z25lZCBpbnQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
SGFzVHJpdmlhbENvbnN0cnVjdG9yPHVuc2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsg
fTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3QgdW5z
aWduZWQgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0
IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjx2b2xhdGlsZSB1bnNpZ25lZCBsb25nPiA6IHB1YmxpYyB0
cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9y
PGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPHVuc2lnbmVkIGxvbmcg
bG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1Ry
aXZpYWxDb25zdHJ1Y3Rvcjxjb25zdCB1bnNpZ25lZCBsb25nIGxvbmc+IDogcHVibGljIHRydWVf
dHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8dm9s
YXRpbGUgdW5zaWduZWQgbG9uZyBsb25nPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHVuc2ln
bmVkIGxvbmcgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwoKICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8c2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlw
ZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qg
c2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVj
dCBIYXNUcml2aWFsQ29uc3RydWN0b3I8dm9sYXRpbGUgc2lnbmVkIGNoYXI+IDogcHVibGljIHRy
dWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8
Y29uc3Qgdm9sYXRpbGUgc2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPHNpZ25lZCBzaG9ydD4gOiBw
dWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxDb25z
dHJ1Y3Rvcjxjb25zdCBzaWduZWQgc2hvcnQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRl
bXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8dm9sYXRpbGUgc2lnbmVkIHNo
b3J0PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJp
dmlhbENvbnN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgdHJ1
ZV90eXBleyB9OwoKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8
c2lnbmVkIGludD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0
IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjxjb25zdCBzaWduZWQgaW50PiA6IHB1YmxpYyB0cnVlX3R5
cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPHZvbGF0
aWxlIHNpZ25lZCBpbnQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgc2lnbmVkIGludD4gOiBw
dWJsaWMgdHJ1ZV90eXBleyB9OwoKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29u
c3RydWN0b3I8c2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRl
IDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qgc2lnbmVkIGxvbmc+IDogcHVi
bGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3Ry
dWN0b3I8dm9sYXRpbGUgc2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRl
bXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgc2ln
bmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
SGFzVHJpdmlhbENvbnN0cnVjdG9yPHNpZ25lZCBsb25nIGxvbmc+IDogcHVibGljIHRydWVfdHlw
ZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29uc3Qg
c2lnbmVkIGxvbmcgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4g
c3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjx2b2xhdGlsZSBzaWduZWQgbG9uZyBsb25nPiA6
IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENv
bnN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHNpZ25lZCBsb25nIGxvbmc+IDogcHVibGljIHRydWVf
dHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPGJv
b2w+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2
aWFsQ29uc3RydWN0b3I8Y29uc3QgYm9vbD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVt
cGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjx2b2xhdGlsZSBib29sPiA6IHB1
YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0
cnVjdG9yPGNvbnN0IHZvbGF0aWxlIGJvb2w+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPGNoYXI+IDogcHVibGljIHRy
dWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8
Y29uc3QgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0
IEhhc1RyaXZpYWxDb25zdHJ1Y3Rvcjx2b2xhdGlsZSBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7
IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbENvbnN0cnVjdG9yPGNvbnN0IHZv
bGF0aWxlIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCgogICAgICAgIHRlbXBsYXRlIDw+
IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8d2NoYXJfdD4gOiBwdWJsaWMgdHJ1ZV90eXBl
eyB9OwogICAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8Y29u
c3Qgd2NoYXJfdD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgICAgIHRlbXBsYXRlIDw+IHN0
cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0b3I8dm9sYXRpbGUgd2NoYXJfdD4gOiBwdWJsaWMgdHJ1
ZV90eXBleyB9OwogICAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsQ29uc3RydWN0
b3I8Y29uc3Qgdm9sYXRpbGUgd2NoYXJfdD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwoKCiAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8ZmxvYXQ+IDogcHVibGljIHRy
dWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rvcjxj
b25zdCBmbG9hdD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0
IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHZvbGF0aWxlIGZsb2F0PiA6IHB1YmxpYyB0cnVlX3R5cGV7
IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgdm9s
YXRpbGUgZmxvYXQ+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8ZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3QgZG91YmxlPiA6
IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERl
c3RydWN0b3I8dm9sYXRpbGUgZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgZG91Ymxl
PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZp
YWxEZXN0cnVjdG9yPGxvbmcgZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3QgbG9uZyBkb3VibGU+IDog
cHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVz
dHJ1Y3Rvcjx2b2xhdGlsZSBsb25nIGRvdWJsZT4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAg
dGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIGxv
bmcgZG91YmxlPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0
IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHVuc2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsg
fTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rvcjxjb25zdCB1bnNp
Z25lZCBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
SGFzVHJpdmlhbERlc3RydWN0b3I8dm9sYXRpbGUgdW5zaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1
ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNv
bnN0IHZvbGF0aWxlIHVuc2lnbmVkIGNoYXI+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8dW5zaWduZWQgc2hvcnQ+IDog
cHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVz
dHJ1Y3Rvcjxjb25zdCB1bnNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAg
dGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHZvbGF0aWxlIHVuc2lnbmVk
IHNob3J0PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFz
VHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQ+IDogcHVibGlj
IHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0
b3I8dW5zaWduZWQgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3QgdW5zaWduZWQgaW50PiA6IHB1YmxpYyB0
cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8
dm9sYXRpbGUgdW5zaWduZWQgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgdW5zaWduZWQg
aW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1Ry
aXZpYWxEZXN0cnVjdG9yPHVuc2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAg
IHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rvcjxjb25zdCB1bnNpZ25lZCBs
b25nPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJp
dmlhbERlc3RydWN0b3I8dm9sYXRpbGUgdW5zaWduZWQgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBl
eyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0IHZv
bGF0aWxlIHVuc2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8dW5zaWduZWQgbG9uZyBsb25nPiA6IHB1
YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3Ry
dWN0b3I8Y29uc3QgdW5zaWduZWQgbG9uZyBsb25nPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8dm9sYXRpbGUgdW5zaWdu
ZWQgbG9uZyBsb25nPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25n
PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZp
YWxEZXN0cnVjdG9yPHNpZ25lZCBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgc2lnbmVkIGNoYXI+IDog
cHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVz
dHJ1Y3Rvcjx2b2xhdGlsZSBzaWduZWQgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAg
dGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHNp
Z25lZCBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0
IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9
OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0IHNpZ25l
ZCBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhh
c1RyaXZpYWxEZXN0cnVjdG9yPHZvbGF0aWxlIHNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90
eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0
IHZvbGF0aWxlIHNpZ25lZCBzaG9ydD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwoKICAgIHRlbXBs
YXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3RvcjxzaWduZWQgaW50PiA6IHB1YmxpYyB0
cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8
Y29uc3Qgc2lnbmVkIGludD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4g
c3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHZvbGF0aWxlIHNpZ25lZCBpbnQ+IDogcHVibGlj
IHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rv
cjxjb25zdCB2b2xhdGlsZSBzaWduZWQgaW50PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgogICAg
dGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHNpZ25lZCBsb25nPiA6IHB1
YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3Ry
dWN0b3I8Y29uc3Qgc2lnbmVkIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBs
YXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rvcjx2b2xhdGlsZSBzaWduZWQgbG9uZz4g
OiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxE
ZXN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHNpZ25lZCBsb25nPiA6IHB1YmxpYyB0cnVlX3R5cGV7
IH07CgogICAgdGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHNpZ25lZCBs
b25nIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBI
YXNUcml2aWFsRGVzdHJ1Y3Rvcjxjb25zdCBzaWduZWQgbG9uZyBsb25nPiA6IHB1YmxpYyB0cnVl
X3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8dm9s
YXRpbGUgc2lnbmVkIGxvbmcgbG9uZz4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVtcGxh
dGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0IHZvbGF0aWxlIHNpZ25lZCBs
b25nIGxvbmc+IDogcHVibGljIHRydWVfdHlwZXsgfTsKCiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
SGFzVHJpdmlhbERlc3RydWN0b3I8Ym9vbD4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAgdGVt
cGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPGNvbnN0IGJvb2w+IDogcHVibGlj
IHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rv
cjx2b2xhdGlsZSBib29sPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgYm9vbD4gOiBwdWJsaWMg
dHJ1ZV90eXBleyB9OwoKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVzdHJ1Y3Rv
cjxjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFz
VHJpdmlhbERlc3RydWN0b3I8Y29uc3QgY2hhcj4gOiBwdWJsaWMgdHJ1ZV90eXBleyB9OwogICAg
dGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHZvbGF0aWxlIGNoYXI+IDog
cHVibGljIHRydWVfdHlwZXsgfTsKICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFsRGVz
dHJ1Y3Rvcjxjb25zdCB2b2xhdGlsZSBjaGFyPiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CgoKICAg
ICAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJpdmlhbERlc3RydWN0b3I8d2NoYXJfdD4gOiBw
dWJsaWMgdHJ1ZV90eXBleyB9OwogICAgICAgIHRlbXBsYXRlIDw+IHN0cnVjdCBIYXNUcml2aWFs
RGVzdHJ1Y3Rvcjxjb25zdCB3Y2hhcl90PiA6IHB1YmxpYyB0cnVlX3R5cGV7IH07CiAgICAgICAg
dGVtcGxhdGUgPD4gc3RydWN0IEhhc1RyaXZpYWxEZXN0cnVjdG9yPHZvbGF0aWxlIHdjaGFyX3Q+
IDogcHVibGljIHRydWVfdHlwZXsgfTsKICAgICAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFzVHJp
dmlhbERlc3RydWN0b3I8Y29uc3Qgdm9sYXRpbGUgd2NoYXJfdD4gOiBwdWJsaWMgdHJ1ZV90eXBl
eyB9OwoKCgoKfQojIDMxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaCIgMgojIDY3ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ2hlY2tlZEFyaXRo
bWV0aWMuaCIKbmFtZXNwYWNlIFdURiB7CgpjbGFzcyBDcmFzaE9uT3ZlcmZsb3cgewpwcm90ZWN0
ZWQ6CiAgICB2b2lkIG92ZXJmbG93ZWQoKQogICAgewogICAgICAgIGRvIHsgV1RGUmVwb3J0QmFj
a3RyYWNlKCk7IFdURkludm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFk
YmVlZiA9IDA7ICgodm9pZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgIH0KCiAgICB2
b2lkIGNsZWFyT3ZlcmZsb3coKSB7IH0KCnB1YmxpYzoKICAgIGJvb2wgaGFzT3ZlcmZsb3dlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cn07CgpjbGFzcyBSZWNvcmRPdmVyZmxvdyB7CnByb3Rl
Y3RlZDoKICAgIFJlY29yZE92ZXJmbG93KCkKICAgICAgICA6IG1fb3ZlcmZsb3dlZChmYWxzZSkK
ICAgIHsKICAgIH0KCiAgICB2b2lkIG92ZXJmbG93ZWQoKQogICAgewogICAgICAgIG1fb3ZlcmZs
b3dlZCA9IHRydWU7CiAgICB9CgogICAgdm9pZCBjbGVhck92ZXJmbG93KCkKICAgIHsKICAgICAg
ICBtX292ZXJmbG93ZWQgPSBmYWxzZTsKICAgIH0KCnB1YmxpYzoKICAgIGJvb2wgaGFzT3ZlcmZs
b3dlZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dlZDsgfQoKcHJpdmF0ZToKICAgIHVuc2ln
bmVkIGNoYXIgbV9vdmVyZmxvd2VkOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGNsYXNzIE92
ZXJmbG93SGFuZGxlciA9IENyYXNoT25PdmVyZmxvdz4gY2xhc3MgQ2hlY2tlZDsKdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
c3RydWN0IFJlbW92ZUNoZWNrZWQ8Q2hlY2tlZDxUPiA+OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFRh
cmdldCwgdHlwZW5hbWUgU291cmNlLCBib29sIHRhcmdldFNpZ25lZCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8VGFyZ2V0Pjo6aXNfc2lnbmVkLCBib29sIHNvdXJjZVNpZ25lZCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8U291cmNlPjo6aXNfc2lnbmVkPiBzdHJ1Y3QgQm91bmRzQ2hlY2tlcjsKdGVtcGxh
dGUgPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRzQ2hlY2tl
cjxUYXJnZXQsIFNvdXJjZSwgZmFsc2UsIGZhbHNlPiB7CiAgICBzdGF0aWMgYm9vbCBpbkJvdW5k
cyhTb3VyY2UgdmFsdWUpCiAgICB7CgoKICAgICAgICByZXR1cm4gdmFsdWUgPD0gc3RkOjpudW1l
cmljX2xpbWl0czxUYXJnZXQ+OjptYXgoKTsKICAgIH0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU
YXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RydWN0IEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3Vy
Y2UsIHRydWUsIHRydWU+IHsKICAgIHN0YXRpYyBib29sIGluQm91bmRzKFNvdXJjZSB2YWx1ZSkK
ICAgIHsKCgogICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46Om1pbigp
IDw9IHZhbHVlICYmIHZhbHVlIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6bWF4KCk7
CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2U+IHN0
cnVjdCBCb3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlLCBmYWxzZSwgdHJ1ZT4gewogICAgc3Rh
dGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQogICAgewoKICAgICAgICBpZiAodmFsdWUg
PCAwKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgoKICAgICAgICBpZiAoc2l6ZW9mKFRhcmdl
dCkgPj0gc2l6ZW9mKFNvdXJjZSkpCiAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUYXJn
ZXQ+KHZhbHVlKSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFRhcmdldD46Om1heCgpOwoKCiAgICAg
ICAgcmV0dXJuIHZhbHVlIDw9IHN0YXRpY19jYXN0PFNvdXJjZT4oc3RkOjpudW1lcmljX2xpbWl0
czxUYXJnZXQ+OjptYXgoKSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0
eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja2VyPFRhcmdldCwgU291cmNlLCB0cnVl
LCBmYWxzZT4gewogICAgc3RhdGljIGJvb2wgaW5Cb3VuZHMoU291cmNlIHZhbHVlKQogICAgewoK
ICAgICAgICBpZiAoc2l6ZW9mKFRhcmdldCkgPD0gc2l6ZW9mKFNvdXJjZSkpCiAgICAgICAgICAg
IHJldHVybiB2YWx1ZSA8PSBzdGF0aWNfY2FzdDxTb3VyY2U+KHN0ZDo6bnVtZXJpY19saW1pdHM8
VGFyZ2V0Pjo6bWF4KCkpOwoKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn07Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGFyZ2V0LCB0eXBlbmFtZSBTb3VyY2UsIGJvb2wgU2FtZVR5cGUgPSBJc1Nh
bWVUeXBlPFRhcmdldCwgU291cmNlPjo6dmFsdWU+IHN0cnVjdCBCb3VuZHNDaGVja0VsaWRlcjsK
dGVtcGxhdGUgPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPiBzdHJ1Y3QgQm91bmRz
Q2hlY2tFbGlkZXI8VGFyZ2V0LCBTb3VyY2UsIHRydWU+IHsKICAgIHN0YXRpYyBib29sIGluQm91
bmRzKFNvdXJjZSkgeyByZXR1cm4gdHJ1ZTsgfQp9Owp0ZW1wbGF0ZSA8dHlwZW5hbWUgVGFyZ2V0
LCB0eXBlbmFtZSBTb3VyY2U+IHN0cnVjdCBCb3VuZHNDaGVja0VsaWRlcjxUYXJnZXQsIFNvdXJj
ZSwgZmFsc2U+IDogcHVibGljIEJvdW5kc0NoZWNrZXI8VGFyZ2V0LCBTb3VyY2U+IHsKfTsKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4gc3RhdGljIGlubGluZSBi
b29sIGlzSW5Cb3VuZHMoU291cmNlIHZhbHVlKQp7CiAgICByZXR1cm4gQm91bmRzQ2hlY2tFbGlk
ZXI8VGFyZ2V0LCBTb3VyY2U+OjppbkJvdW5kcyh2YWx1ZSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZCB7CiAgICB0eXBlZGVmIFQgQ2xlYW5UeXBlOwogICAg
c3RhdGljIGNvbnN0IENsZWFuVHlwZSBEZWZhdWx0VmFsdWUgPSAwOwp9OwoKdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IHN0cnVjdCBSZW1vdmVDaGVja2VkPENoZWNrZWQ8VCwgQ3Jhc2hPbk92ZXJmbG93
PiA+IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxUPjo6Q2xlYW5UeXBlIENs
ZWFuVHlwZTsKICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZhbHVlID0gMDsKfTsK
CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgUmVtb3ZlQ2hlY2tlZDxDaGVja2VkPFQsIFJl
Y29yZE92ZXJmbG93PiA+IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgUmVtb3ZlQ2hlY2tlZDxUPjo6
Q2xlYW5UeXBlIENsZWFuVHlwZTsKICAgIHN0YXRpYyBjb25zdCBDbGVhblR5cGUgRGVmYXVsdFZh
bHVlID0gMDsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIGJvb2wgdUlz
QmlnZ2VyID0gKHNpemVvZihVKSA+IHNpemVvZihWKSksIGJvb2wgc2FtZVNpemUgPSAoc2l6ZW9m
KFUpID09IHNpemVvZihWKSk+IHN0cnVjdCBSZXN1bHRCYXNlOwp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4gc3RydWN0IFJlc3VsdEJhc2U8VSwgViwgdHJ1ZSwgZmFsc2U+IHsKICAg
IHR5cGVkZWYgVSBSZXN1bHRUeXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+IHN0cnVjdCBSZXN1bHRCYXNlPFUsIFYsIGZhbHNlLCBmYWxzZT4gewogICAgdHlwZWRlZiBW
IFJlc3VsdFR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gc3RydWN0IFJlc3VsdEJhc2U8
VSwgVSwgZmFsc2UsIHRydWU+IHsKICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwp9OwoKdGVtcGxh
dGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIGJvb2wgdUlzU2lnbmVkID0gc3RkOjpudW1lcmlj
X2xpbWl0czxVPjo6aXNfc2lnbmVkLCBib29sIHZJc1NpZ25lZCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8Vj46OmlzX3NpZ25lZD4gc3RydWN0IFNpZ25lZG5lc3NTZWxlY3RvcjsKdGVtcGxhdGUgPHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBTaWduZWRuZXNzU2VsZWN0b3I8VSwgViwgdHJ1
ZSwgdHJ1ZT4gewogICAgdHlwZWRlZiBVIFJlc3VsdFR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4gc3RydWN0IFNpZ25lZG5lc3NTZWxlY3RvcjxVLCBWLCBmYWxzZSwg
ZmFsc2U+IHsKICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBTaWduZWRuZXNzU2VsZWN0b3I8VSwgViwgdHJ1ZSwgZmFs
c2U+IHsKICAgIHR5cGVkZWYgViBSZXN1bHRUeXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFUs
IHR5cGVuYW1lIFY+IHN0cnVjdCBTaWduZWRuZXNzU2VsZWN0b3I8VSwgViwgZmFsc2UsIHRydWU+
IHsKICAgIHR5cGVkZWYgVSBSZXN1bHRUeXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHRCYXNlPFUsIFYsIGZhbHNlLCB0cnVlPiB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIFNpZ25lZG5lc3NTZWxlY3RvcjxVLCBWPjo6UmVzdWx0VHlwZSBSZXN1bHRU
eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IHN0cnVjdCBSZXN1bHQg
OiBSZXN1bHRCYXNlPHR5cGVuYW1lIFJlbW92ZUNoZWNrZWQ8VT46OkNsZWFuVHlwZSwgdHlwZW5h
bWUgUmVtb3ZlQ2hlY2tlZDxWPjo6Q2xlYW5UeXBlPiB7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
TEhTLCB0eXBlbmFtZSBSSFMsIHR5cGVuYW1lIFJlc3VsdFR5cGUgPSB0eXBlbmFtZSBSZXN1bHQ8
TEhTLCBSSFM+OjpSZXN1bHRUeXBlLAogICAgYm9vbCBsaHNTaWduZWQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPExIUz46OmlzX3NpZ25lZCwgYm9vbCByaHNTaWduZWQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPFJIUz46OmlzX3NpZ25lZD4gc3RydWN0IEFyaXRobWV0aWNPcGVyYXRpb25zOwoKdGVtcGxh
dGUgPHR5cGVuYW1lIExIUywgdHlwZW5hbWUgUkhTLCB0eXBlbmFtZSBSZXN1bHRUeXBlPiBzdHJ1
Y3QgQXJpdGhtZXRpY09wZXJhdGlvbnM8TEhTLCBSSFMsIFJlc3VsdFR5cGUsIHRydWUsIHRydWU+
IHsKCgoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzaWduc01hdGNoKExIUyBsaHMsIFJIUyByaHMp
CiAgICB7CiAgICAgICAgcmV0dXJuIChsaHMgXiByaHMpID49IDA7CiAgICB9CgogICAgc3RhdGlj
IGlubGluZSBib29sIGFkZChMSFMgbGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIF9f
YXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9yZXN1bHQpKQogICAgewogICAgICAgIGlmIChzaWdu
c01hdGNoKGxocywgcmhzKSkgewogICAgICAgICAgICBpZiAobGhzID49IDApIHsKICAgICAgICAg
ICAgICAgIGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLSByaHMp
IDwgbGhzKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIFJlc3VsdFR5cGUgdGVtcCA9IGxocyAtIHN0ZDo6bnVtZXJp
Y19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpOwogICAgICAgICAgICAgICAgaWYgKHJocyA8IC10
ZW1wKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgICByZXN1bHQgPSBsaHMgKyByaHM7CiAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICB9CgogICAgc3RhdGljIGlubGluZSBib29sIHN1YihMSFMgbGhzLCBSSFMgcmhzLCBSZXN1bHRU
eXBlJiByZXN1bHQpIF9fYXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9yZXN1bHQpKQogICAgewog
ICAgICAgIGlmICghc2lnbnNNYXRjaChsaHMsIHJocykpIHsKICAgICAgICAgICAgaWYgKGxocyA+
PSAwKSB7CiAgICAgICAgICAgICAgICBpZiAobGhzID4gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1
bHRUeXBlPjo6bWF4KCkgKyByaHMpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHJocyA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpICsgbGhzKQogICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXN1bHQgPSBsaHMg
LSByaHM7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBib29s
IG11bHRpcGx5KExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkgX19hdHRyaWJ1
dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpCiAgICB7CiAgICAgICAgaWYgKHNpZ25zTWF0Y2go
bGhzLCByaHMpKSB7CiAgICAgICAgICAgIGlmIChsaHMgPj0gMCkgewogICAgICAgICAgICAgICAg
aWYgKGxocyAmJiAoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLyBsaHMp
IDwgcmhzKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIGlmIChsaHMgPT0gc3RkOjpudW1lcmljX2xpbWl0czxSZXN1
bHRUeXBlPjo6bWluKCkgfHwgcmhzID09IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46
Om1pbigpKQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
IGlmICgoc3RkOjpudW1lcmljX2xpbWl0czxSZXN1bHRUeXBlPjo6bWF4KCkgLyAtbGhzKSA8IC1y
aHMpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGxocyA8IDApIHsKICAgICAgICAgICAgICAgIGlm
IChyaHMgJiYgbGhzIDwgKHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpIC8g
cmhzKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICBpZiAobGhzICYmIHJocyA8IChzdGQ6Om51bWVyaWNfbGltaXRz
PFJlc3VsdFR5cGU+OjptaW4oKSAvIGxocykpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGxocyAqIHJoczsK
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxz
KExIUyBsaHMsIFJIUyByaHMpIHsgcmV0dXJuIGxocyA9PSByaHM7IH0KCn07Cgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgTEhTLCB0eXBlbmFtZSBSSFMsIHR5cGVuYW1lIFJlc3VsdFR5cGU+IHN0cnVjdCBB
cml0aG1ldGljT3BlcmF0aW9uczxMSFMsIFJIUywgUmVzdWx0VHlwZSwgZmFsc2UsIGZhbHNlPiB7
CgogICAgc3RhdGljIGlubGluZSBib29sIGFkZChMSFMgbGhzLCBSSFMgcmhzLCBSZXN1bHRUeXBl
JiByZXN1bHQpIF9fYXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9yZXN1bHQpKQogICAgewogICAg
ICAgIFJlc3VsdFR5cGUgdGVtcCA9IGxocyArIHJoczsKICAgICAgICBpZiAodGVtcCA8IGxocykK
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJlc3VsdCA9IHRlbXA7CiAgICAgICAg
cmV0dXJuIHRydWU7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBib29sIHN1YihMSFMgbGhzLCBS
SFMgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpIF9fYXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9y
ZXN1bHQpKQogICAgewogICAgICAgIFJlc3VsdFR5cGUgdGVtcCA9IGxocyAtIHJoczsKICAgICAg
ICBpZiAodGVtcCA+IGxocykKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJlc3Vs
dCA9IHRlbXA7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBi
b29sIG11bHRpcGx5KExIUyBsaHMsIFJIUyByaHMsIFJlc3VsdFR5cGUmIHJlc3VsdCkgX19hdHRy
aWJ1dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpCiAgICB7CiAgICAgICAgUmVzdWx0VHlwZSB0
ZW1wID0gbGhzICogcmhzOwogICAgICAgIGlmICh0ZW1wIDwgbGhzKQogICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgcmVzdWx0ID0gdGVtcDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
IH0KCiAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWxzKExIUyBsaHMsIFJIUyByaHMpIHsgcmV0
dXJuIGxocyA9PSByaHM7IH0KCn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZT4gc3Ry
dWN0IEFyaXRobWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGUsIHRydWUs
IGZhbHNlPiB7CiAgICBzdGF0aWMgaW5saW5lIGJvb2wgYWRkKGludDY0X3QgbGhzLCBpbnQ2NF90
IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQogICAgewogICAgICAgIGludDY0X3QgdGVtcCA9IGxo
cyArIHJoczsKICAgICAgICBpZiAodGVtcCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlw
ZT46Om1pbigpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHRlbXAgPiBz
dGQ6Om51bWVyaWNfbGltaXRzPFJlc3VsdFR5cGU+OjptYXgoKSkKICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KHRlbXApOwog
ICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoaW50
NjRfdCBsaHMsIGludDY0X3QgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpCiAgICB7CiAgICAgICAg
aW50NjRfdCB0ZW1wID0gbGhzIC0gcmhzOwogICAgICAgIGlmICh0ZW1wIDwgc3RkOjpudW1lcmlj
X2xpbWl0czxSZXN1bHRUeXBlPjo6bWluKCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICBpZiAodGVtcCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1heCgpKQog
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8UmVz
dWx0VHlwZT4odGVtcCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgc3RhdGljIGlu
bGluZSBib29sIG11bHRpcGx5KGludDY0X3QgbGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYg
cmVzdWx0KQogICAgewogICAgICAgIGludDY0X3QgdGVtcCA9IGxocyAqIHJoczsKICAgICAgICBp
ZiAodGVtcCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8UmVzdWx0VHlwZT46Om1pbigpKQogICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHRlbXAgPiBzdGQ6Om51bWVyaWNfbGltaXRz
PFJlc3VsdFR5cGU+OjptYXgoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJl
c3VsdCA9IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KHRlbXApOwogICAgICAgIHJldHVybiB0cnVl
OwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbHMoaW50IGxocywgdW5zaWduZWQg
cmhzKQogICAgewogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ2NF90PihsaHMpID09IHN0
YXRpY19jYXN0PGludDY0X3Q+KHJocyk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVz
dWx0VHlwZT4gc3RydWN0IEFyaXRobWV0aWNPcGVyYXRpb25zPHVuc2lnbmVkLCBpbnQsIFJlc3Vs
dFR5cGUsIGZhbHNlLCB0cnVlPiB7CiAgICBzdGF0aWMgaW5saW5lIGJvb2wgYWRkKGludDY0X3Qg
bGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQogICAgewogICAgICAgIHJldHVy
biBBcml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBlPjo6YWRkKHJo
cywgbGhzLCByZXN1bHQpOwogICAgfQoKICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWIoaW50NjRf
dCBsaHMsIGludDY0X3QgcmhzLCBSZXN1bHRUeXBlJiByZXN1bHQpCiAgICB7CiAgICAgICAgcmV0
dXJuIEFyaXRobWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+OjpzdWIo
bGhzLCByaHMsIHJlc3VsdCk7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBib29sIG11bHRpcGx5
KGludDY0X3QgbGhzLCBpbnQ2NF90IHJocywgUmVzdWx0VHlwZSYgcmVzdWx0KQogICAgewogICAg
ICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxpbnQsIHVuc2lnbmVkLCBSZXN1bHRUeXBl
Pjo6bXVsdGlwbHkocmhzLCBsaHMsIHJlc3VsdCk7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBi
b29sIGVxdWFscyh1bnNpZ25lZCBsaHMsIGludCByaHMpCiAgICB7CiAgICAgICAgcmV0dXJuIEFy
aXRobWV0aWNPcGVyYXRpb25zPGludCwgdW5zaWduZWQsIFJlc3VsdFR5cGU+OjplcXVhbHMocmhz
LCBsaHMpOwogICAgfQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVu
YW1lIFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlQWRkKFUgbGhzLCBWIHJocywgUiYgcmVzdWx0
KQp7CiAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgViwgUj46OmFkZChsaHMsIHJo
cywgcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1l
IFI+IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlU3ViKFUgbGhzLCBWIHJocywgUiYgcmVzdWx0KQp7
CiAgICByZXR1cm4gQXJpdGhtZXRpY09wZXJhdGlvbnM8VSwgViwgUj46OnN1YihsaHMsIHJocywg
cmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFI+
IHN0YXRpYyBpbmxpbmUgYm9vbCBzYWZlTXVsdGlwbHkoVSBsaHMsIFYgcmhzLCBSJiByZXN1bHQp
CnsKICAgIHJldHVybiBBcml0aG1ldGljT3BlcmF0aW9uczxVLCBWLCBSPjo6bXVsdGlwbHkobGhz
LCByaHMsIHJlc3VsdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0
aWMgaW5saW5lIGJvb2wgc2FmZUVxdWFscyhVIGxocywgViByaHMpCnsKICAgIHJldHVybiBBcml0
aG1ldGljT3BlcmF0aW9uczxVLCBWPjo6ZXF1YWxzKGxocywgcmhzKTsKfQoKZW51bSBSZXN1bHRP
dmVyZmxvd2VkVGFnIHsgUmVzdWx0T3ZlcmZsb3dlZCB9OwoKCnN0YXRpYyBpbmxpbmUgYm9vbCB3
b3JrQXJvdW5kQ2xhbmdCdWcoKSB7IHJldHVybiB0cnVlOyB9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgY2xhc3MgT3ZlcmZsb3dIYW5kbGVyPiBjbGFzcyBDaGVja2VkIDogcHVibGljIE92ZXJmbG93
SGFuZGxlciB7CnB1YmxpYzoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfVCwgY2xhc3MgX092ZXJm
bG93SGFuZGxlcj4gZnJpZW5kIGNsYXNzIENoZWNrZWQ7CiAgICBDaGVja2VkKCkKICAgICAgICA6
IG1fdmFsdWUoMCkKICAgIHsKICAgIH0KCiAgICBDaGVja2VkKFJlc3VsdE92ZXJmbG93ZWRUYWcp
CiAgICAgICAgOiBtX3ZhbHVlKDApCiAgICB7CgogICAgICAgIGlmICh3b3JrQXJvdW5kQ2xhbmdC
dWcoKSkKICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwogICAgfQoKICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPiBDaGVja2VkKFUgdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCFpc0luQm91
bmRzPFQ+KHZhbHVlKSkKICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwogICAgICAgIG1f
dmFsdWUgPSBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFY+IENoZWNrZWQoY29uc3QgQ2hlY2tlZDxULCBWPiYgcmhzKQogICAgICAgIDogbV92YWx1
ZShyaHMubV92YWx1ZSkKICAgIHsKICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93ZWQoKSkKICAg
ICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPiBDaGVja2VkKGNvbnN0IENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiYgcmhzKQogICAg
ICAgIDogT3ZlcmZsb3dIYW5kbGVyKHJocykKICAgIHsKICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8
VD4ocmhzLm1fdmFsdWUpKQogICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CiAgICAgICAg
bV92YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KHJocy5tX3ZhbHVlKTsKICAgIH0KCiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gQ2hlY2tlZChjb25zdCBDaGVja2VkPFUsIFY+JiBy
aHMpCiAgICB7CiAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgICAgIHRo
aXMtPm92ZXJmbG93ZWQoKTsKICAgICAgICBpZiAoIWlzSW5Cb3VuZHM8VD4ocmhzLm1fdmFsdWUp
KQogICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CiAgICAgICAgbV92YWx1ZSA9IHN0YXRp
Y19jYXN0PFQ+KHJocy5tX3ZhbHVlKTsKICAgIH0KCiAgICBjb25zdCBDaGVja2VkJiBvcGVyYXRv
cj0oQ2hlY2tlZCByaHMpCiAgICB7CiAgICAgICAgdGhpcy0+Y2xlYXJPdmVyZmxvdygpOwogICAg
ICAgIGlmIChyaHMuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2Vk
KCk7CiAgICAgICAgbV92YWx1ZSA9IHN0YXRpY19jYXN0PFQ+KHJocy5tX3ZhbHVlKTsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGNvbnN0IENo
ZWNrZWQmIG9wZXJhdG9yPShVIHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAqdGhpcyA9IENo
ZWNrZWQodmFsdWUpOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PiBjb25zdCBDaGVja2VkJiBvcGVyYXRvcj0oY29uc3QgQ2hlY2tlZDxVLCBWPiYgcmhzKQogICAg
ewogICAgICAgIHJldHVybiAqdGhpcyA9IENoZWNrZWQocmhzKTsKICAgIH0KCgogICAgY29uc3Qg
Q2hlY2tlZCYgb3BlcmF0b3IrKygpCiAgICB7CiAgICAgICAgaWYgKG1fdmFsdWUgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6bWF4KCkpCiAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsK
ICAgICAgICBtX3ZhbHVlKys7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIGNvbnN0
IENoZWNrZWQmIG9wZXJhdG9yLS0oKQogICAgewogICAgICAgIGlmIChtX3ZhbHVlID09IHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46Om1pbigpKQogICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7
CiAgICAgICAgbV92YWx1ZS0tOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogICAgY29u
c3QgQ2hlY2tlZCBvcGVyYXRvcisrKGludCkKICAgIHsKICAgICAgICBpZiAobV92YWx1ZSA9PSBz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSkKICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dl
ZCgpOwogICAgICAgIHJldHVybiBDaGVja2VkKG1fdmFsdWUrKyk7CiAgICB9CgogICAgY29uc3Qg
Q2hlY2tlZCBvcGVyYXRvci0tKGludCkKICAgIHsKICAgICAgICBpZiAobV92YWx1ZSA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSkKICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgp
OwogICAgICAgIHJldHVybiBDaGVja2VkKG1fdmFsdWUtLSk7CiAgICB9CgoKICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QKICAgIHsKICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQog
ICAgICAgICAgICBkbyB7IFdURlJlcG9ydEJhY2t0cmFjZSgpOyBXVEZJbnZva2VDcmFzaEhvb2so
KTsgKihpbnQgKikodWludHB0cl90KTB4YmJhZGJlZWYgPSAwOyAoKHZvaWQoKikoKSkwKSgpOyB9
IHdoaWxlIChmYWxzZSk7CiAgICAgICAgcmV0dXJuICFtX3ZhbHVlOwogICAgfQoKICAgIHR5cGVk
ZWYgdm9pZCogKENoZWNrZWQ6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKICAgIG9wZXJhdG9yIFVu
c3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QKICAgIHsKICAgICAgICBpZiAodGhpcy0+aGFzT3Zl
cmZsb3dlZCgpKQogICAgICAgICAgICBkbyB7IFdURlJlcG9ydEJhY2t0cmFjZSgpOyBXVEZJbnZv
a2VDcmFzaEhvb2soKTsgKihpbnQgKikodWludHB0cl90KTB4YmJhZGJlZWYgPSAwOyAoKHZvaWQo
KikoKSkwKSgpOyB9IHdoaWxlIChmYWxzZSk7CiAgICAgICAgcmV0dXJuIChtX3ZhbHVlKSA/IHJl
aW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlwZSo+KDEpIDogMDsKICAgIH0KCgogICAg
VCB1bnNhZmVHZXQoKSBjb25zdAogICAgewogICAgICAgIGlmICh0aGlzLT5oYXNPdmVyZmxvd2Vk
KCkpCiAgICAgICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFdURkludm9rZUNyYXNo
SG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7ICgodm9pZCgqKSgpKTAp
KCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgICAgICByZXR1cm4gbV92YWx1ZTsKICAgIH0KCiAgICBi
b29sIHNhZmVHZXQoVCYgdmFsdWUpIGNvbnN0IF9fYXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9y
ZXN1bHQpKQogICAgewogICAgICAgIHZhbHVlID0gbV92YWx1ZTsKICAgICAgICByZXR1cm4gdGhp
cy0+aGFzT3ZlcmZsb3dlZCgpOwogICAgfQoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gY29u
c3QgQ2hlY2tlZCBvcGVyYXRvcis9KFUgcmhzKQogICAgewogICAgICAgIGlmICghc2FmZUFkZCht
X3ZhbHVlLCByaHMsIG1fdmFsdWUpKQogICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBjb25z
dCBDaGVja2VkIG9wZXJhdG9yLT0oVSByaHMpCiAgICB7CiAgICAgICAgaWYgKCFzYWZlU3ViKG1f
dmFsdWUsIHJocywgbV92YWx1ZSkpCiAgICAgICAgICAgIHRoaXMtPm92ZXJmbG93ZWQoKTsKICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGNvbnN0
IENoZWNrZWQgb3BlcmF0b3IqPShVIHJocykKICAgIHsKICAgICAgICBpZiAoIXNhZmVNdWx0aXBs
eShtX3ZhbHVlLCByaHMsIG1fdmFsdWUpKQogICAgICAgICAgICB0aGlzLT5vdmVyZmxvd2VkKCk7
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPiBjb25zdCBDaGVja2VkIG9wZXJhdG9yKz0oQ2hlY2tlZDxVLCBWPiByaHMpCiAg
ICB7CiAgICAgICAgaWYgKHJocy5oYXNPdmVyZmxvd2VkKCkpCiAgICAgICAgICAgIHRoaXMtPm92
ZXJmbG93ZWQoKTsKICAgICAgICByZXR1cm4gKnRoaXMgKz0gcmhzLm1fdmFsdWU7CiAgICB9Cgog
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+IGNvbnN0IENoZWNrZWQgb3BlcmF0
b3ItPShDaGVja2VkPFUsIFY+IHJocykKICAgIHsKICAgICAgICBpZiAocmhzLmhhc092ZXJmbG93
ZWQoKSkKICAgICAgICAgICAgdGhpcy0+b3ZlcmZsb3dlZCgpOwogICAgICAgIHJldHVybiAqdGhp
cyAtPSByaHMubV92YWx1ZTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4gY29uc3QgQ2hlY2tlZCBvcGVyYXRvcio9KENoZWNrZWQ8VSwgVj4gcmhzKQogICAgewog
ICAgICAgIGlmIChyaHMuaGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICAgICB0aGlzLT5vdmVyZmxv
d2VkKCk7CiAgICAgICAgcmV0dXJuICp0aGlzICo9IHJocy5tX3ZhbHVlOwogICAgfQoKCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVj4gYm9vbCBvcGVyYXRvcj09KENoZWNrZWQ8VCwgVj4gcmhzKQog
ICAgewogICAgICAgIHJldHVybiB1bnNhZmVHZXQoKSA9PSByaHMudW5zYWZlR2V0KCk7CiAgICB9
CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I9PShVIHJocykKICAgIHsK
ICAgICAgICBpZiAodGhpcy0+aGFzT3ZlcmZsb3dlZCgpKQogICAgICAgICAgICB0aGlzLT5vdmVy
Zmxvd2VkKCk7CiAgICAgICAgcmV0dXJuIHNhZmVFcXVhbHMobV92YWx1ZSwgcmhzKTsKICAgIH0K
CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4gY29uc3QgQ2hlY2tlZCBvcGVy
YXRvcj09KENoZWNrZWQ8VSwgVj4gcmhzKQogICAgewogICAgICAgIHJldHVybiB1bnNhZmVHZXQo
KSA9PSBDaGVja2VkKHJocy51bnNhZmVHZXQoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+IGJvb2wgb3BlcmF0b3IhPShVIHJocykKICAgIHsKICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSByaHMpOwogICAgfQoKcHJpdmF0ZToKCiAgICBDaGVja2VkKGZsb2F0KTsKICAgIENoZWNr
ZWQoZG91YmxlKTsKICAgIHZvaWQgb3BlcmF0b3I9KGZsb2F0KTsKICAgIHZvaWQgb3BlcmF0b3I9
KGRvdWJsZSk7CiAgICB2b2lkIG9wZXJhdG9yKz0oZmxvYXQpOwogICAgdm9pZCBvcGVyYXRvcis9
KGRvdWJsZSk7CiAgICB2b2lkIG9wZXJhdG9yLT0oZmxvYXQpOwogICAgdm9pZCBvcGVyYXRvci09
KGRvdWJsZSk7CiAgICBUIG1fdmFsdWU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPiBzdGF0aWMgaW5saW5lIENoZWNrZWQ8dHlw
ZW5hbWUgUmVzdWx0PFUsIFY+OjpSZXN1bHRUeXBlLCBPdmVyZmxvd0hhbmRsZXI+IG9wZXJhdG9y
KyhDaGVja2VkPFUsIE92ZXJmbG93SGFuZGxlcj4gbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFu
ZGxlcj4gcmhzKQp7CiAgICBVIHggPSAwOwogICAgViB5ID0gMDsKICAgIGJvb2wgb3ZlcmZsb3dl
ZCA9IGxocy5zYWZlR2V0KHgpIHx8IHJocy5zYWZlR2V0KHkpOwogICAgdHlwZW5hbWUgUmVzdWx0
PFUsIFY+OjpSZXN1bHRUeXBlIHJlc3VsdCA9IDA7CiAgICBvdmVyZmxvd2VkIHw9ICFzYWZlQWRk
KHgsIHksIHJlc3VsdCk7CiAgICBpZiAob3ZlcmZsb3dlZCkKICAgICAgICByZXR1cm4gUmVzdWx0
T3ZlcmZsb3dlZDsKICAgIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tl
ZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3Bl
cmF0b3ItKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIENoZWNrZWQ8ViwgT3ZlcmZs
b3dIYW5kbGVyPiByaHMpCnsKICAgIFUgeCA9IDA7CiAgICBWIHkgPSAwOwogICAgYm9vbCBvdmVy
Zmxvd2VkID0gbGhzLnNhZmVHZXQoeCkgfHwgcmhzLnNhZmVHZXQoeSk7CiAgICB0eXBlbmFtZSBS
ZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUgcmVzdWx0ID0gMDsKICAgIG92ZXJmbG93ZWQgfD0gIXNh
ZmVTdWIoeCwgeSwgcmVzdWx0KTsKICAgIGlmIChvdmVyZmxvd2VkKQogICAgICAgIHJldHVybiBS
ZXN1bHRPdmVyZmxvd2VkOwogICAgcmV0dXJuIHJlc3VsdDsKfQoKdGVtcGxhdGUgPHR5cGVuYW1l
IFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4gc3RhdGljIGlubGluZSBD
aGVja2VkPHR5cGVuYW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSwgT3ZlcmZsb3dIYW5kbGVy
PiBvcGVyYXRvciooQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+IGxocywgQ2hlY2tlZDxWLCBP
dmVyZmxvd0hhbmRsZXI+IHJocykKewogICAgVSB4ID0gMDsKICAgIFYgeSA9IDA7CiAgICBib29s
IG92ZXJmbG93ZWQgPSBsaHMuc2FmZUdldCh4KSB8fCByaHMuc2FmZUdldCh5KTsKICAgIHR5cGVu
YW1lIFJlc3VsdDxVLCBWPjo6UmVzdWx0VHlwZSByZXN1bHQgPSAwOwogICAgb3ZlcmZsb3dlZCB8
PSAhc2FmZU11bHRpcGx5KHgsIHksIHJlc3VsdCk7CiAgICBpZiAob3ZlcmZsb3dlZCkKICAgICAg
ICByZXR1cm4gUmVzdWx0T3ZlcmZsb3dlZDsKICAgIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRl
IDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRp
YyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJm
bG93SGFuZGxlcj4gb3BlcmF0b3IrKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5kbGVyPiBsaHMsIFYg
cmhzKQp7CiAgICByZXR1cm4gbGhzICsgQ2hlY2tlZDxWLCBPdmVyZmxvd0hhbmRsZXI+KHJocyk7
Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hh
bmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3Vs
dFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3ItKENoZWNrZWQ8VSwgT3ZlcmZsb3dIYW5k
bGVyPiBsaHMsIFYgcmhzKQp7CiAgICByZXR1cm4gbGhzIC0gQ2hlY2tlZDxWLCBPdmVyZmxvd0hh
bmRsZXI+KHJocyk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8
VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKENoZWNrZWQ8VSwg
T3ZlcmZsb3dIYW5kbGVyPiBsaHMsIFYgcmhzKQp7CiAgICByZXR1cm4gbGhzICogQ2hlY2tlZDxW
LCBPdmVyZmxvd0hhbmRsZXI+KHJocyk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFt
ZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBl
bmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3Ir
KFUgbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQp7CiAgICByZXR1cm4gQ2hl
Y2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+KGxocykgKyByaHM7Cn0KCnRlbXBsYXRlIDx0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0YXRpYyBpbmxpbmUg
Q2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92ZXJmbG93SGFuZGxl
cj4gb3BlcmF0b3ItKFUgbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxlcj4gcmhzKQp7CiAg
ICByZXR1cm4gQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+KGxocykgLSByaHM7Cn0KCnRlbXBs
YXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IHN0
YXRpYyBpbmxpbmUgQ2hlY2tlZDx0eXBlbmFtZSBSZXN1bHQ8VSwgVj46OlJlc3VsdFR5cGUsIE92
ZXJmbG93SGFuZGxlcj4gb3BlcmF0b3IqKFUgbGhzLCBDaGVja2VkPFYsIE92ZXJmbG93SGFuZGxl
cj4gcmhzKQp7CiAgICByZXR1cm4gQ2hlY2tlZDxVLCBPdmVyZmxvd0hhbmRsZXI+KGxocykgKiBy
aHM7Cn0KCn0KCnVzaW5nIFdURjo6Q2hlY2tlZDsKdXNpbmcgV1RGOjpSZWNvcmRPdmVyZmxvdzsK
IyAzMCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oIiAyCiMgMTA4
ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmgiCm5hbWVzcGFjZSBX
VEYgewoKc3RhdGljIGNvbnN0IHNpemVfdCBLQiA9IDEwMjQ7CgppbmxpbmUgYm9vbCBpc1BvaW50
ZXJBbGlnbmVkKHZvaWQqIHApCnsKICAgIHJldHVybiAhKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9m
KGNoYXIqKSAtIDEpKTsKfQoKCgoKdGVtcGxhdGU8dHlwZW5hbWUgVE8sIHR5cGVuYW1lIEZST00+
CmlubGluZSBUTyBiaXR3aXNlX2Nhc3QoRlJPTSBmcm9tKQp7CiAgICB0eXBlZGVmIGludCBkdW1t
eVdURl9iaXR3aXNlX2Nhc3Rfc2l6ZW9mX2Nhc3RlZF90eXBlc19pc19lcXVhbCBbKHNpemVvZihU
TykgPT0gc2l6ZW9mKEZST00pKSA/IDEgOiAtMV07CiAgICB1bmlvbiB7CiAgICAgICAgRlJPTSBm
cm9tOwogICAgICAgIFRPIHRvOwogICAgfSB1OwogICAgdS5mcm9tID0gZnJvbTsKICAgIHJldHVy
biB1LnRvOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KaW5saW5lIFRv
IHNhZmVDYXN0KEZyb20gdmFsdWUpCnsKICAgICgodm9pZCkwKTsKICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUbz4odmFsdWUpOwp9CgoKaW5saW5lIHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRz
KQp7CiAgICBiaXRzID0gYml0cyAtICgoYml0cyA+PiAxKSAmIDB4NTU1NTU1NTUpOwogICAgYml0
cyA9IChiaXRzICYgMHgzMzMzMzMzMykgKyAoKGJpdHMgPj4gMikgJiAweDMzMzMzMzMzKTsKICAg
IHJldHVybiAoKChiaXRzICsgKGJpdHMgPj4gNCkpICYgMHhGMEYwRjBGKSAqIDB4MTAxMDEwMSkg
Pj4gMjQ7Cn0KCgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgU2l6ZT4gY2hhciAoJkFycmF5
TGVuZ3RoSGVscGVyRnVuY3Rpb24oVCAoJilbU2l6ZV0pKVtTaXplXTsKCgoKdGVtcGxhdGU8c2l6
ZV90IGRpdmlzb3I+IGlubGluZSBzaXplX3Qgcm91bmRVcFRvTXVsdGlwbGVPZihzaXplX3QgeCkK
ewogICAgdHlwZWRlZiBpbnQgZHVtbXlkaXZpc29yX2lzX2FfcG93ZXJfb2ZfdHdvIFsoZGl2aXNv
ciAmJiAhKGRpdmlzb3IgJiAoZGl2aXNvciAtIDEpKSkgPyAxIDogLTFdOwoKICAgIHNpemVfdCBy
ZW1haW5kZXJNYXNrID0gZGl2aXNvciAtIDE7CiAgICByZXR1cm4gKHggKyByZW1haW5kZXJNYXNr
KSAmIH5yZW1haW5kZXJNYXNrOwp9CgplbnVtIEJpbmFyeVNlYXJjaE1vZGUgewogICAgS2V5TXVz
dEJlUHJlc2VudEluQXJyYXksCiAgICBLZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheQp9OwoKCgp0
ZW1wbGF0ZTx0eXBlbmFtZSBBcnJheUVsZW1lbnRUeXBlLCB0eXBlbmFtZSBLZXlUeXBlLCBLZXlU
eXBlKCpleHRyYWN0S2V5KShBcnJheUVsZW1lbnRUeXBlKik+CmlubGluZSBBcnJheUVsZW1lbnRU
eXBlKiBiaW5hcnlTZWFyY2goQXJyYXlFbGVtZW50VHlwZSogYXJyYXksIHNpemVfdCBzaXplLCBL
ZXlUeXBlIGtleSwgQmluYXJ5U2VhcmNoTW9kZSBtb2RlID0gS2V5TXVzdEJlUHJlc2VudEluQXJy
YXkpCnsKCgogICAgd2hpbGUgKHNpemUgPiAxKSB7CgogICAgICAgIGludCBwb3MgPSAoc2l6ZSAt
IDEpID4+IDE7CiAgICAgICAgS2V5VHlwZSB2YWwgPSBleHRyYWN0S2V5KCZhcnJheVtwb3NdKTsK
CgogICAgICAgIGlmICh2YWwgPT0ga2V5KQogICAgICAgICAgICByZXR1cm4gJmFycmF5W3Bvc107
CgoKICAgICAgICBlbHNlIGlmIChrZXkgPCB2YWwpCiAgICAgICAgICAgIHNpemUgPSBwb3M7Cgog
ICAgICAgIGVsc2UgewogICAgICAgICAgICBzaXplIC09IChwb3MgKyAxKTsKICAgICAgICAgICAg
YXJyYXkgKz0gKHBvcyArIDEpOwogICAgICAgIH0KCgogICAgICAgIGlmIChtb2RlID09IEtleU11
c3RCZVByZXNlbnRJbkFycmF5KQogICAgICAgICAgICAoKHZvaWQpMCk7CiAgICB9CgoKCiAgICBp
ZiAobW9kZSA9PSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSkgewogICAgICAgICgodm9pZCkwKTsK
ICAgICAgICAoKHZvaWQpMCk7CiAgICB9CgogICAgcmV0dXJuICZhcnJheVswXTsKfQoKCgoKdGVt
cGxhdGU8dHlwZW5hbWUgQXJyYXlFbGVtZW50VHlwZSwgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5h
bWUgRXh0cmFjdEtleT4KaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGJpbmFyeVNlYXJjaFdpdGhG
dW5jdG9yKEFycmF5RWxlbWVudFR5cGUqIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlwZSBrZXks
IEJpbmFyeVNlYXJjaE1vZGUgbW9kZSA9IEtleU11c3RCZVByZXNlbnRJbkFycmF5LCBjb25zdCBF
eHRyYWN0S2V5JiBleHRyYWN0S2V5ID0gRXh0cmFjdEtleSgpKQp7CgoKICAgIHdoaWxlIChzaXpl
ID4gMSkgewoKICAgICAgICBpbnQgcG9zID0gKHNpemUgLSAxKSA+PiAxOwogICAgICAgIEtleVR5
cGUgdmFsID0gZXh0cmFjdEtleSgmYXJyYXlbcG9zXSk7CgoKICAgICAgICBpZiAodmFsID09IGtl
eSkKICAgICAgICAgICAgcmV0dXJuICZhcnJheVtwb3NdOwoKCiAgICAgICAgZWxzZSBpZiAoa2V5
IDwgdmFsKQogICAgICAgICAgICBzaXplID0gcG9zOwoKICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgc2l6ZSAtPSAocG9zICsgMSk7CiAgICAgICAgICAgIGFycmF5ICs9IChwb3MgKyAxKTsKICAg
ICAgICB9CgoKICAgICAgICBpZiAobW9kZSA9PSBLZXlNdXN0QmVQcmVzZW50SW5BcnJheSkKICAg
ICAgICAgICAgKCh2b2lkKTApOwogICAgfQoKCgogICAgaWYgKG1vZGUgPT0gS2V5TXVzdEJlUHJl
c2VudEluQXJyYXkpIHsKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgKCh2b2lkKTApOwogICAg
fQoKICAgIHJldHVybiAmYXJyYXlbMF07Cn0KCgoKCnRlbXBsYXRlPHR5cGVuYW1lIEFycmF5RWxl
bWVudFR5cGUsIHR5cGVuYW1lIEtleVR5cGUsIEtleVR5cGUoKmV4dHJhY3RLZXkpKEFycmF5RWxl
bWVudFR5cGUqKSwgdHlwZW5hbWUgQXJyYXlUeXBlPgppbmxpbmUgQXJyYXlFbGVtZW50VHlwZSog
Z2VuZXJpY0JpbmFyeVNlYXJjaChBcnJheVR5cGUmIGFycmF5LCBzaXplX3Qgc2l6ZSwgS2V5VHlw
ZSBrZXkpCnsKCgogICAgc2l6ZV90IG9mZnNldCA9IDA7CiAgICB3aGlsZSAoc2l6ZSA+IDEpIHsK
CiAgICAgICAgaW50IHBvcyA9IChzaXplIC0gMSkgPj4gMTsKICAgICAgICBLZXlUeXBlIHZhbCA9
IGV4dHJhY3RLZXkoJmFycmF5W29mZnNldCArIHBvc10pOwoKCiAgICAgICAgaWYgKHZhbCA9PSBr
ZXkpCiAgICAgICAgICAgIHJldHVybiAmYXJyYXlbb2Zmc2V0ICsgcG9zXTsKCgogICAgICAgIGlm
IChrZXkgPCB2YWwpCiAgICAgICAgICAgIHNpemUgPSBwb3M7CgogICAgICAgIGVsc2UgewogICAg
ICAgICAgICBzaXplIC09IChwb3MgKyAxKTsKICAgICAgICAgICAgb2Zmc2V0ICs9IChwb3MgKyAx
KTsKICAgICAgICB9CgoKICAgICAgICAoKHZvaWQpMCk7CiAgICB9CgoKICAgICgodm9pZCkwKTsK
ICAgICgodm9pZCkwKTsKICAgIHJldHVybiAmYXJyYXlbb2Zmc2V0XTsKfQoKfQoKCmVudW0gTm90
TnVsbFRhZyB7IE5vdE51bGwgfTsKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5v
dE51bGxUYWcsIHZvaWQqIGxvY2F0aW9uKQp7CiAgICAoKHZvaWQpMCk7CiAgICByZXR1cm4gbG9j
YXRpb247Cn0KCnVzaW5nIFdURjo6S0I7CnVzaW5nIFdURjo6aXNQb2ludGVyQWxpZ25lZDsKdXNp
bmcgV1RGOjpiaW5hcnlTZWFyY2g7CnVzaW5nIFdURjo6Yml0d2lzZV9jYXN0Owp1c2luZyBXVEY6
OnNhZmVDYXN0OwojIDM2ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWF0aEV4dHJhcy5o
IiAyCiMgNjQgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NYXRoRXh0cmFzLmgiCmNvbnN0
IGRvdWJsZSBwaURvdWJsZSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg7
CmNvbnN0IGZsb2F0IHBpRmxvYXQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oMy4xNDE1OTI2NTM1ODk3
OTMyMzg0NjI2NDMzODMyNzk1MDI4OCk7CgoKCgoKCmNvbnN0IGRvdWJsZSBwaU92ZXJUd29Eb3Vi
bGUgPSAxLjU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTc1MTQ0Owpjb25zdCBmbG9hdCBw
aU92ZXJUd29GbG9hdCA9IHN0YXRpY19jYXN0PGZsb2F0PigxLjU3MDc5NjMyNjc5NDg5NjYxOTIz
MTMyMTY5MTYzOTc1MTQ0KTsKCgoKCgoKY29uc3QgZG91YmxlIHBpT3ZlckZvdXJEb3VibGUgPSAw
Ljc4NTM5ODE2MzM5NzQ0ODMwOTYxNTY2MDg0NTgxOTg3NTcyMTsKY29uc3QgZmxvYXQgcGlPdmVy
Rm91ckZsb2F0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDAuNzg1Mzk4MTYzMzk3NDQ4MzA5NjE1NjYw
ODQ1ODE5ODc1NzIxKTsKCgoKCgppbmxpbmUgZG91YmxlIHd0Zl9jZWlsKGRvdWJsZSB4KSB7IHJl
dHVybiBjb3B5c2lnbihjZWlsKHgpLCB4KTsgfQojIDIxMiAiLi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01hdGhFeHRyYXMuaCIKaW5saW5lIGRvdWJsZSBkZWcycmFkKGRvdWJsZSBkKSB7IHJl
dHVybiBkICogcGlEb3VibGUgLyAxODAuMDsgfQppbmxpbmUgZG91YmxlIHJhZDJkZWcoZG91Ymxl
IHIpIHsgcmV0dXJuIHIgKiAxODAuMCAvIHBpRG91YmxlOyB9CmlubGluZSBkb3VibGUgZGVnMmdy
YWQoZG91YmxlIGQpIHsgcmV0dXJuIGQgKiA0MDAuMCAvIDM2MC4wOyB9CmlubGluZSBkb3VibGUg
Z3JhZDJkZWcoZG91YmxlIGcpIHsgcmV0dXJuIGcgKiAzNjAuMCAvIDQwMC4wOyB9CmlubGluZSBk
b3VibGUgdHVybjJkZWcoZG91YmxlIHQpIHsgcmV0dXJuIHQgKiAzNjAuMDsgfQppbmxpbmUgZG91
YmxlIGRlZzJ0dXJuKGRvdWJsZSBkKSB7IHJldHVybiBkIC8gMzYwLjA7IH0KaW5saW5lIGRvdWJs
ZSByYWQyZ3JhZChkb3VibGUgcikgeyByZXR1cm4gciAqIDIwMC4wIC8gcGlEb3VibGU7IH0KaW5s
aW5lIGRvdWJsZSBncmFkMnJhZChkb3VibGUgZykgeyByZXR1cm4gZyAqIHBpRG91YmxlIC8gMjAw
LjA7IH0KCmlubGluZSBmbG9hdCBkZWcycmFkKGZsb2F0IGQpIHsgcmV0dXJuIGQgKiBwaUZsb2F0
IC8gMTgwLjBmOyB9CmlubGluZSBmbG9hdCByYWQyZGVnKGZsb2F0IHIpIHsgcmV0dXJuIHIgKiAx
ODAuMGYgLyBwaUZsb2F0OyB9CmlubGluZSBmbG9hdCBkZWcyZ3JhZChmbG9hdCBkKSB7IHJldHVy
biBkICogNDAwLjBmIC8gMzYwLjBmOyB9CmlubGluZSBmbG9hdCBncmFkMmRlZyhmbG9hdCBnKSB7
IHJldHVybiBnICogMzYwLjBmIC8gNDAwLjBmOyB9CmlubGluZSBmbG9hdCB0dXJuMmRlZyhmbG9h
dCB0KSB7IHJldHVybiB0ICogMzYwLjBmOyB9CmlubGluZSBmbG9hdCBkZWcydHVybihmbG9hdCBk
KSB7IHJldHVybiBkIC8gMzYwLjBmOyB9CmlubGluZSBmbG9hdCByYWQyZ3JhZChmbG9hdCByKSB7
IHJldHVybiByICogMjAwLjBmIC8gcGlGbG9hdDsgfQppbmxpbmUgZmxvYXQgZ3JhZDJyYWQoZmxv
YXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQgLyAyMDAuMGY7IH0KCgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCBkZWZhdWx0TWluaW11bUZvckNsYW1wKCkgeyByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxUPjo6bWluKCk7IH0KdGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgZGVmYXVsdE1p
bmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCk7IH0KdGVtcGxhdGU8PiBpbmxpbmUgZG91YmxlIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7
IHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsgfQp0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgVCBkZWZhdWx0TWF4aW11bUZvckNsYW1wKCkgeyByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUIGNsYW1wVG8oZG91YmxlIHZhbHVlLCBUIG1pbiA9IGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXA8
VD4oKSwgVCBtYXggPSBkZWZhdWx0TWF4aW11bUZvckNsYW1wPFQ+KCkpCnsKICAgIGlmICh2YWx1
ZSA+PSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heCkpCiAgICAgICAgcmV0dXJuIG1heDsKICAgIGlm
ICh2YWx1ZSA8PSBzdGF0aWNfY2FzdDxkb3VibGU+KG1pbikpCiAgICAgICAgcmV0dXJuIG1pbjsK
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih2YWx1ZSk7Cn0KdGVtcGxhdGU8PiBpbmxpbmUgbG9u
ZyBsb25nIGludCBjbGFtcFRvKGRvdWJsZSwgbG9uZyBsb25nIGludCwgbG9uZyBsb25nIGludCk7
CgppbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKGRvdWJsZSB2YWx1ZSkKewogICAgcmV0dXJuIGNs
YW1wVG88aW50Pih2YWx1ZSk7Cn0KCmlubGluZSBmbG9hdCBjbGFtcFRvRmxvYXQoZG91YmxlIHZh
bHVlKQp7CiAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4odmFsdWUpOwp9CgppbmxpbmUgaW50IGNs
YW1wVG9Qb3NpdGl2ZUludGVnZXIoZG91YmxlIHZhbHVlKQp7CiAgICByZXR1cm4gY2xhbXBUbzxp
bnQ+KHZhbHVlLCAwKTsKfQoKaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihmbG9hdCB2YWx1ZSkK
ewogICAgcmV0dXJuIGNsYW1wVG88aW50Pih2YWx1ZSk7Cn0KCmlubGluZSBpbnQgY2xhbXBUb0lu
dGVnZXIodW5zaWduZWQgeCkKewogICAgY29uc3QgdW5zaWduZWQgaW50TWF4ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwoKICAgIGlmICh4
ID49IGludE1heCkKICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwp9CgppbmxpbmUgYm9vbCBpc1dpdGhp
bkludFJhbmdlKGZsb2F0IHgpCnsKICAgIHJldHVybiB4ID4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpICYmIHggPCBzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Cn0KCgp1c2luZyBzdGQ6OmlzZmluaXRl
Owp1c2luZyBzdGQ6OmlzaW5mOwp1c2luZyBzdGQ6OmlzbmFuOwp1c2luZyBzdGQ6OnNpZ25iaXQ7
CgoKCgoKaW5saW5lIHZvaWQgZGVjb21wb3NlRG91YmxlKGRvdWJsZSBudW1iZXIsIGJvb2wmIHNp
Z24sIGludDMyX3QmIGV4cG9uZW50LCB1aW50NjRfdCYgbWFudGlzc2EpCnsKICAgICgodm9pZCkw
KTsKCiAgICBzaWduID0gc2lnbmJpdChudW1iZXIpOwoKICAgIHVpbnQ2NF90IGJpdHMgPSBXVEY6
OmJpdHdpc2VfY2FzdDx1aW50NjRfdD4obnVtYmVyKTsKICAgIGV4cG9uZW50ID0gKHN0YXRpY19j
YXN0PGludDMyX3Q+KGJpdHMgPj4gNTIpICYgMHg3ZmYpIC0gMHgzZmY7CiAgICBtYW50aXNzYSA9
IGJpdHMgJiAweEZGRkZGRkZGRkZGRkZ1bGw7CgoKCiAgICBpZiAoZXhwb25lbnQgPT0gLTB4M2Zm
KQogICAgICAgIGV4cG9uZW50ID0gbWFudGlzc2EgPyAtMHgzZmUgOiAwOwogICAgZWxzZQogICAg
ICAgIG1hbnRpc3NhIHw9IDB4MTAwMDAwMDAwMDAwMDB1bGw7Cn0KCgppbmxpbmUgdm9pZCBkb3Vi
bGVUb0ludGVnZXIoZG91YmxlIGQsIHVuc2lnbmVkIGxvbmcgbG9uZyYgdmFsdWUpCnsKICAgIGlm
IChpc25hbihkKSB8fCBpc2luZihkKSkKICAgICAgICB2YWx1ZSA9IDA7CiAgICBlbHNlIHsKCiAg
ICAgICAgZG91YmxlIGZtb2RWYWx1ZSA9IGZtb2QodHJ1bmMoZCksIHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgbG9uZyBsb25nPjo6bWF4KCkgKyAxLjApOwogICAgICAgIGlmIChmbW9kVmFs
dWUgPj0gMCkgewoKCiAgICAgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPihmbW9kVmFsdWUpOwogICAgICAgIH0gZWxzZSB7CgoKICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIGZtb2RWYWx1ZUluVW5zaWduZWRMb25nTG9uZyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmcgbG9uZz4oLWZtb2RWYWx1ZSk7CgoKICAgICAgICAgICAgdmFsdWUgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz46Om1heCgpIC0gZm1vZFZhbHVlSW5V
bnNpZ25lZExvbmdMb25nICsgMTsKICAgICAgICB9CiAgICB9Cn0KIyAzMCAiLi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmgiIDIKCm5hbWVzcGFj
ZSBXZWJDb3JlIHsKCmlubGluZSBpbnQgYmxlbmQoaW50IGZyb20sIGludCB0bywgZG91YmxlIHBy
b2dyZXNzKQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihscm91bmQoc3RhdGljX2Nhc3Q8
ZG91YmxlPihmcm9tKSArIHN0YXRpY19jYXN0PGRvdWJsZT4odG8gLSBmcm9tKSAqIHByb2dyZXNz
KSk7Cn0KCmlubGluZSB1bnNpZ25lZCBibGVuZCh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywg
ZG91YmxlIHByb2dyZXNzKQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxyb3Vu
ZCh0byA+IGZyb20gPyBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pICsgc3RhdGljX2Nhc3Q8ZG91
YmxlPih0byAtIGZyb20pICogcHJvZ3Jlc3MgOiBzdGF0aWNfY2FzdDxkb3VibGU+KGZyb20pIC0g
c3RhdGljX2Nhc3Q8ZG91YmxlPihmcm9tIC0gdG8pICogcHJvZ3Jlc3MpKTsKfQoKaW5saW5lIGRv
dWJsZSBibGVuZChkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCnsKICAg
IHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzczsKfQoKaW5saW5lIGZsb2F0IGJs
ZW5kKGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCnsKICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwp9Cgp9CiMg
MjYgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oIiAyCiMgMSAiLi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0Fzc2VydGlvbnMuaCIgMQojIDI3ICJTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MZW5ndGguaCIgMgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0QWxs
b2NCYXNlLmgiIDEKIyA5MiAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RBbGxvY0Jh
c2UuaCIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5oIiAxCiMg
OTMgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0QWxsb2NCYXNlLmgiIDIKIyAxICIu
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmgiIDEKIyA5NCAiLi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RBbGxvY0Jhc2UuaCIgMgojIDEzNCAiLi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RBbGxvY0Jhc2UuaCIKbmFtZXNwYWNlIFdURiB7CgoKCiAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIGlubGluZSBUKiBmYXN0TmV3KCkKICAgIHsKICAg
ICAgICB2b2lkKiBwID0gZmFzdE1hbGxvYyhzaXplb2YoVCkpOwoKICAgICAgICBpZiAoIXApCiAg
ICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxv
YyhwLCBJbnRlcm5hbDo6QWxsb2NUeXBlRmFzdE5ldyk7CiAgICAgICAgcmV0dXJuIDo6bmV3IChw
KSBUOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBcmcxPgogICAg
aW5saW5lIFQqIGZhc3ROZXcoQXJnMSBhcmcxKQogICAgewogICAgICAgIHZvaWQqIHAgPSBmYXN0
TWFsbG9jKHNpemVvZihUKSk7CgogICAgICAgIGlmICghcCkKICAgICAgICAgICAgcmV0dXJuIDA7
CgogICAgICAgIGZhc3RNYWxsb2NNYXRjaFZhbGlkYXRlTWFsbG9jKHAsIEludGVybmFsOjpBbGxv
Y1R5cGVGYXN0TmV3KTsKICAgICAgICByZXR1cm4gOjpuZXcgKHApIFQoYXJnMSk7CiAgICB9Cgog
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzI+CiAg
ICBpbmxpbmUgVCogZmFzdE5ldyhBcmcxIGFyZzEsIEFyZzIgYXJnMikKICAgIHsKICAgICAgICB2
b2lkKiBwID0gZmFzdE1hbGxvYyhzaXplb2YoVCkpOwoKICAgICAgICBpZiAoIXApCiAgICAgICAg
ICAgIHJldHVybiAwOwoKICAgICAgICBmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxvYyhwLCBJ
bnRlcm5hbDo6QWxsb2NUeXBlRmFzdE5ldyk7CiAgICAgICAgcmV0dXJuIDo6bmV3IChwKSBUKGFy
ZzEsIGFyZzIpOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBcmcx
LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczPgogICAgaW5saW5lIFQqIGZhc3ROZXcoQXJn
MSBhcmcxLCBBcmcyIGFyZzIsIEFyZzMgYXJnMykKICAgIHsKICAgICAgICB2b2lkKiBwID0gZmFz
dE1hbGxvYyhzaXplb2YoVCkpOwoKICAgICAgICBpZiAoIXApCiAgICAgICAgICAgIHJldHVybiAw
OwoKICAgICAgICBmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxvYyhwLCBJbnRlcm5hbDo6QWxs
b2NUeXBlRmFzdE5ldyk7CiAgICAgICAgcmV0dXJuIDo6bmV3IChwKSBUKGFyZzEsIGFyZzIsIGFy
ZzMpOwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBcmcxLCB0eXBl
bmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0PgogICAgaW5saW5lIFQqIGZh
c3ROZXcoQXJnMSBhcmcxLCBBcmcyIGFyZzIsIEFyZzMgYXJnMywgQXJnNCBhcmc0KQogICAgewog
ICAgICAgIHZvaWQqIHAgPSBmYXN0TWFsbG9jKHNpemVvZihUKSk7CgogICAgICAgIGlmICghcCkK
ICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIGZhc3RNYWxsb2NNYXRjaFZhbGlkYXRlTWFs
bG9jKHAsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0TmV3KTsKICAgICAgICByZXR1cm4gOjpuZXcg
KHApIFQoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVu
YW1lIEFyZzQsIHR5cGVuYW1lIEFyZzU+CiAgICBpbmxpbmUgVCogZmFzdE5ldyhBcmcxIGFyZzEs
IEFyZzIgYXJnMiwgQXJnMyBhcmczLCBBcmc0IGFyZzQsIEFyZzUgYXJnNSkKICAgIHsKICAgICAg
ICB2b2lkKiBwID0gZmFzdE1hbGxvYyhzaXplb2YoVCkpOwoKICAgICAgICBpZiAoIXApCiAgICAg
ICAgICAgIHJldHVybiAwOwoKICAgICAgICBmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxvYyhw
LCBJbnRlcm5hbDo6QWxsb2NUeXBlRmFzdE5ldyk7CiAgICAgICAgcmV0dXJuIDo6bmV3IChwKSBU
KGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwogICAgfQoKICAgIG5hbWVzcGFjZSBJbnRl
cm5hbCB7CiMgMjIxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdEFsbG9jQmFzZS5o
IgogICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgICAgIHVuaW9uIEFycmF5U2l6ZSB7
CiAgICAgICAgICAgIEFsbG9jQWxpZ25tZW50SW50ZWdlciogc2l6ZTsKICAgICAgICAgICAgVCog
dDsKICAgICAgICB9OwoKCgogICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sIHRyaXZp
YWxDdG9yLCBib29sIHRyaXZpYWxEdG9yPgogICAgICAgIHN0cnVjdCBOZXdBcnJheUltcGwgewog
ICAgICAgICAgICBzdGF0aWMgVCogZmFzdE5ld0FycmF5KHNpemVfdCBjb3VudCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgVCogcCA9IHN0YXRpY19jYXN0PFQqPihmYXN0TWFsbG9jKHNp
emVvZihUKSAqIGNvdW50KSk7CiAgICAgICAgICAgICAgICBmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0
ZU1hbGxvYyhwLCBJbnRlcm5hbDo6QWxsb2NUeXBlRmFzdE5ld0FycmF5KTsKICAgICAgICAgICAg
ICAgIHJldHVybiBwOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCgoKICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KICAgICAgICBzdHJ1Y3QgTmV3QXJyYXlJbXBsPFQsIGZhbHNlLCB0cnVl
PiB7CiAgICAgICAgICAgIHN0YXRpYyBUKiBmYXN0TmV3QXJyYXkoc2l6ZV90IGNvdW50KQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBUKiBwID0gc3RhdGljX2Nhc3Q8VCo+KGZhc3RNYWxs
b2Moc2l6ZW9mKFQpICogY291bnQpKTsKCiAgICAgICAgICAgICAgICBpZiAoIXApCiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgICAgICAgICAgZmFzdE1hbGxvY01hdGNoVmFs
aWRhdGVNYWxsb2MocCwgSW50ZXJuYWw6OkFsbG9jVHlwZUZhc3ROZXdBcnJheSk7CgogICAgICAg
ICAgICAgICAgZm9yIChUKiBwT2JqZWN0ID0gcCwgKnBPYmplY3RFbmQgPSBwT2JqZWN0ICsgY291
bnQ7IHBPYmplY3QgIT0gcE9iamVjdEVuZDsgKytwT2JqZWN0KQogICAgICAgICAgICAgICAgICAg
IDo6bmV3IChwT2JqZWN0KSBUOwoKICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAg
ICB9CiAgICAgICAgfTsKCgoKICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICAgICBz
dHJ1Y3QgTmV3QXJyYXlJbXBsPFQsIHRydWUsIGZhbHNlPiB7CiAgICAgICAgICAgIHN0YXRpYyBU
KiBmYXN0TmV3QXJyYXkoc2l6ZV90IGNvdW50KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICB2b2lkKiBwID0gZmFzdE1hbGxvYyhzaXplb2YoQWxsb2NBbGlnbm1lbnRJbnRlZ2VyKSArIChz
aXplb2YoVCkgKiBjb3VudCkpOwogICAgICAgICAgICAgICAgQXJyYXlTaXplPFQ+IGEgPSB7IHN0
YXRpY19jYXN0PEFsbG9jQWxpZ25tZW50SW50ZWdlcio+KHApIH07CgogICAgICAgICAgICAgICAg
aWYgKCFwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICAgICAgICAgIGZh
c3RNYWxsb2NNYXRjaFZhbGlkYXRlTWFsbG9jKHAsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0TmV3
QXJyYXkpOwogICAgICAgICAgICAgICAgKmEuc2l6ZSsrID0gY291bnQ7CgoKICAgICAgICAgICAg
ICAgIHJldHVybiBhLnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKCgogICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogICAgICAgIHN0cnVjdCBOZXdBcnJheUltcGw8VCwgZmFsc2UsIGZh
bHNlPiB7CiAgICAgICAgICAgIHN0YXRpYyBUKiBmYXN0TmV3QXJyYXkoc2l6ZV90IGNvdW50KQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2b2lkKiBwID0gZmFzdE1hbGxvYyhzaXplb2Yo
QWxsb2NBbGlnbm1lbnRJbnRlZ2VyKSArIChzaXplb2YoVCkgKiBjb3VudCkpOwogICAgICAgICAg
ICAgICAgQXJyYXlTaXplPFQ+IGEgPSB7IHN0YXRpY19jYXN0PEFsbG9jQWxpZ25tZW50SW50ZWdl
cio+KHApIH07CgogICAgICAgICAgICAgICAgaWYgKCFwKQogICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwoKICAgICAgICAgICAgICAgIGZhc3RNYWxsb2NNYXRjaFZhbGlkYXRlTWFsbG9jKHAs
IEludGVybmFsOjpBbGxvY1R5cGVGYXN0TmV3QXJyYXkpOwogICAgICAgICAgICAgICAgKmEuc2l6
ZSsrID0gY291bnQ7CgogICAgICAgICAgICAgICAgZm9yIChUKiBwVCA9IGEudCwgKnBURW5kID0g
cFQgKyBjb3VudDsgcFQgIT0gcFRFbmQ7ICsrcFQpCiAgICAgICAgICAgICAgICAgICAgOjpuZXcg
KHBUKSBUOwoKICAgICAgICAgICAgICAgIHJldHVybiBhLnQ7CiAgICAgICAgICAgIH0KICAgICAg
ICB9OwogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgaW5saW5lIFQqIGZhc3RO
ZXdBcnJheShzaXplX3QgY291bnQpCiAgICB7CiAgICAgICAgcmV0dXJuIEludGVybmFsOjpOZXdB
cnJheUltcGw8VCwgV1RGOjpIYXNUcml2aWFsQ29uc3RydWN0b3I8VD46OnZhbHVlLCBXVEY6Okhh
c1RyaXZpYWxEZXN0cnVjdG9yPFQ+Ojp2YWx1ZT46OmZhc3ROZXdBcnJheShjb3VudCk7CiAgICB9
CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBpbmxpbmUgdm9pZCBmYXN0RGVsZXRlKFQq
IHApCiAgICB7CiAgICAgICAgaWYgKCFwKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIGZh
c3RNYWxsb2NNYXRjaFZhbGlkYXRlRnJlZShwLCBJbnRlcm5hbDo6QWxsb2NUeXBlRmFzdE5ldyk7
CiAgICAgICAgcC0+flQoKTsKICAgICAgICBmYXN0RnJlZShwKTsKICAgIH0KCiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KICAgIGlubGluZSB2b2lkIGZhc3REZWxldGVTa2lwcGluZ0Rlc3RydWN0
b3IoVCogcCkKICAgIHsKICAgICAgICBpZiAoIXApCiAgICAgICAgICAgIHJldHVybjsKCiAgICAg
ICAgZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVGcmVlKHAsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0
TmV3KTsKICAgICAgICBmYXN0RnJlZShwKTsKICAgIH0KCiAgICBuYW1lc3BhY2UgSW50ZXJuYWwg
ewoKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgdHJpdmlhbER0b3I+CiAgICAg
ICAgc3RydWN0IERlbGV0ZUFycmF5SW1wbCB7CiAgICAgICAgICAgIHN0YXRpYyB2b2lkIGZhc3RE
ZWxldGVBcnJheSh2b2lkKiBwKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgIGZhc3RN
YWxsb2NNYXRjaFZhbGlkYXRlRnJlZShwLCBJbnRlcm5hbDo6QWxsb2NUeXBlRmFzdE5ld0FycmF5
KTsKICAgICAgICAgICAgICAgIGZhc3RGcmVlKHApOwogICAgICAgICAgICB9CiAgICAgICAgfTsK
CgoKICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICAgICBzdHJ1Y3QgRGVsZXRlQXJy
YXlJbXBsPFQsIGZhbHNlPiB7CiAgICAgICAgICAgIHN0YXRpYyB2b2lkIGZhc3REZWxldGVBcnJh
eShUKiBwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIXApCiAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwoKICAgICAgICAgICAgICAgIEFycmF5U2l6ZTxUPiBhOwogICAgICAg
ICAgICAgICAgYS50ID0gcDsKICAgICAgICAgICAgICAgIGEuc2l6ZS0tOwoKICAgICAgICAgICAg
ICAgIFQqIHBFbmQgPSBwICsgKmEuc2l6ZTsKICAgICAgICAgICAgICAgIHdoaWxlIChwRW5kLS0g
IT0gcCkKICAgICAgICAgICAgICAgICAgICBwRW5kLT5+VCgpOwoKICAgICAgICAgICAgICAgIGZh
c3RNYWxsb2NNYXRjaFZhbGlkYXRlRnJlZShhLnNpemUsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0
TmV3QXJyYXkpOwogICAgICAgICAgICAgICAgZmFzdEZyZWUoYS5zaXplKTsKICAgICAgICAgICAg
fQogICAgICAgIH07CgogICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCBm
YXN0RGVsZXRlQXJyYXkoVCogcCkKICAgIHsKICAgICAgICBJbnRlcm5hbDo6RGVsZXRlQXJyYXlJ
bXBsPFQsIFdURjo6SGFzVHJpdmlhbERlc3RydWN0b3I8VD46OnZhbHVlPjo6ZmFzdERlbGV0ZUFy
cmF5KHApOwogICAgfQoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIGlubGluZSB2b2lk
IGZhc3ROb25OdWxsRGVsZXRlKFQqIHApCiAgICB7CiAgICAgICAgZmFzdE1hbGxvY01hdGNoVmFs
aWRhdGVGcmVlKHAsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0TmV3KTsKICAgICAgICBwLT5+VCgp
OwogICAgICAgIGZhc3RGcmVlKHApOwogICAgfQoKICAgIG5hbWVzcGFjZSBJbnRlcm5hbCB7CgoK
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCB0cml2aWFsRHRvcj4KICAgICAgICBz
dHJ1Y3QgTm9uTnVsbERlbGV0ZUFycmF5SW1wbCB7CiAgICAgICAgICAgIHN0YXRpYyB2b2lkIGZh
c3ROb25OdWxsRGVsZXRlQXJyYXkodm9pZCogcCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVGcmVlKHAsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0
TmV3QXJyYXkpOwoKICAgICAgICAgICAgICAgIGZhc3RGcmVlKHApOwogICAgICAgICAgICB9CiAg
ICAgICAgfTsKCgoKICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgICAgICBzdHJ1Y3Qg
Tm9uTnVsbERlbGV0ZUFycmF5SW1wbDxULCBmYWxzZT4gewogICAgICAgICAgICBzdGF0aWMgdm9p
ZCBmYXN0Tm9uTnVsbERlbGV0ZUFycmF5KFQqIHApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIEFycmF5U2l6ZTxUPiBhOwogICAgICAgICAgICAgICAgYS50ID0gcDsKICAgICAgICAgICAg
ICAgIGEuc2l6ZS0tOwoKICAgICAgICAgICAgICAgIFQqIHBFbmQgPSBwICsgKmEuc2l6ZTsKICAg
ICAgICAgICAgICAgIHdoaWxlIChwRW5kLS0gIT0gcCkKICAgICAgICAgICAgICAgICAgICBwRW5k
LT5+VCgpOwoKICAgICAgICAgICAgICAgIGZhc3RNYWxsb2NNYXRjaFZhbGlkYXRlRnJlZShhLnNp
emUsIEludGVybmFsOjpBbGxvY1R5cGVGYXN0TmV3QXJyYXkpOwogICAgICAgICAgICAgICAgZmFz
dEZyZWUoYS5zaXplKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgfQoKICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCBmYXN0Tm9uTnVsbERlbGV0ZUFycmF5KFQqIHApCiAg
ICB7CiAgICAgICAgSW50ZXJuYWw6Ok5vbk51bGxEZWxldGVBcnJheUltcGw8VCwgV1RGOjpIYXNU
cml2aWFsRGVzdHJ1Y3RvcjxUPjo6dmFsdWU+OjpmYXN0Tm9uTnVsbERlbGV0ZUFycmF5KHApOwog
ICAgfQoKCn0KCnVzaW5nIFdURjo6ZmFzdERlbGV0ZVNraXBwaW5nRGVzdHJ1Y3RvcjsKIyAyOCAi
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmgiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvRm9yd2FyZC5oIiAxCiMgMjQgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9Gb3J3YXJkLmgiCiMgMSAiL3Vzci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFyd2luOS80LjIu
MS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDI1ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvRm9yd2FyZC5oIiAyCgpuYW1lc3BhY2UgV1RGIHsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIEZ1bmN0aW9uOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgTGlzdFJlZlB0
cjsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE93bkFycmF5UHRyOwogICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gY2xhc3MgT3duUHRyOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xh
c3MgUGFzc093bkFycmF5UHRyOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093
blB0cjsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7CiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNzIFZlY3RvcjsKCiAgICBjbGFzcyBBcnJheUJ1ZmZl
cjsKICAgIGNsYXNzIEFycmF5QnVmZmVyVmlldzsKICAgIGNsYXNzIEF0b21pY1N0cmluZzsKICAg
IGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7CiAgICBjbGFzcyBDU3RyaW5nOwogICAgY2xhc3MgRGVj
b2RlcjsKICAgIGNsYXNzIEVuY29kZXI7CiAgICBjbGFzcyBGbG9hdDMyQXJyYXk7CiAgICBjbGFz
cyBGbG9hdDY0QXJyYXk7CiAgICBjbGFzcyBJbnQ4QXJyYXk7CiAgICBjbGFzcyBJbnQxNkFycmF5
OwogICAgY2xhc3MgSW50MzJBcnJheTsKICAgIGNsYXNzIFN0cmluZzsKICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAgICBjbGFzcyBTdHJpbmdCdWlsZGVyOwog
ICAgY2xhc3MgU3RyaW5nSW1wbDsKICAgIGNsYXNzIFVpbnQ4QXJyYXk7CiAgICBjbGFzcyBVaW50
OENsYW1wZWRBcnJheTsKICAgIGNsYXNzIFVpbnQxNkFycmF5OwogICAgY2xhc3MgVWludDMyQXJy
YXk7Cn0KCnVzaW5nIFdURjo6RnVuY3Rpb247CnVzaW5nIFdURjo6TGlzdFJlZlB0cjsKdXNpbmcg
V1RGOjpPd25BcnJheVB0cjsKdXNpbmcgV1RGOjpPd25QdHI7CnVzaW5nIFdURjo6UGFzc093bkFy
cmF5UHRyOwp1c2luZyBXVEY6OlBhc3NPd25QdHI7CnVzaW5nIFdURjo6UGFzc1JlZlB0cjsKdXNp
bmcgV1RGOjpSZWZQdHI7CnVzaW5nIFdURjo6VmVjdG9yOwoKdXNpbmcgV1RGOjpBcnJheUJ1ZmZl
cjsKdXNpbmcgV1RGOjpBcnJheUJ1ZmZlclZpZXc7CnVzaW5nIFdURjo6QXRvbWljU3RyaW5nOwp1
c2luZyBXVEY6OkF0b21pY1N0cmluZ0ltcGw7CnVzaW5nIFdURjo6Q1N0cmluZzsKdXNpbmcgV1RG
OjpFbmNvZGVyOwp1c2luZyBXVEY6OkRlY29kZXI7CnVzaW5nIFdURjo6RmxvYXQzMkFycmF5Owp1
c2luZyBXVEY6OkZsb2F0NjRBcnJheTsKdXNpbmcgV1RGOjpJbnQ4QXJyYXk7CnVzaW5nIFdURjo6
SW50MTZBcnJheTsKdXNpbmcgV1RGOjpJbnQzMkFycmF5Owp1c2luZyBXVEY6OlN0cmluZzsKdXNp
bmcgV1RGOjpTdHJpbmdCdWZmZXI7CnVzaW5nIFdURjo6U3RyaW5nQnVpbGRlcjsKdXNpbmcgV1RG
OjpTdHJpbmdJbXBsOwp1c2luZyBXVEY6OlVpbnQ4QXJyYXk7CnVzaW5nIFdURjo6VWludDhDbGFt
cGVkQXJyYXk7CnVzaW5nIFdURjo6VWludDE2QXJyYXk7CnVzaW5nIFdURjo6VWludDMyQXJyYXk7
CiMgMjkgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oIiAyCgojIDEgIi4vU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJyYXlQdHIuaCIgMQojIDMwICIuL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvUGFzc093bkFycmF5UHRyLmgiCiMgMSAiLi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL051bGxQdHIuaCIgMQojIDM0ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvTnVsbFB0ci5oIgojIDEgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvY2lzbzY0NiIgMSAzCiMg
MzUgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9OdWxsUHRyLmgiIDIKCgoKCgoKCm5hbWVz
cGFjZSBzdGQgewogICAgY2xhc3MgbnVsbHB0cl90IHsgfTsKfQoKZXh0ZXJuIHN0ZDo6bnVsbHB0
cl90IG51bGxwdHI7CiMgMzEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzT3duQXJy
YXlQdHIuaCIgMgoKCm5hbWVzcGFjZSBXVEYgewoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3Mg
T3duQXJyYXlQdHI7CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0cjsK
dGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc093bkFycmF5UHRyPFQ+IGFkb3B0QXJyYXlQdHIoVCop
Owp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGRlbGV0ZU93bmVkQXJyYXlQdHIoVCogcHRyKTsK
CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25BcnJheVB0ciB7CnB1YmxpYzoKICAg
IHR5cGVkZWYgVCogUHRyVHlwZTsKCiAgICBQYXNzT3duQXJyYXlQdHIoKSA6IG1fcHRyKDApIHsg
fQogICAgUGFzc093bkFycmF5UHRyKHN0ZDo6bnVsbHB0cl90KSA6IG1fcHRyKDApIHsgfQoKCgoK
ICAgIFBhc3NPd25BcnJheVB0cihjb25zdCBQYXNzT3duQXJyYXlQdHImIG8pIDogbV9wdHIoby5s
ZWFrUHRyKCkpIHsgfQogICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUGFzc093bkFycmF5UHRyKGNv
bnN0IFBhc3NPd25BcnJheVB0cjxVPiYgbykgOiBtX3B0cihvLmxlYWtQdHIoKSkgeyB9CgogICAg
flBhc3NPd25BcnJheVB0cigpIHsgZGVsZXRlT3duZWRBcnJheVB0cihtX3B0cik7IH0KCiAgICBQ
dHJUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CgogICAgUHRyVHlwZSBsZWFrUHRy
KCkgY29uc3QgX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpOwoKICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgKCh2b2lkKTApOyByZXR1cm4gKm1fcHRyOyB9CiAgICBQdHJUeXBl
IG9wZXJhdG9yLT4oKSBjb25zdCB7ICgodm9pZCkwKTsgcmV0dXJuIG1fcHRyOyB9CgogICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KCgogICAgdHlwZWRlZiBQdHJU
eXBlIFBhc3NPd25BcnJheVB0cjo6KlVuc3BlY2lmaWVkQm9vbFR5cGU7CiAgICBvcGVyYXRvciBV
bnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wdHIgPyAmUGFzc093bkFycmF5
UHRyOjptX3B0ciA6IDA7IH0KCiAgICBQYXNzT3duQXJyYXlQdHImIG9wZXJhdG9yPShjb25zdCBQ
YXNzT3duQXJyYXlQdHImKSB7IHR5cGVkZWYgaW50IGR1bW15UGFzc093bkFycmF5UHRyX3Nob3Vs
ZF9uZXZlcl9iZV9hc3NpZ25lZF90byBbKCFzaXplb2YoVCopKSA/IDEgOiAtMV07IHJldHVybiAq
dGhpczsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGZyaWVuZCBQYXNzT3duQXJyYXlQdHI8
VT4gYWRvcHRBcnJheVB0cihVKik7Cgpwcml2YXRlOgogICAgZXhwbGljaXQgUGFzc093bkFycmF5
UHRyKFB0clR5cGUgcHRyKSA6IG1fcHRyKHB0cikgeyB9CgogICAgbXV0YWJsZSBQdHJUeXBlIG1f
cHRyOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHR5cGVuYW1lIFBhc3NPd25BcnJh
eVB0cjxUPjo6UHRyVHlwZSBQYXNzT3duQXJyYXlQdHI8VD46OmxlYWtQdHIoKSBjb25zdAp7CiAg
ICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAgbV9wdHIgPSAwOwogICAgcmV0dXJuIHB0cjsKfQoK
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBQYXNzT3duQXJyYXlQdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25BcnJheVB0cjxVPiYgYikK
ewogICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzT3duQXJyYXlQdHI8
VD4mIGEsIGNvbnN0IE93bkFycmF5UHRyPFU+JiBiKQp7CiAgICByZXR1cm4gYS5nZXQoKSA9PSBi
LmdldCgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IE93bkFycmF5UHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duQXJyYXlQdHI8
VT4mIGIpCnsKICAgIHJldHVybiBhLmdldCgpID09IGIuZ2V0KCk7Cn0KCnRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093bkFy
cmF5UHRyPFQ+JiBhLCBVKiBiKQp7CiAgICByZXR1cm4gYS5nZXQoKSA9PSBiOwp9Cgp0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNv
bnN0IFBhc3NPd25BcnJheVB0cjxVPiYgYikKewogICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsKfQoK
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBQYXNzT3duQXJyYXlQdHI8VD4mIGEsIGNvbnN0IFBhc3NPd25BcnJheVB0cjxVPiYgYikK
ewogICAgcmV0dXJuIGEuZ2V0KCkgIT0gYi5nZXQoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzT3duQXJyYXlQdHI8
VD4mIGEsIGNvbnN0IE93bkFycmF5UHRyPFU+JiBiKQp7CiAgICByZXR1cm4gYS5nZXQoKSAhPSBi
LmdldCgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IE93bkFycmF5UHRyPFQ+JiBhLCBjb25zdCBQYXNzT3duQXJyYXlQdHI8
VT4mIGIpCnsKICAgIHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7Cn0KCnRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGFzc093bkFy
cmF5UHRyPFQ+JiBhLCBVKiBiKQp7CiAgICByZXR1cm4gYS5nZXQoKSAhPSBiOwp9Cgp0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNv
bnN0IFBhc3NPd25BcnJheVB0cjxVPiYgYikKewogICAgcmV0dXJuIGEgIT0gYi5nZXQoKTsKfQoK
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFBhc3NPd25BcnJheVB0cjxUPiBhZG9wdEFycmF5
UHRyKFQqIHB0cikKewogICAgcmV0dXJuIFBhc3NPd25BcnJheVB0cjxUPihwdHIpOwp9Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBkZWxldGVPd25lZEFycmF5UHRyKFQqIHB0cikK
ewogICAgdHlwZWRlZiBjaGFyIGtub3duW3NpemVvZihUKSA/IDEgOiAtMV07CiAgICBpZiAoc2l6
ZW9mKGtub3duKSkKICAgICAgICBkZWxldGUgW10gcHRyOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc093bkFycmF5UHRyPFQ+IHN0YXRpY19wb2ludGVyX2Nh
c3QoY29uc3QgUGFzc093bkFycmF5UHRyPFU+JiBwKQp7CiAgICByZXR1cm4gYWRvcHRBcnJheVB0
cihzdGF0aWNfY2FzdDxUKj4ocC5sZWFrUHRyKCkpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIFBhc3NPd25BcnJheVB0cjxUPiBjb25zdF9wb2ludGVyX2Nhc3Qo
Y29uc3QgUGFzc093bkFycmF5UHRyPFU+JiBwKQp7CiAgICByZXR1cm4gYWRvcHRBcnJheVB0cihj
b25zdF9jYXN0PFQqPihwLmxlYWtQdHIoKSkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgVCogZ2V0UHRyKGNvbnN0IFBhc3NPd25BcnJheVB0cjxUPiYgcCkKewogICAgcmV0dXJuIHAu
Z2V0KCk7Cn0KCn0KCnVzaW5nIFdURjo6UGFzc093bkFycmF5UHRyOwp1c2luZyBXVEY6OmFkb3B0
QXJyYXlQdHI7CnVzaW5nIFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0Owp1c2luZyBXVEY6OnN0YXRp
Y19wb2ludGVyX2Nhc3Q7CiMgMzEgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5oIiAy
CgpuYW1lc3BhY2UgV2ViQ29yZSB7Cgpjb25zdCBpbnQgaW50TWF4Rm9yTGVuZ3RoID0gMHg3ZmZm
ZmZmOwpjb25zdCBpbnQgaW50TWluRm9yTGVuZ3RoID0gKC0weDdmZmZmZmYgLSAxKTsKCmVudW0g
TGVuZ3RoVHlwZSB7IEF1dG8sIFJlbGF0aXZlLCBQZXJjZW50LCBGaXhlZCwgSW50cmluc2ljLCBN
aW5JbnRyaW5zaWMsIFVuZGVmaW5lZCB9OwoKc3RydWN0IExlbmd0aCB7CiAgICBwdWJsaWM6IHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0dXJuIHA7IH0gdm9pZCogb3Bl
cmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3Qgc2l6ZSkgeyB2b2lkKiBwID0gOjpXVEY6OmZhc3RNYWxsb2Moc2l6ZSk7IDo6
V1RGOjpmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxvYyhwLCA6OldURjo6SW50ZXJuYWw6OkFs
bG9jVHlwZUNsYXNzTmV3KTsgcmV0dXJuIHA7IH0gdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCog
cCkgeyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVGcmVlKHAsIDo6V1RGOjpJbnRlcm5h
bDo6QWxsb2NUeXBlQ2xhc3NOZXcpOyA6OldURjo6ZmFzdEZyZWUocCk7IH0gdm9pZCogb3BlcmF0
b3IgbmV3W10oc2l6ZV90IHNpemUpIHsgdm9pZCogcCA9IDo6V1RGOjpmYXN0TWFsbG9jKHNpemUp
OyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVNYWxsb2MocCwgOjpXVEY6OkludGVybmFs
OjpBbGxvY1R5cGVDbGFzc05ld0FycmF5KTsgcmV0dXJuIHA7IH0gdm9pZCBvcGVyYXRvciBkZWxl
dGVbXSh2b2lkKiBwKSB7IDo6V1RGOjpmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZUZyZWUocCwgOjpX
VEY6OkludGVybmFsOjpBbGxvY1R5cGVDbGFzc05ld0FycmF5KTsgOjpXVEY6OmZhc3RGcmVlKHAp
OyB9IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51bGxUYWcsIHZvaWQqIGxvY2F0aW9u
KSB7ICgodm9pZCkwKTsgcmV0dXJuIGxvY2F0aW9uOyB9IHByaXZhdGU6IHR5cGVkZWYgaW50IF9f
dGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFjcm87CnB1YmxpYzoKICAgIExl
bmd0aCgpCiAgICAgICAgOiBtX2ludFZhbHVlKDApLCBtX3F1aXJrKGZhbHNlKSwgbV90eXBlKEF1
dG8pLCBtX2lzRmxvYXQoZmFsc2UpCiAgICB7CiAgICB9CgogICAgTGVuZ3RoKExlbmd0aFR5cGUg
dCkKICAgICAgICA6IG1faW50VmFsdWUoMCksIG1fcXVpcmsoZmFsc2UpLCBtX3R5cGUodCksIG1f
aXNGbG9hdChmYWxzZSkKICAgIHsKICAgIH0KCiAgICBMZW5ndGgoaW50IHYsIExlbmd0aFR5cGUg
dCwgYm9vbCBxID0gZmFsc2UpCiAgICAgICAgOiBtX2ludFZhbHVlKHYpLCBtX3F1aXJrKHEpLCBt
X3R5cGUodCksIG1faXNGbG9hdChmYWxzZSkKICAgIHsKICAgIH0KCiAgICBMZW5ndGgoZmxvYXQg
diwgTGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKICAgIDogbV9mbG9hdFZhbHVlKHYpLCBt
X3F1aXJrKHEpLCBtX3R5cGUodCksIG1faXNGbG9hdCh0cnVlKQogICAgewogICAgfQoKICAgIExl
bmd0aChkb3VibGUgdiwgTGVuZ3RoVHlwZSB0LCBib29sIHEgPSBmYWxzZSkKICAgICAgICA6IG1f
cXVpcmsocSksIG1fdHlwZSh0KSwgbV9pc0Zsb2F0KHRydWUpCiAgICB7CiAgICAgICAgbV9mbG9h
dFZhbHVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHYpOwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBMZW5ndGgmIG8pIGNvbnN0IHsgcmV0dXJuIChtX3R5cGUgPT0gby5tX3R5cGUpICYm
IChtX3F1aXJrID09IG8ubV9xdWlyaykgJiYgKGlzVW5kZWZpbmVkKCkgfHwgKGdldEZsb2F0VmFs
dWUoKSA9PSBvLmdldEZsb2F0VmFsdWUoKSkpOyB9CiAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
TGVuZ3RoJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9CgogICAgY29uc3QgTGVu
Z3RoJiBvcGVyYXRvcio9KGZsb2F0IHYpCiAgICB7CiAgICAgICAgaWYgKG1faXNGbG9hdCkKICAg
ICAgICAgICAgbV9mbG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZmxvYXRWYWx1ZSAq
IHYpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgbV9pbnRWYWx1ZSA9IHN0YXRpY19jYXN0PGlu
dD4obV9pbnRWYWx1ZSAqIHYpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgaW50
IHZhbHVlKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gZ2V0SW50VmFsdWUoKTsKICAgIH0K
CiAgICBmbG9hdCBwZXJjZW50KCkgY29uc3QKICAgIHsKICAgICAgICAoKHZvaWQpMCk7CiAgICAg
ICAgcmV0dXJuIGdldEZsb2F0VmFsdWUoKTsKICAgIH0KCiAgICBMZW5ndGhUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxMZW5ndGhUeXBlPihtX3R5cGUpOyB9CiAgICBib29s
IHF1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9xdWlyazsgfQoKICAgIHZvaWQgc2V0UXVpcmsoYm9v
bCBxdWlyaykKICAgIHsKICAgICAgICBtX3F1aXJrID0gcXVpcms7CiAgICB9CgogICAgdm9pZCBz
ZXRWYWx1ZShMZW5ndGhUeXBlIHQsIGludCB2YWx1ZSkKICAgIHsKICAgICAgICBtX3R5cGUgPSB0
OwogICAgICAgIG1faW50VmFsdWUgPSB2YWx1ZTsKICAgICAgICBtX2lzRmxvYXQgPSBmYWxzZTsK
ICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKGludCB2YWx1ZSkKICAgIHsKICAgICAgICBzZXRWYWx1
ZShGaXhlZCwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoTGVuZ3RoVHlwZSB0LCBm
bG9hdCB2YWx1ZSkKICAgIHsKICAgICAgICBtX3R5cGUgPSB0OwogICAgICAgIG1fZmxvYXRWYWx1
ZSA9IHZhbHVlOwogICAgICAgIG1faXNGbG9hdCA9IHRydWU7CiAgICB9CgogICAgdm9pZCBzZXRW
YWx1ZShmbG9hdCB2YWx1ZSkKICAgIHsKICAgICAgICAqdGhpcyA9IExlbmd0aCh2YWx1ZSwgRml4
ZWQpOwogICAgfQoKCgogICAgaW50IGNhbGNWYWx1ZShpbnQgbWF4VmFsdWUsIGJvb2wgcm91bmRQ
ZXJjZW50YWdlcyA9IGZhbHNlKSBjb25zdAogICAgewogICAgICAgIHN3aXRjaCAodHlwZSgpKSB7
CiAgICAgICAgICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgICAgIGNhc2UgUGVyY2VudDoKICAgICAg
ICAgICAgICAgIHJldHVybiBjYWxjTWluVmFsdWUobWF4VmFsdWUsIHJvdW5kUGVyY2VudGFnZXMp
OwogICAgICAgICAgICBjYXNlIEF1dG86CiAgICAgICAgICAgICAgICByZXR1cm4gbWF4VmFsdWU7
CiAgICAgICAgICAgIGNhc2UgUmVsYXRpdmU6CiAgICAgICAgICAgIGNhc2UgSW50cmluc2ljOgog
ICAgICAgICAgICBjYXNlIE1pbkludHJpbnNpYzoKICAgICAgICAgICAgY2FzZSBVbmRlZmluZWQ6
CiAgICAgICAgICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICB9CiAgICAgICAgKCh2b2lkKTApOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlu
dCBjYWxjTWluVmFsdWUoaW50IG1heFZhbHVlLCBib29sIHJvdW5kUGVyY2VudGFnZXMgPSBmYWxz
ZSkgY29uc3QKICAgIHsKICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgICAgICAgICBjYXNl
IEZpeGVkOgogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7CiAgICAgICAgICAgIGNhc2Ug
UGVyY2VudDoKICAgICAgICAgICAgICAgIGlmIChyb3VuZFBlcmNlbnRhZ2VzKQogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHJvdW5kKG1heFZhbHVlICogcGVyY2Vu
dCgpIC8gMTAwLjBmKSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heFZhbHVlICogcGVyY2VudCgpIC8gMTAwLjBmKSk7CiAgICAg
ICAgICAgIGNhc2UgQXV0bzoKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICBj
YXNlIFJlbGF0aXZlOgogICAgICAgICAgICBjYXNlIEludHJpbnNpYzoKICAgICAgICAgICAgY2Fz
ZSBNaW5JbnRyaW5zaWM6CiAgICAgICAgICAgIGNhc2UgVW5kZWZpbmVkOgogICAgICAgICAgICAg
ICAgKCh2b2lkKTApOwogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICAg
ICgodm9pZCkwKTsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBmbG9hdCBjYWxjRmxvYXRW
YWx1ZShpbnQgbWF4VmFsdWUpIGNvbnN0CiAgICB7CiAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsK
ICAgICAgICAgICAgY2FzZSBGaXhlZDoKICAgICAgICAgICAgICAgIHJldHVybiBnZXRGbG9hdFZh
bHVlKCk7CiAgICAgICAgICAgIGNhc2UgUGVyY2VudDoKICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4obWF4VmFsdWUgKiBwZXJjZW50KCkgLyAxMDAuMGYpOwogICAgICAg
ICAgICBjYXNlIEF1dG86CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1heFZhbHVlKTsKICAgICAgICAgICAgY2FzZSBSZWxhdGl2ZToKICAgICAgICAgICAgY2FzZSBJ
bnRyaW5zaWM6CiAgICAgICAgICAgIGNhc2UgTWluSW50cmluc2ljOgogICAgICAgICAgICBjYXNl
IFVuZGVmaW5lZDoKICAgICAgICAgICAgICAgICgodm9pZCkwKTsKICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgIH0KICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgcmV0dXJuIDA7CiAg
ICB9CgogICAgYm9vbCBpc1VuZGVmaW5lZCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBVbmRl
ZmluZWQ7IH0KICAgIGJvb2wgaXNaZXJvKCkgY29uc3QKICAgIHsKICAgICAgICAoKHZvaWQpMCk7
CiAgICAgICAgcmV0dXJuIG1faXNGbG9hdCA/ICFtX2Zsb2F0VmFsdWUgOiAhbV9pbnRWYWx1ZTsK
ICAgIH0KCiAgICBib29sIGlzUG9zaXRpdmUoKSBjb25zdCB7IHJldHVybiBpc1VuZGVmaW5lZCgp
ID8gZmFsc2UgOiBnZXRGbG9hdFZhbHVlKCkgPiAwOyB9CiAgICBib29sIGlzTmVnYXRpdmUoKSBj
b25zdCB7IHJldHVybiBpc1VuZGVmaW5lZCgpID8gZmFsc2UgOiBnZXRGbG9hdFZhbHVlKCkgPCAw
OyB9CgogICAgYm9vbCBpc0F1dG8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gQXV0bzsgfQog
ICAgYm9vbCBpc1JlbGF0aXZlKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFJlbGF0aXZlOyB9
CiAgICBib29sIGlzUGVyY2VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBQZXJjZW50OyB9
CiAgICBib29sIGlzRml4ZWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRml4ZWQ7IH0KICAg
IGJvb2wgaXNJbnRyaW5zaWNPckF1dG8oKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gQXV0byB8
fCB0eXBlKCkgPT0gTWluSW50cmluc2ljIHx8IHR5cGUoKSA9PSBJbnRyaW5zaWM7IH0KICAgIGJv
b2wgaXNTcGVjaWZpZWQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gRml4ZWQgfHwgdHlwZSgp
ID09IFBlcmNlbnQ7IH0KCiAgICBMZW5ndGggYmxlbmQoY29uc3QgTGVuZ3RoJiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0CiAgICB7CgogICAgICAgIGlmICghZnJvbS5pc1plcm8oKSAmJiAh
aXNaZXJvKCkgJiYgZnJvbS50eXBlKCkgIT0gdHlwZSgpKQogICAgICAgICAgICByZXR1cm4gKnRo
aXM7CgogICAgICAgIGlmIChmcm9tLmlzWmVybygpICYmIGlzWmVybygpKQogICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CgogICAgICAgIExlbmd0aFR5cGUgcmVzdWx0VHlwZSA9IHR5cGUoKTsKICAg
ICAgICBpZiAoaXNaZXJvKCkpCiAgICAgICAgICAgIHJlc3VsdFR5cGUgPSBmcm9tLnR5cGUoKTsK
CiAgICAgICAgaWYgKHJlc3VsdFR5cGUgPT0gUGVyY2VudCkgewogICAgICAgICAgICBmbG9hdCBm
cm9tUGVyY2VudCA9IGZyb20uaXNaZXJvKCkgPyAwIDogZnJvbS5wZXJjZW50KCk7CiAgICAgICAg
ICAgIGZsb2F0IHRvUGVyY2VudCA9IGlzWmVybygpID8gMCA6IHBlcmNlbnQoKTsKICAgICAgICAg
ICAgcmV0dXJuIExlbmd0aChXZWJDb3JlOjpibGVuZChmcm9tUGVyY2VudCwgdG9QZXJjZW50LCBw
cm9ncmVzcyksIFBlcmNlbnQpOwogICAgICAgIH0KCiAgICAgICAgZmxvYXQgZnJvbVZhbHVlID0g
ZnJvbS5pc1plcm8oKSA/IDAgOiBmcm9tLnZhbHVlKCk7CiAgICAgICAgZmxvYXQgdG9WYWx1ZSA9
IGlzWmVybygpID8gMCA6IHZhbHVlKCk7CiAgICAgICAgcmV0dXJuIExlbmd0aChXZWJDb3JlOjpi
bGVuZChmcm9tVmFsdWUsIHRvVmFsdWUsIHByb2dyZXNzKSwgcmVzdWx0VHlwZSk7CiAgICB9Cgpw
cml2YXRlOgogICAgaW50IGdldEludFZhbHVlKCkgY29uc3QKICAgIHsKICAgICAgICAoKHZvaWQp
MCk7CiAgICAgICAgcmV0dXJuIG1faXNGbG9hdCA/IHN0YXRpY19jYXN0PGludD4obV9mbG9hdFZh
bHVlKSA6IG1faW50VmFsdWU7CiAgICB9CgogICAgZmxvYXQgZ2V0RmxvYXRWYWx1ZSgpIGNvbnN0
CiAgICB7CiAgICAgICAgKCh2b2lkKTApOwogICAgICAgIHJldHVybiBtX2lzRmxvYXQgPyBtX2Zs
b2F0VmFsdWUgOiBtX2ludFZhbHVlOwogICAgfQoKICAgIHVuaW9uIHsKICAgICAgICBpbnQgbV9p
bnRWYWx1ZTsKICAgICAgICBmbG9hdCBtX2Zsb2F0VmFsdWU7CiAgICB9OwogICAgYm9vbCBtX3F1
aXJrOwogICAgdW5zaWduZWQgY2hhciBtX3R5cGU7CiAgICBib29sIG1faXNGbG9hdDsKfTsKClBh
c3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmluZyYsIGludCYg
bGVuKTsKUGFzc093bkFycmF5UHRyPExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5n
JiwgaW50JiBsZW4pOwoKfQojIDI3ICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3Bw
IiAyCgojIDEgIi4vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5o
IiAxCiMgMjggIi4vU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5o
IgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIiAxCiMg
MjggIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIgojIDEgIi4v
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaCIgMQojIDI2ICIu
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9BU0NJSUZhc3RQYXRoLmgiCiMgMSAiLi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvVW5pY29kZS5oIiAxCiMgMjkgIi4vU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaCIKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIExDaGFyOwoKCgoKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29k
ZS9pY3UvVW5pY29kZUljdS5oIiAxCiMgMjcgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91
bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgiCiMgMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUv
dWNoYXIuaCIgMQojIDI2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgojIDEg
Ii9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V0eXBlcy5oIiAxCiMgMzYgIi9vcHQvbG9jYWwv
aW5jbHVkZS91bmljb2RlL3V0eXBlcy5oIgojIDEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2Rl
L3VtYWNoaW5lLmgiIDEKIyA1OCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdW1hY2hpbmUu
aCIKIyAxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS9wdHlwZXMuaCIgMQojIDIzICIvb3B0
L2xvY2FsL2luY2x1ZGUvdW5pY29kZS9wdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDEgMyA0CiMgODQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYg
dW5zaWduZWQgY2hhciB1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25nOwoK
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50
OwoKCnR5cGVkZWYgdV9pbnQ2NF90IHVfcXVhZF90Owp0eXBlZGVmIGludDY0X3QgcXVhZF90Owp0
eXBlZGVmIHF1YWRfdCAqIHFhZGRyX3Q7Cgp0eXBlZGVmIGNoYXIgKiBjYWRkcl90Owp0eXBlZGVm
IGludDMyX3QgZGFkZHJfdDsKCgoKCgoKdHlwZWRlZiB1X2ludDMyX3QgZml4cHRfdDsKCgp0eXBl
ZGVmIF9fZGFyd2luX2Jsa2NudF90IGJsa2NudF90OwoKCgoKdHlwZWRlZiBfX2Rhcndpbl9ibGtz
aXplX3QgYmxrc2l6ZV90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw
ZWRlZiBfX3VpbnQzMl90IGluX2FkZHJfdDsKCgoKCnR5cGVkZWYgX191aW50MTZfdCBpbl9wb3J0
X3Q7CgoKCnR5cGVkZWYgX19kYXJ3aW5faW5vX3QgaW5vX3Q7CgoKCgoKdHlwZWRlZiBfX2Rhcndp
bl9pbm82NF90IGlubzY0X3Q7CgoKCgoKCnR5cGVkZWYgX19pbnQzMl90IGtleV90OwojIDE1NyAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX3VpbnQxNl90IG5saW5rX3Q7
CiMgMTc2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludDMyX3Qgc2Vn
c3pfdDsKdHlwZWRlZiBpbnQzMl90IHN3YmxrX3Q7CiMgMTk3ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMgNApzdGF0aWMgaW5saW5lIF9faW50MzJfdCBtYWpvcihfX3VpbnQzMl90IF94KQp7
CiByZXR1cm4gKF9faW50MzJfdCkoKChfX3VpbnQzMl90KV94ID4+IDI0KSAmIDB4ZmYpOwp9Cgpz
dGF0aWMgaW5saW5lIF9faW50MzJfdCBtaW5vcihfX3VpbnQzMl90IF94KQp7CiByZXR1cm4gKF9f
aW50MzJfdCkoKF94KSAmIDB4ZmZmZmZmKTsKfQoKc3RhdGljIGlubGluZSBkZXZfdCBtYWtlZGV2
KF9fdWludDMyX3QgX21ham9yLCBfX3VpbnQzMl90IF9taW5vcikKewogcmV0dXJuIChkZXZfdCko
KChfbWFqb3IpIDw8IDI0KSB8IChfbWlub3IpKTsKfQojIDI2MCAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL19zdHJ1Y3RzLmgiIDEgMyA0CiMgMjYx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgp0eXBlZGVmIF9faW50MzJfdCBm
ZF9tYXNrOwojIDM2MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX2Rh
cndpbl9mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCgp0eXBlZGVmIF9fZGFyd2luX2ZzZmlsY250
X3QgZnNmaWxjbnRfdDsKIyAyNCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvcHR5cGVzLmgi
IDIKCiMgMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvcGxhdGZvcm0uaCIgMQojIDI2ICIv
b3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS9wdHlwZXMuaCIgMgojIDUxICIvb3B0L2xvY2FsL2lu
Y2x1ZGUvdW5pY29kZS9wdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMSAz
IDQKIyA1MiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvcHR5cGVzLmgiIDIKIyA1OSAiL29w
dC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdW1hY2hpbmUuaCIgMgoKCgoKCgojIDEgIi91c3IvbGli
L2djYy9wb3dlcnBjLWFwcGxlLWRhcndpbjkvNC4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQK
IyA2NiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdW1hY2hpbmUuaCIgMgojIDIyOCAiL29w
dC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdW1hY2hpbmUuaCIKdHlwZWRlZiBpbnQ4X3QgVUJvb2w7
CiMgMzI1ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91bWFjaGluZS5oIgogICAgdHlwZWRl
ZiB1aW50MTZfdCBVQ2hhcjsKIyAzNDUgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VtYWNo
aW5lLmgiCnR5cGVkZWYgaW50MzJfdCBVQ2hhcjMyOwojIDM4MiAiL29wdC9sb2NhbC9pbmNsdWRl
L3VuaWNvZGUvdW1hY2hpbmUuaCIKIyAxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91cmVu
YW1lLmgiIDEKIyAzNSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXJlbmFtZS5oIgojIDEg
Ii9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VtYWNoaW5lLmgiIDEKIyAzNiAiL29wdC9sb2Nh
bC9pbmNsdWRlL3VuaWNvZGUvdXJlbmFtZS5oIiAyCgoKCgojIDEgIi9vcHQvbG9jYWwvaW5jbHVk
ZS91bmljb2RlL3V2ZXJudW0uaCIgMQojIDQxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91
cmVuYW1lLmgiIDIKIyAzODMgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VtYWNoaW5lLmgi
IDIKIyAzNyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXR5cGVzLmgiIDIKIyAxICIvb3B0
L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91dGYuaCIgMQojIDExMSAiL29wdC9sb2NhbC9pbmNsdWRl
L3VuaWNvZGUvdXRmLmgiCiMgMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXR5cGVzLmgi
IDEKIyAxMTIgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V0Zi5oIiAyCiMgMjMwICIvb3B0
L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91dGYuaCIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdW5pY29kZS91dGY4LmgiIDEKIyAyOSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3VuaWNvZGUvdXRmOC5oIgojIDEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2Rl
L1VuaWNvZGUuaCIgMQojIDMwICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS91
dGY4LmgiIDIKCm5hbWVzcGFjZSBXVEYgewpuYW1lc3BhY2UgVW5pY29kZSB7CgoKCgogICAgaW50
IFVURjhTZXF1ZW5jZUxlbmd0aChjaGFyKTsKCgoKCiAgICBpbnQgZGVjb2RlVVRGOFNlcXVlbmNl
KGNvbnN0IGNoYXIqKTsKCiAgICB0eXBlZGVmIGVudW0gewogICAgICAgICAgICBjb252ZXJzaW9u
T0ssCiAgICAgICAgICAgIHNvdXJjZUV4aGF1c3RlZCwKICAgICAgICAgICAgdGFyZ2V0RXhoYXVz
dGVkLAogICAgICAgICAgICBzb3VyY2VJbGxlZ2FsCiAgICB9IENvbnZlcnNpb25SZXN1bHQ7CiMg
NjUgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL3V0ZjguaCIKICAgIENvbnZl
cnNpb25SZXN1bHQgY29udmVydFVURjhUb1VURjE2KAogICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqKiBzb3VyY2VTdGFydCwgY29uc3QgY2hhciogc291cmNlRW5kLAogICAgICAgICAgICAg
ICAgICAgIFVDaGFyKiogdGFyZ2V0U3RhcnQsIFVDaGFyKiB0YXJnZXRFbmQsIGJvb2wgc3RyaWN0
ID0gdHJ1ZSk7CgogICAgQ29udmVyc2lvblJlc3VsdCBjb252ZXJ0TGF0aW4xVG9VVEY4KAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IExDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IExDaGFyKiBz
b3VyY2VFbmQsCiAgICAgICAgICAgICAgICAgICAgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0
YXJnZXRFbmQpOwoKICAgIENvbnZlcnNpb25SZXN1bHQgY29udmVydFVURjE2VG9VVEY4KAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiogc291cmNlU3RhcnQsIGNvbnN0IFVDaGFyKiBz
b3VyY2VFbmQsCiAgICAgICAgICAgICAgICAgICAgY2hhcioqIHRhcmdldFN0YXJ0LCBjaGFyKiB0
YXJnZXRFbmQsIGJvb2wgc3RyaWN0ID0gdHJ1ZSk7CgogICAgdW5zaWduZWQgY2FsY3VsYXRlU3Ry
aW5nSGFzaEFuZExlbmd0aEZyb21VVEY4KGNvbnN0IGNoYXIqIGRhdGEsIGNvbnN0IGNoYXIqIGRh
dGFFbmQsIHVuc2lnbmVkJiBkYXRhTGVuZ3RoLCB1bnNpZ25lZCYgdXRmMTZMZW5ndGgpOwoKICAg
IGJvb2wgZXF1YWxVVEYxNldpdGhVVEY4KGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYUVu
ZCwgY29uc3QgY2hhciogYiwgY29uc3QgY2hhciogYkVuZCk7Cgp9Cn0KIyAyMzEgIi9vcHQvbG9j
YWwvaW5jbHVkZS91bmljb2RlL3V0Zi5oIiAyCiMgMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdXRmMTYuaCIgMQojIDIzMiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXRmLmgiIDIK
CgojIDEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V0Zl9vbGQuaCIgMQojIDIzNSAiL29w
dC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXRmLmgiIDIKIyAzOCAiL29wdC9sb2NhbC9pbmNsdWRl
L3VuaWNvZGUvdXR5cGVzLmgiIDIKIyAxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91dmVy
c2lvbi5oIiAxCiMgNTcgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V2ZXJzaW9uLmgiCnR5
cGVkZWYgdWludDhfdCBVVmVyc2lvbkluZm9bNF07CiMgMTA5ICIvb3B0L2xvY2FsL2luY2x1ZGUv
dW5pY29kZS91dmVyc2lvbi5oIgogICAgICAgIG5hbWVzcGFjZSBpY3VfNDggeyB9CiAgICAgICAg
bmFtZXNwYWNlIGljdSA9IGljdV80ODsKIyAxMjIgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2Rl
L3V2ZXJzaW9uLmgiCiAgICAgICAgdXNpbmcgbmFtZXNwYWNlIGljdV80ODsKIyAxNTIgIi9vcHQv
bG9jYWwvaW5jbHVkZS91bmljb2RlL3V2ZXJzaW9uLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1X3ZlcnNpb25Gcm9tU3RyaW5nXzQ4KFVW
ZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXksIGNvbnN0IGNoYXIgKnZlcnNpb25TdHJpbmcpOwojIDE2
NiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXZlcnNpb24uaCIKZXh0ZXJuICJDIiBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSB2b2lkCnVfdmVyc2lvbkZyb21VU3Ry
aW5nXzQ4KFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXksIGNvbnN0IFVDaGFyICp2ZXJzaW9uU3Ry
aW5nKTsKIyAxODIgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V2ZXJzaW9uLmgiCmV4dGVy
biAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1X3ZlcnNp
b25Ub1N0cmluZ180OChVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LCBjaGFyICp2ZXJzaW9uU3Ry
aW5nKTsKIyAxOTMgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V2ZXJzaW9uLmgiCmV4dGVy
biAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1X2dldFZl
cnNpb25fNDgoVVZlcnNpb25JbmZvIHZlcnNpb25BcnJheSk7CiMgMzkgIi9vcHQvbG9jYWwvaW5j
bHVkZS91bmljb2RlL3V0eXBlcy5oIiAyCiMgMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUv
dWNvbmZpZy5oIiAxCiMgNDAgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V0eXBlcy5oIiAy
CiMgMzE0ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91dHlwZXMuaCIKdHlwZWRlZiBkb3Vi
bGUgVURhdGU7CiMgMzg1ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91dHlwZXMuaCIKdHlw
ZWRlZiB2b2lkKiBVQ2xhc3NJRDsKIyA2MzkgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3V0
eXBlcy5oIgp0eXBlZGVmIGVudW0gVUVycm9yQ29kZSB7CgoKCgoKICAgIFVfVVNJTkdfRkFMTEJB
Q0tfV0FSTklORyA9IC0xMjgsCgogICAgVV9FUlJPUl9XQVJOSU5HX1NUQVJUID0gLTEyOCwKCiAg
ICBVX1VTSU5HX0RFRkFVTFRfV0FSTklORyA9IC0xMjcsCgogICAgVV9TQUZFQ0xPTkVfQUxMT0NB
VEVEX1dBUk5JTkcgPSAtMTI2LAoKICAgIFVfU1RBVEVfT0xEX1dBUk5JTkcgPSAtMTI1LAoKICAg
IFVfU1RSSU5HX05PVF9URVJNSU5BVEVEX1dBUk5JTkcgPSAtMTI0LAoKICAgIFVfU09SVF9LRVlf
VE9PX1NIT1JUX1dBUk5JTkcgPSAtMTIzLAoKICAgIFVfQU1CSUdVT1VTX0FMSUFTX1dBUk5JTkcg
PSAtMTIyLAoKICAgIFVfRElGRkVSRU5UX1VDQV9WRVJTSU9OID0gLTEyMSwKCiAgICBVX1BMVUdJ
Tl9DSEFOR0VEX0xFVkVMX1dBUk5JTkcgPSAtMTIwLAoKICAgIFVfRVJST1JfV0FSTklOR19MSU1J
VCwKCgogICAgVV9aRVJPX0VSUk9SID0gMCwKCiAgICBVX0lMTEVHQUxfQVJHVU1FTlRfRVJST1Ig
PSAxLAogICAgVV9NSVNTSU5HX1JFU09VUkNFX0VSUk9SID0gMiwKICAgIFVfSU5WQUxJRF9GT1JN
QVRfRVJST1IgPSAzLAogICAgVV9GSUxFX0FDQ0VTU19FUlJPUiA9IDQsCiAgICBVX0lOVEVSTkFM
X1BST0dSQU1fRVJST1IgPSA1LAogICAgVV9NRVNTQUdFX1BBUlNFX0VSUk9SID0gNiwKICAgIFVf
TUVNT1JZX0FMTE9DQVRJT05fRVJST1IgPSA3LAogICAgVV9JTkRFWF9PVVRPRkJPVU5EU19FUlJP
UiA9IDgsCiAgICBVX1BBUlNFX0VSUk9SID0gOSwKICAgIFVfSU5WQUxJRF9DSEFSX0ZPVU5EID0g
MTAsCiAgICBVX1RSVU5DQVRFRF9DSEFSX0ZPVU5EID0gMTEsCiAgICBVX0lMTEVHQUxfQ0hBUl9G
T1VORCA9IDEyLAogICAgVV9JTlZBTElEX1RBQkxFX0ZPUk1BVCA9IDEzLAogICAgVV9JTlZBTElE
X1RBQkxFX0ZJTEUgPSAxNCwKICAgIFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SID0gMTUsCiAgICBV
X1VOU1VQUE9SVEVEX0VSUk9SID0gMTYsCiAgICBVX1JFU09VUkNFX1RZUEVfTUlTTUFUQ0ggPSAx
NywKICAgIFVfSUxMRUdBTF9FU0NBUEVfU0VRVUVOQ0UgPSAxOCwKICAgIFVfVU5TVVBQT1JURURf
RVNDQVBFX1NFUVVFTkNFID0gMTksCiAgICBVX05PX1NQQUNFX0FWQUlMQUJMRSA9IDIwLAogICAg
VV9DRV9OT1RfRk9VTkRfRVJST1IgPSAyMSwKICAgIFVfUFJJTUFSWV9UT09fTE9OR19FUlJPUiA9
IDIyLAogICAgVV9TVEFURV9UT09fT0xEX0VSUk9SID0gMjMsCiAgICBVX1RPT19NQU5ZX0FMSUFT
RVNfRVJST1IgPSAyNCwKCiAgICBVX0VOVU1fT1VUX09GX1NZTkNfRVJST1IgPSAyNSwKICAgIFVf
SU5WQVJJQU5UX0NPTlZFUlNJT05fRVJST1IgPSAyNiwKICAgIFVfSU5WQUxJRF9TVEFURV9FUlJP
UiA9IDI3LAogICAgVV9DT0xMQVRPUl9WRVJTSU9OX01JU01BVENIID0gMjgsCiAgICBVX1VTRUxF
U1NfQ09MTEFUT1JfRVJST1IgPSAyOSwKICAgIFVfTk9fV1JJVEVfUEVSTUlTU0lPTiA9IDMwLAoK
ICAgIFVfU1RBTkRBUkRfRVJST1JfTElNSVQsCgoKCiAgICBVX0JBRF9WQVJJQUJMRV9ERUZJTklU
SU9OPTB4MTAwMDAsCiAgICBVX1BBUlNFX0VSUk9SX1NUQVJUID0gMHgxMDAwMCwKICAgIFVfTUFM
Rk9STUVEX1JVTEUsCiAgICBVX01BTEZPUk1FRF9TRVQsCiAgICBVX01BTEZPUk1FRF9TWU1CT0xf
UkVGRVJFTkNFLAogICAgVV9NQUxGT1JNRURfVU5JQ09ERV9FU0NBUEUsCiAgICBVX01BTEZPUk1F
RF9WQVJJQUJMRV9ERUZJTklUSU9OLAogICAgVV9NQUxGT1JNRURfVkFSSUFCTEVfUkVGRVJFTkNF
LAogICAgVV9NSVNNQVRDSEVEX1NFR01FTlRfREVMSU1JVEVSUywKICAgIFVfTUlTUExBQ0VEX0FO
Q0hPUl9TVEFSVCwKICAgIFVfTUlTUExBQ0VEX0NVUlNPUl9PRkZTRVQsCiAgICBVX01JU1BMQUNF
RF9RVUFOVElGSUVSLAogICAgVV9NSVNTSU5HX09QRVJBVE9SLAogICAgVV9NSVNTSU5HX1NFR01F
TlRfQ0xPU0UsCiAgICBVX01VTFRJUExFX0FOVEVfQ09OVEVYVFMsCiAgICBVX01VTFRJUExFX0NV
UlNPUlMsCiAgICBVX01VTFRJUExFX1BPU1RfQ09OVEVYVFMsCiAgICBVX1RSQUlMSU5HX0JBQ0tT
TEFTSCwKICAgIFVfVU5ERUZJTkVEX1NFR01FTlRfUkVGRVJFTkNFLAogICAgVV9VTkRFRklORURf
VkFSSUFCTEUsCiAgICBVX1VOUVVPVEVEX1NQRUNJQUwsCiAgICBVX1VOVEVSTUlOQVRFRF9RVU9U
RSwKICAgIFVfUlVMRV9NQVNLX0VSUk9SLAogICAgVV9NSVNQTEFDRURfQ09NUE9VTkRfRklMVEVS
LAogICAgVV9NVUxUSVBMRV9DT01QT1VORF9GSUxURVJTLAogICAgVV9JTlZBTElEX1JCVF9TWU5U
QVgsCiAgICBVX0lOVkFMSURfUFJPUEVSVFlfUEFUVEVSTiwKICAgIFVfTUFMRk9STUVEX1BSQUdN
QSwKICAgIFVfVU5DTE9TRURfU0VHTUVOVCwKICAgIFVfSUxMRUdBTF9DSEFSX0lOX1NFR01FTlQs
CiAgICBVX1ZBUklBQkxFX1JBTkdFX0VYSEFVU1RFRCwKICAgIFVfVkFSSUFCTEVfUkFOR0VfT1ZF
UkxBUCwKICAgIFVfSUxMRUdBTF9DSEFSQUNURVIsCiAgICBVX0lOVEVSTkFMX1RSQU5TTElURVJB
VE9SX0VSUk9SLAogICAgVV9JTlZBTElEX0lELAogICAgVV9JTlZBTElEX0ZVTkNUSU9OLAogICAg
VV9QQVJTRV9FUlJPUl9MSU1JVCwKCgoKCiAgICBVX1VORVhQRUNURURfVE9LRU49MHgxMDEwMCwK
ICAgIFVfRk1UX1BBUlNFX0VSUk9SX1NUQVJUPTB4MTAxMDAsCiAgICBVX01VTFRJUExFX0RFQ0lN
QUxfU0VQQVJBVE9SUywKICAgIFVfTVVMVElQTEVfREVDSU1BTF9TRVBFUkFUT1JTID0gVV9NVUxU
SVBMRV9ERUNJTUFMX1NFUEFSQVRPUlMsCiAgICBVX01VTFRJUExFX0VYUE9ORU5USUFMX1NZTUJP
TFMsCiAgICBVX01BTEZPUk1FRF9FWFBPTkVOVElBTF9QQVRURVJOLAogICAgVV9NVUxUSVBMRV9Q
RVJDRU5UX1NZTUJPTFMsCiAgICBVX01VTFRJUExFX1BFUk1JTExfU1lNQk9MUywKICAgIFVfTVVM
VElQTEVfUEFEX1NQRUNJRklFUlMsCiAgICBVX1BBVFRFUk5fU1lOVEFYX0VSUk9SLAogICAgVV9J
TExFR0FMX1BBRF9QT1NJVElPTiwKICAgIFVfVU5NQVRDSEVEX0JSQUNFUywKICAgIFVfVU5TVVBQ
T1JURURfUFJPUEVSVFksCiAgICBVX1VOU1VQUE9SVEVEX0FUVFJJQlVURSwKICAgIFVfQVJHVU1F
TlRfVFlQRV9NSVNNQVRDSCwKICAgIFVfRFVQTElDQVRFX0tFWVdPUkQsCiAgICBVX1VOREVGSU5F
RF9LRVlXT1JELAogICAgVV9ERUZBVUxUX0tFWVdPUkRfTUlTU0lORywKICAgIFVfREVDSU1BTF9O
VU1CRVJfU1lOVEFYX0VSUk9SLAogICAgVV9GT1JNQVRfSU5FWEFDVF9FUlJPUiwKICAgIFVfRk1U
X1BBUlNFX0VSUk9SX0xJTUlULAoKCgoKICAgIFVfQlJLX0lOVEVSTkFMX0VSUk9SPTB4MTAyMDAs
CiAgICBVX0JSS19FUlJPUl9TVEFSVD0weDEwMjAwLAogICAgVV9CUktfSEVYX0RJR0lUU19FWFBF
Q1RFRCwKICAgIFVfQlJLX1NFTUlDT0xPTl9FWFBFQ1RFRCwKICAgIFVfQlJLX1JVTEVfU1lOVEFY
LAogICAgVV9CUktfVU5DTE9TRURfU0VULAogICAgVV9CUktfQVNTSUdOX0VSUk9SLAogICAgVV9C
UktfVkFSSUFCTEVfUkVERklOSVRJT04sCiAgICBVX0JSS19NSVNNQVRDSEVEX1BBUkVOLAogICAg
VV9CUktfTkVXX0xJTkVfSU5fUVVPVEVEX1NUUklORywKICAgIFVfQlJLX1VOREVGSU5FRF9WQVJJ
QUJMRSwKICAgIFVfQlJLX0lOSVRfRVJST1IsCiAgICBVX0JSS19SVUxFX0VNUFRZX1NFVCwKICAg
IFVfQlJLX1VOUkVDT0dOSVpFRF9PUFRJT04sCiAgICBVX0JSS19NQUxGT1JNRURfUlVMRV9UQUcs
CiAgICBVX0JSS19FUlJPUl9MSU1JVCwKCgoKCiAgICBVX1JFR0VYX0lOVEVSTkFMX0VSUk9SPTB4
MTAzMDAsCiAgICBVX1JFR0VYX0VSUk9SX1NUQVJUPTB4MTAzMDAsCiAgICBVX1JFR0VYX1JVTEVf
U1lOVEFYLAogICAgVV9SRUdFWF9JTlZBTElEX1NUQVRFLAogICAgVV9SRUdFWF9CQURfRVNDQVBF
X1NFUVVFTkNFLAogICAgVV9SRUdFWF9QUk9QRVJUWV9TWU5UQVgsCiAgICBVX1JFR0VYX1VOSU1Q
TEVNRU5URUQsCiAgICBVX1JFR0VYX01JU01BVENIRURfUEFSRU4sCiAgICBVX1JFR0VYX05VTUJF
Ul9UT09fQklHLAogICAgVV9SRUdFWF9CQURfSU5URVJWQUwsCiAgICBVX1JFR0VYX01BWF9MVF9N
SU4sCiAgICBVX1JFR0VYX0lOVkFMSURfQkFDS19SRUYsCiAgICBVX1JFR0VYX0lOVkFMSURfRkxB
RywKICAgIFVfUkVHRVhfTE9PS19CRUhJTkRfTElNSVQsCiAgICBVX1JFR0VYX1NFVF9DT05UQUlO
U19TVFJJTkcsCiAgICBVX1JFR0VYX09DVEFMX1RPT19CSUcsCiAgICBVX1JFR0VYX01JU1NJTkdf
Q0xPU0VfQlJBQ0tFVCwKICAgIFVfUkVHRVhfSU5WQUxJRF9SQU5HRSwKICAgIFVfUkVHRVhfU1RB
Q0tfT1ZFUkZMT1csCiAgICBVX1JFR0VYX1RJTUVfT1VULAogICAgVV9SRUdFWF9TVE9QUEVEX0JZ
X0NBTExFUiwKICAgIFVfUkVHRVhfRVJST1JfTElNSVQsCgoKCgogICAgVV9JRE5BX1BST0hJQklU
RURfRVJST1I9MHgxMDQwMCwKICAgIFVfSUROQV9FUlJPUl9TVEFSVD0weDEwNDAwLAogICAgVV9J
RE5BX1VOQVNTSUdORURfRVJST1IsCiAgICBVX0lETkFfQ0hFQ0tfQklESV9FUlJPUiwKICAgIFVf
SUROQV9TVEQzX0FTQ0lJX1JVTEVTX0VSUk9SLAogICAgVV9JRE5BX0FDRV9QUkVGSVhfRVJST1Is
CiAgICBVX0lETkFfVkVSSUZJQ0FUSU9OX0VSUk9SLAogICAgVV9JRE5BX0xBQkVMX1RPT19MT05H
X0VSUk9SLAogICAgVV9JRE5BX1pFUk9fTEVOR1RIX0xBQkVMX0VSUk9SLAogICAgVV9JRE5BX0RP
TUFJTl9OQU1FX1RPT19MT05HX0VSUk9SLAogICAgVV9JRE5BX0VSUk9SX0xJTUlULAoKCgogICAg
VV9TVFJJTkdQUkVQX1BST0hJQklURURfRVJST1IgPSBVX0lETkFfUFJPSElCSVRFRF9FUlJPUiwK
ICAgIFVfU1RSSU5HUFJFUF9VTkFTU0lHTkVEX0VSUk9SID0gVV9JRE5BX1VOQVNTSUdORURfRVJS
T1IsCiAgICBVX1NUUklOR1BSRVBfQ0hFQ0tfQklESV9FUlJPUiA9IFVfSUROQV9DSEVDS19CSURJ
X0VSUk9SLAoKCgoKICAgIFVfUExVR0lOX0VSUk9SX1NUQVJUPTB4MTA1MDAsCiAgICBVX1BMVUdJ
Tl9UT09fSElHSD0weDEwNTAwLAogICAgVV9QTFVHSU5fRElETlRfU0VUX0xFVkVMLAogICAgVV9Q
TFVHSU5fRVJST1JfTElNSVQsCgogICAgVV9FUlJPUl9MSU1JVD1VX1BMVUdJTl9FUlJPUl9MSU1J
VAp9IFVFcnJvckNvZGU7CiMgODU1ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91dHlwZXMu
aCIKICAgIHN0YXRpYwogICAgaW5saW5lIFVCb29sIFVfU1VDQ0VTUyhVRXJyb3JDb2RlIGNvZGUp
IHsgcmV0dXJuIChVQm9vbCkoY29kZTw9VV9aRVJPX0VSUk9SKTsgfQoKCgoKICAgIHN0YXRpYwog
ICAgaW5saW5lIFVCb29sIFVfRkFJTFVSRShVRXJyb3JDb2RlIGNvZGUpIHsgcmV0dXJuIChVQm9v
bCkoY29kZT5VX1pFUk9fRVJST1IpOyB9CiMgODgyICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS91dHlwZXMuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKSBjb25zdCBjaGFyICoKdV9lcnJvck5hbWVfNDgoVUVycm9yQ29kZSBjb2RlKTsKIyAyNyAi
L29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIgMgoKZXh0ZXJuICJDIiB7CiMgMTc0
ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgp0eXBlZGVmIGVudW0gVVByb3Bl
cnR5IHsKIyAxODYgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCiAgICBVQ0hB
Ul9BTFBIQUJFVElDPTAsCgogICAgVUNIQVJfQklOQVJZX1NUQVJUPVVDSEFSX0FMUEhBQkVUSUMs
CgogICAgVUNIQVJfQVNDSUlfSEVYX0RJR0lUPTEsCgoKCiAgICBVQ0hBUl9CSURJX0NPTlRST0w9
MiwKCgoKCiAgICBVQ0hBUl9CSURJX01JUlJPUkVEPTMsCgogICAgVUNIQVJfREFTSD00LAoKCgog
ICAgVUNIQVJfREVGQVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVD01LAoKCiAgICBVQ0hBUl9ERVBS
RUNBVEVEPTYsCgoKICAgIFVDSEFSX0RJQUNSSVRJQz03LAoKCgogICAgVUNIQVJfRVhURU5ERVI9
OCwKCgoKICAgIFVDSEFSX0ZVTExfQ09NUE9TSVRJT05fRVhDTFVTSU9OPTksCgoKCiAgICBVQ0hB
Ul9HUkFQSEVNRV9CQVNFPTEwLAoKCgogICAgVUNIQVJfR1JBUEhFTUVfRVhURU5EPTExLAoKCiAg
ICBVQ0hBUl9HUkFQSEVNRV9MSU5LPTEyLAoKCiAgICBVQ0hBUl9IRVhfRElHSVQ9MTMsCgoKICAg
IFVDSEFSX0hZUEhFTj0xNCwKCgoKCiAgICBVQ0hBUl9JRF9DT05USU5VRT0xNSwKCgoKICAgIFVD
SEFSX0lEX1NUQVJUPTE2LAoKCiAgICBVQ0hBUl9JREVPR1JBUEhJQz0xNywKCgoKICAgIFVDSEFS
X0lEU19CSU5BUllfT1BFUkFUT1I9MTgsCgoKCiAgICBVQ0hBUl9JRFNfVFJJTkFSWV9PUEVSQVRP
Uj0xOSwKCgogICAgVUNIQVJfSk9JTl9DT05UUk9MPTIwLAoKCgogICAgVUNIQVJfTE9HSUNBTF9P
UkRFUl9FWENFUFRJT049MjEsCgoKICAgIFVDSEFSX0xPV0VSQ0FTRT0yMiwKCiAgICBVQ0hBUl9N
QVRIPTIzLAoKCgogICAgVUNIQVJfTk9OQ0hBUkFDVEVSX0NPREVfUE9JTlQ9MjQsCgogICAgVUNI
QVJfUVVPVEFUSU9OX01BUks9MjUsCgoKCiAgICBVQ0hBUl9SQURJQ0FMPTI2LAoKCgoKICAgIFVD
SEFSX1NPRlRfRE9UVEVEPTI3LAoKCgogICAgVUNIQVJfVEVSTUlOQUxfUFVOQ1RVQVRJT049Mjgs
CgoKCiAgICBVQ0hBUl9VTklGSUVEX0lERU9HUkFQSD0yOSwKCgogICAgVUNIQVJfVVBQRVJDQVNF
PTMwLAoKCgogICAgVUNIQVJfV0hJVEVfU1BBQ0U9MzEsCgoKCiAgICBVQ0hBUl9YSURfQ09OVElO
VUU9MzIsCgoKICAgIFVDSEFSX1hJRF9TVEFSVD0zMywKCgoKICAgVUNIQVJfQ0FTRV9TRU5TSVRJ
VkU9MzQsCgoKCgogICAgVUNIQVJfU19URVJNPTM1LAoKCgoKCiAgICBVQ0hBUl9WQVJJQVRJT05f
U0VMRUNUT1I9MzYsCgoKCgoKCiAgICBVQ0hBUl9ORkRfSU5FUlQ9MzcsCgoKCgoKCiAgICBVQ0hB
Ul9ORktEX0lORVJUPTM4LAoKCgoKCgogICAgVUNIQVJfTkZDX0lORVJUPTM5LAoKCgoKCgogICAg
VUNIQVJfTkZLQ19JTkVSVD00MCwKIyAzNTkgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3Vj
aGFyLmgiCiAgICBVQ0hBUl9TRUdNRU5UX1NUQVJURVI9NDEsCgoKCgogICAgVUNIQVJfUEFUVEVS
Tl9TWU5UQVg9NDIsCgoKCgogICAgVUNIQVJfUEFUVEVSTl9XSElURV9TUEFDRT00MywKCgoKCiAg
ICBVQ0hBUl9QT1NJWF9BTE5VTT00NCwKCgoKCiAgICBVQ0hBUl9QT1NJWF9CTEFOSz00NSwKCgoK
CiAgICBVQ0hBUl9QT1NJWF9HUkFQSD00NiwKCgoKCiAgICBVQ0hBUl9QT1NJWF9QUklOVD00NywK
CgoKCiAgICBVQ0hBUl9QT1NJWF9YRElHSVQ9NDgsCgogICAgVUNIQVJfQ0FTRUQ9NDksCgogICAg
VUNIQVJfQ0FTRV9JR05PUkFCTEU9NTAsCgogICAgVUNIQVJfQ0hBTkdFU19XSEVOX0xPV0VSQ0FT
RUQ9NTEsCgogICAgVUNIQVJfQ0hBTkdFU19XSEVOX1VQUEVSQ0FTRUQ9NTIsCgogICAgVUNIQVJf
Q0hBTkdFU19XSEVOX1RJVExFQ0FTRUQ9NTMsCgogICAgVUNIQVJfQ0hBTkdFU19XSEVOX0NBU0VG
T0xERUQ9NTQsCgogICAgVUNIQVJfQ0hBTkdFU19XSEVOX0NBU0VNQVBQRUQ9NTUsCgogICAgVUNI
QVJfQ0hBTkdFU19XSEVOX05GS0NfQ0FTRUZPTERFRD01NiwKCiAgICBVQ0hBUl9CSU5BUllfTElN
SVQ9NTcsCgoKCiAgICBVQ0hBUl9CSURJX0NMQVNTPTB4MTAwMCwKCiAgICBVQ0hBUl9JTlRfU1RB
UlQ9VUNIQVJfQklESV9DTEFTUywKCgogICAgVUNIQVJfQkxPQ0s9MHgxMDAxLAoKCiAgICBVQ0hB
Ul9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTPTB4MTAwMiwKCgogICAgVUNIQVJfREVDT01QT1NJ
VElPTl9UWVBFPTB4MTAwMywKCgoKICAgIFVDSEFSX0VBU1RfQVNJQU5fV0lEVEg9MHgxMDA0LAoK
CiAgICBVQ0hBUl9HRU5FUkFMX0NBVEVHT1JZPTB4MTAwNSwKCgogICAgVUNIQVJfSk9JTklOR19H
Uk9VUD0weDEwMDYsCgoKICAgIFVDSEFSX0pPSU5JTkdfVFlQRT0weDEwMDcsCgoKICAgIFVDSEFS
X0xJTkVfQlJFQUs9MHgxMDA4LAoKCiAgICBVQ0hBUl9OVU1FUklDX1RZUEU9MHgxMDA5LAoKCiAg
ICBVQ0hBUl9TQ1JJUFQ9MHgxMDBBLAoKCiAgICBVQ0hBUl9IQU5HVUxfU1lMTEFCTEVfVFlQRT0w
eDEwMEIsCgoKICAgIFVDSEFSX05GRF9RVUlDS19DSEVDSz0weDEwMEMsCgoKICAgIFVDSEFSX05G
S0RfUVVJQ0tfQ0hFQ0s9MHgxMDBELAoKCiAgICBVQ0hBUl9ORkNfUVVJQ0tfQ0hFQ0s9MHgxMDBF
LAoKCiAgICBVQ0hBUl9ORktDX1FVSUNLX0NIRUNLPTB4MTAwRiwKCgoKCgoKICAgIFVDSEFSX0xF
QURfQ0FOT05JQ0FMX0NPTUJJTklOR19DTEFTUz0weDEwMTAsCgoKCgoKCiAgICBVQ0hBUl9UUkFJ
TF9DQU5PTklDQUxfQ09NQklOSU5HX0NMQVNTPTB4MTAxMSwKCgoKCiAgICBVQ0hBUl9HUkFQSEVN
RV9DTFVTVEVSX0JSRUFLPTB4MTAxMiwKCgoKCiAgICBVQ0hBUl9TRU5URU5DRV9CUkVBSz0weDEw
MTMsCgoKCgogICAgVUNIQVJfV09SRF9CUkVBSz0weDEwMTQsCgogICAgVUNIQVJfSU5UX0xJTUlU
PTB4MTAxNSwKIyA1MDUgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCiAgICBV
Q0hBUl9HRU5FUkFMX0NBVEVHT1JZX01BU0s9MHgyMDAwLAoKICAgIFVDSEFSX01BU0tfU1RBUlQ9
VUNIQVJfR0VORVJBTF9DQVRFR09SWV9NQVNLLAoKICAgIFVDSEFSX01BU0tfTElNSVQ9MHgyMDAx
LAoKCgogICAgVUNIQVJfTlVNRVJJQ19WQUxVRT0weDMwMDAsCgogICAgVUNIQVJfRE9VQkxFX1NU
QVJUPVVDSEFSX05VTUVSSUNfVkFMVUUsCgogICAgVUNIQVJfRE9VQkxFX0xJTUlUPTB4MzAwMSwK
CgoKICAgIFVDSEFSX0FHRT0weDQwMDAsCgogICAgVUNIQVJfU1RSSU5HX1NUQVJUPVVDSEFSX0FH
RSwKCgogICAgVUNIQVJfQklESV9NSVJST1JJTkdfR0xZUEg9MHg0MDAxLAoKCiAgICBVQ0hBUl9D
QVNFX0ZPTERJTkc9MHg0MDAyLAoKCiAgICBVQ0hBUl9JU09fQ09NTUVOVD0weDQwMDMsCgoKICAg
IFVDSEFSX0xPV0VSQ0FTRV9NQVBQSU5HPTB4NDAwNCwKCgogICAgVUNIQVJfTkFNRT0weDQwMDUs
CgoKICAgIFVDSEFSX1NJTVBMRV9DQVNFX0ZPTERJTkc9MHg0MDA2LAoKCiAgICBVQ0hBUl9TSU1Q
TEVfTE9XRVJDQVNFX01BUFBJTkc9MHg0MDA3LAoKCiAgICBVQ0hBUl9TSU1QTEVfVElUTEVDQVNF
X01BUFBJTkc9MHg0MDA4LAoKCiAgICBVQ0hBUl9TSU1QTEVfVVBQRVJDQVNFX01BUFBJTkc9MHg0
MDA5LAoKCiAgICBVQ0hBUl9USVRMRUNBU0VfTUFQUElORz0weDQwMEEsCgoKICAgIFVDSEFSX1VO
SUNPREVfMV9OQU1FPTB4NDAwQiwKCgogICAgVUNIQVJfVVBQRVJDQVNFX01BUFBJTkc9MHg0MDBD
LAoKICAgIFVDSEFSX1NUUklOR19MSU1JVD0weDQwMEQsCiMgNTcwICIvb3B0L2xvY2FsL2luY2x1
ZGUvdW5pY29kZS91Y2hhci5oIgogICAgVUNIQVJfU0NSSVBUX0VYVEVOU0lPTlM9MHg3MDAwLAoK
ICAgIFVDSEFSX09USEVSX1BST1BFUlRZX1NUQVJUPVVDSEFSX1NDUklQVF9FWFRFTlNJT05TLAoK
CiAgICBVQ0hBUl9PVEhFUl9QUk9QRVJUWV9MSU1JVD0weDcwMDEsCgoKICAgIFVDSEFSX0lOVkFM
SURfQ09ERSA9IC0xCn0gVVByb3BlcnR5OwoKCgoKCgp0eXBlZGVmIGVudW0gVUNoYXJDYXRlZ29y
eQp7CgoKCiAgICBVX1VOQVNTSUdORUQgPSAwLAoKICAgIFVfR0VORVJBTF9PVEhFUl9UWVBFUyA9
IDAsCgogICAgVV9VUFBFUkNBU0VfTEVUVEVSID0gMSwKCiAgICBVX0xPV0VSQ0FTRV9MRVRURVIg
PSAyLAoKICAgIFVfVElUTEVDQVNFX0xFVFRFUiA9IDMsCgogICAgVV9NT0RJRklFUl9MRVRURVIg
PSA0LAoKICAgIFVfT1RIRVJfTEVUVEVSID0gNSwKCiAgICBVX05PTl9TUEFDSU5HX01BUksgPSA2
LAoKICAgIFVfRU5DTE9TSU5HX01BUksgPSA3LAoKICAgIFVfQ09NQklOSU5HX1NQQUNJTkdfTUFS
SyA9IDgsCgogICAgVV9ERUNJTUFMX0RJR0lUX05VTUJFUiA9IDksCgogICAgVV9MRVRURVJfTlVN
QkVSID0gMTAsCgogICAgVV9PVEhFUl9OVU1CRVIgPSAxMSwKCiAgICBVX1NQQUNFX1NFUEFSQVRP
UiA9IDEyLAoKICAgIFVfTElORV9TRVBBUkFUT1IgPSAxMywKCiAgICBVX1BBUkFHUkFQSF9TRVBB
UkFUT1IgPSAxNCwKCiAgICBVX0NPTlRST0xfQ0hBUiA9IDE1LAoKICAgIFVfRk9STUFUX0NIQVIg
PSAxNiwKCiAgICBVX1BSSVZBVEVfVVNFX0NIQVIgPSAxNywKCiAgICBVX1NVUlJPR0FURSA9IDE4
LAoKICAgIFVfREFTSF9QVU5DVFVBVElPTiA9IDE5LAoKICAgIFVfU1RBUlRfUFVOQ1RVQVRJT04g
PSAyMCwKCiAgICBVX0VORF9QVU5DVFVBVElPTiA9IDIxLAoKICAgIFVfQ09OTkVDVE9SX1BVTkNU
VUFUSU9OID0gMjIsCgogICAgVV9PVEhFUl9QVU5DVFVBVElPTiA9IDIzLAoKICAgIFVfTUFUSF9T
WU1CT0wgPSAyNCwKCiAgICBVX0NVUlJFTkNZX1NZTUJPTCA9IDI1LAoKICAgIFVfTU9ESUZJRVJf
U1lNQk9MID0gMjYsCgogICAgVV9PVEhFUl9TWU1CT0wgPSAyNywKCiAgICBVX0lOSVRJQUxfUFVO
Q1RVQVRJT04gPSAyOCwKCiAgICBVX0ZJTkFMX1BVTkNUVUFUSU9OID0gMjksCgogICAgVV9DSEFS
X0NBVEVHT1JZX0NPVU5UCn0gVUNoYXJDYXRlZ29yeTsKIyA3NzIgIi9vcHQvbG9jYWwvaW5jbHVk
ZS91bmljb2RlL3VjaGFyLmgiCnR5cGVkZWYgZW51bSBVQ2hhckRpcmVjdGlvbiB7CgoKCiAgICBV
X0xFRlRfVE9fUklHSFQgPSAwLAoKICAgIFVfUklHSFRfVE9fTEVGVCA9IDEsCgogICAgVV9FVVJP
UEVBTl9OVU1CRVIgPSAyLAoKICAgIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUiA9IDMsCgog
ICAgVV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiA9IDQsCgogICAgVV9BUkFCSUNfTlVNQkVS
ID0gNSwKCiAgICBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SID0gNiwKCiAgICBVX0JMT0NLX1NF
UEFSQVRPUiA9IDcsCgogICAgVV9TRUdNRU5UX1NFUEFSQVRPUiA9IDgsCgogICAgVV9XSElURV9T
UEFDRV9ORVVUUkFMID0gOSwKCiAgICBVX09USEVSX05FVVRSQUwgPSAxMCwKCiAgICBVX0xFRlRf
VE9fUklHSFRfRU1CRURESU5HID0gMTEsCgogICAgVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFID0g
MTIsCgogICAgVV9SSUdIVF9UT19MRUZUX0FSQUJJQyA9IDEzLAoKICAgIFVfUklHSFRfVE9fTEVG
VF9FTUJFRERJTkcgPSAxNCwKCiAgICBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUgPSAxNSwKCiAg
ICBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgPSAxNiwKCiAgICBVX0RJUl9OT05fU1BBQ0lOR19N
QVJLID0gMTcsCgogICAgVV9CT1VOREFSWV9ORVVUUkFMID0gMTgsCgogICAgVV9DSEFSX0RJUkVD
VElPTl9DT1VOVAp9IFVDaGFyRGlyZWN0aW9uOwoKCgoKCmVudW0gVUJsb2NrQ29kZSB7CgoKICAg
IFVCTE9DS19OT19CTE9DSyA9IDAsCgoKICAgIFVCTE9DS19CQVNJQ19MQVRJTiA9IDEsCgoKICAg
IFVCTE9DS19MQVRJTl8xX1NVUFBMRU1FTlQ9MiwKCgogICAgVUJMT0NLX0xBVElOX0VYVEVOREVE
X0EgPTMsCgoKICAgIFVCTE9DS19MQVRJTl9FWFRFTkRFRF9CID00LAoKCiAgICBVQkxPQ0tfSVBB
X0VYVEVOU0lPTlMgPTUsCgoKICAgIFVCTE9DS19TUEFDSU5HX01PRElGSUVSX0xFVFRFUlMgPTYs
CgoKICAgIFVCTE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1MgPTcsCgoKCgoKICAgIFVC
TE9DS19HUkVFSyA9OCwKCgogICAgVUJMT0NLX0NZUklMTElDID05LAoKCiAgICBVQkxPQ0tfQVJN
RU5JQU4gPTEwLAoKCiAgICBVQkxPQ0tfSEVCUkVXID0xMSwKCgogICAgVUJMT0NLX0FSQUJJQyA9
MTIsCgoKICAgIFVCTE9DS19TWVJJQUMgPTEzLAoKCiAgICBVQkxPQ0tfVEhBQU5BID0xNCwKCgog
ICAgVUJMT0NLX0RFVkFOQUdBUkkgPTE1LAoKCiAgICBVQkxPQ0tfQkVOR0FMSSA9MTYsCgoKICAg
IFVCTE9DS19HVVJNVUtISSA9MTcsCgoKICAgIFVCTE9DS19HVUpBUkFUSSA9MTgsCgoKICAgIFVC
TE9DS19PUklZQSA9MTksCgoKICAgIFVCTE9DS19UQU1JTCA9MjAsCgoKICAgIFVCTE9DS19URUxV
R1UgPTIxLAoKCiAgICBVQkxPQ0tfS0FOTkFEQSA9MjIsCgoKICAgIFVCTE9DS19NQUxBWUFMQU0g
PTIzLAoKCiAgICBVQkxPQ0tfU0lOSEFMQSA9MjQsCgoKICAgIFVCTE9DS19USEFJID0yNSwKCgog
ICAgVUJMT0NLX0xBTyA9MjYsCgoKICAgIFVCTE9DS19USUJFVEFOID0yNywKCgogICAgVUJMT0NL
X01ZQU5NQVIgPTI4LAoKCiAgICBVQkxPQ0tfR0VPUkdJQU4gPTI5LAoKCiAgICBVQkxPQ0tfSEFO
R1VMX0pBTU8gPTMwLAoKCiAgICBVQkxPQ0tfRVRISU9QSUMgPTMxLAoKCiAgICBVQkxPQ0tfQ0hF
Uk9LRUUgPTMyLAoKCiAgICBVQkxPQ0tfVU5JRklFRF9DQU5BRElBTl9BQk9SSUdJTkFMX1NZTExB
QklDUyA9MzMsCgoKICAgIFVCTE9DS19PR0hBTSA9MzQsCgoKICAgIFVCTE9DS19SVU5JQyA9MzUs
CgoKICAgIFVCTE9DS19LSE1FUiA9MzYsCgoKICAgIFVCTE9DS19NT05HT0xJQU4gPTM3LAoKCiAg
ICBVQkxPQ0tfTEFUSU5fRVhURU5ERURfQURESVRJT05BTCA9MzgsCgoKICAgIFVCTE9DS19HUkVF
S19FWFRFTkRFRCA9MzksCgoKICAgIFVCTE9DS19HRU5FUkFMX1BVTkNUVUFUSU9OID00MCwKCgog
ICAgVUJMT0NLX1NVUEVSU0NSSVBUU19BTkRfU1VCU0NSSVBUUyA9NDEsCgoKICAgIFVCTE9DS19D
VVJSRU5DWV9TWU1CT0xTID00MiwKCgoKCgogICAgVUJMT0NLX0NPTUJJTklOR19NQVJLU19GT1Jf
U1lNQk9MUyA9NDMsCgoKICAgIFVCTE9DS19MRVRURVJMSUtFX1NZTUJPTFMgPTQ0LAoKCiAgICBV
QkxPQ0tfTlVNQkVSX0ZPUk1TID00NSwKCgogICAgVUJMT0NLX0FSUk9XUyA9NDYsCgoKICAgIFVC
TE9DS19NQVRIRU1BVElDQUxfT1BFUkFUT1JTID00NywKCgogICAgVUJMT0NLX01JU0NFTExBTkVP
VVNfVEVDSE5JQ0FMID00OCwKCgogICAgVUJMT0NLX0NPTlRST0xfUElDVFVSRVMgPTQ5LAoKCiAg
ICBVQkxPQ0tfT1BUSUNBTF9DSEFSQUNURVJfUkVDT0dOSVRJT04gPTUwLAoKCiAgICBVQkxPQ0tf
RU5DTE9TRURfQUxQSEFOVU1FUklDUyA9NTEsCgoKICAgIFVCTE9DS19CT1hfRFJBV0lORyA9NTIs
CgoKICAgIFVCTE9DS19CTE9DS19FTEVNRU5UUyA9NTMsCgoKICAgIFVCTE9DS19HRU9NRVRSSUNf
U0hBUEVTID01NCwKCgogICAgVUJMT0NLX01JU0NFTExBTkVPVVNfU1lNQk9MUyA9NTUsCgoKICAg
IFVCTE9DS19ESU5HQkFUUyA9NTYsCgoKICAgIFVCTE9DS19CUkFJTExFX1BBVFRFUk5TID01NywK
CgogICAgVUJMT0NLX0NKS19SQURJQ0FMU19TVVBQTEVNRU5UID01OCwKCgogICAgVUJMT0NLX0tB
TkdYSV9SQURJQ0FMUyA9NTksCgoKICAgIFVCTE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9D
SEFSQUNURVJTID02MCwKCgogICAgVUJMT0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTiA9
NjEsCgoKICAgIFVCTE9DS19ISVJBR0FOQSA9NjIsCgoKICAgIFVCTE9DS19LQVRBS0FOQSA9NjMs
CgoKICAgIFVCTE9DS19CT1BPTU9GTyA9NjQsCgoKICAgIFVCTE9DS19IQU5HVUxfQ09NUEFUSUJJ
TElUWV9KQU1PID02NSwKCgogICAgVUJMT0NLX0tBTkJVTiA9NjYsCgoKICAgIFVCTE9DS19CT1BP
TU9GT19FWFRFTkRFRCA9NjcsCgoKICAgIFVCTE9DS19FTkNMT1NFRF9DSktfTEVUVEVSU19BTkRf
TU9OVEhTID02OCwKCgogICAgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZID02OSwKCgogICAgVUJM
T0NLX0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0EgPTcwLAoKCiAgICBVQkxPQ0tf
Q0pLX1VOSUZJRURfSURFT0dSQVBIUyA9NzEsCgoKICAgIFVCTE9DS19ZSV9TWUxMQUJMRVMgPTcy
LAoKCiAgICBVQkxPQ0tfWUlfUkFESUNBTFMgPTczLAoKCiAgICBVQkxPQ0tfSEFOR1VMX1NZTExB
QkxFUyA9NzQsCgoKICAgIFVCTE9DS19ISUdIX1NVUlJPR0FURVMgPTc1LAoKCiAgICBVQkxPQ0tf
SElHSF9QUklWQVRFX1VTRV9TVVJST0dBVEVTID03NiwKCgogICAgVUJMT0NLX0xPV19TVVJST0dB
VEVTID03NywKIyAxMDcyICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgogICAg
VUJMT0NLX1BSSVZBVEVfVVNFID0gNzgsCiMgMTA4MiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdWNoYXIuaCIKICAgIFVCTE9DS19QUklWQVRFX1VTRV9BUkVBID1VQkxPQ0tfUFJJVkFURV9V
U0UsCgoKICAgIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JBUEhTID03OSwKCgogICAg
VUJMT0NLX0FMUEhBQkVUSUNfUFJFU0VOVEFUSU9OX0ZPUk1TID04MCwKCgogICAgVUJMT0NLX0FS
QUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQSA9ODEsCgoKICAgIFVCTE9DS19DT01CSU5JTkdfSEFM
Rl9NQVJLUyA9ODIsCgoKICAgIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9GT1JNUyA9ODMsCgoK
ICAgIFVCTE9DS19TTUFMTF9GT1JNX1ZBUklBTlRTID04NCwKCgogICAgVUJMT0NLX0FSQUJJQ19Q
UkVTRU5UQVRJT05fRk9STVNfQiA9ODUsCgoKICAgIFVCTE9DS19TUEVDSUFMUyA9ODYsCgoKICAg
IFVCTE9DS19IQUxGV0lEVEhfQU5EX0ZVTExXSURUSF9GT1JNUyA9ODcsCgoKCgogICAgVUJMT0NL
X09MRF9JVEFMSUMgPSA4OCAsCgogICAgVUJMT0NLX0dPVEhJQyA9IDg5ICwKCiAgICBVQkxPQ0tf
REVTRVJFVCA9IDkwICwKCiAgICBVQkxPQ0tfQllaQU5USU5FX01VU0lDQUxfU1lNQk9MUyA9IDkx
ICwKCiAgICBVQkxPQ0tfTVVTSUNBTF9TWU1CT0xTID0gOTIgLAoKICAgIFVCTE9DS19NQVRIRU1B
VElDQUxfQUxQSEFOVU1FUklDX1NZTUJPTFMgPSA5MyAsCgogICAgVUJMT0NLX0NKS19VTklGSUVE
X0lERU9HUkFQSFNfRVhURU5TSU9OX0IgPSA5NCAsCgogICAgVUJMT0NLX0NKS19DT01QQVRJQklM
SVRZX0lERU9HUkFQSFNfU1VQUExFTUVOVCA9IDk1ICwKCiAgICBVQkxPQ0tfVEFHUyA9IDk2LAoK
CgoKCgoKICAgIFVCTE9DS19DWVJJTExJQ19TVVBQTEVNRU5UQVJZID0gOTcsCgogICAgVUJMT0NL
X0NZUklMTElDX1NVUFBMRU1FTlQgPSBVQkxPQ0tfQ1lSSUxMSUNfU1VQUExFTUVOVEFSWSwKCiAg
ICBVQkxPQ0tfVEFHQUxPRyA9IDk4LAoKICAgIFVCTE9DS19IQU5VTk9PID0gOTksCgogICAgVUJM
T0NLX0JVSElEID0gMTAwLAoKICAgIFVCTE9DS19UQUdCQU5XQSA9IDEwMSwKCiAgICBVQkxPQ0tf
TUlTQ0VMTEFORU9VU19NQVRIRU1BVElDQUxfU1lNQk9MU19BID0gMTAyLAoKICAgIFVCTE9DS19T
VVBQTEVNRU5UQUxfQVJST1dTX0EgPSAxMDMsCgogICAgVUJMT0NLX1NVUFBMRU1FTlRBTF9BUlJP
V1NfQiA9IDEwNCwKCiAgICBVQkxPQ0tfTUlTQ0VMTEFORU9VU19NQVRIRU1BVElDQUxfU1lNQk9M
U19CID0gMTA1LAoKICAgIFVCTE9DS19TVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJBVE9S
UyA9IDEwNiwKCiAgICBVQkxPQ0tfS0FUQUtBTkFfUEhPTkVUSUNfRVhURU5TSU9OUyA9IDEwNywK
CiAgICBVQkxPQ0tfVkFSSUFUSU9OX1NFTEVDVE9SUyA9IDEwOCwKCiAgICBVQkxPQ0tfU1VQUExF
TUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0EgPSAxMDksCgogICAgVUJMT0NLX1NVUFBMRU1FTlRB
UllfUFJJVkFURV9VU0VfQVJFQV9CID0gMTEwLAoKCgoKICAgIFVCTE9DS19MSU1CVSA9IDExMSwK
CiAgICBVQkxPQ0tfVEFJX0xFID0gMTEyLAoKICAgIFVCTE9DS19LSE1FUl9TWU1CT0xTID0gMTEz
LAoKICAgIFVCTE9DS19QSE9ORVRJQ19FWFRFTlNJT05TID0gMTE0LAoKICAgIFVCTE9DS19NSVND
RUxMQU5FT1VTX1NZTUJPTFNfQU5EX0FSUk9XUyA9IDExNSwKCiAgICBVQkxPQ0tfWUlKSU5HX0hF
WEFHUkFNX1NZTUJPTFMgPSAxMTYsCgogICAgVUJMT0NLX0xJTkVBUl9CX1NZTExBQkFSWSA9IDEx
NywKCiAgICBVQkxPQ0tfTElORUFSX0JfSURFT0dSQU1TID0gMTE4LAoKICAgIFVCTE9DS19BRUdF
QU5fTlVNQkVSUyA9IDExOSwKCiAgICBVQkxPQ0tfVUdBUklUSUMgPSAxMjAsCgogICAgVUJMT0NL
X1NIQVZJQU4gPSAxMjEsCgogICAgVUJMT0NLX09TTUFOWUEgPSAxMjIsCgogICAgVUJMT0NLX0NZ
UFJJT1RfU1lMTEFCQVJZID0gMTIzLAoKICAgIFVCTE9DS19UQUlfWFVBTl9KSU5HX1NZTUJPTFMg
PSAxMjQsCgogICAgVUJMT0NLX1ZBUklBVElPTl9TRUxFQ1RPUlNfU1VQUExFTUVOVCA9IDEyNSwK
CgoKCiAgICBVQkxPQ0tfQU5DSUVOVF9HUkVFS19NVVNJQ0FMX05PVEFUSU9OID0gMTI2LAoKICAg
IFVCTE9DS19BTkNJRU5UX0dSRUVLX05VTUJFUlMgPSAxMjcsCgogICAgVUJMT0NLX0FSQUJJQ19T
VVBQTEVNRU5UID0gMTI4LAoKICAgIFVCTE9DS19CVUdJTkVTRSA9IDEyOSwKCiAgICBVQkxPQ0tf
Q0pLX1NUUk9LRVMgPSAxMzAsCgogICAgVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJL
U19TVVBQTEVNRU5UID0gMTMxLAoKICAgIFVCTE9DS19DT1BUSUMgPSAxMzIsCgogICAgVUJMT0NL
X0VUSElPUElDX0VYVEVOREVEID0gMTMzLAoKICAgIFVCTE9DS19FVEhJT1BJQ19TVVBQTEVNRU5U
ID0gMTM0LAoKICAgIFVCTE9DS19HRU9SR0lBTl9TVVBQTEVNRU5UID0gMTM1LAoKICAgIFVCTE9D
S19HTEFHT0xJVElDID0gMTM2LAoKICAgIFVCTE9DS19LSEFST1NIVEhJID0gMTM3LAoKICAgIFVC
TE9DS19NT0RJRklFUl9UT05FX0xFVFRFUlMgPSAxMzgsCgogICAgVUJMT0NLX05FV19UQUlfTFVF
ID0gMTM5LAoKICAgIFVCTE9DS19PTERfUEVSU0lBTiA9IDE0MCwKCiAgICBVQkxPQ0tfUEhPTkVU
SUNfRVhURU5TSU9OU19TVVBQTEVNRU5UID0gMTQxLAoKICAgIFVCTE9DS19TVVBQTEVNRU5UQUxf
UFVOQ1RVQVRJT04gPSAxNDIsCgogICAgVUJMT0NLX1NZTE9USV9OQUdSSSA9IDE0MywKCiAgICBV
QkxPQ0tfVElGSU5BR0ggPSAxNDQsCgogICAgVUJMT0NLX1ZFUlRJQ0FMX0ZPUk1TID0gMTQ1LAoK
CgoKICAgIFVCTE9DS19OS08gPSAxNDYsCgogICAgVUJMT0NLX0JBTElORVNFID0gMTQ3LAoKICAg
IFVCTE9DS19MQVRJTl9FWFRFTkRFRF9DID0gMTQ4LAoKICAgIFVCTE9DS19MQVRJTl9FWFRFTkRF
RF9EID0gMTQ5LAoKICAgIFVCTE9DS19QSEFHU19QQSA9IDE1MCwKCiAgICBVQkxPQ0tfUEhPRU5J
Q0lBTiA9IDE1MSwKCiAgICBVQkxPQ0tfQ1VORUlGT1JNID0gMTUyLAoKICAgIFVCTE9DS19DVU5F
SUZPUk1fTlVNQkVSU19BTkRfUFVOQ1RVQVRJT04gPSAxNTMsCgogICAgVUJMT0NLX0NPVU5USU5H
X1JPRF9OVU1FUkFMUyA9IDE1NCwKCgoKCiAgICBVQkxPQ0tfU1VOREFORVNFID0gMTU1LAoKICAg
IFVCTE9DS19MRVBDSEEgPSAxNTYsCgogICAgVUJMT0NLX09MX0NISUtJID0gMTU3LAoKICAgIFVC
TE9DS19DWVJJTExJQ19FWFRFTkRFRF9BID0gMTU4LAoKICAgIFVCTE9DS19WQUkgPSAxNTksCgog
ICAgVUJMT0NLX0NZUklMTElDX0VYVEVOREVEX0IgPSAxNjAsCgogICAgVUJMT0NLX1NBVVJBU0hU
UkEgPSAxNjEsCgogICAgVUJMT0NLX0tBWUFIX0xJID0gMTYyLAoKICAgIFVCTE9DS19SRUpBTkcg
PSAxNjMsCgogICAgVUJMT0NLX0NIQU0gPSAxNjQsCgogICAgVUJMT0NLX0FOQ0lFTlRfU1lNQk9M
UyA9IDE2NSwKCiAgICBVQkxPQ0tfUEhBSVNUT1NfRElTQyA9IDE2NiwKCiAgICBVQkxPQ0tfTFlD
SUFOID0gMTY3LAoKICAgIFVCTE9DS19DQVJJQU4gPSAxNjgsCgogICAgVUJMT0NLX0xZRElBTiA9
IDE2OSwKCiAgICBVQkxPQ0tfTUFISk9OR19USUxFUyA9IDE3MCwKCiAgICBVQkxPQ0tfRE9NSU5P
X1RJTEVTID0gMTcxLAoKCgoKICAgIFVCTE9DS19TQU1BUklUQU4gPSAxNzIsCgogICAgVUJMT0NL
X1VOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1NfRVhURU5ERUQgPSAxNzMsCgog
ICAgVUJMT0NLX1RBSV9USEFNID0gMTc0LAoKICAgIFVCTE9DS19WRURJQ19FWFRFTlNJT05TID0g
MTc1LAoKICAgIFVCTE9DS19MSVNVID0gMTc2LAoKICAgIFVCTE9DS19CQU1VTSA9IDE3NywKCiAg
ICBVQkxPQ0tfQ09NTU9OX0lORElDX05VTUJFUl9GT1JNUyA9IDE3OCwKCiAgICBVQkxPQ0tfREVW
QU5BR0FSSV9FWFRFTkRFRCA9IDE3OSwKCiAgICBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURf
QSA9IDE4MCwKCiAgICBVQkxPQ0tfSkFWQU5FU0UgPSAxODEsCgogICAgVUJMT0NLX01ZQU5NQVJf
RVhURU5ERURfQSA9IDE4MiwKCiAgICBVQkxPQ0tfVEFJX1ZJRVQgPSAxODMsCgogICAgVUJMT0NL
X01FRVRFSV9NQVlFSyA9IDE4NCwKCiAgICBVQkxPQ0tfSEFOR1VMX0pBTU9fRVhURU5ERURfQiA9
IDE4NSwKCiAgICBVQkxPQ0tfSU1QRVJJQUxfQVJBTUFJQyA9IDE4NiwKCiAgICBVQkxPQ0tfT0xE
X1NPVVRIX0FSQUJJQU4gPSAxODcsCgogICAgVUJMT0NLX0FWRVNUQU4gPSAxODgsCgogICAgVUJM
T0NLX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4gPSAxODksCgogICAgVUJMT0NLX0lOU0NSSVBUSU9O
QUxfUEFITEFWSSA9IDE5MCwKCiAgICBVQkxPQ0tfT0xEX1RVUktJQyA9IDE5MSwKCiAgICBVQkxP
Q0tfUlVNSV9OVU1FUkFMX1NZTUJPTFMgPSAxOTIsCgogICAgVUJMT0NLX0tBSVRISSA9IDE5MywK
CiAgICBVQkxPQ0tfRUdZUFRJQU5fSElFUk9HTFlQSFMgPSAxOTQsCgogICAgVUJMT0NLX0VOQ0xP
U0VEX0FMUEhBTlVNRVJJQ19TVVBQTEVNRU5UID0gMTk1LAoKICAgIFVCTE9DS19FTkNMT1NFRF9J
REVPR1JBUEhJQ19TVVBQTEVNRU5UID0gMTk2LAoKICAgIFVCTE9DS19DSktfVU5JRklFRF9JREVP
R1JBUEhTX0VYVEVOU0lPTl9DID0gMTk3LAoKCgoKICAgIFVCTE9DS19NQU5EQUlDID0gMTk4LAoK
ICAgIFVCTE9DS19CQVRBSyA9IDE5OSwKCiAgICBVQkxPQ0tfRVRISU9QSUNfRVhURU5ERURfQSA9
IDIwMCwKCiAgICBVQkxPQ0tfQlJBSE1JID0gMjAxLAoKICAgIFVCTE9DS19CQU1VTV9TVVBQTEVN
RU5UID0gMjAyLAoKICAgIFVCTE9DS19LQU5BX1NVUFBMRU1FTlQgPSAyMDMsCgogICAgVUJMT0NL
X1BMQVlJTkdfQ0FSRFMgPSAyMDQsCgogICAgVUJMT0NLX01JU0NFTExBTkVPVVNfU1lNQk9MU19B
TkRfUElDVE9HUkFQSFMgPSAyMDUsCgogICAgVUJMT0NLX0VNT1RJQ09OUyA9IDIwNiwKCiAgICBV
QkxPQ0tfVFJBTlNQT1JUX0FORF9NQVBfU1lNQk9MUyA9IDIwNywKCiAgICBVQkxPQ0tfQUxDSEVN
SUNBTF9TWU1CT0xTID0gMjA4LAoKICAgIFVCTE9DS19DSktfVU5JRklFRF9JREVPR1JBUEhTX0VY
VEVOU0lPTl9EID0gMjA5LAoKCiAgICBVQkxPQ0tfQ09VTlQgPSAyMTAsCgoKICAgIFVCTE9DS19J
TlZBTElEX0NPREU9LTEKfTsKCgp0eXBlZGVmIGVudW0gVUJsb2NrQ29kZSBVQmxvY2tDb2RlOwoj
IDE0MDEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCnR5cGVkZWYgZW51bSBV
RWFzdEFzaWFuV2lkdGggewogICAgVV9FQV9ORVVUUkFMLAogICAgVV9FQV9BTUJJR1VPVVMsCiAg
ICBVX0VBX0hBTEZXSURUSCwKICAgIFVfRUFfRlVMTFdJRFRILAogICAgVV9FQV9OQVJST1csCiAg
ICBVX0VBX1dJREUsCiAgICBVX0VBX0NPVU5UCn0gVUVhc3RBc2lhbldpZHRoOwojIDE0MjYgIi9v
cHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCnR5cGVkZWYgZW51bSBVQ2hhck5hbWVD
aG9pY2UgewogICAgVV9VTklDT0RFX0NIQVJfTkFNRSwKICAgIFVfVU5JQ09ERV8xMF9DSEFSX05B
TUUsCiAgICBVX0VYVEVOREVEX0NIQVJfTkFNRSwKICAgIFVfQ0hBUl9OQU1FX0FMSUFTLAogICAg
VV9DSEFSX05BTUVfQ0hPSUNFX0NPVU5UCn0gVUNoYXJOYW1lQ2hvaWNlOwojIDE0NDcgIi9vcHQv
bG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCnR5cGVkZWYgZW51bSBVUHJvcGVydHlOYW1l
Q2hvaWNlIHsKICAgIFVfU0hPUlRfUFJPUEVSVFlfTkFNRSwKICAgIFVfTE9OR19QUk9QRVJUWV9O
QU1FLAogICAgVV9QUk9QRVJUWV9OQU1FX0NIT0lDRV9DT1VOVAp9IFVQcm9wZXJ0eU5hbWVDaG9p
Y2U7CgoKCgoKCgp0eXBlZGVmIGVudW0gVURlY29tcG9zaXRpb25UeXBlIHsKICAgIFVfRFRfTk9O
RSwKICAgIFVfRFRfQ0FOT05JQ0FMLAogICAgVV9EVF9DT01QQVQsCiAgICBVX0RUX0NJUkNMRSwK
ICAgIFVfRFRfRklOQUwsCiAgICBVX0RUX0ZPTlQsCiAgICBVX0RUX0ZSQUNUSU9OLAogICAgVV9E
VF9JTklUSUFMLAogICAgVV9EVF9JU09MQVRFRCwKICAgIFVfRFRfTUVESUFMLAogICAgVV9EVF9O
QVJST1csCiAgICBVX0RUX05PQlJFQUssCiAgICBVX0RUX1NNQUxMLAogICAgVV9EVF9TUVVBUkUs
CiAgICBVX0RUX1NVQiwKICAgIFVfRFRfU1VQRVIsCiAgICBVX0RUX1ZFUlRJQ0FMLAogICAgVV9E
VF9XSURFLAogICAgVV9EVF9DT1VOVAp9IFVEZWNvbXBvc2l0aW9uVHlwZTsKCgoKCgoKCnR5cGVk
ZWYgZW51bSBVSm9pbmluZ1R5cGUgewogICAgVV9KVF9OT05fSk9JTklORywKICAgIFVfSlRfSk9J
Tl9DQVVTSU5HLAogICAgVV9KVF9EVUFMX0pPSU5JTkcsCiAgICBVX0pUX0xFRlRfSk9JTklORywK
ICAgIFVfSlRfUklHSFRfSk9JTklORywKICAgIFVfSlRfVFJBTlNQQVJFTlQsCiAgICBVX0pUX0NP
VU5UCn0gVUpvaW5pbmdUeXBlOwoKCgoKCgoKdHlwZWRlZiBlbnVtIFVKb2luaW5nR3JvdXAgewog
ICAgVV9KR19OT19KT0lOSU5HX0dST1VQLAogICAgVV9KR19BSU4sCiAgICBVX0pHX0FMQVBILAog
ICAgVV9KR19BTEVGLAogICAgVV9KR19CRUgsCiAgICBVX0pHX0JFVEgsCiAgICBVX0pHX0RBTCwK
ICAgIFVfSkdfREFMQVRIX1JJU0gsCiAgICBVX0pHX0UsCiAgICBVX0pHX0ZFSCwKICAgIFVfSkdf
RklOQUxfU0VNS0FUSCwKICAgIFVfSkdfR0FGLAogICAgVV9KR19HQU1BTCwKICAgIFVfSkdfSEFI
LAogICAgVV9KR19URUhfTUFSQlVUQV9HT0FMLAogICAgVV9KR19IQU1aQV9PTl9IRUhfR09BTD1V
X0pHX1RFSF9NQVJCVVRBX0dPQUwsCiAgICBVX0pHX0hFLAogICAgVV9KR19IRUgsCiAgICBVX0pH
X0hFSF9HT0FMLAogICAgVV9KR19IRVRILAogICAgVV9KR19LQUYsCiAgICBVX0pHX0tBUEgsCiAg
ICBVX0pHX0tOT1RURURfSEVILAogICAgVV9KR19MQU0sCiAgICBVX0pHX0xBTUFESCwKICAgIFVf
SkdfTUVFTSwKICAgIFVfSkdfTUlNLAogICAgVV9KR19OT09OLAogICAgVV9KR19OVU4sCiAgICBV
X0pHX1BFLAogICAgVV9KR19RQUYsCiAgICBVX0pHX1FBUEgsCiAgICBVX0pHX1JFSCwKICAgIFVf
SkdfUkVWRVJTRURfUEUsCiAgICBVX0pHX1NBRCwKICAgIFVfSkdfU0FESEUsCiAgICBVX0pHX1NF
RU4sCiAgICBVX0pHX1NFTUtBVEgsCiAgICBVX0pHX1NISU4sCiAgICBVX0pHX1NXQVNIX0tBRiwK
ICAgIFVfSkdfU1lSSUFDX1dBVywKICAgIFVfSkdfVEFILAogICAgVV9KR19UQVcsCiAgICBVX0pH
X1RFSF9NQVJCVVRBLAogICAgVV9KR19URVRILAogICAgVV9KR19XQVcsCiAgICBVX0pHX1lFSCwK
ICAgIFVfSkdfWUVIX0JBUlJFRSwKICAgIFVfSkdfWUVIX1dJVEhfVEFJTCwKICAgIFVfSkdfWVVE
SCwKICAgIFVfSkdfWVVESF9IRSwKICAgIFVfSkdfWkFJTiwKICAgIFVfSkdfRkUsCiAgICBVX0pH
X0tIQVBILAogICAgVV9KR19aSEFJTiwKICAgIFVfSkdfQlVSVVNIQVNLSV9ZRUhfQkFSUkVFLAog
ICAgVV9KR19GQVJTSV9ZRUgsCiAgICBVX0pHX05ZQSwKICAgIFVfSkdfQ09VTlQKfSBVSm9pbmlu
Z0dyb3VwOwoKCgoKCgoKdHlwZWRlZiBlbnVtIFVHcmFwaGVtZUNsdXN0ZXJCcmVhayB7CiAgICBV
X0dDQl9PVEhFUiA9IDAsCiAgICBVX0dDQl9DT05UUk9MID0gMSwKICAgIFVfR0NCX0NSID0gMiwK
ICAgIFVfR0NCX0VYVEVORCA9IDMsCiAgICBVX0dDQl9MID0gNCwKICAgIFVfR0NCX0xGID0gNSwK
ICAgIFVfR0NCX0xWID0gNiwKICAgIFVfR0NCX0xWVCA9IDcsCiAgICBVX0dDQl9UID0gOCwKICAg
IFVfR0NCX1YgPSA5LAogICAgVV9HQ0JfU1BBQ0lOR19NQVJLID0gMTAsCiAgICBVX0dDQl9QUkVQ
RU5EID0gMTEsCiAgICBVX0dDQl9DT1VOVCA9IDEyCn0gVUdyYXBoZW1lQ2x1c3RlckJyZWFrOwoj
IDE1OTQgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCnR5cGVkZWYgZW51bSBV
V29yZEJyZWFrVmFsdWVzIHsKICAgIFVfV0JfT1RIRVIgPSAwLAogICAgVV9XQl9BTEVUVEVSID0g
MSwKICAgIFVfV0JfRk9STUFUID0gMiwKICAgIFVfV0JfS0FUQUtBTkEgPSAzLAogICAgVV9XQl9N
SURMRVRURVIgPSA0LAogICAgVV9XQl9NSUROVU0gPSA1LAogICAgVV9XQl9OVU1FUklDID0gNiwK
ICAgIFVfV0JfRVhURU5ETlVNTEVUID0gNywKICAgIFVfV0JfQ1IgPSA4LAogICAgVV9XQl9FWFRF
TkQgPSA5LAogICAgVV9XQl9MRiA9IDEwLAogICAgVV9XQl9NSUROVU1MRVQgPTExLAogICAgVV9X
Ql9ORVdMSU5FID0xMiwKICAgIFVfV0JfQ09VTlQgPSAxMwp9IFVXb3JkQnJlYWtWYWx1ZXM7CgoK
CgoKCgp0eXBlZGVmIGVudW0gVVNlbnRlbmNlQnJlYWsgewogICAgVV9TQl9PVEhFUiA9IDAsCiAg
ICBVX1NCX0FURVJNID0gMSwKICAgIFVfU0JfQ0xPU0UgPSAyLAogICAgVV9TQl9GT1JNQVQgPSAz
LAogICAgVV9TQl9MT1dFUiA9IDQsCiAgICBVX1NCX05VTUVSSUMgPSA1LAogICAgVV9TQl9PTEVU
VEVSID0gNiwKICAgIFVfU0JfU0VQID0gNywKICAgIFVfU0JfU1AgPSA4LAogICAgVV9TQl9TVEVS
TSA9IDksCiAgICBVX1NCX1VQUEVSID0gMTAsCiAgICBVX1NCX0NSID0gMTEsCiAgICBVX1NCX0VY
VEVORCA9IDEyLAogICAgVV9TQl9MRiA9IDEzLAogICAgVV9TQl9TQ09OVElOVUUgPSAxNCwKICAg
IFVfU0JfQ09VTlQgPSAxNQp9IFVTZW50ZW5jZUJyZWFrOwoKCgoKCgoKdHlwZWRlZiBlbnVtIFVM
aW5lQnJlYWsgewogICAgVV9MQl9VTktOT1dOID0gMCwKICAgIFVfTEJfQU1CSUdVT1VTID0gMSwK
ICAgIFVfTEJfQUxQSEFCRVRJQyA9IDIsCiAgICBVX0xCX0JSRUFLX0JPVEggPSAzLAogICAgVV9M
Ql9CUkVBS19BRlRFUiA9IDQsCiAgICBVX0xCX0JSRUFLX0JFRk9SRSA9IDUsCiAgICBVX0xCX01B
TkRBVE9SWV9CUkVBSyA9IDYsCiAgICBVX0xCX0NPTlRJTkdFTlRfQlJFQUsgPSA3LAogICAgVV9M
Ql9DTE9TRV9QVU5DVFVBVElPTiA9IDgsCiAgICBVX0xCX0NPTUJJTklOR19NQVJLID0gOSwKICAg
IFVfTEJfQ0FSUklBR0VfUkVUVVJOID0gMTAsCiAgICBVX0xCX0VYQ0xBTUFUSU9OID0gMTEsCiAg
ICBVX0xCX0dMVUUgPSAxMiwKICAgIFVfTEJfSFlQSEVOID0gMTMsCiAgICBVX0xCX0lERU9HUkFQ
SElDID0gMTQsCiAgICBVX0xCX0lOU0VQRVJBQkxFID0gMTUsCgogICAgVV9MQl9JTlNFUEFSQUJM
RT1VX0xCX0lOU0VQRVJBQkxFLAogICAgVV9MQl9JTkZJWF9OVU1FUklDID0gMTYsCiAgICBVX0xC
X0xJTkVfRkVFRCA9IDE3LAogICAgVV9MQl9OT05TVEFSVEVSID0gMTgsCiAgICBVX0xCX05VTUVS
SUMgPSAxOSwKICAgIFVfTEJfT1BFTl9QVU5DVFVBVElPTiA9IDIwLAogICAgVV9MQl9QT1NURklY
X05VTUVSSUMgPSAyMSwKICAgIFVfTEJfUFJFRklYX05VTUVSSUMgPSAyMiwKICAgIFVfTEJfUVVP
VEFUSU9OID0gMjMsCiAgICBVX0xCX0NPTVBMRVhfQ09OVEVYVCA9IDI0LAogICAgVV9MQl9TVVJS
T0dBVEUgPSAyNSwKICAgIFVfTEJfU1BBQ0UgPSAyNiwKICAgIFVfTEJfQlJFQUtfU1lNQk9MUyA9
IDI3LAogICAgVV9MQl9aV1NQQUNFID0gMjgsCiAgICBVX0xCX05FWFRfTElORSA9IDI5LAogICAg
VV9MQl9XT1JEX0pPSU5FUiA9IDMwLAogICAgVV9MQl9IMiA9IDMxLAogICAgVV9MQl9IMyA9IDMy
LAogICAgVV9MQl9KTCA9IDMzLAogICAgVV9MQl9KVCA9IDM0LAogICAgVV9MQl9KViA9IDM1LAog
ICAgVV9MQl9DTE9TRV9QQVJFTlRIRVNJUyA9IDM2LAogICAgVV9MQl9DT1VOVCA9IDM3Cn0gVUxp
bmVCcmVhazsKCgoKCgoKCnR5cGVkZWYgZW51bSBVTnVtZXJpY1R5cGUgewogICAgVV9OVF9OT05F
LAogICAgVV9OVF9ERUNJTUFMLAogICAgVV9OVF9ESUdJVCwKICAgIFVfTlRfTlVNRVJJQywKICAg
IFVfTlRfQ09VTlQKfSBVTnVtZXJpY1R5cGU7CgoKCgoKCgp0eXBlZGVmIGVudW0gVUhhbmd1bFN5
bGxhYmxlVHlwZSB7CiAgICBVX0hTVF9OT1RfQVBQTElDQUJMRSwKICAgIFVfSFNUX0xFQURJTkdf
SkFNTywKICAgIFVfSFNUX1ZPV0VMX0pBTU8sCiAgICBVX0hTVF9UUkFJTElOR19KQU1PLAogICAg
VV9IU1RfTFZfU1lMTEFCTEUsCiAgICBVX0hTVF9MVlRfU1lMTEFCTEUsCiAgICBVX0hTVF9DT1VO
VAp9IFVIYW5ndWxTeWxsYWJsZVR5cGU7CiMgMTc0MSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKSBVQm9vbAp1X2hhc0JpbmFyeVByb3BlcnR5XzQ4KFVDaGFyMzIgYywgVVByb3BlcnR5IHdo
aWNoKTsKIyAxNzU2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4g
IkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVCb29sCnVfaXNVQWxw
aGFiZXRpY180OChVQ2hhcjMyIGMpOwojIDE3NzEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2Rl
L3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIp
KSkgVUJvb2wKdV9pc1VMb3dlcmNhc2VfNDgoVUNoYXIzMiBjKTsKIyAxNzg2ICIvb3B0L2xvY2Fs
L2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkoImRlZmF1bHQiKSkpIFVCb29sCnVfaXNVVXBwZXJjYXNlXzQ4KFVDaGFyMzIgYyk7CiMg
MTgwNyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzVVdoaXRlU3BhY2Vf
NDgoVUNoYXIzMiBjKTsKIyAxODQ3ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5o
IgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGludDMy
X3QKdV9nZXRJbnRQcm9wZXJ0eVZhbHVlXzQ4KFVDaGFyMzIgYywgVVByb3BlcnR5IHdoaWNoKTsK
IyAxODY4ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGludDMyX3QKdV9nZXRJbnRQcm9w
ZXJ0eU1pblZhbHVlXzQ4KFVQcm9wZXJ0eSB3aGljaCk7CiMgMTg5NyAiL29wdC9sb2NhbC9pbmNs
dWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
KCJkZWZhdWx0IikpKSBpbnQzMl90CnVfZ2V0SW50UHJvcGVydHlNYXhWYWx1ZV80OChVUHJvcGVy
dHkgd2hpY2gpOwojIDE5MjAgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgZG91YmxlCnVf
Z2V0TnVtZXJpY1ZhbHVlXzQ4KFVDaGFyMzIgYyk7CiMgMTk1NSAiL29wdC9sb2NhbC9pbmNsdWRl
L3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKSBVQm9vbAp1X2lzbG93ZXJfNDgoVUNoYXIzMiBjKTsKIyAxOTgyICIvb3B0L2xv
Y2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkoImRlZmF1bHQiKSkpIFVCb29sCnVfaXN1cHBlcl80OChVQ2hhcjMyIGMpOwojIDE5
OTkgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wKdV9pc3RpdGxlXzQ4KFVDaGFy
MzIgYyk7CiMgMjAyMCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJu
ICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzZGln
aXRfNDgoVUNoYXIzMiBjKTsKIyAyMDQxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hh
ci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVC
b29sCnVfaXNhbHBoYV80OChVQ2hhcjMyIGMpOwojIDIwNjIgIi9vcHQvbG9jYWwvaW5jbHVkZS91
bmljb2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVm
YXVsdCIpKSkgVUJvb2wKdV9pc2FsbnVtXzQ4KFVDaGFyMzIgYyk7CiMgMjA4NSAiL29wdC9sb2Nh
bC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzeGRpZ2l0XzQ4KFVDaGFyMzIgYyk7CiMgMjEw
MSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzcHVuY3RfNDgoVUNoYXIz
MiBjKTsKIyAyMTIwICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4g
IkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVCb29sCnVfaXNncmFw
aF80OChVQ2hhcjMyIGMpOwojIDIxNDkgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFy
LmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJv
b2wKdV9pc2JsYW5rXzQ4KFVDaGFyMzIgYyk7CiMgMjE3NCAiL29wdC9sb2NhbC9pbmNsdWRlL3Vu
aWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZh
dWx0IikpKSBVQm9vbAp1X2lzZGVmaW5lZF80OChVQ2hhcjMyIGMpOwojIDIxOTUgIi9vcHQvbG9j
YWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wKdV9pc3NwYWNlXzQ4KFVDaGFyMzIgYyk7CiMgMjIx
NiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzSmF2YVNwYWNlQ2hhcl80
OChVQ2hhcjMyIGMpOwojIDIyNTYgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgi
CmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wK
dV9pc1doaXRlc3BhY2VfNDgoVUNoYXIzMiBjKTsKIyAyMjgwICIvb3B0L2xvY2FsL2luY2x1ZGUv
dW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRl
ZmF1bHQiKSkpIFVCb29sCnVfaXNjbnRybF80OChVQ2hhcjMyIGMpOwojIDIyOTUgIi9vcHQvbG9j
YWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wKdV9pc0lTT0NvbnRyb2xfNDgoVUNoYXIzMiBjKTsK
IyAyMzEzICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVCb29sCnVfaXNwcmludF80OChV
Q2hhcjMyIGMpOwojIDIzMzQgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wKdV9p
c2Jhc2VfNDgoVUNoYXIzMiBjKTsKIyAyMzUzICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91
Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkp
IFVDaGFyRGlyZWN0aW9uCnVfY2hhckRpcmVjdGlvbl80OChVQ2hhcjMyIGMpOwojIDIzNzEgIi9v
cHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wKdV9pc01pcnJvcmVkXzQ4KFVDaGFyMzIg
Yyk7CiMgMjM5MyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJD
IiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQ2hhcjMyCnVfY2hhck1p
cnJvcl80OChVQ2hhcjMyIGMpOwojIDI0MDcgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3Vj
aGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkg
aW50OF90CnVfY2hhclR5cGVfNDgoVUNoYXIzMiBjKTsKIyAyNDQyICIvb3B0L2xvY2FsL2luY2x1
ZGUvdW5pY29kZS91Y2hhci5oIgp0eXBlZGVmIFVCb29sClVDaGFyRW51bVR5cGVSYW5nZShjb25z
dCB2b2lkICpjb250ZXh0LCBVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGxpbWl0LCBVQ2hhckNhdGVn
b3J5IHR5cGUpOwojIDI0NjQgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1X2Vu
dW1DaGFyVHlwZXNfNDgoVUNoYXJFbnVtVHlwZVJhbmdlICplbnVtUmFuZ2UsIGNvbnN0IHZvaWQg
KmNvbnRleHQpOwojIDI0NzYgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdWludDhfdAp1
X2dldENvbWJpbmluZ0NsYXNzXzQ4KFVDaGFyMzIgYyk7CiMgMjUwNCAiL29wdC9sb2NhbC9pbmNs
dWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
KCJkZWZhdWx0IikpKSBpbnQzMl90CnVfY2hhckRpZ2l0VmFsdWVfNDgoVUNoYXIzMiBjKTsKIyAy
NTE2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVCbG9ja0NvZGUKdWJsb2NrX2dldENv
ZGVfNDgoVUNoYXIzMiBjKTsKIyAyNTUxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hh
ci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGlu
dDMyX3QKdV9jaGFyTmFtZV80OChVQ2hhcjMyIGNvZGUsIFVDaGFyTmFtZUNob2ljZSBuYW1lQ2hv
aWNlLAogICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgaW50MzJfdCBidWZmZXJMZW5ndGgsCiAgICAg
ICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CiMgMjU4MSAiL29wdC9sb2NhbC9pbmNsdWRl
L3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKSBpbnQzMl90CnVfZ2V0SVNPQ29tbWVudF80OChVQ2hhcjMyIGMsCiAgICAgICAg
ICAgICAgICBjaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwojIDI2MDYgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmlj
b2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVs
dCIpKSkgVUNoYXIzMgp1X2NoYXJGcm9tTmFtZV80OChVQ2hhck5hbWVDaG9pY2UgbmFtZUNob2lj
ZSwKICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgVUVycm9y
Q29kZSAqcEVycm9yQ29kZSk7CiMgMjYyOCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNo
YXIuaCIKdHlwZWRlZiBVQm9vbCBVRW51bUNoYXJOYW1lc0ZuKHZvaWQgKmNvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVQ2hhcjMyIGNvZGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVQ2hhck5hbWVDaG9pY2UgbmFtZUNob2ljZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMl90IGxlbmd0aCk7CiMgMjY1NSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKSB2b2lkCnVfZW51bUNoYXJOYW1lc180OChVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGxpbWl0
LAogICAgICAgICAgICAgICAgVUVudW1DaGFyTmFtZXNGbiAqZm4sCiAgICAgICAgICAgICAgICB2
b2lkICpjb250ZXh0LAogICAgICAgICAgICAgICAgVUNoYXJOYW1lQ2hvaWNlIG5hbWVDaG9pY2Us
CiAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAyNjkzICIvb3B0L2xv
Y2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkoImRlZmF1bHQiKSkpIGNvbnN0IGNoYXIqCnVfZ2V0UHJvcGVydHlOYW1lXzQ4KFVQ
cm9wZXJ0eSBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAgVVByb3BlcnR5TmFtZUNob2ljZSBu
YW1lQ2hvaWNlKTsKIyAyNzE2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpl
eHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVQcm9wZXJ0
eQp1X2dldFByb3BlcnR5RW51bV80OChjb25zdCBjaGFyKiBhbGlhcyk7CiMgMjc2NiAiL29wdC9s
b2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBjb25zdCBjaGFyKgp1X2dldFByb3BlcnR5VmFsdWVOYW1l
XzQ4KFVQcm9wZXJ0eSBwcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgIFVQcm9wZXJ0eU5hbWVDaG9pY2UgbmFtZUNob2lj
ZSk7CiMgMjgwMiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJD
IiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBpbnQzMl90CnVfZ2V0UHJv
cGVydHlWYWx1ZUVudW1fNDgoVVByb3BlcnR5IHByb3BlcnR5LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFsaWFzKTsKIyAyODIzICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQi
KSkpIFVCb29sCnVfaXNJRFN0YXJ0XzQ4KFVDaGFyMzIgYyk7CiMgMjg0NyAiL29wdC9sb2NhbC9p
bmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzSURQYXJ0XzQ4KFVDaGFyMzIgYyk7CiMgMjg3MCAi
L29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQm9vbAp1X2lzSURJZ25vcmFibGVfNDgoVUNo
YXIzMiBjKTsKIyAyODg5ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRl
cm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVCb29sCnVfaXNK
YXZhSURTdGFydF80OChVQ2hhcjMyIGMpOwojIDI5MTAgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmlj
b2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVs
dCIpKSkgVUJvb2wKdV9pc0phdmFJRFBhcnRfNDgoVUNoYXIzMiBjKTsKIyAyOTM1ICIvb3B0L2xv
Y2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkoImRlZmF1bHQiKSkpIFVDaGFyMzIKdV90b2xvd2VyXzQ4KFVDaGFyMzIgYyk7CiMg
Mjk2MCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQ2hhcjMyCnVfdG91cHBlcl80OChV
Q2hhcjMyIGMpOwojIDI5ODUgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIzMgp1
X3RvdGl0bGVfNDgoVUNoYXIzMiBjKTsKIyAzMDMxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS91Y2hhci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQi
KSkpIFVDaGFyMzIKdV9mb2xkQ2FzZV80OChVQ2hhcjMyIGMsIHVpbnQzMl90IG9wdGlvbnMpOwoj
IDMwNzIgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VjaGFyLmgiCmV4dGVybiAiQyIgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJfdAp1X2RpZ2l0XzQ4KFVD
aGFyMzIgY2gsIGludDhfdCByYWRpeCk7CiMgMzEwMyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKSBVQ2hhcjMyCnVfZm9yRGlnaXRfNDgoaW50MzJfdCBkaWdpdCwgaW50OF90IHJhZGl4KTsK
IyAzMTIwICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91Y2hhci5oIgpleHRlcm4gIkMiIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIHZvaWQKdV9jaGFyQWdlXzQ4KFVD
aGFyMzIgYywgVVZlcnNpb25JbmZvIHZlcnNpb25BcnJheSk7CiMgMzEzNCAiL29wdC9sb2NhbC9p
bmNsdWRlL3VuaWNvZGUvdWNoYXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKSB2b2lkCnVfZ2V0VW5pY29kZVZlcnNpb25fNDgoVVZlcnNpb25JbmZv
IHZlcnNpb25BcnJheSk7CiMgMzE1OSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWNoYXIu
aCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBpbnQz
Ml90CnVfZ2V0RkNfTkZLQ19DbG9zdXJlXzQ4KFVDaGFyMzIgYywgVUNoYXIgKmRlc3QsIGludDMy
X3QgZGVzdENhcGFjaXR5LCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKCgoKCn0KIyAyOCAiLi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3VuaWNvZGUvaWN1L1VuaWNvZGVJY3UuaCIgMgojIDEg
Ii9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzY3JpcHQuaCIgMQojIDQ2ICIvb3B0L2xvY2Fs
L2luY2x1ZGUvdW5pY29kZS91c2NyaXB0LmgiCnR5cGVkZWYgZW51bSBVU2NyaXB0Q29kZSB7Cgog
ICAgICBVU0NSSVBUX0lOVkFMSURfQ09ERSA9IC0xLAoKICAgICAgVVNDUklQVF9DT01NT04gPSAw
LAoKICAgICAgVVNDUklQVF9JTkhFUklURUQgPSAxLAoKICAgICAgVVNDUklQVF9BUkFCSUMgPSAy
LAoKICAgICAgVVNDUklQVF9BUk1FTklBTiA9IDMsCgogICAgICBVU0NSSVBUX0JFTkdBTEkgPSA0
LAoKICAgICAgVVNDUklQVF9CT1BPTU9GTyA9IDUsCgogICAgICBVU0NSSVBUX0NIRVJPS0VFID0g
NiwKCiAgICAgIFVTQ1JJUFRfQ09QVElDID0gNywKCiAgICAgIFVTQ1JJUFRfQ1lSSUxMSUMgPSA4
LAoKICAgICAgVVNDUklQVF9ERVNFUkVUID0gOSwKCiAgICAgIFVTQ1JJUFRfREVWQU5BR0FSSSA9
IDEwLAoKICAgICAgVVNDUklQVF9FVEhJT1BJQyA9IDExLAoKICAgICAgVVNDUklQVF9HRU9SR0lB
TiA9IDEyLAoKICAgICAgVVNDUklQVF9HT1RISUMgPSAxMywKCiAgICAgIFVTQ1JJUFRfR1JFRUsg
PSAxNCwKCiAgICAgIFVTQ1JJUFRfR1VKQVJBVEkgPSAxNSwKCiAgICAgIFVTQ1JJUFRfR1VSTVVL
SEkgPSAxNiwKCiAgICAgIFVTQ1JJUFRfSEFOID0gMTcsCgogICAgICBVU0NSSVBUX0hBTkdVTCA9
IDE4LAoKICAgICAgVVNDUklQVF9IRUJSRVcgPSAxOSwKCiAgICAgIFVTQ1JJUFRfSElSQUdBTkEg
PSAyMCwKCiAgICAgIFVTQ1JJUFRfS0FOTkFEQSA9IDIxLAoKICAgICAgVVNDUklQVF9LQVRBS0FO
QSA9IDIyLAoKICAgICAgVVNDUklQVF9LSE1FUiA9IDIzLAoKICAgICAgVVNDUklQVF9MQU8gPSAy
NCwKCiAgICAgIFVTQ1JJUFRfTEFUSU4gPSAyNSwKCiAgICAgIFVTQ1JJUFRfTUFMQVlBTEFNID0g
MjYsCgogICAgICBVU0NSSVBUX01PTkdPTElBTiA9IDI3LAoKICAgICAgVVNDUklQVF9NWUFOTUFS
ID0gMjgsCgogICAgICBVU0NSSVBUX09HSEFNID0gMjksCgogICAgICBVU0NSSVBUX09MRF9JVEFM
SUMgPSAzMCwKCiAgICAgIFVTQ1JJUFRfT1JJWUEgPSAzMSwKCiAgICAgIFVTQ1JJUFRfUlVOSUMg
PSAzMiwKCiAgICAgIFVTQ1JJUFRfU0lOSEFMQSA9IDMzLAoKICAgICAgVVNDUklQVF9TWVJJQUMg
PSAzNCwKCiAgICAgIFVTQ1JJUFRfVEFNSUwgPSAzNSwKCiAgICAgIFVTQ1JJUFRfVEVMVUdVID0g
MzYsCgogICAgICBVU0NSSVBUX1RIQUFOQSA9IDM3LAoKICAgICAgVVNDUklQVF9USEFJID0gMzgs
CgogICAgICBVU0NSSVBUX1RJQkVUQU4gPSAzOSwKCiAgICAgIFVTQ1JJUFRfQ0FOQURJQU5fQUJP
UklHSU5BTCA9IDQwLAoKICAgICAgVVNDUklQVF9VQ0FTID0gVVNDUklQVF9DQU5BRElBTl9BQk9S
SUdJTkFMLAoKICAgICAgVVNDUklQVF9ZSSA9IDQxLAoKCiAgICAgIFVTQ1JJUFRfVEFHQUxPRyA9
IDQyLAoKICAgICAgVVNDUklQVF9IQU5VTk9PID0gNDMsCgogICAgICBVU0NSSVBUX0JVSElEID0g
NDQsCgogICAgICBVU0NSSVBUX1RBR0JBTldBID0gNDUsCgoKCiAgICAgIFVTQ1JJUFRfQlJBSUxM
RSA9IDQ2LAoKICAgICAgVVNDUklQVF9DWVBSSU9UID0gNDcsCgogICAgICBVU0NSSVBUX0xJTUJV
ID0gNDgsCgogICAgICBVU0NSSVBUX0xJTkVBUl9CID0gNDksCgogICAgICBVU0NSSVBUX09TTUFO
WUEgPSA1MCwKCiAgICAgIFVTQ1JJUFRfU0hBVklBTiA9IDUxLAoKICAgICAgVVNDUklQVF9UQUlf
TEUgPSA1MiwKCiAgICAgIFVTQ1JJUFRfVUdBUklUSUMgPSA1MywKCgogICAgICBVU0NSSVBUX0tB
VEFLQU5BX09SX0hJUkFHQU5BID0gNTQsCgoKCiAgICAgIFVTQ1JJUFRfQlVHSU5FU0UgPSA1NSwK
CiAgICAgIFVTQ1JJUFRfR0xBR09MSVRJQyA9IDU2LAoKICAgICAgVVNDUklQVF9LSEFST1NIVEhJ
ID0gNTcsCgogICAgICBVU0NSSVBUX1NZTE9USV9OQUdSSSA9IDU4LAoKICAgICAgVVNDUklQVF9O
RVdfVEFJX0xVRSA9IDU5LAoKICAgICAgVVNDUklQVF9USUZJTkFHSCA9IDYwLAoKICAgICAgVVND
UklQVF9PTERfUEVSU0lBTiA9IDYxLAoKCgogICAgICBVU0NSSVBUX0JBTElORVNFID0gNjIsCgog
ICAgICBVU0NSSVBUX0JBVEFLID0gNjMsCgogICAgICBVU0NSSVBUX0JMSVNTWU1CT0xTID0gNjQs
CgogICAgICBVU0NSSVBUX0JSQUhNSSA9IDY1LAoKICAgICAgVVNDUklQVF9DSEFNID0gNjYsCgog
ICAgICBVU0NSSVBUX0NJUlRIID0gNjcsCgogICAgICBVU0NSSVBUX09MRF9DSFVSQ0hfU0xBVk9O
SUNfQ1lSSUxMSUMgPSA2OCwKCiAgICAgIFVTQ1JJUFRfREVNT1RJQ19FR1lQVElBTiA9IDY5LAoK
ICAgICAgVVNDUklQVF9ISUVSQVRJQ19FR1lQVElBTiA9IDcwLAoKICAgICAgVVNDUklQVF9FR1lQ
VElBTl9ISUVST0dMWVBIUyA9IDcxLAoKICAgICAgVVNDUklQVF9LSFVUU1VSSSA9IDcyLAoKICAg
ICAgVVNDUklQVF9TSU1QTElGSUVEX0hBTiA9IDczLAoKICAgICAgVVNDUklQVF9UUkFESVRJT05B
TF9IQU4gPSA3NCwKCiAgICAgIFVTQ1JJUFRfUEFIQVdIX0hNT05HID0gNzUsCgogICAgICBVU0NS
SVBUX09MRF9IVU5HQVJJQU4gPSA3NiwKCiAgICAgIFVTQ1JJUFRfSEFSQVBQQU5fSU5EVVMgPSA3
NywKCiAgICAgIFVTQ1JJUFRfSkFWQU5FU0UgPSA3OCwKCiAgICAgIFVTQ1JJUFRfS0FZQUhfTEkg
PSA3OSwKCiAgICAgIFVTQ1JJUFRfTEFUSU5fRlJBS1RVUiA9IDgwLAoKICAgICAgVVNDUklQVF9M
QVRJTl9HQUVMSUMgPSA4MSwKCiAgICAgIFVTQ1JJUFRfTEVQQ0hBID0gODIsCgogICAgICBVU0NS
SVBUX0xJTkVBUl9BID0gODMsCgogICAgICBVU0NSSVBUX01BTkRBSUMgPSA4NCwKCiAgICAgIFVT
Q1JJUFRfTUFOREFFQU4gPSBVU0NSSVBUX01BTkRBSUMsCgogICAgICBVU0NSSVBUX01BWUFOX0hJ
RVJPR0xZUEhTID0gODUsCgogICAgICBVU0NSSVBUX01FUk9JVElDX0hJRVJPR0xZUEhTID0gODYs
CgogICAgICBVU0NSSVBUX01FUk9JVElDID0gVVNDUklQVF9NRVJPSVRJQ19ISUVST0dMWVBIUywK
CiAgICAgIFVTQ1JJUFRfTktPID0gODcsCgogICAgICBVU0NSSVBUX09SS0hPTiA9IDg4LAoKICAg
ICAgVVNDUklQVF9PTERfUEVSTUlDID0gODksCgogICAgICBVU0NSSVBUX1BIQUdTX1BBID0gOTAs
CgogICAgICBVU0NSSVBUX1BIT0VOSUNJQU4gPSA5MSwKCiAgICAgIFVTQ1JJUFRfUEhPTkVUSUNf
UE9MTEFSRCA9IDkyLAoKICAgICAgVVNDUklQVF9ST05HT1JPTkdPID0gOTMsCgogICAgICBVU0NS
SVBUX1NBUkFUSSA9IDk0LAoKICAgICAgVVNDUklQVF9FU1RSQU5HRUxPX1NZUklBQyA9IDk1LAoK
ICAgICAgVVNDUklQVF9XRVNURVJOX1NZUklBQyA9IDk2LAoKICAgICAgVVNDUklQVF9FQVNURVJO
X1NZUklBQyA9IDk3LAoKICAgICAgVVNDUklQVF9URU5HV0FSID0gOTgsCgogICAgICBVU0NSSVBU
X1ZBSSA9IDk5LAoKICAgICAgVVNDUklQVF9WSVNJQkxFX1NQRUVDSCA9IDEwMCwKCiAgICAgIFVT
Q1JJUFRfQ1VORUlGT1JNID0gMTAxLAoKICAgICAgVVNDUklQVF9VTldSSVRURU5fTEFOR1VBR0VT
ID0gMTAyLAoKICAgICAgVVNDUklQVF9VTktOT1dOID0gMTAzLAoKCgogICAgICBVU0NSSVBUX0NB
UklBTiA9IDEwNCwKCiAgICAgIFVTQ1JJUFRfSkFQQU5FU0UgPSAxMDUsCgogICAgICBVU0NSSVBU
X0xBTk5BID0gMTA2LAoKICAgICAgVVNDUklQVF9MWUNJQU4gPSAxMDcsCgogICAgICBVU0NSSVBU
X0xZRElBTiA9IDEwOCwKCiAgICAgIFVTQ1JJUFRfT0xfQ0hJS0kgPSAxMDksCgogICAgICBVU0NS
SVBUX1JFSkFORyA9IDExMCwKCiAgICAgIFVTQ1JJUFRfU0FVUkFTSFRSQSA9IDExMSwKCiAgICAg
IFVTQ1JJUFRfU0lHTl9XUklUSU5HID0gMTEyLAoKICAgICAgVVNDUklQVF9TVU5EQU5FU0UgPSAx
MTMsCgogICAgICBVU0NSSVBUX01PT04gPSAxMTQsCgogICAgICBVU0NSSVBUX01FSVRFSV9NQVlF
SyA9IDExNSwKCgoKICAgICAgVVNDUklQVF9JTVBFUklBTF9BUkFNQUlDID0gMTE2LAoKICAgICAg
VVNDUklQVF9BVkVTVEFOID0gMTE3LAoKICAgICAgVVNDUklQVF9DSEFLTUEgPSAxMTgsCgogICAg
ICBVU0NSSVBUX0tPUkVBTiA9IDExOSwKCiAgICAgIFVTQ1JJUFRfS0FJVEhJID0gMTIwLAoKICAg
ICAgVVNDUklQVF9NQU5JQ0hBRUFOID0gMTIxLAoKICAgICAgVVNDUklQVF9JTlNDUklQVElPTkFM
X1BBSExBVkkgPSAxMjIsCgogICAgICBVU0NSSVBUX1BTQUxURVJfUEFITEFWSSA9IDEyMywKCiAg
ICAgIFVTQ1JJUFRfQk9PS19QQUhMQVZJID0gMTI0LAoKICAgICAgVVNDUklQVF9JTlNDUklQVElP
TkFMX1BBUlRISUFOID0gMTI1LAoKICAgICAgVVNDUklQVF9TQU1BUklUQU4gPSAxMjYsCgogICAg
ICBVU0NSSVBUX1RBSV9WSUVUID0gMTI3LAoKICAgICAgVVNDUklQVF9NQVRIRU1BVElDQUxfTk9U
QVRJT04gPSAxMjgsCgogICAgICBVU0NSSVBUX1NZTUJPTFMgPSAxMjksCgoKCiAgICAgIFVTQ1JJ
UFRfQkFNVU0gPSAxMzAsCgogICAgICBVU0NSSVBUX0xJU1UgPSAxMzEsCgogICAgICBVU0NSSVBU
X05BS0hJX0dFQkEgPSAxMzIsCgogICAgICBVU0NSSVBUX09MRF9TT1VUSF9BUkFCSUFOID0gMTMz
LAoKCgogICAgICBVU0NSSVBUX0JBU1NBX1ZBSCA9IDEzNCwKCiAgICAgIFVTQ1JJUFRfRFVQTE9Z
QU5fU0hPUlRBTkQgPSAxMzUsCgogICAgICBVU0NSSVBUX0VMQkFTQU4gPSAxMzYsCgogICAgICBV
U0NSSVBUX0dSQU5USEEgPSAxMzcsCgogICAgICBVU0NSSVBUX0tQRUxMRSA9IDEzOCwKCiAgICAg
IFVTQ1JJUFRfTE9NQSA9IDEzOSwKCiAgICAgIFVTQ1JJUFRfTUVOREUgPSAxNDAsCgogICAgICBV
U0NSSVBUX01FUk9JVElDX0NVUlNJVkUgPSAxNDEsCgogICAgICBVU0NSSVBUX09MRF9OT1JUSF9B
UkFCSUFOID0gMTQyLAoKICAgICAgVVNDUklQVF9OQUJBVEFFQU4gPSAxNDMsCgogICAgICBVU0NS
SVBUX1BBTE1ZUkVORSA9IDE0NCwKCiAgICAgIFVTQ1JJUFRfU0lOREhJID0gMTQ1LAoKICAgICAg
VVNDUklQVF9XQVJBTkdfQ0lUSSA9IDE0NiwKCgogICAgICBVU0NSSVBUX0FGQUtBID0gMTQ3LAoK
ICAgICAgVVNDUklQVF9KVVJDSEVOID0gMTQ4LAoKICAgICAgVVNDUklQVF9NUk8gPSAxNDksCgog
ICAgICBVU0NSSVBUX05VU0hVID0gMTUwLAoKICAgICAgVVNDUklQVF9TSEFSQURBID0gMTUxLAoK
ICAgICAgVVNDUklQVF9TT1JBX1NPTVBFTkcgPSAxNTIsCgogICAgICBVU0NSSVBUX1RBS1JJID0g
MTUzLAoKICAgICAgVVNDUklQVF9UQU5HVVQgPSAxNTQsCgogICAgICBVU0NSSVBUX1dPTEVBSSA9
IDE1NSwKCgoKCiAgICAgIFVTQ1JJUFRfQ09ERV9MSU1JVCA9IDE1Ngp9IFVTY3JpcHRDb2RlOwoj
IDQwOSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXNjcmlwdC5oIgpleHRlcm4gIkMiIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGludDMyX3QKdXNjcmlwdF9nZXRD
b2RlXzQ4KGNvbnN0IGNoYXIqIG5hbWVPckFiYnJPckxvY2FsZSxVU2NyaXB0Q29kZSogZmlsbElu
LGludDMyX3QgY2FwYWNpdHksVUVycm9yQ29kZSAqZXJyKTsKIyA0MjAgIi9vcHQvbG9jYWwvaW5j
bHVkZS91bmljb2RlL3VzY3JpcHQuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKSBjb25zdCBjaGFyKgp1c2NyaXB0X2dldE5hbWVfNDgoVVNjcmlwdENv
ZGUgc2NyaXB0Q29kZSk7CiMgNDMxICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c2NyaXB0
LmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgY29u
c3QgY2hhcioKdXNjcmlwdF9nZXRTaG9ydE5hbWVfNDgoVVNjcmlwdENvZGUgc2NyaXB0Q29kZSk7
CiMgNDQyICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c2NyaXB0LmgiCmV4dGVybiAiQyIg
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVVNjcmlwdENvZGUKdXNjcmlw
dF9nZXRTY3JpcHRfNDgoVUNoYXIzMiBjb2RlcG9pbnQsIFVFcnJvckNvZGUgKmVycik7CiMgNDYw
ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c2NyaXB0LmgiCmV4dGVybiAiQyIgX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUJvb2wKdXNjcmlwdF9oYXNTY3JpcHRf
NDgoVUNoYXIzMiBjLCBVU2NyaXB0Q29kZSBzYyk7CiMgNDg3ICIvb3B0L2xvY2FsL2luY2x1ZGUv
dW5pY29kZS91c2NyaXB0LmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi
ZGVmYXVsdCIpKSkgaW50MzJfdAp1c2NyaXB0X2dldFNjcmlwdEV4dGVuc2lvbnNfNDgoVUNoYXIz
MiBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNjcmlwdENvZGUgKnNjcmlwdHMsIGlu
dDMyX3QgY2FwYWNpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpl
cnJvckNvZGUpOwojIDI5ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9pY3Uv
VW5pY29kZUljdS5oIiAyCiMgMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5o
IiAxCiMgMjAgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKIyAxICIvb3B0
L2xvY2FsL2luY2x1ZGUvdW5pY29kZS9wdXRpbC5oIiAxCiMgNzMgIi9vcHQvbG9jYWwvaW5jbHVk
ZS91bmljb2RlL3B1dGlsLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi
ZGVmYXVsdCIpKSkgY29uc3QgY2hhciogdV9nZXREYXRhRGlyZWN0b3J5XzQ4KHZvaWQpOwojIDk0
ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS9wdXRpbC5oIgpleHRlcm4gIkMiIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIHZvaWQgdV9zZXREYXRhRGlyZWN0b3J5XzQ4
KGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CiMgMTA1ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS9wdXRpbC5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQi
KSkpIGNvbnN0IGNoYXIqIHVwcnZfZ2V0RGVmYXVsdENvZGVwYWdlXzQ4KHZvaWQpOwojIDExNyAi
L29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvcHV0aWwuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0
ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBjb25zdCBjaGFyKiB1cHJ2X2dldERlZmF1bHRM
b2NhbGVJRF80OCh2b2lkKTsKIyAxNjggIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3B1dGls
LmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9p
ZAp1X2NoYXJzVG9VQ2hhcnNfNDgoY29uc3QgY2hhciAqY3MsIFVDaGFyICp1cywgaW50MzJfdCBs
ZW5ndGgpOwojIDE5MCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvcHV0aWwuaCIKZXh0ZXJu
ICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSB2b2lkCnVfVUNoYXJz
VG9DaGFyc180OChjb25zdCBVQ2hhciAqdXMsIGNoYXIgKmNzLCBpbnQzMl90IGxlbmd0aCk7CiMg
MjEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIgMgojIDEgIi9vcHQvbG9j
YWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiIDEKIyAzMCAiL29wdC9sb2NhbC9pbmNsdWRlL3Vu
aWNvZGUvdWl0ZXIuaCIKICAgIGV4dGVybiAiQysrIiB7IG5hbWVzcGFjZSBpY3VfNDggewoKICAg
IGNsYXNzIENoYXJhY3Rlckl0ZXJhdG9yOwogICAgY2xhc3MgUmVwbGFjZWFibGU7CgogICAgfSB9
CgoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgVUNoYXJJdGVyYXRvcjsKdHlwZWRlZiBzdHJ1Y3QgVUNo
YXJJdGVyYXRvciBVQ2hhckl0ZXJhdG9yOwoKCgoKCgoKdHlwZWRlZiBlbnVtIFVDaGFySXRlcmF0
b3JPcmlnaW4gewogICAgVUlURVJfU1RBUlQsIFVJVEVSX0NVUlJFTlQsIFVJVEVSX0xJTUlULCBV
SVRFUl9aRVJPLCBVSVRFUl9MRU5HVEgKfSBVQ2hhckl0ZXJhdG9yT3JpZ2luOwoKCmVudW0gewoj
IDY5ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91aXRlci5oIgogICAgVUlURVJfVU5LTk9X
Tl9JTkRFWD0tMgp9OwojIDEwNCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIK
dHlwZWRlZiBpbnQzMl90ClVDaGFySXRlcmF0b3JHZXRJbmRleChVQ2hhckl0ZXJhdG9yICppdGVy
LCBVQ2hhckl0ZXJhdG9yT3JpZ2luIG9yaWdpbik7CiMgMTQxICIvb3B0L2xvY2FsL2luY2x1ZGUv
dW5pY29kZS91aXRlci5oIgp0eXBlZGVmIGludDMyX3QKVUNoYXJJdGVyYXRvck1vdmUoVUNoYXJJ
dGVyYXRvciAqaXRlciwgaW50MzJfdCBkZWx0YSwgVUNoYXJJdGVyYXRvck9yaWdpbiBvcmlnaW4p
OwojIDE1NiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKdHlwZWRlZiBVQm9v
bApVQ2hhckl0ZXJhdG9ySGFzTmV4dChVQ2hhckl0ZXJhdG9yICppdGVyKTsKIyAxNzAgIi9vcHQv
bG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiCnR5cGVkZWYgVUJvb2wKVUNoYXJJdGVyYXRv
ckhhc1ByZXZpb3VzKFVDaGFySXRlcmF0b3IgKml0ZXIpOwojIDE4NSAiL29wdC9sb2NhbC9pbmNs
dWRlL3VuaWNvZGUvdWl0ZXIuaCIKdHlwZWRlZiBVQ2hhcjMyClVDaGFySXRlcmF0b3JDdXJyZW50
KFVDaGFySXRlcmF0b3IgKml0ZXIpOwojIDIwMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUv
dWl0ZXIuaCIKdHlwZWRlZiBVQ2hhcjMyClVDaGFySXRlcmF0b3JOZXh0KFVDaGFySXRlcmF0b3Ig
Kml0ZXIpOwojIDIxNyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKdHlwZWRl
ZiBVQ2hhcjMyClVDaGFySXRlcmF0b3JQcmV2aW91cyhVQ2hhckl0ZXJhdG9yICppdGVyKTsKIyAy
MzEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiCnR5cGVkZWYgaW50MzJfdApV
Q2hhckl0ZXJhdG9yUmVzZXJ2ZWQoVUNoYXJJdGVyYXRvciAqaXRlciwgaW50MzJfdCBzb21ldGhp
bmcpOwojIDI3OCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKdHlwZWRlZiB1
aW50MzJfdApVQ2hhckl0ZXJhdG9yR2V0U3RhdGUoY29uc3QgVUNoYXJJdGVyYXRvciAqaXRlcik7
CiMgMzA2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91aXRlci5oIgp0eXBlZGVmIHZvaWQK
VUNoYXJJdGVyYXRvclNldFN0YXRlKFVDaGFySXRlcmF0b3IgKml0ZXIsIHVpbnQzMl90IHN0YXRl
LCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAzMzkgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmlj
b2RlL3VpdGVyLmgiCnN0cnVjdCBVQ2hhckl0ZXJhdG9yIHsKCgoKCgogICAgY29uc3Qgdm9pZCAq
Y29udGV4dDsKCgoKCgoKICAgIGludDMyX3QgbGVuZ3RoOwoKCgoKCgogICAgaW50MzJfdCBzdGFy
dDsKCgoKCgoKICAgIGludDMyX3QgaW5kZXg7CgoKCgoKCiAgICBpbnQzMl90IGxpbWl0OwoKCgoK
CiAgICBpbnQzMl90IHJlc2VydmVkRmllbGQ7CiMgMzg4ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5p
Y29kZS91aXRlci5oIgogICAgVUNoYXJJdGVyYXRvckdldEluZGV4ICpnZXRJbmRleDsKIyAzOTkg
Ii9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiCiAgICBVQ2hhckl0ZXJhdG9yTW92
ZSAqbW92ZTsKIyA0MDggIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiCiAgICBV
Q2hhckl0ZXJhdG9ySGFzTmV4dCAqaGFzTmV4dDsKCgoKCgoKCiAgICBVQ2hhckl0ZXJhdG9ySGFz
UHJldmlvdXMgKmhhc1ByZXZpb3VzOwojIDQyNSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUv
dWl0ZXIuaCIKICAgIFVDaGFySXRlcmF0b3JDdXJyZW50ICpjdXJyZW50OwojIDQzNSAiL29wdC9s
b2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKICAgIFVDaGFySXRlcmF0b3JOZXh0ICpuZXh0
OwojIDQ0NSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKICAgIFVDaGFySXRl
cmF0b3JQcmV2aW91cyAqcHJldmlvdXM7CgoKCgoKCgogICAgVUNoYXJJdGVyYXRvclJlc2VydmVk
ICpyZXNlcnZlZEZuOwojIDQ2MiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIK
ICAgIFVDaGFySXRlcmF0b3JHZXRTdGF0ZSAqZ2V0U3RhdGU7CiMgNDcyICIvb3B0L2xvY2FsL2lu
Y2x1ZGUvdW5pY29kZS91aXRlci5oIgogICAgVUNoYXJJdGVyYXRvclNldFN0YXRlICpzZXRTdGF0
ZTsKfTsKIyA0OTMgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiCmV4dGVybiAi
QyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIzMgp1aXRlcl9j
dXJyZW50MzJfNDgoVUNoYXJJdGVyYXRvciAqaXRlcik7CiMgNTEwICIvb3B0L2xvY2FsL2luY2x1
ZGUvdW5pY29kZS91aXRlci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHko
ImRlZmF1bHQiKSkpIFVDaGFyMzIKdWl0ZXJfbmV4dDMyXzQ4KFVDaGFySXRlcmF0b3IgKml0ZXIp
OwojIDUyNyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKZXh0ZXJuICJDIiBf
X2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQ2hhcjMyCnVpdGVyX3ByZXZp
b3VzMzJfNDgoVUNoYXJJdGVyYXRvciAqaXRlcik7CiMgNTQ4ICIvb3B0L2xvY2FsL2luY2x1ZGUv
dW5pY29kZS91aXRlci5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRl
ZmF1bHQiKSkpIHVpbnQzMl90CnVpdGVyX2dldFN0YXRlXzQ4KGNvbnN0IFVDaGFySXRlcmF0b3Ig
Kml0ZXIpOwojIDU2NiAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdWl0ZXIuaCIKZXh0ZXJu
ICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSB2b2lkCnVpdGVyX3Nl
dFN0YXRlXzQ4KFVDaGFySXRlcmF0b3IgKml0ZXIsIHVpbnQzMl90IHN0YXRlLCBVRXJyb3JDb2Rl
ICpwRXJyb3JDb2RlKTsKIyA1OTEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgi
CmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1
aXRlcl9zZXRTdHJpbmdfNDgoVUNoYXJJdGVyYXRvciAqaXRlciwgY29uc3QgVUNoYXIgKnMsIGlu
dDMyX3QgbGVuZ3RoKTsKIyA2MTQgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgi
CmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1
aXRlcl9zZXRVVEYxNkJFXzQ4KFVDaGFySXRlcmF0b3IgKml0ZXIsIGNvbnN0IGNoYXIgKnMsIGlu
dDMyX3QgbGVuZ3RoKTsKIyA2NTAgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgi
CmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1
aXRlcl9zZXRVVEY4XzQ4KFVDaGFySXRlcmF0b3IgKml0ZXIsIGNvbnN0IGNoYXIgKnMsIGludDMy
X3QgbGVuZ3RoKTsKIyA2NzUgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VpdGVyLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgdm9pZAp1aXRl
cl9zZXRDaGFyYWN0ZXJJdGVyYXRvcl80OChVQ2hhckl0ZXJhdG9yICppdGVyLCBpY3VfNDg6OiBD
aGFyYWN0ZXJJdGVyYXRvciAqY2hhckl0ZXIpOwojIDcwMCAiL29wdC9sb2NhbC9pbmNsdWRlL3Vu
aWNvZGUvdWl0ZXIuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZh
dWx0IikpKSB2b2lkCnVpdGVyX3NldFJlcGxhY2VhYmxlXzQ4KFVDaGFySXRlcmF0b3IgKml0ZXIs
IGNvbnN0IGljdV80ODo6IFJlcGxhY2VhYmxlICpyZXApOwoKCgp9CiMgMjIgIi9vcHQvbG9jYWwv
aW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIgMgoKCgoKICAgIHR5cGVkZWYgc3RydWN0IFVCcmVh
a0l0ZXJhdG9yIFVCcmVha0l0ZXJhdG9yOwojIDg1ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVs
dCIpKSkgaW50MzJfdAp1X3N0cmxlbl80OChjb25zdCBVQ2hhciAqcyk7CiMgMTAyICIvb3B0L2xv
Y2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJfdAp1X2NvdW50Q2hhcjMyXzQ4KGNvbnN0IFVD
aGFyICpzLCBpbnQzMl90IGxlbmd0aCk7CiMgMTIzICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVs
dCIpKSkgVUJvb2wKdV9zdHJIYXNNb3JlQ2hhcjMyVGhhbl80OChjb25zdCBVQ2hhciAqcywgaW50
MzJfdCBsZW5ndGgsIGludDMyX3QgbnVtYmVyKTsKIyAxMzYgIi9vcHQvbG9jYWwvaW5jbHVkZS91
bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKSBVQ2hhcioKdV9zdHJjYXRfNDgoVUNoYXIgKmRzdCwKICAgIGNvbnN0IFVDaGFy
ICpzcmMpOwojIDE1NCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRl
cm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVDaGFyKgp1X3N0
cm5jYXRfNDgoVUNoYXIgKmRzdCwKICAgICBjb25zdCBVQ2hhciAqc3JjLAogICAgIGludDMyX3Qg
bik7CiMgMTc5ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAi
QyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIgKgp1X3N0cnN0
cl80OChjb25zdCBVQ2hhciAqcywgY29uc3QgVUNoYXIgKnN1YnN0cmluZyk7CiMgMjAzICIvb3B0
L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVf
XygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIgKgp1X3N0ckZpbmRGaXJzdF80OChjb25z
dCBVQ2hhciAqcywgaW50MzJfdCBsZW5ndGgsIGNvbnN0IFVDaGFyICpzdWJzdHJpbmcsIGludDMy
X3Qgc3ViTGVuZ3RoKTsKIyAyMjMgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcu
aCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQ2hh
ciAqCnVfc3RyY2hyXzQ4KGNvbnN0IFVDaGFyICpzLCBVQ2hhciBjKTsKIyAyNDMgIi9vcHQvbG9j
YWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2
aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQ2hhciAqCnVfc3RyY2hyMzJfNDgoY29uc3QgVUNoYXIg
KnMsIFVDaGFyMzIgYyk7CiMgMjY2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5n
LmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNo
YXIgKgp1X3N0cnJzdHJfNDgoY29uc3QgVUNoYXIgKnMsIGNvbnN0IFVDaGFyICpzdWJzdHJpbmcp
OwojIDI5MCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4gIkMi
IF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVDaGFyICoKdV9zdHJGaW5k
TGFzdF80OChjb25zdCBVQ2hhciAqcywgaW50MzJfdCBsZW5ndGgsIGNvbnN0IFVDaGFyICpzdWJz
dHJpbmcsIGludDMyX3Qgc3ViTGVuZ3RoKTsKIyAzMTAgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmlj
b2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZh
dWx0IikpKSBVQ2hhciAqCnVfc3RycmNocl80OChjb25zdCBVQ2hhciAqcywgVUNoYXIgYyk7CiMg
MzMwICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIgKgp1X3N0cnJjaHIzMl80
OChjb25zdCBVQ2hhciAqcywgVUNoYXIzMiBjKTsKIyAzNDUgIi9vcHQvbG9jYWwvaW5jbHVkZS91
bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKSBVQ2hhciAqCnVfc3RycGJya180OChjb25zdCBVQ2hhciAqc3RyaW5nLCBjb25z
dCBVQ2hhciAqbWF0Y2hTZXQpOwojIDM2MSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0
cmluZy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkp
IGludDMyX3QKdV9zdHJjc3BuXzQ4KGNvbnN0IFVDaGFyICpzdHJpbmcsIGNvbnN0IFVDaGFyICpt
YXRjaFNldCk7CiMgMzc3ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4
dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJfdAp1
X3N0cnNwbl80OChjb25zdCBVQ2hhciAqc3RyaW5nLCBjb25zdCBVQ2hhciAqbWF0Y2hTZXQpOwoj
IDQwNSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4gIkMiIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVDaGFyICoKdV9zdHJ0b2tfcl80
OChVQ2hhciAqc3JjLAogICAgIGNvbnN0IFVDaGFyICpkZWxpbSwKICAgICAgICAgICBVQ2hhciAq
KnNhdmVTdGF0ZSk7CiMgNDIwICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgi
CmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJf
dAp1X3N0cmNtcF80OChjb25zdCBVQ2hhciAqczEsCiAgICAgICAgIGNvbnN0IFVDaGFyICpzMik7
CiMgNDM1ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIg
X19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJfdAp1X3N0cmNtcENv
ZGVQb2ludE9yZGVyXzQ4KGNvbnN0IFVDaGFyICpzMSwgY29uc3QgVUNoYXIgKnMyKTsKIyA0NjUg
Ii9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBpbnQzMl90CnVfc3RyQ29tcGFyZV80OChj
b25zdCBVQ2hhciAqczEsIGludDMyX3QgbGVuZ3RoMSwKICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICpzMiwgaW50MzJfdCBsZW5ndGgyLAogICAgICAgICAgICAgVUJvb2wgY29kZVBvaW50T3JkZXIp
OwojIDQ5MCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4gIkMi
IF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGludDMyX3QKdV9zdHJDb21w
YXJlSXRlcl80OChVQ2hhckl0ZXJhdG9yICppdGVyMSwgVUNoYXJJdGVyYXRvciAqaXRlcjIsIFVC
b29sIGNvZGVQb2ludE9yZGVyKTsKIyA1NDMgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3Vz
dHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0Iikp
KSBpbnQzMl90CnVfc3RyQ2FzZUNvbXBhcmVfNDgoY29uc3QgVUNoYXIgKnMxLCBpbnQzMl90IGxl
bmd0aDEsCiAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnMyLCBpbnQzMl90IGxlbmd0aDIs
CiAgICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucywKICAgICAgICAgICAgICAgICBVRXJy
b3JDb2RlICpwRXJyb3JDb2RlKTsKIyA1NjEgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3Vz
dHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0Iikp
KSBpbnQzMl90CnVfc3RybmNtcF80OChjb25zdCBVQ2hhciAqdWNzMSwKICAgICBjb25zdCBVQ2hh
ciAqdWNzMiwKICAgICBpbnQzMl90IG4pOwojIDU3OSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdXN0cmluZy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1
bHQiKSkpIGludDMyX3QKdV9zdHJuY21wQ29kZVBvaW50T3JkZXJfNDgoY29uc3QgVUNoYXIgKnMx
LCBjb25zdCBVQ2hhciAqczIsIGludDMyX3Qgbik7CiMgNjAxICIvb3B0L2xvY2FsL2luY2x1ZGUv
dW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgi
ZGVmYXVsdCIpKSkgaW50MzJfdAp1X3N0cmNhc2VjbXBfNDgoY29uc3QgVUNoYXIgKnMxLCBjb25z
dCBVQ2hhciAqczIsIHVpbnQzMl90IG9wdGlvbnMpOwojIDYyNSAiL29wdC9sb2NhbC9pbmNsdWRl
L3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHko
ImRlZmF1bHQiKSkpIGludDMyX3QKdV9zdHJuY2FzZWNtcF80OChjb25zdCBVQ2hhciAqczEsIGNv
bnN0IFVDaGFyICpzMiwgaW50MzJfdCBuLCB1aW50MzJfdCBvcHRpb25zKTsKIyA2NDkgIi9vcHQv
bG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBpbnQzMl90CnVfbWVtY2FzZWNtcF80OChjb25zdCBV
Q2hhciAqczEsIGNvbnN0IFVDaGFyICpzMiwgaW50MzJfdCBsZW5ndGgsIHVpbnQzMl90IG9wdGlv
bnMpOwojIDY2MCAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4g
IkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVDaGFyKgp1X3N0cmNw
eV80OChVQ2hhciAqZHN0LAogICAgY29uc3QgVUNoYXIgKnNyYyk7CiMgNjc1ICIvb3B0L2xvY2Fs
L2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlz
aWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIqCnVfc3RybmNweV80OChVQ2hhciAqZHN0LAogICAg
IGNvbnN0IFVDaGFyICpzcmMsCiAgICAgaW50MzJfdCBuKTsKIyA2OTIgIi9vcHQvbG9jYWwvaW5j
bHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKSBVQ2hhciogdV91YXN0cmNweV80OChVQ2hhciAqZHN0LAogICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpzcmMgKTsKIyA3MDcgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmlj
b2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZh
dWx0IikpKSBVQ2hhciogdV91YXN0cm5jcHlfNDgoVUNoYXIgKmRzdCwKICAgICAgICAgICAgY29u
c3QgY2hhciAqc3JjLAogICAgICAgICAgICBpbnQzMl90IG4pOwojIDcyMSAiL29wdC9sb2NhbC9p
bmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2li
aWxpdHkoImRlZmF1bHQiKSkpIGNoYXIqIHVfYXVzdHJjcHlfNDgoY2hhciAqZHN0LAogICAgICAg
ICAgICBjb25zdCBVQ2hhciAqc3JjICk7CiMgNzM2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29k
ZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVs
dCIpKSkgY2hhciogdV9hdXN0cm5jcHlfNDgoY2hhciAqZHN0LAogICAgICAgICAgICBjb25zdCBV
Q2hhciAqc3JjLAogICAgICAgICAgICBpbnQzMl90IG4gKTsKIyA3NTAgIi9vcHQvbG9jYWwvaW5j
bHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmls
aXR5KCJkZWZhdWx0IikpKSBVQ2hhcioKdV9tZW1jcHlfNDgoVUNoYXIgKmRlc3QsIGNvbnN0IFVD
aGFyICpzcmMsIGludDMyX3QgY291bnQpOwojIDc2MSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNv
ZGUvdXN0cmluZy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1
bHQiKSkpIFVDaGFyKgp1X21lbW1vdmVfNDgoVUNoYXIgKmRlc3QsIGNvbnN0IFVDaGFyICpzcmMs
IGludDMyX3QgY291bnQpOwojIDc3MyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmlu
Zy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVD
aGFyKgp1X21lbXNldF80OChVQ2hhciAqZGVzdCwgVUNoYXIgYywgaW50MzJfdCBjb3VudCk7CiMg
Nzg3ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJfdAp1X21lbWNtcF80OChj
b25zdCBVQ2hhciAqYnVmMSwgY29uc3QgVUNoYXIgKmJ1ZjIsIGludDMyX3QgY291bnQpOwojIDgw
MyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRlcm4gIkMiIF9fYXR0
cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGludDMyX3QKdV9tZW1jbXBDb2RlUG9p
bnRPcmRlcl80OChjb25zdCBVQ2hhciAqczEsIGNvbnN0IFVDaGFyICpzMiwgaW50MzJfdCBjb3Vu
dCk7CiMgODIzICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAi
QyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIqCnVfbWVtY2hy
XzQ4KGNvbnN0IFVDaGFyICpzLCBVQ2hhciBjLCBpbnQzMl90IGNvdW50KTsKIyA4NDMgIi9vcHQv
bG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBVQ2hhcioKdV9tZW1jaHIzMl80OChjb25zdCBVQ2hh
ciAqcywgVUNoYXIzMiBjLCBpbnQzMl90IGNvdW50KTsKIyA4NjMgIi9vcHQvbG9jYWwvaW5jbHVk
ZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5
KCJkZWZhdWx0IikpKSBVQ2hhcioKdV9tZW1yY2hyXzQ4KGNvbnN0IFVDaGFyICpzLCBVQ2hhciBj
LCBpbnQzMl90IGNvdW50KTsKIyA4ODMgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJp
bmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBV
Q2hhcioKdV9tZW1yY2hyMzJfNDgoY29uc3QgVUNoYXIgKnMsIFVDaGFyMzIgYywgaW50MzJfdCBj
b3VudCk7CiMgMTAwMSAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpleHRl
cm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIGludDMyX3QKdV91
bmVzY2FwZV80OChjb25zdCBjaGFyICpzcmMsCiAgICAgICAgICAgVUNoYXIgKmRlc3QsIGludDMy
X3QgZGVzdENhcGFjaXR5KTsKCmV4dGVybiAiQyIgewojIDEwMTggIi9vcHQvbG9jYWwvaW5jbHVk
ZS91bmljb2RlL3VzdHJpbmcuaCIKdHlwZWRlZiBVQ2hhciAoICpVTkVTQ0FQRV9DSEFSX0FUKShp
bnQzMl90IG9mZnNldCwgdm9pZCAqY29udGV4dCk7Cn0KIyAxMDQ5ICIvb3B0L2xvY2FsL2luY2x1
ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0
eSgiZGVmYXVsdCIpKSkgVUNoYXIzMgp1X3VuZXNjYXBlQXRfNDgoVU5FU0NBUEVfQ0hBUl9BVCBj
aGFyQXQsCiAgICAgICAgICAgICBpbnQzMl90ICpvZmZzZXQsCiAgICAgICAgICAgICBpbnQzMl90
IGxlbmd0aCwKICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQpOwojIDEwNzUgIi9vcHQvbG9jYWwv
aW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNp
YmlsaXR5KCJkZWZhdWx0IikpKSBpbnQzMl90CnVfc3RyVG9VcHBlcl80OChVQ2hhciAqZGVzdCwg
aW50MzJfdCBkZXN0Q2FwYWNpdHksCiAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQz
Ml90IHNyY0xlbmd0aCwKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSwKICAgICAgICAg
ICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwojIDExMDEgIi9vcHQvbG9jYWwvaW5jbHVkZS91
bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJk
ZWZhdWx0IikpKSBpbnQzMl90CnVfc3RyVG9Mb3dlcl80OChVQ2hhciAqZGVzdCwgaW50MzJfdCBk
ZXN0Q2FwYWNpdHksCiAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xl
bmd0aCwKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSwKICAgICAgICAgICAgIFVFcnJv
ckNvZGUgKnBFcnJvckNvZGUpOwojIDExNDcgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3Vz
dHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0Iikp
KSBpbnQzMl90CnVfc3RyVG9UaXRsZV80OChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNp
dHksCiAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKICAg
ICAgICAgICAgIFVCcmVha0l0ZXJhdG9yICp0aXRsZUl0ZXIsCiAgICAgICAgICAgICBjb25zdCBj
aGFyICpsb2NhbGUsCiAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAxMTc4
ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgaW50MzJfdAp1X3N0ckZvbGRDYXNlXzQ4
KFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKICAgICAgICAgICAgICBjb25zdCBV
Q2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKICAgICAgICAgICAgICB1aW50MzJfdCBvcHRp
b25zLAogICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwojIDEyMDcgIi9vcHQv
bG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9f
KCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSB3Y2hhcl90Kgp1X3N0clRvV0NTXzQ4KHdjaGFyX3Qg
KmRlc3QsCiAgICAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAgICAgICAgICAgaW50MzJf
dCAqcERlc3RMZW5ndGgsCiAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyYywKICAgICAgICAgICBp
bnQzMl90IHNyY0xlbmd0aCwKICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAx
MjM2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19h
dHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIqCnVfc3RyRnJvbVdDU180
OChVQ2hhciAqZGVzdCwKICAgICAgICAgICAgIGludDMyX3QgZGVzdENhcGFjaXR5LAogICAgICAg
ICAgICAgaW50MzJfdCAqcERlc3RMZW5ndGgsCiAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICpz
cmMsCiAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKICAgICAgICAgICAgIFVFcnJvckNv
ZGUgKnBFcnJvckNvZGUpOwojIDEyNjcgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJp
bmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBj
aGFyKgp1X3N0clRvVVRGOF80OChjaGFyICpkZXN0LAogICAgICAgICAgICBpbnQzMl90IGRlc3RD
YXBhY2l0eSwKICAgICAgICAgICAgaW50MzJfdCAqcERlc3RMZW5ndGgsCiAgICAgICAgICAgIGNv
bnN0IFVDaGFyICpzcmMsCiAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAogICAgICAgICAg
ICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAxMjk3ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5p
Y29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVm
YXVsdCIpKSkgVUNoYXIqCnVfc3RyRnJvbVVURjhfNDgoVUNoYXIgKmRlc3QsCiAgICAgICAgICAg
ICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAgICAgICAgICAgICAgaW50MzJfdCAqcERlc3RMZW5n
dGgsCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3JjLAogICAgICAgICAgICAgIGludDMyX3Qg
c3JjTGVuZ3RoLAogICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwojIDEzNDEg
Ii9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJpbmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBjaGFyKgp1X3N0clRvVVRGOFdpdGhTdWJf
NDgoY2hhciAqZGVzdCwKICAgICAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAgICAgICAg
ICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAogICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLAog
ICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKICAgICAgICAgICAgVUNoYXIzMiBzdWJjaGFy
LCBpbnQzMl90ICpwTnVtU3Vic3RpdHV0aW9ucywKICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVy
cm9yQ29kZSk7CiMgMTM4NyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmluZy5oIgpl
eHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVDaGFyKgp1
X3N0ckZyb21VVEY4V2l0aFN1Yl80OChVQ2hhciAqZGVzdCwKICAgICAgICAgICAgICBpbnQzMl90
IGRlc3RDYXBhY2l0eSwKICAgICAgICAgICAgICBpbnQzMl90ICpwRGVzdExlbmd0aCwKICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpzcmMsCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgs
CiAgICAgICAgICAgICAgVUNoYXIzMiBzdWJjaGFyLCBpbnQzMl90ICpwTnVtU3Vic3RpdHV0aW9u
cywKICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAxNDQ3ICIvb3B0L2xv
Y2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygo
dmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIgKgp1X3N0ckZyb21VVEY4TGVuaWVudF80OChV
Q2hhciAqZGVzdCwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAg
ICAgICAgICAgICAgICAgICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpzcmMsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVu
Z3RoLAogICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAxNDc3
ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRy
aWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIzMioKdV9zdHJUb1VURjMyXzQ4
KFVDaGFyMzIgKmRlc3QsCiAgICAgICAgICAgICBpbnQzMl90IGRlc3RDYXBhY2l0eSwKICAgICAg
ICAgICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAogICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNy
YywKICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAogICAgICAgICAgICAgVUVycm9yQ29k
ZSAqcEVycm9yQ29kZSk7CiMgMTUwNyAiL29wdC9sb2NhbC9pbmNsdWRlL3VuaWNvZGUvdXN0cmlu
Zy5oIgpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIFVD
aGFyKgp1X3N0ckZyb21VVEYzMl80OChVQ2hhciAqZGVzdCwKICAgICAgICAgICAgICAgaW50MzJf
dCBkZXN0Q2FwYWNpdHksCiAgICAgICAgICAgICAgIGludDMyX3QgKnBEZXN0TGVuZ3RoLAogICAg
ICAgICAgICAgICBjb25zdCBVQ2hhcjMyICpzcmMsCiAgICAgICAgICAgICAgIGludDMyX3Qgc3Jj
TGVuZ3RoLAogICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsKIyAxNTUxICIv
b3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgVUNoYXIzMioKdV9zdHJUb1VURjMyV2l0aFN1
Yl80OChVQ2hhcjMyICpkZXN0LAogICAgICAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAg
ICAgICAgICAgICBpbnQzMl90ICpwRGVzdExlbmd0aCwKICAgICAgICAgICAgIGNvbnN0IFVDaGFy
ICpzcmMsCiAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwKICAgICAgICAgICAgIFVDaGFy
MzIgc3ViY2hhciwgaW50MzJfdCAqcE51bVN1YnN0aXR1dGlvbnMsCiAgICAgICAgICAgICBVRXJy
b3JDb2RlICpwRXJyb3JDb2RlKTsKIyAxNTk2ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91
c3RyaW5nLmgiCmV4dGVybiAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIp
KSkgVUNoYXIqCnVfc3RyRnJvbVVURjMyV2l0aFN1Yl80OChVQ2hhciAqZGVzdCwKICAgICAgICAg
ICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAgICAgICAgICAgICAgIGludDMyX3QgKnBEZXN0
TGVuZ3RoLAogICAgICAgICAgICAgICBjb25zdCBVQ2hhcjMyICpzcmMsCiAgICAgICAgICAgICAg
IGludDMyX3Qgc3JjTGVuZ3RoLAogICAgICAgICAgICAgICBVQ2hhcjMyIHN1YmNoYXIsIGludDMy
X3QgKnBOdW1TdWJzdGl0dXRpb25zLAogICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JD
b2RlKTsKIyAxNjM3ICIvb3B0L2xvY2FsL2luY2x1ZGUvdW5pY29kZS91c3RyaW5nLmgiCmV4dGVy
biAiQyIgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgY2hhcioKdV9zdHJU
b0phdmFNb2RpZmllZFVURjhfNDgoCiAgICAgICAgY2hhciAqZGVzdCwKICAgICAgICBpbnQzMl90
IGRlc3RDYXBhY2l0eSwKICAgICAgICBpbnQzMl90ICpwRGVzdExlbmd0aCwKICAgICAgICBjb25z
dCBVQ2hhciAqc3JjLAogICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLAogICAgICAgIFVFcnJvckNv
ZGUgKnBFcnJvckNvZGUpOwojIDE2ODYgIi9vcHQvbG9jYWwvaW5jbHVkZS91bmljb2RlL3VzdHJp
bmcuaCIKZXh0ZXJuICJDIiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBV
Q2hhcioKdV9zdHJGcm9tSmF2YU1vZGlmaWVkVVRGOFdpdGhTdWJfNDgoCiAgICAgICAgVUNoYXIg
KmRlc3QsCiAgICAgICAgaW50MzJfdCBkZXN0Q2FwYWNpdHksCiAgICAgICAgaW50MzJfdCAqcERl
c3RMZW5ndGgsCiAgICAgICAgY29uc3QgY2hhciAqc3JjLAogICAgICAgIGludDMyX3Qgc3JjTGVu
Z3RoLAogICAgICAgIFVDaGFyMzIgc3ViY2hhciwgaW50MzJfdCAqcE51bVN1YnN0aXR1dGlvbnMs
CiAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CiMgMzAgIi4vU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgiIDIKIyAxICIvb3B0L2xvY2FsL2lu
Y2x1ZGUvdW5pY29kZS91dGYxNi5oIiAxCiMgMzEgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi91bmljb2RlL2ljdS9Vbmljb2RlSWN1LmgiIDIKCm5hbWVzcGFjZSBXVEYgewpuYW1lc3BhY2Ug
VW5pY29kZSB7CgplbnVtIERpcmVjdGlvbiB7CiAgICBMZWZ0VG9SaWdodCA9IFVfTEVGVF9UT19S
SUdIVCwKICAgIFJpZ2h0VG9MZWZ0ID0gVV9SSUdIVF9UT19MRUZULAogICAgRXVyb3BlYW5OdW1i
ZXIgPSBVX0VVUk9QRUFOX05VTUJFUiwKICAgIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yID0gVV9F
VVJPUEVBTl9OVU1CRVJfU0VQQVJBVE9SLAogICAgRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yID0g
VV9FVVJPUEVBTl9OVU1CRVJfVEVSTUlOQVRPUiwKICAgIEFyYWJpY051bWJlciA9IFVfQVJBQklD
X05VTUJFUiwKICAgIENvbW1vbk51bWJlclNlcGFyYXRvciA9IFVfQ09NTU9OX05VTUJFUl9TRVBB
UkFUT1IsCiAgICBCbG9ja1NlcGFyYXRvciA9IFVfQkxPQ0tfU0VQQVJBVE9SLAogICAgU2VnbWVu
dFNlcGFyYXRvciA9IFVfU0VHTUVOVF9TRVBBUkFUT1IsCiAgICBXaGl0ZVNwYWNlTmV1dHJhbCA9
IFVfV0hJVEVfU1BBQ0VfTkVVVFJBTCwKICAgIE90aGVyTmV1dHJhbCA9IFVfT1RIRVJfTkVVVFJB
TCwKICAgIExlZnRUb1JpZ2h0RW1iZWRkaW5nID0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORywK
ICAgIExlZnRUb1JpZ2h0T3ZlcnJpZGUgPSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUsCiAgICBS
aWdodFRvTGVmdEFyYWJpYyA9IFVfUklHSFRfVE9fTEVGVF9BUkFCSUMsCiAgICBSaWdodFRvTGVm
dEVtYmVkZGluZyA9IFVfUklHSFRfVE9fTEVGVF9FTUJFRERJTkcsCiAgICBSaWdodFRvTGVmdE92
ZXJyaWRlID0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFLAogICAgUG9wRGlyZWN0aW9uYWxGb3Jt
YXQgPSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQsCiAgICBOb25TcGFjaW5nTWFyayA9IFVfRElS
X05PTl9TUEFDSU5HX01BUkssCiAgICBCb3VuZGFyeU5ldXRyYWwgPSBVX0JPVU5EQVJZX05FVVRS
QUwKfTsKCmVudW0gRGVjb21wb3NpdGlvblR5cGUgewogICAgRGVjb21wb3NpdGlvbk5vbmUgPSBV
X0RUX05PTkUsCiAgICBEZWNvbXBvc2l0aW9uQ2Fub25pY2FsID0gVV9EVF9DQU5PTklDQUwsCiAg
ICBEZWNvbXBvc2l0aW9uQ29tcGF0ID0gVV9EVF9DT01QQVQsCiAgICBEZWNvbXBvc2l0aW9uQ2ly
Y2xlID0gVV9EVF9DSVJDTEUsCiAgICBEZWNvbXBvc2l0aW9uRmluYWwgPSBVX0RUX0ZJTkFMLAog
ICAgRGVjb21wb3NpdGlvbkZvbnQgPSBVX0RUX0ZPTlQsCiAgICBEZWNvbXBvc2l0aW9uRnJhY3Rp
b24gPSBVX0RUX0ZSQUNUSU9OLAogICAgRGVjb21wb3NpdGlvbkluaXRpYWwgPSBVX0RUX0lOSVRJ
QUwsCiAgICBEZWNvbXBvc2l0aW9uSXNvbGF0ZWQgPSBVX0RUX0lTT0xBVEVELAogICAgRGVjb21w
b3NpdGlvbk1lZGlhbCA9IFVfRFRfTUVESUFMLAogICAgRGVjb21wb3NpdGlvbk5hcnJvdyA9IFVf
RFRfTkFSUk9XLAogICAgRGVjb21wb3NpdGlvbk5vQnJlYWsgPSBVX0RUX05PQlJFQUssCiAgICBE
ZWNvbXBvc2l0aW9uU21hbGwgPSBVX0RUX1NNQUxMLAogICAgRGVjb21wb3NpdGlvblNxdWFyZSA9
IFVfRFRfU1FVQVJFLAogICAgRGVjb21wb3NpdGlvblN1YiA9IFVfRFRfU1VCLAogICAgRGVjb21w
b3NpdGlvblN1cGVyID0gVV9EVF9TVVBFUiwKICAgIERlY29tcG9zaXRpb25WZXJ0aWNhbCA9IFVf
RFRfVkVSVElDQUwsCiAgICBEZWNvbXBvc2l0aW9uV2lkZSA9IFVfRFRfV0lERSwKfTsKCmVudW0g
Q2hhckNhdGVnb3J5IHsKICAgIE5vQ2F0ZWdvcnkgPSAwLAogICAgT3RoZXJfTm90QXNzaWduZWQg
PSAoKHVpbnQzMl90KTE8PChVX0dFTkVSQUxfT1RIRVJfVFlQRVMpKSwKICAgIExldHRlcl9VcHBl
cmNhc2UgPSAoKHVpbnQzMl90KTE8PChVX1VQUEVSQ0FTRV9MRVRURVIpKSwKICAgIExldHRlcl9M
b3dlcmNhc2UgPSAoKHVpbnQzMl90KTE8PChVX0xPV0VSQ0FTRV9MRVRURVIpKSwKICAgIExldHRl
cl9UaXRsZWNhc2UgPSAoKHVpbnQzMl90KTE8PChVX1RJVExFQ0FTRV9MRVRURVIpKSwKICAgIExl
dHRlcl9Nb2RpZmllciA9ICgodWludDMyX3QpMTw8KFVfTU9ESUZJRVJfTEVUVEVSKSksCiAgICBM
ZXR0ZXJfT3RoZXIgPSAoKHVpbnQzMl90KTE8PChVX09USEVSX0xFVFRFUikpLAoKICAgIE1hcmtf
Tm9uU3BhY2luZyA9ICgodWludDMyX3QpMTw8KFVfTk9OX1NQQUNJTkdfTUFSSykpLAogICAgTWFy
a19FbmNsb3NpbmcgPSAoKHVpbnQzMl90KTE8PChVX0VOQ0xPU0lOR19NQVJLKSksCiAgICBNYXJr
X1NwYWNpbmdDb21iaW5pbmcgPSAoKHVpbnQzMl90KTE8PChVX0NPTUJJTklOR19TUEFDSU5HX01B
UkspKSwKCiAgICBOdW1iZXJfRGVjaW1hbERpZ2l0ID0gKCh1aW50MzJfdCkxPDwoVV9ERUNJTUFM
X0RJR0lUX05VTUJFUikpLAogICAgTnVtYmVyX0xldHRlciA9ICgodWludDMyX3QpMTw8KFVfTEVU
VEVSX05VTUJFUikpLAogICAgTnVtYmVyX090aGVyID0gKCh1aW50MzJfdCkxPDwoVV9PVEhFUl9O
VU1CRVIpKSwKCiAgICBTZXBhcmF0b3JfU3BhY2UgPSAoKHVpbnQzMl90KTE8PChVX1NQQUNFX1NF
UEFSQVRPUikpLAogICAgU2VwYXJhdG9yX0xpbmUgPSAoKHVpbnQzMl90KTE8PChVX0xJTkVfU0VQ
QVJBVE9SKSksCiAgICBTZXBhcmF0b3JfUGFyYWdyYXBoID0gKCh1aW50MzJfdCkxPDwoVV9QQVJB
R1JBUEhfU0VQQVJBVE9SKSksCgogICAgT3RoZXJfQ29udHJvbCA9ICgodWludDMyX3QpMTw8KFVf
Q09OVFJPTF9DSEFSKSksCiAgICBPdGhlcl9Gb3JtYXQgPSAoKHVpbnQzMl90KTE8PChVX0ZPUk1B
VF9DSEFSKSksCiAgICBPdGhlcl9Qcml2YXRlVXNlID0gKCh1aW50MzJfdCkxPDwoVV9QUklWQVRF
X1VTRV9DSEFSKSksCiAgICBPdGhlcl9TdXJyb2dhdGUgPSAoKHVpbnQzMl90KTE8PChVX1NVUlJP
R0FURSkpLAoKICAgIFB1bmN0dWF0aW9uX0Rhc2ggPSAoKHVpbnQzMl90KTE8PChVX0RBU0hfUFVO
Q1RVQVRJT04pKSwKICAgIFB1bmN0dWF0aW9uX09wZW4gPSAoKHVpbnQzMl90KTE8PChVX1NUQVJU
X1BVTkNUVUFUSU9OKSksCiAgICBQdW5jdHVhdGlvbl9DbG9zZSA9ICgodWludDMyX3QpMTw8KFVf
RU5EX1BVTkNUVUFUSU9OKSksCiAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IgPSAoKHVpbnQzMl90
KTE8PChVX0NPTk5FQ1RPUl9QVU5DVFVBVElPTikpLAogICAgUHVuY3R1YXRpb25fT3RoZXIgPSAo
KHVpbnQzMl90KTE8PChVX09USEVSX1BVTkNUVUFUSU9OKSksCgogICAgU3ltYm9sX01hdGggPSAo
KHVpbnQzMl90KTE8PChVX01BVEhfU1lNQk9MKSksCiAgICBTeW1ib2xfQ3VycmVuY3kgPSAoKHVp
bnQzMl90KTE8PChVX0NVUlJFTkNZX1NZTUJPTCkpLAogICAgU3ltYm9sX01vZGlmaWVyID0gKCh1
aW50MzJfdCkxPDwoVV9NT0RJRklFUl9TWU1CT0wpKSwKICAgIFN5bWJvbF9PdGhlciA9ICgodWlu
dDMyX3QpMTw8KFVfT1RIRVJfU1lNQk9MKSksCgogICAgUHVuY3R1YXRpb25fSW5pdGlhbFF1b3Rl
ID0gKCh1aW50MzJfdCkxPDwoVV9JTklUSUFMX1BVTkNUVUFUSU9OKSksCiAgICBQdW5jdHVhdGlv
bl9GaW5hbFF1b3RlID0gKCh1aW50MzJfdCkxPDwoVV9GSU5BTF9QVU5DVFVBVElPTikpCn07Cgpp
bmxpbmUgVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGMpCnsKICAgIHJldHVybiB1X2ZvbGRDYXNl
XzQ4KGMsIDApOwp9CgppbmxpbmUgaW50IGZvbGRDYXNlKFVDaGFyKiByZXN1bHQsIGludCByZXN1
bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQp7
CiAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKICAgIGludCByZWFsTGVuZ3Ro
ID0gdV9zdHJGb2xkQ2FzZV80OChyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3JjLCBzcmNMZW5ndGgs
IDAsICZzdGF0dXMpOwogICAgKmVycm9yID0gIVVfU1VDQ0VTUyhzdGF0dXMpOwogICAgcmV0dXJu
IHJlYWxMZW5ndGg7Cn0KCmlubGluZSBpbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0LCBpbnQgcmVz
dWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29sKiBlcnJvcikK
ewogICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAgICBpbnQgcmVhbExlbmd0
aCA9IHVfc3RyVG9Mb3dlcl80OChyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3JjLCBzcmNMZW5ndGgs
ICIiLCAmc3RhdHVzKTsKICAgICplcnJvciA9ICEhVV9GQUlMVVJFKHN0YXR1cyk7CiAgICByZXR1
cm4gcmVhbExlbmd0aDsKfQoKaW5saW5lIFVDaGFyMzIgdG9Mb3dlcihVQ2hhcjMyIGMpCnsKICAg
IHJldHVybiB1X3RvbG93ZXJfNDgoYyk7Cn0KCmlubGluZSBVQ2hhcjMyIHRvVXBwZXIoVUNoYXIz
MiBjKQp7CiAgICByZXR1cm4gdV90b3VwcGVyXzQ4KGMpOwp9CgppbmxpbmUgaW50IHRvVXBwZXIo
VUNoYXIqIHJlc3VsdCwgaW50IHJlc3VsdExlbmd0aCwgY29uc3QgVUNoYXIqIHNyYywgaW50IHNy
Y0xlbmd0aCwgYm9vbCogZXJyb3IpCnsKICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VS
Uk9SOwogICAgaW50IHJlYWxMZW5ndGggPSB1X3N0clRvVXBwZXJfNDgocmVzdWx0LCByZXN1bHRM
ZW5ndGgsIHNyYywgc3JjTGVuZ3RoLCAiIiwgJnN0YXR1cyk7CiAgICAqZXJyb3IgPSAhIVVfRkFJ
TFVSRShzdGF0dXMpOwogICAgcmV0dXJuIHJlYWxMZW5ndGg7Cn0KCmlubGluZSBVQ2hhcjMyIHRv
VGl0bGVDYXNlKFVDaGFyMzIgYykKewogICAgcmV0dXJuIHVfdG90aXRsZV80OChjKTsKfQoKaW5s
aW5lIGJvb2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKewogICAgICByZXR1cm4gdWJsb2NrX2dl
dENvZGVfNDgoYykgPT0gVUJMT0NLX0FSQUJJQzsKfQoKaW5saW5lIGJvb2wgaXNBbHBoYW51bWVy
aWMoVUNoYXIzMiBjKQp7CiAgICByZXR1cm4gdV9pc2FsbnVtXzQ4KGMpOwp9CgppbmxpbmUgYm9v
bCBpc1NlcGFyYXRvclNwYWNlKFVDaGFyMzIgYykKewogICAgcmV0dXJuIHVfY2hhclR5cGVfNDgo
YykgPT0gVV9TUEFDRV9TRVBBUkFUT1I7Cn0KCmlubGluZSBib29sIGlzUHJpbnRhYmxlQ2hhcihV
Q2hhcjMyIGMpCnsKICAgIHJldHVybiAhIXVfaXNwcmludF80OChjKTsKfQoKaW5saW5lIGJvb2wg
aXNQdW5jdChVQ2hhcjMyIGMpCnsKICAgIHJldHVybiAhIXVfaXNwdW5jdF80OChjKTsKfQoKaW5s
aW5lIGJvb2wgaGFzTGluZUJyZWFraW5nUHJvcGVydHlDb21wbGV4Q29udGV4dChVQ2hhcjMyIGMp
CnsKICAgIHJldHVybiB1X2dldEludFByb3BlcnR5VmFsdWVfNDgoYywgVUNIQVJfTElORV9CUkVB
SykgPT0gVV9MQl9DT01QTEVYX0NPTlRFWFQ7Cn0KCmlubGluZSBib29sIGhhc0xpbmVCcmVha2lu
Z1Byb3BlcnR5Q29tcGxleENvbnRleHRPcklkZW9ncmFwaGljKFVDaGFyMzIgYykKewogICAgaW50
MzJfdCBwcm9wID0gdV9nZXRJbnRQcm9wZXJ0eVZhbHVlXzQ4KGMsIFVDSEFSX0xJTkVfQlJFQUsp
OwogICAgcmV0dXJuIHByb3AgPT0gVV9MQl9DT01QTEVYX0NPTlRFWFQgfHwgcHJvcCA9PSBVX0xC
X0lERU9HUkFQSElDOwp9CgppbmxpbmUgVUNoYXIzMiBtaXJyb3JlZENoYXIoVUNoYXIzMiBjKQp7
CiAgICByZXR1cm4gdV9jaGFyTWlycm9yXzQ4KGMpOwp9CgppbmxpbmUgQ2hhckNhdGVnb3J5IGNh
dGVnb3J5KFVDaGFyMzIgYykKewogICAgcmV0dXJuIHN0YXRpY19jYXN0PENoYXJDYXRlZ29yeT4o
KCh1aW50MzJfdCkxPDwodV9jaGFyVHlwZV80OChjKSkpKTsKfQoKaW5saW5lIERpcmVjdGlvbiBk
aXJlY3Rpb24oVUNoYXIzMiBjKQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGlyZWN0aW9uPih1
X2NoYXJEaXJlY3Rpb25fNDgoYykpOwp9CgppbmxpbmUgYm9vbCBpc0xvd2VyKFVDaGFyMzIgYykK
ewogICAgcmV0dXJuICEhdV9pc2xvd2VyXzQ4KGMpOwp9CgppbmxpbmUgdWludDhfdCBjb21iaW5p
bmdDbGFzcyhVQ2hhcjMyIGMpCnsKICAgIHJldHVybiB1X2dldENvbWJpbmluZ0NsYXNzXzQ4KGMp
Owp9CgppbmxpbmUgRGVjb21wb3NpdGlvblR5cGUgZGVjb21wb3NpdGlvblR5cGUoVUNoYXIzMiBj
KQp7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVjb21wb3NpdGlvblR5cGU+KHVfZ2V0SW50UHJv
cGVydHlWYWx1ZV80OChjLCBVQ0hBUl9ERUNPTVBPU0lUSU9OX1RZUEUpKTsKfQoKaW5saW5lIGlu
dCB1bWVtY2FzZWNtcChjb25zdCBVQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIGludCBsZW4pCnsK
ICAgIHJldHVybiB1X21lbWNhc2VjbXBfNDgoYSwgYiwgbGVuLCAwKTsKfQoKfSB9CiMgMzUgIi4v
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi91bmljb2RlL1VuaWNvZGUuaCIgMgojIDQzICIuL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdW5pY29kZS9Vbmljb2RlLmgiCnR5cGVkZWYgaW50IGR1
bW15VUNoYXJJc1R3b0J5dGVzIFsoc2l6ZW9mKFVDaGFyKSA9PSAyKSA/IDEgOiAtMV07CiMgMjcg
Ii4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0FTQ0lJRmFzdFBhdGguaCIgMgoKbmFt
ZXNwYWNlIFdURiB7CgoKCnR5cGVkZWYgdWludHB0cl90IE1hY2hpbmVXb3JkOwpjb25zdCB1aW50
cHRyX3QgbWFjaGluZVdvcmRBbGlnbm1lbnRNYXNrID0gc2l6ZW9mKE1hY2hpbmVXb3JkKSAtIDE7
CgppbmxpbmUgYm9vbCBpc0FsaWduZWRUb01hY2hpbmVXb3JkKGNvbnN0IHZvaWQqIHBvaW50ZXIp
CnsKICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKSAmIG1h
Y2hpbmVXb3JkQWxpZ25tZW50TWFzayk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBhbGlnblRvTWFjaGluZVdvcmQoVCogcG9pbnRlcikKewogICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8VCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihwb2ludGVyKSAmIH5tYWNoaW5l
V29yZEFsaWdubWVudE1hc2spOwp9Cgp0ZW1wbGF0ZTxzaXplX3Qgc2l6ZSwgdHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4gc3RydWN0IE5vbkFTQ0lJTWFzazsKdGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVND
SUlNYXNrPDQsIFVDaGFyPiB7CiAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHZhbHVlKCkgeyBy
ZXR1cm4gMHhGRjgwRkY4MFU7IH0KfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDQs
IExDaGFyPiB7CiAgICBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHZhbHVlKCkgeyByZXR1cm4gMHg4
MDgwODA4MFU7IH0KfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgTm9uQVNDSUlNYXNrPDgsIFVDaGFyPiB7
CiAgICBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHZhbHVlKCkgeyByZXR1cm4gMHhGRjgwRkY4MEZG
ODBGRjgwVUxMOyB9Cn07CnRlbXBsYXRlPD4gc3RydWN0IE5vbkFTQ0lJTWFzazw4LCBMQ2hhcj4g
ewogICAgc3RhdGljIGlubGluZSB1aW50NjRfdCB2YWx1ZSgpIHsgcmV0dXJuIDB4ODA4MDgwODA4
MDgwODA4MFVMTDsgfQp9OwoKCnRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CmlubGlu
ZSBib29sIGlzQWxsQVNDSUkoTWFjaGluZVdvcmQgd29yZCkKewogICAgcmV0dXJuICEod29yZCAm
IE5vbkFTQ0lJTWFzazxzaXplb2YoTWFjaGluZVdvcmQpLCBDaGFyYWN0ZXJUeXBlPjo6dmFsdWUo
KSk7Cn0KCgoKdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KaW5saW5lIGJvb2wgY2hh
cmFjdGVyc0FyZUFsbEFTQ0lJKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpCnsKICAgIE1hY2hpbmVXb3JkIGFsbENoYXJCaXRzID0gMDsKICAgIGNvbnN0IENo
YXJhY3RlclR5cGUqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7CgoKICAgIHdoaWxlICghaXNB
bGlnbmVkVG9NYWNoaW5lV29yZChjaGFyYWN0ZXJzKSAmJiBjaGFyYWN0ZXJzICE9IGVuZCkgewog
ICAgICAgIGFsbENoYXJCaXRzIHw9ICpjaGFyYWN0ZXJzOwogICAgICAgICsrY2hhcmFjdGVyczsK
ICAgIH0KCgogICAgY29uc3QgQ2hhcmFjdGVyVHlwZSogd29yZEVuZCA9IGFsaWduVG9NYWNoaW5l
V29yZChlbmQpOwogICAgY29uc3Qgc2l6ZV90IGxvb3BJbmNyZW1lbnQgPSBzaXplb2YoTWFjaGlu
ZVdvcmQpIC8gc2l6ZW9mKENoYXJhY3RlclR5cGUpOwogICAgd2hpbGUgKGNoYXJhY3RlcnMgPCB3
b3JkRW5kKSB7CiAgICAgICAgYWxsQ2hhckJpdHMgfD0gKihyZWludGVycHJldF9jYXN0PGNvbnN0
IE1hY2hpbmVXb3JkKj4oY2hhcmFjdGVycykpOwogICAgICAgIGNoYXJhY3RlcnMgKz0gbG9vcElu
Y3JlbWVudDsKICAgIH0KCgogICAgd2hpbGUgKGNoYXJhY3RlcnMgIT0gZW5kKSB7CiAgICAgICAg
YWxsQ2hhckJpdHMgfD0gKmNoYXJhY3RlcnM7CiAgICAgICAgKytjaGFyYWN0ZXJzOwogICAgfQoK
ICAgIE1hY2hpbmVXb3JkIG5vbkFTQ0lJQml0TWFzayA9IE5vbkFTQ0lJTWFzazxzaXplb2YoTWFj
aGluZVdvcmQpLCBDaGFyYWN0ZXJUeXBlPjo6dmFsdWUoKTsKICAgIHJldHVybiAhKGFsbENoYXJC
aXRzICYgbm9uQVNDSUlCaXRNYXNrKTsKfQoKCn0KIyAyOSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvV1RGU3RyaW5nLmgiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvdGV4dC9TdHJpbmdJbXBsLmgiIDEKIyAyNiAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oIgojIDEgIi91c3IvbGliL2djYy9wb3dlcnBjLWFwcGxlLWRhcndp
bjkvNC4yLjEvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2Mv
cG93ZXJwYy1hcHBsZS1kYXJ3aW45LzQuMi4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0CiMg
OCAiL3Vzci9saWIvZ2NjL3Bvd2VycGMtYXBwbGUtZGFyd2luOS80LjIuMS9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMgNAojIDI3ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oIiAx
CiMgNDQgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmgiCm5hbWVzcGFj
ZSBXVEYgewoKdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBib29sIGlzQVNDSUko
Q2hhclR5cGUgYykKewogICAgcmV0dXJuICEoYyAmIH4weDdGKTsKfQoKdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlBbHBoYShDaGFyVHlwZSBjKQp7CiAgICBy
ZXR1cm4gKGMgfCAweDIwKSA+PSAnYScgJiYgKGMgfCAweDIwKSA8PSAneic7Cn0KCnRlbXBsYXRl
PHR5cGVuYW1lIENoYXJUeXBlPiBpbmxpbmUgYm9vbCBpc0FTQ0lJRGlnaXQoQ2hhclR5cGUgYykK
ewogICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBD
aGFyVHlwZT4gaW5saW5lIGJvb2wgaXNBU0NJSUFscGhhbnVtZXJpYyhDaGFyVHlwZSBjKQp7CiAg
ICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8IGlzQVNDSUlBbHBoYShjKTsKfQoKdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlIZXhEaWdpdChDaGFyVHlwZSBj
KQp7CiAgICByZXR1cm4gaXNBU0NJSURpZ2l0KGMpIHx8ICgoYyB8IDB4MjApID49ICdhJyAmJiAo
YyB8IDB4MjApIDw9ICdmJyk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlPiBpbmxpbmUg
Ym9vbCBpc0FTQ0lJTG93ZXIoQ2hhclR5cGUgYykKewogICAgcmV0dXJuIGMgPj0gJ2EnICYmIGMg
PD0gJ3onOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIGJvb2wgaXNBU0NJ
SU9jdGFsRGlnaXQoQ2hhclR5cGUgYykKewogICAgcmV0dXJuIChjID49ICcwJykgJiAoYyA8PSAn
NycpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIGJvb2wgaXNBU0NJSVBy
aW50YWJsZShDaGFyVHlwZSBjKQp7CiAgICByZXR1cm4gYyA+PSAnICcgJiYgYyA8PSAnfic7Cn0K
IyA5OSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaCIKdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBib29sIGlzQVNDSUlTcGFjZShDaGFyVHlwZSBjKQp7
CiAgICByZXR1cm4gYyA8PSAnICcgJiYgKGMgPT0gJyAnIHx8IChjIDw9IDB4RCAmJiBjID49IDB4
OSkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIGJvb2wgaXNBU0NJSVVw
cGVyKENoYXJUeXBlIGMpCnsKICAgIHJldHVybiBjID49ICdBJyAmJiBjIDw9ICdaJzsKfQoKdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBDaGFyVHlwZSB0b0FTQ0lJTG93ZXIoQ2hh
clR5cGUgYykKewogICAgcmV0dXJuIGMgfCAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA8PCA1KTsK
fQoKdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBDaGFyVHlwZSB0b0FTQ0lJTG93
ZXJVbmNoZWNrZWQoQ2hhclR5cGUgY2hhcmFjdGVyKQp7CgoKCgoKICAgIHJldHVybiBjaGFyYWN0
ZXIgfCAweDIwOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIENoYXJUeXBl
IHRvQVNDSUlVcHBlcihDaGFyVHlwZSBjKQp7CiAgICByZXR1cm4gYyAmIH4oKGMgPj0gJ2EnICYm
IGMgPD0gJ3onKSA8PCA1KTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclR5cGU+IGlubGluZSBp
bnQgdG9BU0NJSUhleFZhbHVlKENoYXJUeXBlIGMpCnsKICAgICgodm9pZCkwKTsKICAgIHJldHVy
biBjIDwgJ0EnID8gYyAtICcwJyA6IChjIC0gJ0EnICsgMTApICYgMHhGOwp9Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIGludCB0b0FTQ0lJSGV4VmFsdWUoQ2hhclR5cGUgdXBw
ZXJWYWx1ZSwgQ2hhclR5cGUgbG93ZXJWYWx1ZSkKewogICAgKCh2b2lkKTApOwogICAgcmV0dXJu
ICgodG9BU0NJSUhleFZhbHVlKHVwcGVyVmFsdWUpIDw8IDQpICYgMHhGMCkgfCB0b0FTQ0lJSGV4
VmFsdWUobG93ZXJWYWx1ZSk7Cn0KCmlubGluZSBjaGFyIGxvd2VyTmliYmxlVG9BU0NJSUhleERp
Z2l0KGNoYXIgYykKewogICAgY2hhciBuaWJibGUgPSBjICYgMHhGOwogICAgcmV0dXJuIG5pYmJs
ZSA8IDEwID8gJzAnICsgbmliYmxlIDogJ0EnICsgbmliYmxlIC0gMTA7Cn0KCmlubGluZSBjaGFy
IHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGNoYXIgYykKewogICAgY2hhciBuaWJibGUgPSAo
YyA+PiA0KSAmIDB4RjsKICAgIHJldHVybiBuaWJibGUgPCAxMCA/ICcwJyArIG5pYmJsZSA6ICdB
JyArIG5pYmJsZSAtIDEwOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4gaW5saW5lIGJv
b2wgaXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbChDaGFyVHlwZSBjc3NDaGFyYWN0ZXIsIGNoYXIg
Y2hhcmFjdGVyKQp7CgoKICAgICgodm9pZCkwKTsKICAgIHJldHVybiBfX2J1aWx0aW5fZXhwZWN0
KCh0b0FTQ0lJTG93ZXJVbmNoZWNrZWQoY3NzQ2hhcmFjdGVyKSA9PSBjaGFyYWN0ZXIpLCAxKTsK
fQoKfQoKdXNpbmcgV1RGOjppc0FTQ0lJOwp1c2luZyBXVEY6OmlzQVNDSUlBbHBoYTsKdXNpbmcg
V1RGOjppc0FTQ0lJQWxwaGFudW1lcmljOwp1c2luZyBXVEY6OmlzQVNDSUlEaWdpdDsKdXNpbmcg
V1RGOjppc0FTQ0lJSGV4RGlnaXQ7CnVzaW5nIFdURjo6aXNBU0NJSUxvd2VyOwp1c2luZyBXVEY6
OmlzQVNDSUlPY3RhbERpZ2l0Owp1c2luZyBXVEY6OmlzQVNDSUlQcmludGFibGU7CnVzaW5nIFdU
Rjo6aXNBU0NJSVNwYWNlOwp1c2luZyBXVEY6OmlzQVNDSUlVcHBlcjsKdXNpbmcgV1RGOjp0b0FT
Q0lJSGV4VmFsdWU7CnVzaW5nIFdURjo6dG9BU0NJSUxvd2VyOwp1c2luZyBXVEY6OnRvQVNDSUlM
b3dlclVuY2hlY2tlZDsKdXNpbmcgV1RGOjp0b0FTQ0lJVXBwZXI7CnVzaW5nIFdURjo6bG93ZXJO
aWJibGVUb0FTQ0lJSGV4RGlnaXQ7CnVzaW5nIFdURjo6dXBwZXJOaWJibGVUb0FTQ0lJSGV4RGln
aXQ7CnVzaW5nIFdURjo6aXNBU0NJSUFscGhhQ2FzZWxlc3NFcXVhbDsKIyAyOCAiLi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIiAyCgoKIyAxICIuL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvU3RyaW5nSGFzaGVyLmgiIDEKIyAyNiAiLi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL1N0cmluZ0hhc2hlci5oIgpuYW1lc3BhY2UgV1RGIHsKCgpzdGF0aWMgY29u
c3QgdW5zaWduZWQgc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDllMzc3OWI5VTsKCgoKCgoK
CmNsYXNzIFN0cmluZ0hhc2hlciB7CnB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
bGFnQ291bnQgPSA4OwoKICAgIGlubGluZSBTdHJpbmdIYXNoZXIoKQogICAgICAgIDogbV9oYXNo
KHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlKQogICAgICAgICwgbV9oYXNQZW5kaW5nQ2hhcmFjdGVy
KGZhbHNlKQogICAgICAgICwgbV9wZW5kaW5nQ2hhcmFjdGVyKDApCiAgICB7CiAgICB9CgogICAg
aW5saW5lIHZvaWQgYWRkQ2hhcmFjdGVycyhVQ2hhciBhLCBVQ2hhciBiKQogICAgewogICAgICAg
ICgodm9pZCkwKTsKICAgICAgICBhZGRDaGFyYWN0ZXJzVG9IYXNoKGEsIGIpOwogICAgfQoKICAg
IGlubGluZSB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBjaCkKICAgIHsKICAgICAgICBpZiAobV9o
YXNQZW5kaW5nQ2hhcmFjdGVyKSB7CiAgICAgICAgICAgIGFkZENoYXJhY3RlcnNUb0hhc2gobV9w
ZW5kaW5nQ2hhcmFjdGVyLCBjaCk7CiAgICAgICAgICAgIG1faGFzUGVuZGluZ0NoYXJhY3RlciA9
IGZhbHNlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBtX3BlbmRpbmdD
aGFyYWN0ZXIgPSBjaDsKICAgICAgICBtX2hhc1BlbmRpbmdDaGFyYWN0ZXIgPSB0cnVlOwogICAg
fQoKICAgIGlubGluZSB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgIHsKICAgICAgICB1bnNpZ25l
ZCByZXN1bHQgPSBtX2hhc2g7CgoKICAgICAgICBpZiAobV9oYXNQZW5kaW5nQ2hhcmFjdGVyKSB7
CiAgICAgICAgICAgIHJlc3VsdCArPSBtX3BlbmRpbmdDaGFyYWN0ZXI7CiAgICAgICAgICAgIHJl
c3VsdCBePSByZXN1bHQgPDwgMTE7CiAgICAgICAgICAgIHJlc3VsdCArPSByZXN1bHQgPj4gMTc7
CiAgICAgICAgfQoKCiAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAzOwogICAgICAgIHJlc3Vs
dCArPSByZXN1bHQgPj4gNTsKICAgICAgICByZXN1bHQgXj0gcmVzdWx0IDw8IDI7CiAgICAgICAg
cmVzdWx0ICs9IHJlc3VsdCA+PiAxNTsKICAgICAgICByZXN1bHQgXj0gcmVzdWx0IDw8IDEwOwoK
CgogICAgICAgIHJlc3VsdCAmPSAoMXUgPDwgKHNpemVvZihyZXN1bHQpICogOCAtIGZsYWdDb3Vu
dCkpIC0gMTsKCgoKCgogICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICByZXN1bHQgPSAw
eDgwMDAwMDAwID4+IGZsYWdDb3VudDsKCiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyBpbmxpbmUg
dW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQogICAg
ewogICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7CiAgICAgICAgYm9vbCByZW0gPSBsZW5ndGgg
JiAxOwogICAgICAgIGxlbmd0aCA+Pj0gMTsKCiAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7CiAg
ICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzKENvbnZlcnRlcihkYXRhWzBdKSwgQ29udmVy
dGVyKGRhdGFbMV0pKTsKICAgICAgICAgICAgZGF0YSArPSAyOwogICAgICAgIH0KCiAgICAgICAg
aWYgKHJlbSkKICAgICAgICAgICAgaGFzaGVyLmFkZENoYXJhY3RlcihDb252ZXJ0ZXIoKmRhdGEp
KTsKCiAgICAgICAgcmV0dXJuIGhhc2hlci5oYXNoKCk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbXB1
dGVIYXNoKGNvbnN0IFQqIGRhdGEpCiAgICB7CiAgICAgICAgU3RyaW5nSGFzaGVyIGhhc2hlcjsK
CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgVUNoYXIgYjAgPSBDb252ZXJ0ZXIo
KmRhdGErKyk7CiAgICAgICAgICAgIGlmICghYjApCiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgVUNoYXIgYjEgPSBDb252ZXJ0ZXIoKmRhdGErKyk7CiAgICAgICAgICAgIGlmICgh
YjEpIHsKICAgICAgICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXIoYjApOwogICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGhhc2hlci5hZGRDaGFyYWN0
ZXJzKGIwLCBiMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaGFzaGVyLmhhc2goKTsKICAg
IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbXB1
dGVIYXNoKGNvbnN0IFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKICAgIHsKICAgICAgICByZXR1
cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKTsKICAgIH0K
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbXB1dGVI
YXNoKGNvbnN0IFQqIGRhdGEpCiAgICB7CiAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoPFQsIGRl
ZmF1bHRDb252ZXJ0ZXI+KGRhdGEpOwogICAgfQoKICAgIHRlbXBsYXRlPHNpemVfdCBsZW5ndGg+
IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRhKQogICAg
ewogICAgICAgIHR5cGVkZWYgaW50IGR1bW15bGVuZ3RoX211c3RfYmVfYV9tdWx0aWJsZV9vZl9m
b3VyIFsoIShsZW5ndGggJSA0KSkgPyAxIDogLTFdOwogICAgICAgIHJldHVybiBjb21wdXRlSGFz
aDxVQ2hhcj4oc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhKSwgbGVuZ3RoIC8gc2l6ZW9m
KFVDaGFyKSk7CiAgICB9CgogICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBoYXNoTWVtb3J5KGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIHNpemUpCiAgICB7CiAgICAgICAgKCh2b2lkKTApOwog
ICAgICAgIHJldHVybiBjb21wdXRlSGFzaDxVQ2hhcj4oc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIq
PihkYXRhKSwgc2l6ZSAvIHNpemVvZihVQ2hhcikpOwogICAgfQoKcHJpdmF0ZToKICAgIHN0YXRp
YyBpbmxpbmUgVUNoYXIgZGVmYXVsdENvbnZlcnRlcihVQ2hhciBjaCkKICAgIHsKICAgICAgICBy
ZXR1cm4gY2g7CiAgICB9CgogICAgc3RhdGljIGlubGluZSBVQ2hhciBkZWZhdWx0Q29udmVydGVy
KExDaGFyIGNoKQogICAgewogICAgICAgIHJldHVybiBjaDsKICAgIH0KCiAgICBpbmxpbmUgdm9p
ZCBhZGRDaGFyYWN0ZXJzVG9IYXNoKFVDaGFyIGEsIFVDaGFyIGIpCiAgICB7CiAgICAgICAgbV9o
YXNoICs9IGE7CiAgICAgICAgdW5zaWduZWQgdG1wID0gKGIgPDwgMTEpIF4gbV9oYXNoOwogICAg
ICAgIG1faGFzaCA9IChtX2hhc2ggPDwgMTYpIF4gdG1wOwogICAgICAgIG1faGFzaCArPSBtX2hh
c2ggPj4gMTE7CiAgICB9CgogICAgdW5zaWduZWQgbV9oYXNoOwogICAgYm9vbCBtX2hhc1BlbmRp
bmdDaGFyYWN0ZXI7CiAgICBVQ2hhciBtX3BlbmRpbmdDaGFyYWN0ZXI7Cn07Cgp9Cgp1c2luZyBX
VEY6OlN0cmluZ0hhc2hlcjsKIyAzMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQv
U3RyaW5nSW1wbC5oIiAyCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5o
IiAxCiMgMjQgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaCIKIyAxICIuL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQWxpZ25tZW50LmgiIDEKIyAyNyAiLi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0FsaWdubWVudC5oIgpuYW1lc3BhY2UgV1RGIHsKIyA0MCAiLi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0FsaWdubWVudC5oIgogICAgdHlwZWRlZiBjaGFyIF9fYXR0
cmlidXRlX18oKF9fbWF5X2FsaWFzX18pKSBBbGlnbmVkQnVmZmVyQ2hhcjsKCgoKCiAgICB0ZW1w
bGF0ZTxzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWdubWVudD4gc3RydWN0IEFsaWduZWRCdWZmZXI7
CiAgICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gc3RydWN0IEFsaWduZWRCdWZmZXI8c2l6ZSwgMT4g
eyBBbGlnbmVkQnVmZmVyQ2hhciBidWZmZXJbc2l6ZV07IH07CiAgICB0ZW1wbGF0ZTxzaXplX3Qg
c2l6ZT4gc3RydWN0IEFsaWduZWRCdWZmZXI8c2l6ZSwgMj4geyBBbGlnbmVkQnVmZmVyQ2hhciBi
dWZmZXJbc2l6ZV0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oMikpKTsgfTsKICAgIHRlbXBs
YXRlPHNpemVfdCBzaXplPiBzdHJ1Y3QgQWxpZ25lZEJ1ZmZlcjxzaXplLCA0PiB7IEFsaWduZWRC
dWZmZXJDaGFyIGJ1ZmZlcltzaXplXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpOyB9
OwogICAgdGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVjdCBBbGlnbmVkQnVmZmVyPHNpemUsIDg+
IHsgQWxpZ25lZEJ1ZmZlckNoYXIgYnVmZmVyW3NpemVdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25l
ZF9fKDgpKSk7IH07CiAgICB0ZW1wbGF0ZTxzaXplX3Qgc2l6ZT4gc3RydWN0IEFsaWduZWRCdWZm
ZXI8c2l6ZSwgMTY+IHsgQWxpZ25lZEJ1ZmZlckNoYXIgYnVmZmVyW3NpemVdIF9fYXR0cmlidXRl
X18oKF9fYWxpZ25lZF9fKDE2KSkpOyB9OwogICAgdGVtcGxhdGU8c2l6ZV90IHNpemU+IHN0cnVj
dCBBbGlnbmVkQnVmZmVyPHNpemUsIDMyPiB7IEFsaWduZWRCdWZmZXJDaGFyIGJ1ZmZlcltzaXpl
XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygzMikpKTsgfTsKICAgIHRlbXBsYXRlPHNpemVf
dCBzaXplPiBzdHJ1Y3QgQWxpZ25lZEJ1ZmZlcjxzaXplLCA2ND4geyBBbGlnbmVkQnVmZmVyQ2hh
ciBidWZmZXJbc2l6ZV0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNjQpKSk7IH07CgogICAg
dGVtcGxhdGUgPHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ25tZW50PgogICAgdm9pZCBzd2FwKEFs
aWduZWRCdWZmZXI8c2l6ZSwgYWxpZ25tZW50PiYgYSwgQWxpZ25lZEJ1ZmZlcjxzaXplLCBhbGln
bm1lbnQ+JiBiKQogICAgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KQogICAgICAgICAgICBzdGQ6OnN3YXAoYS5idWZmZXJbaV0sIGIuYnVmZmVyW2ldKTsKICAgIH0K
Cn0KIyAyNSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oIiAyCiMgMSAiLi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RBbGxvY0Jhc2UuaCIgMQojIDI2ICIuL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTm9uY29weWFibGUuaCIgMQojIDI3ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvVmVjdG9yLmgiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTm90Rm91bmQu
aCIgMQojIDI5ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTm90Rm91bmQuaCIKbmFtZXNw
YWNlIFdURiB7CgogICAgY29uc3Qgc2l6ZV90IG5vdEZvdW5kID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PigtMSk7Cgp9Cgp1c2luZyBXVEY6Om5vdEZvdW5kOwojIDI4ICIuL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvVmVjdG9yLmgiIDIKCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Zh
bHVlQ2hlY2suaCIgMQojIDMxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVmFsdWVDaGVj
ay5oIgpuYW1lc3BhY2UgV1RGIHsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBWYWx1ZUNo
ZWNrIHsKICAgIHR5cGVkZWYgVCBUcmFpdFR5cGU7CiAgICBzdGF0aWMgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KGNvbnN0IFQmKSB7IH0KfTsKIyA1MSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1ZhbHVlQ2hlY2suaCIKfQojIDMwICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9y
LmgiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yVHJhaXRzLmgiIDEK
IyAyNCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3RvclRyYWl0cy5oIgojIDEgIi4v
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25QdHIuaCIgMQojIDI2ICIuL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvT3duUHRyLmgiCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L093blB0ckNvbW1vbi5oIiAxCiMgNDggIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25Q
dHJDb21tb24uaCIKbmFtZXNwYWNlIFdURiB7CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlu
bGluZSB2b2lkIGRlbGV0ZU93bmVkUHRyKFQqIHB0cikKICAgIHsKICAgICAgICB0eXBlZGVmIGNo
YXIga25vd25bc2l6ZW9mKFQpID8gMSA6IC0xXTsKICAgICAgICBpZiAoc2l6ZW9mKGtub3duKSkK
ICAgICAgICAgICAgZGVsZXRlIHB0cjsKICAgIH0KIyA3NCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL093blB0ckNvbW1vbi5oIgp9CiMgMjcgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9Pd25QdHIuaCIgMgoKCgoKbmFtZXNwYWNlIFdURiB7CgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzT3duUHRyOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gUGFzc093blB0
cjxUPiBhZG9wdFB0cihUKik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgT3duUHRy
IHsKICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFJlbW92ZVBvaW50ZXI8VD46
OlR5cGUgVmFsdWVUeXBlOwogICAgICAgIHR5cGVkZWYgVmFsdWVUeXBlKiBQdHJUeXBlOwoKICAg
ICAgICBPd25QdHIoKSA6IG1fcHRyKDApIHsgfQogICAgICAgIE93blB0cihzdGQ6Om51bGxwdHJf
dCkgOiBtX3B0cigwKSB7IH0KCgogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IE93blB0cihj
b25zdCBQYXNzT3duUHRyPFU+JiBvKTsKCgoKCgogICAgICAgIE93blB0cihjb25zdCBPd25QdHI8
VmFsdWVUeXBlPiYpOwoKICAgICAgICB+T3duUHRyKCkgeyBkZWxldGVPd25lZFB0cihtX3B0cik7
IH0KCiAgICAgICAgUHRyVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQoKICAgICAg
ICB2b2lkIGNsZWFyKCk7CiAgICAgICAgUGFzc093blB0cjxUPiByZWxlYXNlKCk7CiAgICAgICAg
UHRyVHlwZSBsZWFrUHRyKCkgX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpOwoK
ICAgICAgICBWYWx1ZVR5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgKCh2b2lkKTApOyByZXR1cm4g
Km1fcHRyOyB9CiAgICAgICAgUHRyVHlwZSBvcGVyYXRvci0+KCkgY29uc3QgeyAoKHZvaWQpMCk7
IHJldHVybiBtX3B0cjsgfQoKICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3B0cjsgfQoKCiAgICAgICAgdHlwZWRlZiBQdHJUeXBlIE93blB0cjo6KlVuc3BlY2lmaWVk
Qm9vbFR5cGU7CiAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHRyID8gJk93blB0cjo6bV9wdHIgOiAwOyB9CgogICAgICAgIE93blB0ciYgb3Bl
cmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VD4mKTsKICAgICAgICBPd25QdHImIG9wZXJhdG9yPShz
dGQ6Om51bGxwdHJfdCkgeyBjbGVhcigpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBPd25QdHImIG9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPFU+Jik7Cgog
ICAgICAgIHZvaWQgc3dhcChPd25QdHImIG8pIHsgc3RkOjpzd2FwKG1fcHRyLCBvLm1fcHRyKTsg
fQoKICAgIHByaXZhdGU6CiAgICAgICAgT3duUHRyJiBvcGVyYXRvcj0oY29uc3QgT3duUHRyPFQ+
Jik7CgoKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE93blB0cjxVPiYpIHsgdHlwZWRlZiBpbnQgZHVtbXlPd25QdHJzX3Nob3VsZF9uZXZlcl9iZV9l
cXVhbCBbKCFzaXplb2YoVSopKSA/IDEgOiAtMV07IHJldHVybiBmYWxzZTsgfQogICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3IhPShjb25zdCBPd25QdHI8VT4mKSB7IHR5
cGVkZWYgaW50IGR1bW15T3duUHRyc19zaG91bGRfbmV2ZXJfYmVfZXF1YWwgWyghc2l6ZW9mKFUq
KSkgPyAxIDogLTFdOyByZXR1cm4gZmFsc2U7IH0KICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFzc093blB0cjxVPiYpIHsgdHlwZWRlZiBpbnQgZHVt
bXlPd25QdHJzX3Nob3VsZF9uZXZlcl9iZV9lcXVhbCBbKCFzaXplb2YoVSopKSA/IDEgOiAtMV07
IHJldHVybiBmYWxzZTsgfQogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0
b3IhPShjb25zdCBQYXNzT3duUHRyPFU+JikgeyB0eXBlZGVmIGludCBkdW1teU93blB0cnNfc2hv
dWxkX25ldmVyX2JlX2VxdWFsIFsoIXNpemVvZihVKikpID8gMSA6IC0xXTsgcmV0dXJuIGZhbHNl
OyB9CgogICAgICAgIFB0clR5cGUgbV9wdHI7CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBPd25QdHI8VD46Ok93blB0cihjb25zdCBQ
YXNzT3duUHRyPFU+JiBvKQogICAgICAgIDogbV9wdHIoby5sZWFrUHRyKCkpCiAgICB7CiAgICB9
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgT3duUHRyPFQ+OjpjbGVhcigp
CiAgICB7CiAgICAgICAgUHRyVHlwZSBwdHIgPSBtX3B0cjsKICAgICAgICBtX3B0ciA9IDA7CiAg
ICAgICAgZGVsZXRlT3duZWRQdHIocHRyKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgUGFzc093blB0cjxUPiBPd25QdHI8VD46OnJlbGVhc2UoKQogICAgewogICAgICAg
IFB0clR5cGUgcHRyID0gbV9wdHI7CiAgICAgICAgbV9wdHIgPSAwOwogICAgICAgIHJldHVybiBh
ZG9wdFB0cihwdHIpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBl
bmFtZSBPd25QdHI8VD46OlB0clR5cGUgT3duUHRyPFQ+OjpsZWFrUHRyKCkKICAgIHsKICAgICAg
ICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAgICAgIG1fcHRyID0gMDsKICAgICAgICByZXR1cm4g
cHRyOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBPd25QdHI8VD4mIE93
blB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8VD4mIG8pCiAgICB7CiAgICAgICAg
UHRyVHlwZSBwdHIgPSBtX3B0cjsKICAgICAgICBtX3B0ciA9IG8ubGVha1B0cigpOwogICAgICAg
ICgodm9pZCkwKTsKICAgICAgICBkZWxldGVPd25lZFB0cihwdHIpOwogICAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBpbmxpbmUgT3duUHRyPFQ+JiBPd25QdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRy
PFU+JiBvKQogICAgewogICAgICAgIFB0clR5cGUgcHRyID0gbV9wdHI7CiAgICAgICAgbV9wdHIg
PSBvLmxlYWtQdHIoKTsKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgZGVsZXRlT3duZWRQdHIo
cHRyKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIHZvaWQgc3dhcChPd25QdHI8VD4mIGEsIE93blB0cjxUPiYgYikKICAgIHsKICAg
ICAgICBhLnN3YXAoYik7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPd25QdHI8VD4mIGEsIFUqIGIpCiAgICB7
CiAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYjsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IE93blB0
cjxVPiYgYikKICAgIHsKICAgICAgICByZXR1cm4gYSA9PSBiLmdldCgpOwogICAgfQoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgT3duUHRyPFQ+JiBhLCBVKiBiKQogICAgewogICAgICAgIHJldHVybiBhLmdldCgpICE9IGI7
CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShUKiBhLCBjb25zdCBPd25QdHI8VT4mIGIpCiAgICB7CiAgICAgICAgcmV0dXJu
IGEgIT0gYi5nZXQoKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdHlw
ZW5hbWUgT3duUHRyPFQ+OjpQdHJUeXBlIGdldFB0cihjb25zdCBPd25QdHI8VD4mIHApCiAgICB7
CiAgICAgICAgcmV0dXJuIHAuZ2V0KCk7CiAgICB9Cgp9Cgp1c2luZyBXVEY6Ok93blB0cjsKIyAy
NSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3RvclRyYWl0cy5oIiAyCiMgMSAiLi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oIiAxCiMgMjggIi4vU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9SZWZQdHIuaCIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGFzc1JlZlB0ci5oIiAxCiMgMjQgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVm
UHRyLmgiCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Fsd2F5c0lubGluZS5oIiAx
CiMgMjUgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgiIDIKCgpuYW1l
c3BhY2UgV1RGIHsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOwogICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gUGFzc1JlZlB0cjxUPiBhZG9wdFJlZihUKik7CgogICAgaW5saW5lIHZvaWQgYWRvcHRl
ZChjb25zdCB2b2lkKikgeyB9CiMgNDMgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNz
UmVmUHRyLmgiCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgX19hdHRyaWJ1dGVfXygo
X19hbHdheXNfaW5saW5lX18pKSB2b2lkIHJlZklmTm90TnVsbChUKiBwdHIpCiAgICB7CiAgICAg
ICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKHB0ciAhPSAwKSwgMSkpCiAgICAgICAgICAgIHB0ci0+
cmVmKCk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIF9fYXR0cmlidXRl
X18oKF9fYWx3YXlzX2lubGluZV9fKSkgdm9pZCBkZXJlZklmTm90TnVsbChUKiBwdHIpCiAgICB7
CiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKHB0ciAhPSAwKSwgMSkpCiAgICAgICAgICAg
IHB0ci0+ZGVyZWYoKTsKICAgIH0KCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFBh
c3NSZWZQdHIgewogICAgcHVibGljOgogICAgICAgIFBhc3NSZWZQdHIoKSA6IG1fcHRyKDApIHsg
fQogICAgICAgIFBhc3NSZWZQdHIoVCogcHRyKSA6IG1fcHRyKHB0cikgeyByZWZJZk5vdE51bGwo
cHRyKTsgfQoKCgogICAgICAgIFBhc3NSZWZQdHIoY29uc3QgUGFzc1JlZlB0ciYgbykgOiBtX3B0
cihvLmxlYWtSZWYoKSkgeyB9CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gUGFzc1JlZlB0
cihjb25zdCBQYXNzUmVmUHRyPFU+JiBvKSA6IG1fcHRyKG8ubGVha1JlZigpKSB7IH0KCiAgICAg
ICAgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgflBhc3NSZWZQdHIo
KSB7IGRlcmVmSWZOb3ROdWxsKG1fcHRyKTsgfQoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBV
PiBQYXNzUmVmUHRyKGNvbnN0IFJlZlB0cjxVPiYpOwoKICAgICAgICBUKiBnZXQoKSBjb25zdCB7
IHJldHVybiBtX3B0cjsgfQoKICAgICAgICBUKiBsZWFrUmVmKCkgY29uc3QgX19hdHRyaWJ1dGVf
XyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpOwoKICAgICAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7
IHJldHVybiAqbV9wdHI7IH0KICAgICAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
bV9wdHI7IH0KCiAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9wdHI7
IH0KCgogICAgICAgIHR5cGVkZWYgVCogKFBhc3NSZWZQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBl
KTsKICAgICAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9wdHIgPyAmUGFzc1JlZlB0cjo6bV9wdHIgOiAwOyB9CgogICAgICAgIFBhc3NSZWZQdHImIG9w
ZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyJikgeyB0eXBlZGVmIGludCBkdW1teVBhc3NSZWZQdHJf
c2hvdWxkX25ldmVyX2JlX2Fzc2lnbmVkX3RvIFsoIXNpemVvZihUKikpID8gMSA6IC0xXTsgcmV0
dXJuICp0aGlzOyB9CgogICAgICAgIGZyaWVuZCBQYXNzUmVmUHRyIGFkb3B0UmVmPFQ+KFQqKTsK
CiAgICBwcml2YXRlOgoKICAgICAgICBQYXNzUmVmUHRyKFQqIHB0ciwgYm9vbCkgOiBtX3B0cihw
dHIpIHsgfQoKICAgICAgICBtdXRhYmxlIFQqIG1fcHRyOwogICAgfTsKIyAxMDMgIi4vU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9QYXNzUmVmUHRyLmgiCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBOb25OdWxsUGFzc1JlZlB0ciB7CiAgICBwdWJsaWM6CiAgICAgICAgTm9uTnVsbFBh
c3NSZWZQdHIoVCogcHRyKQogICAgICAgICAgICA6IG1fcHRyKHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgICgodm9pZCkwKTsKICAgICAgICAgICAgbV9wdHItPnJlZigpOwogICAgICAgIH0KCiAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gTm9uTnVsbFBhc3NSZWZQdHIoY29uc3QgUmVmUHRy
PFU+JiBvKQogICAgICAgICAgICA6IG1fcHRyKG8uZ2V0KCkpCiAgICAgICAgewogICAgICAgICAg
ICAoKHZvaWQpMCk7CiAgICAgICAgICAgIG1fcHRyLT5yZWYoKTsKICAgICAgICB9CgogICAgICAg
IE5vbk51bGxQYXNzUmVmUHRyKGNvbnN0IE5vbk51bGxQYXNzUmVmUHRyJiBvKQogICAgICAgICAg
ICA6IG1fcHRyKG8ubGVha1JlZigpKQogICAgICAgIHsKICAgICAgICAgICAgKCh2b2lkKTApOwog
ICAgICAgIH0KCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gTm9uTnVsbFBhc3NSZWZQdHIo
Y29uc3QgTm9uTnVsbFBhc3NSZWZQdHI8VT4mIG8pCiAgICAgICAgICAgIDogbV9wdHIoby5sZWFr
UmVmKCkpCiAgICAgICAgewogICAgICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgfQoKICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBOb25OdWxsUGFzc1JlZlB0cihjb25zdCBQYXNzUmVmUHRy
PFU+JiBvKQogICAgICAgICAgICA6IG1fcHRyKG8ubGVha1JlZigpKQogICAgICAgIHsKICAgICAg
ICAgICAgKCh2b2lkKTApOwogICAgICAgIH0KCiAgICAgICAgaW5saW5lIF9fYXR0cmlidXRlX18o
KF9fYWx3YXlzX2lubGluZV9fKSkgfk5vbk51bGxQYXNzUmVmUHRyKCkgeyBkZXJlZklmTm90TnVs
bChtX3B0cik7IH0KCiAgICAgICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KCiAg
ICAgICAgVCogbGVha1JlZigpIGNvbnN0IF9fYXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9yZXN1
bHQpKSB7IFQqIHRtcCA9IG1fcHRyOyBtX3B0ciA9IDA7IHJldHVybiB0bXA7IH0KCiAgICAgICAg
VCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fcHRyOyB9CiAgICAgICAgVCogb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CgogICAgICAgIE5vbk51bGxQYXNzUmVmUHRy
JiBvcGVyYXRvcj0oY29uc3QgTm9uTnVsbFBhc3NSZWZQdHImKSB7IHR5cGVkZWYgaW50IGR1bW15
Tm9uTnVsbFBhc3NSZWZQdHJfc2hvdWxkX25ldmVyX2JlX2Fzc2lnbmVkX3RvIFsoIXNpemVvZihU
KikpID8gMSA6IC0xXTsgcmV0dXJuICp0aGlzOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBtdXRh
YmxlIFQqIG1fcHRyOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1JlZlB0cjxUPjo6UGFzc1JlZlB0cihjb25zdCBSZWZQdHI8
VT4mIG8pCiAgICAgICAgOiBtX3B0cihvLmdldCgpKQogICAgewogICAgICAgIFQqIHB0ciA9IG1f
cHRyOwogICAgICAgIHJlZklmTm90TnVsbChwdHIpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBUKiBQYXNzUmVmUHRyPFQ+OjpsZWFrUmVmKCkgY29uc3QKICAgIHsKICAg
ICAgICBUKiBwdHIgPSBtX3B0cjsKICAgICAgICBtX3B0ciA9IDA7CiAgICAgICAgcmV0dXJuIHB0
cjsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFBhc3NSZWZQdHI8VD4mIGEsIGNvbnN0IFBhc3NSZWZQdHI8VT4m
IGIpCiAgICB7CiAgICAgICAgcmV0dXJuIGEuZ2V0KCkgPT0gYi5nZXQoKTsKICAgIH0KCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBhc3NSZWZQdHI8VD4mIGEsIGNvbnN0IFJlZlB0cjxVPiYgYikKICAgIHsKICAgICAgICBy
ZXR1cm4gYS5nZXQoKSA9PSBiLmdldCgpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVmUHRyPFQ+JiBhLCBj
b25zdCBQYXNzUmVmUHRyPFU+JiBiKQogICAgewogICAgICAgIHJldHVybiBhLmdldCgpID09IGIu
Z2V0KCk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYXNzUmVmUHRyPFQ+JiBhLCBVKiBiKQogICAgewogICAg
ICAgIHJldHVybiBhLmdldCgpID09IGI7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShUKiBhLCBjb25zdCBQYXNzUmVmUHRy
PFU+JiBiKQogICAgewogICAgICAgIHJldHVybiBhID09IGIuZ2V0KCk7CiAgICB9CgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBQYXNzUmVmUHRyPFQ+JiBhLCBjb25zdCBQYXNzUmVmUHRyPFU+JiBiKQogICAgewogICAgICAg
IHJldHVybiBhLmdldCgpICE9IGIuZ2V0KCk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBQYXNzUmVmUHRyPFQ+
JiBhLCBjb25zdCBSZWZQdHI8VT4mIGIpCiAgICB7CiAgICAgICAgcmV0dXJuIGEuZ2V0KCkgIT0g
Yi5nZXQoKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZlB0cjxUPiYgYSwgY29uc3QgUGFzc1JlZlB0cjxV
PiYgYikKICAgIHsKICAgICAgICByZXR1cm4gYS5nZXQoKSAhPSBiLmdldCgpOwogICAgfQoKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUGFzc1JlZlB0cjxUPiYgYSwgVSogYikKICAgIHsKICAgICAgICByZXR1cm4gYS5nZXQo
KSAhPSBiOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGlu
ZSBib29sIG9wZXJhdG9yIT0oVCogYSwgY29uc3QgUGFzc1JlZlB0cjxVPiYgYikKICAgIHsKICAg
ICAgICByZXR1cm4gYSAhPSBiLmdldCgpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBQYXNzUmVmUHRyPFQ+IGFkb3B0UmVmKFQqIHApCiAgICB7CiAgICAgICAgYWRvcHRl
ZChwKTsKICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxUPihwLCB0cnVlKTsKICAgIH0KCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgUGFzc1JlZlB0cjxUPiBzdGF0
aWNfcG9pbnRlcl9jYXN0KGNvbnN0IFBhc3NSZWZQdHI8VT4mIHApCiAgICB7CiAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKHN0YXRpY19jYXN0PFQqPihwLmxlYWtSZWYoKSkpOwogICAgfQoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBQYXNzUmVmUHRyPFQ+IGNvbnN0
X3BvaW50ZXJfY2FzdChjb25zdCBQYXNzUmVmUHRyPFU+JiBwKQogICAgewogICAgICAgIHJldHVy
biBhZG9wdFJlZihjb25zdF9jYXN0PFQqPihwLmxlYWtSZWYoKSkpOwogICAgfQoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBnZXRQdHIoY29uc3QgUGFzc1JlZlB0cjxUPiYgcCkK
ICAgIHsKICAgICAgICByZXR1cm4gcC5nZXQoKTsKICAgIH0KCn0KCnVzaW5nIFdURjo6UGFzc1Jl
ZlB0cjsKdXNpbmcgV1RGOjpOb25OdWxsUGFzc1JlZlB0cjsKdXNpbmcgV1RGOjphZG9wdFJlZjsK
dXNpbmcgV1RGOjpzdGF0aWNfcG9pbnRlcl9jYXN0Owp1c2luZyBXVEY6OmNvbnN0X3BvaW50ZXJf
Y2FzdDsKIyAyOSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZlB0ci5oIiAyCgpuYW1l
c3BhY2UgV1RGIHsKCiAgICBlbnVtIFBsYWNlbWVudE5ld0Fkb3B0VHlwZSB7IFBsYWNlbWVudE5l
d0Fkb3B0IH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIE5vbk51bGxQYXNzUmVmUHRyOwoKICAgIGVudW0g
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSB7IEhhc2hUYWJsZURlbGV0ZWRWYWx1ZSB9OwoKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0ciB7CiAgICAgICAgcHVibGljOiB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBwOyB9IHZvaWQqIG9wZXJh
dG9yIG5ld1tdKHNpemVfdCwgdm9pZCogcCkgeyByZXR1cm4gcDsgfSB2b2lkKiBvcGVyYXRvciBu
ZXcoc2l6ZV90IHNpemUpIHsgdm9pZCogcCA9IDo6V1RGOjpmYXN0TWFsbG9jKHNpemUpOyA6OldU
Rjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVNYWxsb2MocCwgOjpXVEY6OkludGVybmFsOjpBbGxv
Y1R5cGVDbGFzc05ldyk7IHJldHVybiBwOyB9IHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHAp
IHsgOjpXVEY6OmZhc3RNYWxsb2NNYXRjaFZhbGlkYXRlRnJlZShwLCA6OldURjo6SW50ZXJuYWw6
OkFsbG9jVHlwZUNsYXNzTmV3KTsgOjpXVEY6OmZhc3RGcmVlKHApOyB9IHZvaWQqIG9wZXJhdG9y
IG5ld1tdKHNpemVfdCBzaXplKSB7IHZvaWQqIHAgPSA6OldURjo6ZmFzdE1hbGxvYyhzaXplKTsg
OjpXVEY6OmZhc3RNYWxsb2NNYXRjaFZhbGlkYXRlTWFsbG9jKHAsIDo6V1RGOjpJbnRlcm5hbDo6
QWxsb2NUeXBlQ2xhc3NOZXdBcnJheSk7IHJldHVybiBwOyB9IHZvaWQgb3BlcmF0b3IgZGVsZXRl
W10odm9pZCogcCkgeyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVGcmVlKHAsIDo6V1RG
OjpJbnRlcm5hbDo6QWxsb2NUeXBlQ2xhc3NOZXdBcnJheSk7IDo6V1RGOjpmYXN0RnJlZShwKTsg
fSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCBOb3ROdWxsVGFnLCB2b2lkKiBsb2NhdGlvbikg
eyAoKHZvaWQpMCk7IHJldHVybiBsb2NhdGlvbjsgfSBwcml2YXRlOiB0eXBlZGVmIGludCBfX3Ro
aXNJc0hlcmVUb0ZvcmNlQVNlbWljb2xvbkFmdGVyVGhpc01hY3JvOwogICAgcHVibGljOgogICAg
ICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIFJlZlB0cigpIDog
bV9wdHIoMCkgeyB9CiAgICAgICAgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGlu
ZV9fKSkgUmVmUHRyKFQqIHB0cikgOiBtX3B0cihwdHIpIHsgcmVmSWZOb3ROdWxsKHB0cik7IH0K
ICAgICAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBSZWZQdHIo
Y29uc3QgUmVmUHRyJiBvKSA6IG1fcHRyKG8ubV9wdHIpIHsgcmVmSWZOb3ROdWxsKG1fcHRyKTsg
fQogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBSZWZQdHI8VT4mIG8p
IDogbV9wdHIoby5nZXQoKSkgeyByZWZJZk5vdE51bGwobV9wdHIpOyB9CgoKICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIoY29uc3QgUGFzc1JlZlB0cjxVPiYpOwogICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0cihjb25zdCBOb25OdWxsUGFzc1JlZlB0cjxVPiYpOwoK
CiAgICAgICAgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkgUmVmUHRy
KFBsYWNlbWVudE5ld0Fkb3B0VHlwZSkgeyB9CgoKICAgICAgICBSZWZQdHIoSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkgOiBtX3B0cihoYXNoVGFibGVEZWxldGVkVmFsdWUoKSkgeyB9CiAgICAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyID09
IGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CgogICAgICAgIGlubGluZSBfX2F0dHJpYnV0ZV9f
KChfX2Fsd2F5c19pbmxpbmVfXykpIH5SZWZQdHIoKSB7IGRlcmVmSWZOb3ROdWxsKG1fcHRyKTsg
fQoKICAgICAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQoKICAgICAgICB2b2lk
IGNsZWFyKCk7CiAgICAgICAgUGFzc1JlZlB0cjxUPiByZWxlYXNlKCkgeyBQYXNzUmVmUHRyPFQ+
IHRtcCA9IGFkb3B0UmVmKG1fcHRyKTsgbV9wdHIgPSAwOyByZXR1cm4gdG1wOyB9CgogICAgICAg
IFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX3B0cjsgfQogICAgICAgIGlubGluZSBf
X2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBtX3B0cjsgfQoKICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3B0cjsgfQoKCiAgICAgICAgdHlwZWRlZiBUKiAoUmVmUHRyOjoqVW5zcGVjaWZpZWRCb29s
VHlwZSk7CiAgICAgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHRyID8gJlJlZlB0cjo6bV9wdHIgOiAwOyB9CgogICAgICAgIFJlZlB0ciYgb3BlcmF0
b3I9KGNvbnN0IFJlZlB0ciYpOwogICAgICAgIFJlZlB0ciYgb3BlcmF0b3I9KFQqKTsKICAgICAg
ICBSZWZQdHImIG9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFQ+Jik7CiAgICAgICAgUmVmUHRy
JiBvcGVyYXRvcj0oY29uc3QgTm9uTnVsbFBhc3NSZWZQdHI8VD4mKTsKCiAgICAgICAgUmVmUHRy
JiBvcGVyYXRvcj0oc3RkOjpudWxscHRyX3QpIHsgY2xlYXIoKTsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0ciYgb3BlcmF0b3I9KGNvbnN0IFJlZlB0
cjxVPiYpOwogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZlB0ciYgb3BlcmF0b3I9KGNv
bnN0IFBhc3NSZWZQdHI8VT4mKTsKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBSZWZQdHIm
IG9wZXJhdG9yPShjb25zdCBOb25OdWxsUGFzc1JlZlB0cjxVPiYpOwoKICAgICAgICB2b2lkIHN3
YXAoUmVmUHRyJik7CgogICAgICAgIHN0YXRpYyBUKiBoYXNoVGFibGVEZWxldGVkVmFsdWUoKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFQqPigtMSk7IH0KCiAgICBwcml2YXRlOgogICAgICAg
IFQqIG1fcHRyOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+OjpSZWZQdHIoY29uc3QgUGFzc1JlZlB0cjxVPiYgbykK
ICAgICAgICA6IG1fcHRyKG8ubGVha1JlZigpKQogICAgewogICAgfQoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBSZWZQdHI8VD46OlJlZlB0cihj
b25zdCBOb25OdWxsUGFzc1JlZlB0cjxVPiYgbykKICAgICAgICA6IG1fcHRyKG8ubGVha1JlZigp
KQogICAgewogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIFJlZlB0
cjxUPjo6Y2xlYXIoKQogICAgewogICAgICAgIFQqIHB0ciA9IG1fcHRyOwogICAgICAgIG1fcHRy
ID0gMDsKICAgICAgICBkZXJlZklmTm90TnVsbChwdHIpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFJl
ZlB0cjxUPiYgbykKICAgIHsKICAgICAgICBUKiBvcHRyID0gby5nZXQoKTsKICAgICAgICByZWZJ
Zk5vdE51bGwob3B0cik7CiAgICAgICAgVCogcHRyID0gbV9wdHI7CiAgICAgICAgbV9wdHIgPSBv
cHRyOwogICAgICAgIGRlcmVmSWZOb3ROdWxsKHB0cik7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGlu
ZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KGNvbnN0IFJlZlB0cjxVPiYgbykKICAg
IHsKICAgICAgICBUKiBvcHRyID0gby5nZXQoKTsKICAgICAgICByZWZJZk5vdE51bGwob3B0cik7
CiAgICAgICAgVCogcHRyID0gbV9wdHI7CiAgICAgICAgbV9wdHIgPSBvcHRyOwogICAgICAgIGRl
cmVmSWZOb3ROdWxsKHB0cik7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBSZWZQdHI8VD4mIFJlZlB0cjxUPjo6b3BlcmF0b3I9KFQq
IG9wdHIpCiAgICB7CiAgICAgICAgcmVmSWZOb3ROdWxsKG9wdHIpOwogICAgICAgIFQqIHB0ciA9
IG1fcHRyOwogICAgICAgIG1fcHRyID0gb3B0cjsKICAgICAgICBkZXJlZklmTm90TnVsbChwdHIp
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgUmVmUHRyPFQ+JiBSZWZQdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFQ+
JiBvKQogICAgewogICAgICAgIFQqIHB0ciA9IG1fcHRyOwogICAgICAgIG1fcHRyID0gby5sZWFr
UmVmKCk7CiAgICAgICAgZGVyZWZJZk5vdE51bGwocHRyKTsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFJlZlB0cjxUPiYgUmVmUHRy
PFQ+OjpvcGVyYXRvcj0oY29uc3QgTm9uTnVsbFBhc3NSZWZQdHI8VD4mIG8pCiAgICB7CiAgICAg
ICAgVCogcHRyID0gbV9wdHI7CiAgICAgICAgbV9wdHIgPSBvLmxlYWtSZWYoKTsKICAgICAgICBk
ZXJlZklmTm90TnVsbChwdHIpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpbmxpbmUgUmVmUHRyPFQ+JiBS
ZWZQdHI8VD46Om9wZXJhdG9yPShjb25zdCBQYXNzUmVmUHRyPFU+JiBvKQogICAgewogICAgICAg
IFQqIHB0ciA9IG1fcHRyOwogICAgICAgIG1fcHRyID0gby5sZWFrUmVmKCk7CiAgICAgICAgZGVy
ZWZJZk5vdE51bGwocHRyKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4gaW5saW5lIFJlZlB0cjxUPiYgUmVm
UHRyPFQ+OjpvcGVyYXRvcj0oY29uc3QgTm9uTnVsbFBhc3NSZWZQdHI8VT4mIG8pCiAgICB7CiAg
ICAgICAgVCogcHRyID0gbV9wdHI7CiAgICAgICAgbV9wdHIgPSBvLmxlYWtSZWYoKTsKICAgICAg
ICBkZXJlZklmTm90TnVsbChwdHIpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgICB0
ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBSZWZQdHI8VD46OnN3YXAoUmVmUHRyPFQ+JiBv
KQogICAgewogICAgICAgIHN0ZDo6c3dhcChtX3B0ciwgby5tX3B0cik7CiAgICB9CgogICAgdGVt
cGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgc3dhcChSZWZQdHI8VD4mIGEsIFJlZlB0cjxUPiYg
YikKICAgIHsKICAgICAgICBhLnN3YXAoYik7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZQdHI8VD4mIGEs
IGNvbnN0IFJlZlB0cjxVPiYgYikKICAgIHsKICAgICAgICByZXR1cm4gYS5nZXQoKSA9PSBiLmdl
dCgpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUmVmUHRyPFQ+JiBhLCBVKiBiKQogICAgewogICAgICAgIHJl
dHVybiBhLmdldCgpID09IGI7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShUKiBhLCBjb25zdCBSZWZQdHI8VT4mIGIpCiAg
ICB7CiAgICAgICAgcmV0dXJuIGEgPT0gYi5nZXQoKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlZlB0cjxU
PiYgYSwgY29uc3QgUmVmUHRyPFU+JiBiKQogICAgewogICAgICAgIHJldHVybiBhLmdldCgpICE9
IGIuZ2V0KCk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWZQdHI8VD4mIGEsIFUqIGIpCiAgICB7CiAgICAg
ICAgcmV0dXJuIGEuZ2V0KCkgIT0gYjsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IFJlZlB0cjxVPiYg
YikKICAgIHsKICAgICAgICByZXR1cm4gYSAhPSBiLmdldCgpOwogICAgfQoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBSZWZQdHI8VD4gc3RhdGljX3BvaW50ZXJf
Y2FzdChjb25zdCBSZWZQdHI8VT4mIHApCiAgICB7CiAgICAgICAgcmV0dXJuIFJlZlB0cjxUPihz
dGF0aWNfY2FzdDxUKj4ocC5nZXQoKSkpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+IGlubGluZSBSZWZQdHI8VD4gY29uc3RfcG9pbnRlcl9jYXN0KGNvbnN0IFJl
ZlB0cjxVPiYgcCkKICAgIHsKICAgICAgICByZXR1cm4gUmVmUHRyPFQ+KGNvbnN0X2Nhc3Q8VCo+
KHAuZ2V0KCkpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogZ2V0
UHRyKGNvbnN0IFJlZlB0cjxUPiYgcCkKICAgIHsKICAgICAgICByZXR1cm4gcC5nZXQoKTsKICAg
IH0KCn0KCnVzaW5nIFdURjo6UmVmUHRyOwp1c2luZyBXVEY6OnN0YXRpY19wb2ludGVyX2Nhc3Q7
CnVzaW5nIFdURjo6Y29uc3RfcG9pbnRlcl9jYXN0OwojIDI2ICIuL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvVmVjdG9yVHJhaXRzLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC91
dGlsaXR5IiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC91dGlsaXR5IiAzCiAgICAg
ICAKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC91dGlsaXR5IiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzQuMC4wL2JpdHMvc3RsX3JlbG9wcy5oIiAxIDMKIyA3NCAiL3Vzci9pbmNsdWRl
L2MrKy80LjAuMC9iaXRzL3N0bF9yZWxvcHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBuYW1lc3Bh
Y2UgcmVsX29wcwogIHsKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9yZWxv
cHMuaCIgMwogICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICAgICAgaW5saW5lIGJvb2wKICAgICAg
b3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgIHsgcmV0dXJu
ICEoX194ID09IF9feSk7IH0KIyAxMDMgIi91c3IvaW5jbHVkZS9jKysvNC4wLjAvYml0cy9zdGxf
cmVsb3BzLmgiIDMKICAgIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgICAgIGlubGluZSBib29sCiAg
ICAgIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgIHsgcmV0
dXJuIF9feSA8IF9feDsgfQojIDExNiAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0bF9y
ZWxvcHMuaCIgMwogICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICAgICAgaW5saW5lIGJvb2wKICAg
ICAgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgIHsgcmV0
dXJuICEoX195IDwgX194KTsgfQojIDEyOSAiL3Vzci9pbmNsdWRlL2MrKy80LjAuMC9iaXRzL3N0
bF9yZWxvcHMuaCIgMwogICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICAgICAgaW5saW5lIGJvb2wK
ICAgICAgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICAgIHsg
cmV0dXJuICEoX194IDwgX195KTsgfQoKICB9Cn0KIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy80LjAu
MC91dGlsaXR5IiAyIDMKIyAyOCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3RvclRy
YWl0cy5oIiAyCgoKdXNpbmcgc3RkOjpwYWlyOwoKbmFtZXNwYWNlIFdURiB7CgogICAgdGVtcGxh
dGU8Ym9vbCBpc1BvZCwgdHlwZW5hbWUgVD4KICAgIHN0cnVjdCBWZWN0b3JUcmFpdHNCYXNlOwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yVHJhaXRzQmFzZTxmYWxz
ZSwgVD4KICAgIHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0luaXRpYWxpemF0aW9uID0gdHJ1
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbk1vdmVXaXRoTWVtY3B5ID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29weVdpdGhNZW1jcHkgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5GaWxsV2l0aE1lbXNldCA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGNhbkNvbXBhcmVXaXRoTWVtY21wID0gZmFsc2U7CiAgICB9OwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yVHJhaXRzQmFzZTx0cnVl
LCBUPgogICAgewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0luaXRpYWxpemF0aW9uID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQgPSBm
YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Nb3ZlV2l0aE1lbWNweSA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29weVdpdGhNZW1jcHkgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkZpbGxXaXRoTWVtc2V0ID0gc2l6ZW9mKFQpID09IHNp
emVvZihjaGFyKTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Db21wYXJlV2l0aE1lbWNt
cCA9IHRydWU7CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVj
dG9yVHJhaXRzIDogVmVjdG9yVHJhaXRzQmFzZTxJc1BvZDxUPjo6dmFsdWUsIFQ+IHsgfTsKCiAg
ICBzdHJ1Y3QgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgOiBWZWN0b3JUcmFpdHNCYXNlPGZhbHNl
LCB2b2lkPgogICAgewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRo
TWVtc2V0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Nb3ZlV2l0aE1lbWNw
eSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29tcGFyZVdpdGhNZW1jbXAg
PSB0cnVlOwogICAgfTsKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFA+CiAgICBzdHJ1Y3QgVmVj
dG9yVHJhaXRzPFJlZlB0cjxQPiA+IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgeyB9OwoKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFA+CiAgICBzdHJ1Y3QgVmVjdG9yVHJhaXRzPE93blB0cjxQPiA+
IDogU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgeyB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZp
cnN0LCB0eXBlbmFtZSBTZWNvbmQ+CiAgICBzdHJ1Y3QgVmVjdG9yVHJhaXRzPHBhaXI8Rmlyc3Qs
IFNlY29uZD4gPgogICAgewogICAgICAgIHR5cGVkZWYgVmVjdG9yVHJhaXRzPEZpcnN0PiBGaXJz
dFRyYWl0czsKICAgICAgICB0eXBlZGVmIFZlY3RvclRyYWl0czxTZWNvbmQ+IFNlY29uZFRyYWl0
czsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IEZpcnN0VHJh
aXRzOjpuZWVkc0Rlc3RydWN0aW9uIHx8IFNlY29uZFRyYWl0czo6bmVlZHNEZXN0cnVjdGlvbjsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0luaXRpYWxpemF0aW9uID0gRmlyc3RUcmFp
dHM6Om5lZWRzSW5pdGlhbGl6YXRpb24gfHwgU2Vjb25kVHJhaXRzOjpuZWVkc0luaXRpYWxpemF0
aW9uOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0g
Rmlyc3RUcmFpdHM6OmNhbkluaXRpYWxpemVXaXRoTWVtc2V0ICYmIFNlY29uZFRyYWl0czo6Y2Fu
SW5pdGlhbGl6ZVdpdGhNZW1zZXQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuTW92ZVdp
dGhNZW1jcHkgPSBGaXJzdFRyYWl0czo6Y2FuTW92ZVdpdGhNZW1jcHkgJiYgU2Vjb25kVHJhaXRz
OjpjYW5Nb3ZlV2l0aE1lbWNweTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Db3B5V2l0
aE1lbWNweSA9IEZpcnN0VHJhaXRzOjpjYW5Db3B5V2l0aE1lbWNweSAmJiBTZWNvbmRUcmFpdHM6
OmNhbkNvcHlXaXRoTWVtY3B5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkZpbGxXaXRo
TWVtc2V0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29tcGFyZVdpdGhN
ZW1jbXAgPSBGaXJzdFRyYWl0czo6Y2FuQ29tcGFyZVdpdGhNZW1jbXAgJiYgU2Vjb25kVHJhaXRz
OjpjYW5Db21wYXJlV2l0aE1lbWNtcDsKICAgIH07Cgp9Cgp1c2luZyBXVEY6OlZlY3RvclRyYWl0
czsKdXNpbmcgV1RGOjpTaW1wbGVDbGFzc1ZlY3RvclRyYWl0czsKIyAzMSAiLi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oIiAyCgoKCgoKCgpuYW1lc3BhY2UgV1RGIHsKCiAgICB1
c2luZyBzdGQ6Om1pbjsKICAgIHVzaW5nIHN0ZDo6bWF4OwoKICAgIHRlbXBsYXRlIDxib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24sIHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yRGVzdHJ1Y3RvcjsK
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3RydWN0IFZlY3RvckRlc3RydWN0b3I8ZmFs
c2UsIFQ+CiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3QoVCosIFQqKSB7fQogICAg
fTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3RydWN0IFZlY3RvckRlc3RydWN0b3I8
dHJ1ZSwgVD4KICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cnVjdChUKiBiZWdpbiwgVCog
ZW5kKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChUKiBjdXIgPSBiZWdpbjsgY3VyICE9IGVu
ZDsgKytjdXIpCiAgICAgICAgICAgICAgICBjdXItPn5UKCk7CiAgICAgICAgfQogICAgfTsKCiAg
ICB0ZW1wbGF0ZSA8Ym9vbCBuZWVkc0luaXRpYWxpemF0aW9uLCBib29sIGNhbkluaXRpYWxpemVX
aXRoTWVtc2V0LCB0eXBlbmFtZSBUPgogICAgc3RydWN0IFZlY3RvckluaXRpYWxpemVyOwoKICAg
IHRlbXBsYXRlPGJvb2wgaWdub3JlLCB0eXBlbmFtZSBUPgogICAgc3RydWN0IFZlY3RvckluaXRp
YWxpemVyPGZhbHNlLCBpZ25vcmUsIFQ+CiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZShUKiwgVCopIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1
Y3QgVmVjdG9ySW5pdGlhbGl6ZXI8dHJ1ZSwgZmFsc2UsIFQ+CiAgICB7CiAgICAgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZShUKiBiZWdpbiwgVCogZW5kKQogICAgICAgIHsKICAgICAgICAgICAg
Zm9yIChUKiBjdXIgPSBiZWdpbjsgY3VyICE9IGVuZDsgKytjdXIpCiAgICAgICAgICAgICAgICBu
ZXcgKE5vdE51bGwsIGN1cikgVDsKICAgICAgICB9CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9ySW5pdGlhbGl6ZXI8dHJ1ZSwgdHJ1ZSwgVD4KICAgIHsK
ICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFQqIGJlZ2luLCBUKiBlbmQpCiAgICAgICAg
ewogICAgICAgICAgICBtZW1zZXQoYmVnaW4sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVu
ZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihiZWdpbikpOwogICAgICAgIH0KICAgIH07Cgog
ICAgdGVtcGxhdGUgPGJvb2wgY2FuTW92ZVdpdGhNZW1jcHksIHR5cGVuYW1lIFQ+CiAgICBzdHJ1
Y3QgVmVjdG9yTW92ZXI7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHN0cnVjdCBWZWN0
b3JNb3ZlcjxmYWxzZSwgVD4KICAgIHsKICAgICAgICBzdGF0aWMgdm9pZCBtb3ZlKGNvbnN0IFQq
IHNyYywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpCiAgICAgICAgewogICAgICAgICAgICB3aGls
ZSAoc3JjICE9IHNyY0VuZCkgewogICAgICAgICAgICAgICAgbmV3IChOb3ROdWxsLCBkc3QpIFQo
KnNyYyk7CgoKCiAgICAgICAgICAgICAgICBzcmMtPn5UKCk7CgogICAgICAgICAgICAgICAgKytk
c3Q7CiAgICAgICAgICAgICAgICArK3NyYzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICBzdGF0aWMgdm9pZCBtb3ZlT3ZlcmxhcHBpbmcoY29uc3QgVCogc3JjLCBjb25zdCBUKiBzcmNF
bmQsIFQqIGRzdCkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzcmMgPiBkc3QpCiAgICAgICAg
ICAgICAgICBtb3ZlKHNyYywgc3JjRW5kLCBkc3QpOwogICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgIFQqIGRzdEVuZCA9IGRzdCArIChzcmNFbmQgLSBzcmMpOwogICAgICAgICAgICAg
ICAgd2hpbGUgKHNyYyAhPSBzcmNFbmQpIHsKICAgICAgICAgICAgICAgICAgICAtLXNyY0VuZDsK
ICAgICAgICAgICAgICAgICAgICAtLWRzdEVuZDsKICAgICAgICAgICAgICAgICAgICBuZXcgKE5v
dE51bGwsIGRzdEVuZCkgVCgqc3JjRW5kKTsKICAgICAgICAgICAgICAgICAgICBzcmNFbmQtPn5U
KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yTW92ZXI8dHJ1ZSwgVD4KICAg
IHsKICAgICAgICBzdGF0aWMgdm9pZCBtb3ZlKGNvbnN0IFQqIHNyYywgY29uc3QgVCogc3JjRW5k
LCBUKiBkc3QpCiAgICAgICAgewogICAgICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHNyY0VuZCkgLSByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzcmMpKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgbW92ZU92ZXJsYXBwaW5n
KGNvbnN0IFQqIHNyYywgY29uc3QgVCogc3JjRW5kLCBUKiBkc3QpCiAgICAgICAgewogICAgICAg
ICAgICBtZW1tb3ZlKGRzdCwgc3JjLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzcmNF
bmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3JjKSk7CiAgICAgICAgfQogICAg
fTsKCiAgICB0ZW1wbGF0ZSA8Ym9vbCBjYW5Db3B5V2l0aE1lbWNweSwgdHlwZW5hbWUgVD4KICAg
IHN0cnVjdCBWZWN0b3JDb3BpZXI7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHN0cnVj
dCBWZWN0b3JDb3BpZXI8ZmFsc2UsIFQ+CiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQgdW5pbml0
aWFsaXplZENvcHkoY29uc3QgVCogc3JjLCBjb25zdCBUKiBzcmNFbmQsIFQqIGRzdCkKICAgICAg
ICB7CiAgICAgICAgICAgIHdoaWxlIChzcmMgIT0gc3JjRW5kKSB7CiAgICAgICAgICAgICAgICBu
ZXcgKE5vdE51bGwsIGRzdCkgVCgqc3JjKTsKICAgICAgICAgICAgICAgICsrZHN0OwogICAgICAg
ICAgICAgICAgKytzcmM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yQ29waWVyPHRydWUsIFQ+CiAgICB7CiAg
ICAgICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZENvcHkoY29uc3QgVCogc3JjLCBjb25zdCBU
KiBzcmNFbmQsIFQqIGRzdCkKICAgICAgICB7CiAgICAgICAgICAgIG1lbWNweShkc3QsIHNyYywg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3JjRW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KHNyYykpOwogICAgICAgIH0KICAgIH07CgogICAgdGVtcGxhdGUgPGJvb2wg
Y2FuRmlsbFdpdGhNZW1zZXQsIHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yRmlsbGVyOwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgVmVjdG9yRmlsbGVyPGZhbHNlLCBU
PgogICAgewogICAgICAgIHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZWRGaWxsKFQqIGRzdCwgVCog
ZHN0RW5kLCBjb25zdCBUJiB2YWwpCiAgICAgICAgewogICAgICAgICAgICB3aGlsZSAoZHN0ICE9
IGRzdEVuZCkgewogICAgICAgICAgICAgICAgbmV3IChOb3ROdWxsLCBkc3QpIFQodmFsKTsKICAg
ICAgICAgICAgICAgICsrZHN0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3RydWN0IFZlY3RvckZpbGxlcjx0cnVlLCBUPgogICAg
ewogICAgICAgIHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZWRGaWxsKFQqIGRzdCwgVCogZHN0RW5k
LCBjb25zdCBUJiB2YWwpCiAgICAgICAgewogICAgICAgICAgICAoKHZvaWQpMCk7CgoKCiAgICAg
ICAgICAgICAgICBtZW1zZXQoZHN0LCB2YWwsIGRzdEVuZCAtIGRzdCk7CiAgICAgICAgfQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxib29sIGNhbkNvbXBhcmVXaXRoTWVtY21wLCB0eXBlbmFtZSBUPgog
ICAgc3RydWN0IFZlY3RvckNvbXBhcmVyOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBz
dHJ1Y3QgVmVjdG9yQ29tcGFyZXI8ZmFsc2UsIFQ+CiAgICB7CiAgICAgICAgc3RhdGljIGJvb2wg
Y29tcGFyZShjb25zdCBUKiBhLCBjb25zdCBUKiBiLCBzaXplX3Qgc2l6ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICAgICAg
ICAgaWYgKCEoYVtpXSA9PSBiW2ldKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH07CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KICAgIHN0cnVjdCBWZWN0b3JDb21wYXJlcjx0cnVlLCBUPgogICAgewogICAg
ICAgIHN0YXRpYyBib29sIGNvbXBhcmUoY29uc3QgVCogYSwgY29uc3QgVCogYiwgc2l6ZV90IHNp
emUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbWVtY21wKGEsIGIsIHNpemVvZihUKSAq
IHNpemUpID09IDA7CiAgICAgICAgfQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgc3RydWN0IFZlY3RvclR5cGVPcGVyYXRpb25zCiAgICB7CiAgICAgICAgc3RhdGljIHZvaWQg
ZGVzdHJ1Y3QoVCogYmVnaW4sIFQqIGVuZCkKICAgICAgICB7CiAgICAgICAgICAgIFZlY3RvckRl
c3RydWN0b3I8VmVjdG9yVHJhaXRzPFQ+OjpuZWVkc0Rlc3RydWN0aW9uLCBUPjo6ZGVzdHJ1Y3Qo
YmVnaW4sIGVuZCk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKFQq
IGJlZ2luLCBUKiBlbmQpCiAgICAgICAgewogICAgICAgICAgICBWZWN0b3JJbml0aWFsaXplcjxW
ZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24sIFZlY3RvclRyYWl0czxUPjo6Y2Fu
SW5pdGlhbGl6ZVdpdGhNZW1zZXQsIFQ+Ojppbml0aWFsaXplKGJlZ2luLCBlbmQpOwogICAgICAg
IH0KCiAgICAgICAgc3RhdGljIHZvaWQgbW92ZShjb25zdCBUKiBzcmMsIGNvbnN0IFQqIHNyY0Vu
ZCwgVCogZHN0KQogICAgICAgIHsKICAgICAgICAgICAgVmVjdG9yTW92ZXI8VmVjdG9yVHJhaXRz
PFQ+OjpjYW5Nb3ZlV2l0aE1lbWNweSwgVD46Om1vdmUoc3JjLCBzcmNFbmQsIGRzdCk7CiAgICAg
ICAgfQoKICAgICAgICBzdGF0aWMgdm9pZCBtb3ZlT3ZlcmxhcHBpbmcoY29uc3QgVCogc3JjLCBj
b25zdCBUKiBzcmNFbmQsIFQqIGRzdCkKICAgICAgICB7CiAgICAgICAgICAgIFZlY3Rvck1vdmVy
PFZlY3RvclRyYWl0czxUPjo6Y2FuTW92ZVdpdGhNZW1jcHksIFQ+Ojptb3ZlT3ZlcmxhcHBpbmco
c3JjLCBzcmNFbmQsIGRzdCk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgdm9pZCB1bmluaXRp
YWxpemVkQ29weShjb25zdCBUKiBzcmMsIGNvbnN0IFQqIHNyY0VuZCwgVCogZHN0KQogICAgICAg
IHsKICAgICAgICAgICAgVmVjdG9yQ29waWVyPFZlY3RvclRyYWl0czxUPjo6Y2FuQ29weVdpdGhN
ZW1jcHksIFQ+Ojp1bmluaXRpYWxpemVkQ29weShzcmMsIHNyY0VuZCwgZHN0KTsKICAgICAgICB9
CgogICAgICAgIHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZWRGaWxsKFQqIGRzdCwgVCogZHN0RW5k
LCBjb25zdCBUJiB2YWwpCiAgICAgICAgewogICAgICAgICAgICBWZWN0b3JGaWxsZXI8VmVjdG9y
VHJhaXRzPFQ+OjpjYW5GaWxsV2l0aE1lbXNldCwgVD46OnVuaW5pdGlhbGl6ZWRGaWxsKGRzdCwg
ZHN0RW5kLCB2YWwpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIGJvb2wgY29tcGFyZShjb25z
dCBUKiBhLCBjb25zdCBUKiBiLCBzaXplX3Qgc2l6ZSkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBWZWN0b3JDb21wYXJlcjxWZWN0b3JUcmFpdHM8VD46OmNhbkNvbXBhcmVXaXRoTWVtY21w
LCBUPjo6Y29tcGFyZShhLCBiLCBzaXplKTsKICAgICAgICB9CiAgICB9OwoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICBjbGFzcyBWZWN0b3JCdWZmZXJCYXNlIHsKICAgICAgICBwcml2YXRl
OiBWZWN0b3JCdWZmZXJCYXNlKGNvbnN0IFZlY3RvckJ1ZmZlckJhc2UmKTsgVmVjdG9yQnVmZmVy
QmFzZSYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvckJ1ZmZlckJhc2UmKTsKICAgIHB1YmxpYzoKICAg
ICAgICB2b2lkIGFsbG9jYXRlQnVmZmVyKHNpemVfdCBuZXdDYXBhY2l0eSkKICAgICAgICB7CiAg
ICAgICAgICAgICgodm9pZCkwKTsKICAgICAgICAgICAgbV9jYXBhY2l0eSA9IG5ld0NhcGFjaXR5
OwogICAgICAgICAgICBpZiAobmV3Q2FwYWNpdHkgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVf
dD46Om1heCgpIC8gc2l6ZW9mKFQpKQogICAgICAgICAgICAgICAgZG8geyBXVEZSZXBvcnRCYWNr
dHJhY2UoKTsgV1RGSW52b2tlQ3Jhc2hIb29rKCk7ICooaW50ICopKHVpbnRwdHJfdCkweGJiYWRi
ZWVmID0gMDsgKCh2b2lkKCopKCkpMCkoKTsgfSB3aGlsZSAoZmFsc2UpOwogICAgICAgICAgICBt
X2J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihmYXN0TWFsbG9jKG5ld0NhcGFjaXR5ICogc2l6ZW9m
KFQpKSk7CiAgICAgICAgfQoKICAgICAgICBib29sIHRyeUFsbG9jYXRlQnVmZmVyKHNpemVfdCBu
ZXdDYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAgICAgICgodm9pZCkwKTsKICAgICAgICAgICAg
aWYgKG5ld0NhcGFjaXR5ID4gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAvIHNp
emVvZihUKSkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgIFQqIG5l
d0J1ZmZlcjsKICAgICAgICAgICAgaWYgKHRyeUZhc3RNYWxsb2MobmV3Q2FwYWNpdHkgKiBzaXpl
b2YoVCkpLmdldFZhbHVlKG5ld0J1ZmZlcikpIHsKICAgICAgICAgICAgICAgIG1fY2FwYWNpdHkg
PSBuZXdDYXBhY2l0eTsKICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gbmV3QnVmZmVyOwogICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBkZWFsbG9jYXRlQnVmZmVyKFQqIGJ1ZmZl
clRvRGVhbGxvY2F0ZSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChtX2J1ZmZlciA9PSBidWZm
ZXJUb0RlYWxsb2NhdGUpIHsKICAgICAgICAgICAgICAgIG1fYnVmZmVyID0gMDsKICAgICAgICAg
ICAgICAgIG1fY2FwYWNpdHkgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZhc3RGcmVl
KGJ1ZmZlclRvRGVhbGxvY2F0ZSk7CiAgICAgICAgfQoKICAgICAgICBUKiBidWZmZXIoKSB7IHJl
dHVybiBtX2J1ZmZlcjsgfQogICAgICAgIGNvbnN0IFQqIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyOyB9CiAgICAgICAgVCoqIGJ1ZmZlclNsb3QoKSB7IHJldHVybiAmbV9idWZmZXI7
IH0KICAgICAgICBzaXplX3QgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5OyB9
CgogICAgICAgIFQqIHJlbGVhc2VCdWZmZXIoKQogICAgICAgIHsKICAgICAgICAgICAgVCogYnVm
ZmVyID0gbV9idWZmZXI7CiAgICAgICAgICAgIG1fYnVmZmVyID0gMDsKICAgICAgICAgICAgbV9j
YXBhY2l0eSA9IDA7CiAgICAgICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgICAgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgICBWZWN0b3JCdWZmZXJCYXNlKCkKICAgICAgICAgICAgOiBtX2J1ZmZl
cigwKQogICAgICAgICAgICAsIG1fY2FwYWNpdHkoMCkKICAgICAgICB7CiAgICAgICAgfQoKICAg
ICAgICBWZWN0b3JCdWZmZXJCYXNlKFQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5KQogICAgICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgICAgICAgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5
KQogICAgICAgIHsKICAgICAgICB9CgogICAgICAgIH5WZWN0b3JCdWZmZXJCYXNlKCkKICAgICAg
ICB7CgogICAgICAgIH0KCiAgICAgICAgVCogbV9idWZmZXI7CiAgICAgICAgc2l6ZV90IG1fY2Fw
YWNpdHk7CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KICAgIGNsYXNzIFZlY3RvckJ1ZmZlcjsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgY2xhc3MgVmVjdG9yQnVmZmVyPFQsIDA+IDogcHJpdmF0ZSBWZWN0b3JCdWZmZXJCYXNlPFQ+
IHsKICAgIHByaXZhdGU6CiAgICAgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNlPFQ+IEJhc2U7
CiAgICBwdWJsaWM6CiAgICAgICAgVmVjdG9yQnVmZmVyKCkKICAgICAgICB7CiAgICAgICAgfQoK
ICAgICAgICBWZWN0b3JCdWZmZXIoc2l6ZV90IGNhcGFjaXR5KQogICAgICAgIHsKCgogICAgICAg
ICAgICBpZiAoY2FwYWNpdHkpCiAgICAgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihjYXBhY2l0
eSk7CiAgICAgICAgfQoKICAgICAgICB+VmVjdG9yQnVmZmVyKCkKICAgICAgICB7CiAgICAgICAg
ICAgIGRlYWxsb2NhdGVCdWZmZXIoYnVmZmVyKCkpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBz
d2FwKFZlY3RvckJ1ZmZlcjxULCAwPiYgb3RoZXIpCiAgICAgICAgewogICAgICAgICAgICBzdGQ6
OnN3YXAobV9idWZmZXIsIG90aGVyLm1fYnVmZmVyKTsKICAgICAgICAgICAgc3RkOjpzd2FwKG1f
Y2FwYWNpdHksIG90aGVyLm1fY2FwYWNpdHkpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCByZXN0
b3JlSW5saW5lQnVmZmVySWZOZWVkZWQoKSB7IH0KCiAgICAgICAgdXNpbmcgQmFzZTo6YWxsb2Nh
dGVCdWZmZXI7CiAgICAgICAgdXNpbmcgQmFzZTo6dHJ5QWxsb2NhdGVCdWZmZXI7CiAgICAgICAg
dXNpbmcgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcjsKCiAgICAgICAgdXNpbmcgQmFzZTo6YnVmZmVy
OwogICAgICAgIHVzaW5nIEJhc2U6OmJ1ZmZlclNsb3Q7CiAgICAgICAgdXNpbmcgQmFzZTo6Y2Fw
YWNpdHk7CgogICAgICAgIHVzaW5nIEJhc2U6OnJlbGVhc2VCdWZmZXI7CiAgICBwcml2YXRlOgog
ICAgICAgIHVzaW5nIEJhc2U6Om1fYnVmZmVyOwogICAgICAgIHVzaW5nIEJhc2U6Om1fY2FwYWNp
dHk7CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KICAgIGNsYXNzIFZlY3RvckJ1ZmZlciA6IHByaXZhdGUgVmVjdG9yQnVmZmVyQmFzZTxUPiB7
CiAgICAgICAgcHJpdmF0ZTogVmVjdG9yQnVmZmVyKGNvbnN0IFZlY3RvckJ1ZmZlciYpOyBWZWN0
b3JCdWZmZXImIG9wZXJhdG9yPShjb25zdCBWZWN0b3JCdWZmZXImKTsKICAgIHByaXZhdGU6CiAg
ICAgICAgdHlwZWRlZiBWZWN0b3JCdWZmZXJCYXNlPFQ+IEJhc2U7CiAgICBwdWJsaWM6CiAgICAg
ICAgVmVjdG9yQnVmZmVyKCkKICAgICAgICAgICAgOiBCYXNlKGlubGluZUJ1ZmZlcigpLCBpbmxp
bmVDYXBhY2l0eSkKICAgICAgICB7CiAgICAgICAgfQoKICAgICAgICBWZWN0b3JCdWZmZXIoc2l6
ZV90IGNhcGFjaXR5KQogICAgICAgICAgICA6IEJhc2UoaW5saW5lQnVmZmVyKCksIGlubGluZUNh
cGFjaXR5KQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNhcGFjaXR5ID4gaW5saW5lQ2FwYWNp
dHkpCiAgICAgICAgICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1ZmZlcihjYXBhY2l0eSk7CiAgICAg
ICAgfQoKICAgICAgICB+VmVjdG9yQnVmZmVyKCkKICAgICAgICB7CiAgICAgICAgICAgIGRlYWxs
b2NhdGVCdWZmZXIoYnVmZmVyKCkpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBhbGxvY2F0ZUJ1
ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAgICAgewoKICAgICAgICAgICAgaWYgKG5ld0Nh
cGFjaXR5ID4gaW5saW5lQ2FwYWNpdHkpCiAgICAgICAgICAgICAgICBCYXNlOjphbGxvY2F0ZUJ1
ZmZlcihuZXdDYXBhY2l0eSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgbV9i
dWZmZXIgPSBpbmxpbmVCdWZmZXIoKTsKICAgICAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbmxp
bmVDYXBhY2l0eTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgYm9vbCB0cnlBbGxv
Y2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICAgICAgewogICAgICAgICAgICBpZiAo
bmV3Q2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKICAgICAgICAgICAgICAgIHJldHVybiBCYXNl
Ojp0cnlBbGxvY2F0ZUJ1ZmZlcihuZXdDYXBhY2l0eSk7CiAgICAgICAgICAgIG1fYnVmZmVyID0g
aW5saW5lQnVmZmVyKCk7CiAgICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsK
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICB2b2lkIGRlYWxsb2Nh
dGVCdWZmZXIoVCogYnVmZmVyVG9EZWFsbG9jYXRlKQogICAgICAgIHsKICAgICAgICAgICAgaWYg
KGJ1ZmZlclRvRGVhbGxvY2F0ZSA9PSBpbmxpbmVCdWZmZXIoKSkKICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgQmFzZTo6ZGVhbGxvY2F0ZUJ1ZmZlcihidWZmZXJUb0RlYWxsb2Nh
dGUpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCBzd2FwKFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVD
YXBhY2l0eT4mIG90aGVyKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGJ1ZmZlcigpID09IGlu
bGluZUJ1ZmZlcigpICYmIG90aGVyLmJ1ZmZlcigpID09IG90aGVyLmlubGluZUJ1ZmZlcigpKSB7
CiAgICAgICAgICAgICAgICBXVEY6OnN3YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5l
QnVmZmVyKTsKICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2Nh
cGFjaXR5KTsKICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIoKSA9PSBpbmxpbmVCdWZmZXIo
KSkgewogICAgICAgICAgICAgICAgbV9idWZmZXIgPSBvdGhlci5tX2J1ZmZlcjsKICAgICAgICAg
ICAgICAgIG90aGVyLm1fYnVmZmVyID0gb3RoZXIuaW5saW5lQnVmZmVyKCk7CiAgICAgICAgICAg
ICAgICBXVEY6OnN3YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVyKTsKICAg
ICAgICAgICAgICAgIHN0ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2NhcGFjaXR5KTsKICAg
ICAgICAgICAgfSBlbHNlIGlmIChvdGhlci5idWZmZXIoKSA9PSBvdGhlci5pbmxpbmVCdWZmZXIo
KSkgewogICAgICAgICAgICAgICAgb3RoZXIubV9idWZmZXIgPSBtX2J1ZmZlcjsKICAgICAgICAg
ICAgICAgIG1fYnVmZmVyID0gaW5saW5lQnVmZmVyKCk7CiAgICAgICAgICAgICAgICBXVEY6OnN3
YXAobV9pbmxpbmVCdWZmZXIsIG90aGVyLm1faW5saW5lQnVmZmVyKTsKICAgICAgICAgICAgICAg
IHN0ZDo6c3dhcChtX2NhcGFjaXR5LCBvdGhlci5tX2NhcGFjaXR5KTsKICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChtX2J1ZmZlciwgb3RoZXIubV9idWZmZXIp
OwogICAgICAgICAgICAgICAgc3RkOjpzd2FwKG1fY2FwYWNpdHksIG90aGVyLm1fY2FwYWNpdHkp
OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2b2lkIHJlc3RvcmVJbmxpbmVCdWZm
ZXJJZk5lZWRlZCgpCiAgICAgICAgewogICAgICAgICAgICBpZiAobV9idWZmZXIpCiAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgIG1fYnVmZmVyID0gaW5saW5lQnVmZmVyKCk7CiAg
ICAgICAgICAgIG1fY2FwYWNpdHkgPSBpbmxpbmVDYXBhY2l0eTsKICAgICAgICB9CgogICAgICAg
IHVzaW5nIEJhc2U6OmJ1ZmZlcjsKICAgICAgICB1c2luZyBCYXNlOjpidWZmZXJTbG90OwogICAg
ICAgIHVzaW5nIEJhc2U6OmNhcGFjaXR5OwoKICAgICAgICBUKiByZWxlYXNlQnVmZmVyKCkKICAg
ICAgICB7CiAgICAgICAgICAgIGlmIChidWZmZXIoKSA9PSBpbmxpbmVCdWZmZXIoKSkKICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICByZXR1cm4gQmFzZTo6cmVsZWFzZUJ1ZmZl
cigpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICAgIHVzaW5nIEJhc2U6Om1fYnVmZmVy
OwogICAgICAgIHVzaW5nIEJhc2U6Om1fY2FwYWNpdHk7CgogICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbV9pbmxpbmVCdWZmZXJTaXplID0gaW5saW5lQ2FwYWNpdHkgKiBzaXplb2YoVCk7CiAg
ICAgICAgVCogaW5saW5lQnVmZmVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4obV9p
bmxpbmVCdWZmZXIuYnVmZmVyKTsgfQoKICAgICAgICBBbGlnbmVkQnVmZmVyPG1faW5saW5lQnVm
ZmVyU2l6ZSwgX19hbGlnbm9mX18oVCk+IG1faW5saW5lQnVmZmVyOwogICAgfTsKCiAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwPgogICAgY2xhc3MgVmVj
dG9yIHsKICAgICAgICBwdWJsaWM6IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHAp
IHsgcmV0dXJuIHA7IH0gdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJl
dHVybiBwOyB9IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgeyB2b2lkKiBwID0gOjpX
VEY6OmZhc3RNYWxsb2Moc2l6ZSk7IDo6V1RGOjpmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxv
YyhwLCA6OldURjo6SW50ZXJuYWw6OkFsbG9jVHlwZUNsYXNzTmV3KTsgcmV0dXJuIHA7IH0gdm9p
ZCBvcGVyYXRvciBkZWxldGUodm9pZCogcCkgeyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRh
dGVGcmVlKHAsIDo6V1RGOjpJbnRlcm5hbDo6QWxsb2NUeXBlQ2xhc3NOZXcpOyA6OldURjo6ZmFz
dEZyZWUocCk7IH0gdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUpIHsgdm9pZCogcCA9
IDo6V1RGOjpmYXN0TWFsbG9jKHNpemUpOyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVN
YWxsb2MocCwgOjpXVEY6OkludGVybmFsOjpBbGxvY1R5cGVDbGFzc05ld0FycmF5KTsgcmV0dXJu
IHA7IH0gdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwKSB7IDo6V1RGOjpmYXN0TWFsbG9j
TWF0Y2hWYWxpZGF0ZUZyZWUocCwgOjpXVEY6OkludGVybmFsOjpBbGxvY1R5cGVDbGFzc05ld0Fy
cmF5KTsgOjpXVEY6OmZhc3RGcmVlKHApOyB9IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5v
dE51bGxUYWcsIHZvaWQqIGxvY2F0aW9uKSB7ICgodm9pZCkwKTsgcmV0dXJuIGxvY2F0aW9uOyB9
IHByaXZhdGU6IHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJU
aGlzTWFjcm87CiAgICBwcml2YXRlOgogICAgICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlu
bGluZUNhcGFjaXR5PiBCdWZmZXI7CiAgICAgICAgdHlwZWRlZiBWZWN0b3JUeXBlT3BlcmF0aW9u
czxUPiBUeXBlT3BlcmF0aW9uczsKCiAgICAgICAgY2xhc3MgVmVjdG9yUmV2ZXJzZVByb3h5OwoK
ICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIFQgVmFsdWVUeXBlOwoKICAgICAgICB0eXBlZGVm
IFQqIGl0ZXJhdG9yOwogICAgICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfaXRlcmF0b3I7CiAg
ICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl
cmF0b3I7CiAgICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0
b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CgogICAgICAgIFZlY3RvcigpCiAgICAgICAgICAg
IDogbV9zaXplKDApCiAgICAgICAgewogICAgICAgIH0KCiAgICAgICAgZXhwbGljaXQgVmVjdG9y
KHNpemVfdCBzaXplKQogICAgICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAgICAsIG1f
YnVmZmVyKHNpemUpCiAgICAgICAgewogICAgICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAgICAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGJlZ2luKCksIGVuZCgpKTsKICAgICAg
ICB9CgogICAgICAgIH5WZWN0b3IoKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG1fc2l6ZSkK
ICAgICAgICAgICAgICAgIHNocmluaygwKTsKICAgICAgICB9CgogICAgICAgIFZlY3Rvcihjb25z
dCBWZWN0b3ImKTsKICAgICAgICB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4KICAgICAg
ICBWZWN0b3IoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHk+Jik7CgogICAgICAgIFZlY3Rv
ciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYpOwogICAgICAgIHRlbXBsYXRlPHNpemVfdCBvdGhl
ckNhcGFjaXR5PgogICAgICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhl
ckNhcGFjaXR5PiYpOwoKICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogICAgICAgIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmNh
cGFjaXR5KCk7IH0KICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiAhc2l6ZSgp
OyB9CgogICAgICAgIFQmIGF0KHNpemVfdCBpKQogICAgICAgIHsKICAgICAgICAgICAgKCh2b2lk
KTApOwogICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuYnVmZmVyKClbaV07CiAgICAgICAgfQog
ICAgICAgIGNvbnN0IFQmIGF0KHNpemVfdCBpKSBjb25zdAogICAgICAgIHsKICAgICAgICAgICAg
KCh2b2lkKTApOwogICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuYnVmZmVyKClbaV07CiAgICAg
ICAgfQoKICAgICAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IHJldHVybiBhdChpKTsgfQog
ICAgICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkp
OyB9CgogICAgICAgIFQqIGRhdGEoKSB7IHJldHVybiBtX2J1ZmZlci5idWZmZXIoKTsgfQogICAg
ICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5idWZmZXIoKTsgfQog
ICAgICAgIFQqKiBkYXRhU2xvdCgpIHsgcmV0dXJuIG1fYnVmZmVyLmJ1ZmZlclNsb3QoKTsgfQoK
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQogICAgICAgIGl0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KICAgICAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGRhdGEoKTsgfQogICAgICAgIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KCiAgICAgICAgcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg
fQogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0
b3IoYmVnaW4oKSk7IH0KICAgICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICAgICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcihiZWdpbigpKTsgfQoKICAgICAgICBWZWN0b3JSZXZlcnNlUHJveHkmIHJldmVyc2Vk
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VmVjdG9yUmV2ZXJzZVByb3h5Jj4oKnRoaXMpOyB9CiAg
ICAgICAgY29uc3QgVmVjdG9yUmV2ZXJzZVByb3h5JiByZXZlcnNlZCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IFZlY3RvclJldmVyc2VQcm94eSY+KCp0aGlzKTsgfQoKICAgICAg
ICBUJiBmaXJzdCgpIHsgcmV0dXJuIGF0KDApOyB9CiAgICAgICAgY29uc3QgVCYgZmlyc3QoKSBj
b25zdCB7IHJldHVybiBhdCgwKTsgfQogICAgICAgIFQmIGxhc3QoKSB7IHJldHVybiBhdChzaXpl
KCkgLSAxKTsgfQogICAgICAgIGNvbnN0IFQmIGxhc3QoKSBjb25zdCB7IHJldHVybiBhdChzaXpl
KCkgLSAxKTsgfQoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBib29sIGNvbnRhaW5zKGNv
bnN0IFUmKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXplX3QgZmluZChj
b25zdCBVJikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gc2l6ZV90IHJldmVy
c2VGaW5kKGNvbnN0IFUmKSBjb25zdDsKCiAgICAgICAgdm9pZCBzaHJpbmsoc2l6ZV90IHNpemUp
OwogICAgICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSk7CiAgICAgICAgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUpOwogICAgICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0
eSk7CiAgICAgICAgYm9vbCB0cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsK
ICAgICAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0
eSk7CiAgICAgICAgdm9pZCBzaHJpbmtDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOwogICAg
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKSB7IHNocmlua0NhcGFjaXR5KHNpemUoKSk7IH0KCiAgICAg
ICAgdm9pZCBjbGVhcigpIHsgc2hyaW5rQ2FwYWNpdHkoMCk7IH0KCiAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSosIHNpemVfdCk7CiAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSYpOwogICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFU+IHZvaWQgdW5jaGVja2VkQXBwZW5kKGNvbnN0IFUmIHZhbCk7CiAgICAgICAgdGVt
cGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IHZvaWQgYXBwZW5kKGNvbnN0IFZlY3RvcjxULCBv
dGhlckNhcGFjaXR5PiYpOwogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgdHJ5QXBw
ZW5kKGNvbnN0IFUqLCBzaXplX3QpOwoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lk
IGluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUqLCBzaXplX3QpOwogICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHZvaWQgaW5zZXJ0KHNpemVfdCBwb3NpdGlvbiwgY29uc3QgVSYpOwog
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPiB2b2lkIGluc2VydChzaXplX3Qg
cG9zaXRpb24sIGNvbnN0IFZlY3RvcjxVLCBjPiYpOwoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiB2b2lkIHByZXBlbmQoY29uc3QgVSosIHNpemVfdCk7CiAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gdm9pZCBwcmVwZW5kKGNvbnN0IFUmKTsKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVLCBzaXplX3QgYz4gdm9pZCBwcmVwZW5kKGNvbnN0IFZlY3RvcjxVLCBjPiYpOwoKICAgICAg
ICB2b2lkIHJlbW92ZShzaXplX3QgcG9zaXRpb24pOwogICAgICAgIHZvaWQgcmVtb3ZlKHNpemVf
dCBwb3NpdGlvbiwgc2l6ZV90IGxlbmd0aCk7CgogICAgICAgIHZvaWQgcmVtb3ZlTGFzdCgpCiAg
ICAgICAgewogICAgICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgICAgIHNocmluayhzaXplKCkg
LSAxKTsKICAgICAgICB9CgogICAgICAgIFZlY3RvcihzaXplX3Qgc2l6ZSwgY29uc3QgVCYgdmFs
KQogICAgICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAgICAsIG1fYnVmZmVyKHNpemUp
CiAgICAgICAgewogICAgICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAgICAgICAgICAgIFR5cGVP
cGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChiZWdpbigpLCBlbmQoKSwgdmFsKTsKICAgICAg
ICB9CgogICAgICAgIHZvaWQgZmlsbChjb25zdCBUJiwgc2l6ZV90KTsKICAgICAgICB2b2lkIGZp
bGwoY29uc3QgVCYgdmFsKSB7IGZpbGwodmFsLCBzaXplKCkpOyB9CgogICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEl0ZXJhdG9yPiB2b2lkIGFwcGVuZFJhbmdlKEl0ZXJhdG9yIHN0YXJ0LCBJdGVy
YXRvciBlbmQpOwoKICAgICAgICBUKiByZWxlYXNlQnVmZmVyKCk7CgogICAgICAgIHZvaWQgc3dh
cChWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBvdGhlcikKICAgICAgICB7CiAgICAgICAgICAg
IHN0ZDo6c3dhcChtX3NpemUsIG90aGVyLm1fc2l6ZSk7CiAgICAgICAgICAgIG1fYnVmZmVyLnN3
YXAob3RoZXIubV9idWZmZXIpOwogICAgICAgIH0KCiAgICAgICAgdm9pZCByZXZlcnNlKCk7Cgog
ICAgICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwoKICAgIHByaXZhdGU6CiAgICAgICAgdm9p
ZCBleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHkpOwogICAgICAgIGNvbnN0IFQq
IGV4cGFuZENhcGFjaXR5KHNpemVfdCBuZXdNaW5DYXBhY2l0eSwgY29uc3QgVCopOwogICAgICAg
IGJvb2wgdHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKICAgICAgICBj
b25zdCBUKiB0cnlFeHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIGNvbnN0IFQq
KTsKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBVKiBleHBhbmRDYXBhY2l0eShzaXplX3Qg
bmV3TWluQ2FwYWNpdHksIFUqKTsKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIGFw
cGVuZFNsb3dDYXNlKGNvbnN0IFUmKTsKCiAgICAgICAgY2xhc3MgVmVjdG9yUmV2ZXJzZVByb3h5
IDogcHJpdmF0ZSBWZWN0b3IgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBWZWN0b3I6OnJldmVyc2VfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICAgICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgVmVjdG9yOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X2l0ZXJh
dG9yOwoKICAgICAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBWZWN0b3I6OnJiZWdp
bigpOyB9CiAgICAgICAgICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIFZlY3Rvcjo6cmVuZCgp
OyB9CiAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gVmVj
dG9yOjpyYmVnaW4oKTsgfQogICAgICAgICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBWZWN0b3I6OnJlbmQoKTsgfQoKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBm
cmllbmQgY2xhc3MgVmVjdG9yOwoKCiAgICAgICAgICAgIFZlY3RvclJldmVyc2VQcm94eSgpOwog
ICAgICAgICAgICBWZWN0b3JSZXZlcnNlUHJveHkoY29uc3QgVmVjdG9yUmV2ZXJzZVByb3h5Jik7
CiAgICAgICAgICAgIFZlY3RvclJldmVyc2VQcm94eSYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvclJl
dmVyc2VQcm94eSYpOwogICAgICAgICAgICB+VmVjdG9yUmV2ZXJzZVByb3h5KCk7CiAgICAgICAg
fTsKCiAgICAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICAgICBCdWZmZXIgbV9idWZmZXI7CiAgICB9
OwojIDY3OCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oIgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCiAgICAgICAgOiBtX3NpemUo
b3RoZXIuc2l6ZSgpKQogICAgICAgICwgbV9idWZmZXIob3RoZXIuY2FwYWNpdHkoKSkKICAgIHsK
ICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKICAgIH0KCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICB0ZW1wbGF0
ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4KICAgIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OlZl
Y3Rvcihjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mIG90aGVyKQogICAgICAgIDogbV9z
aXplKG90aGVyLnNpemUoKSkKICAgICAgICAsIG1fYnVmZmVyKG90aGVyLmNhcGFjaXR5KCkpCiAg
ICB7CiAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmlu
aXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CiAgICB9
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgVmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0
b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQogICAgewogICAgICAg
IGlmICgmb3RoZXIgPT0gdGhpcykKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwoKICAgICAgICBp
ZiAoc2l6ZSgpID4gb3RoZXIuc2l6ZSgpKQogICAgICAgICAgICBzaHJpbmsob3RoZXIuc2l6ZSgp
KTsKICAgICAgICBlbHNlIGlmIChvdGhlci5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAg
ICAgIGNsZWFyKCk7CiAgICAgICAgICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwog
ICAgICAgICAgICBpZiAoIWJlZ2luKCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgICAgfQoKCgoKCgoKICAgICAgICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVn
aW4oKSArIHNpemUoKSwgYmVnaW4oKSk7CiAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CiAg
ICAgICAgbV9zaXplID0gb3RoZXIuc2l6ZSgpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogICAgaW5saW5lIGJvb2wgdHlwZWxlc3NQb2ludGVyc0FyZUVxdWFsKGNvbnN0IHZvaWQqIGEs
IGNvbnN0IHZvaWQqIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFj
aXR5PgogICAgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgVmVjdG9yPFQsIGlubGluZUNhcGFj
aXR5Pjo6b3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBvdGhlckNhcGFjaXR5PiYgb3RoZXIpCiAg
ICB7CgoKCiAgICAgICAgKCh2b2lkKTApOwoKICAgICAgICBpZiAoc2l6ZSgpID4gb3RoZXIuc2l6
ZSgpKQogICAgICAgICAgICBzaHJpbmsob3RoZXIuc2l6ZSgpKTsKICAgICAgICBlbHNlIGlmIChv
dGhlci5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAg
ICAgIHJlc2VydmVDYXBhY2l0eShvdGhlci5zaXplKCkpOwogICAgICAgICAgICBpZiAoIWJlZ2lu
KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKCgoKICAgICAg
ICBzdGQ6OmNvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuYmVnaW4oKSArIHNpemUoKSwgYmVnaW4o
KSk7CiAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2lu
KCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CiAgICAgICAgbV9zaXplID0gb3RoZXIu
c2l6ZSgpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAg
IGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6Y29udGFpbnMoY29uc3QgVSYgdmFsdWUp
IGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIGZpbmQodmFsdWUpICE9IG5vdEZvdW5kOwogICAg
fQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFU+CiAgICBzaXplX3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6
ZmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNpemUoKTsgKytpKSB7CiAgICAgICAgICAgIGlmIChhdChpKSA9PSB2YWx1ZSkKICAg
ICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbm90Rm91bmQ7
CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAgIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+OjpyZXZlcnNlRmluZChjb25zdCBVJiB2YWx1ZSkgY29uc3QKICAgIHsKICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMTsgaSA8PSBzaXplKCk7ICsraSkgewogICAgICAgICAgICBjb25zdCBzaXpl
X3QgaW5kZXggPSBzaXplKCkgLSBpOwogICAgICAgICAgICBpZiAoYXQoaW5kZXgpID09IHZhbHVl
KQogICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgIH0KICAgICAgICByZXR1cm4g
bm90Rm91bmQ7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgogICAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaWxsKGNvbnN0IFQm
IHZhbCwgc2l6ZV90IG5ld1NpemUpCiAgICB7CiAgICAgICAgaWYgKHNpemUoKSA+IG5ld1NpemUp
CiAgICAgICAgICAgIHNocmluayhuZXdTaXplKTsKICAgICAgICBlbHNlIGlmIChuZXdTaXplID4g
Y2FwYWNpdHkoKSkgewogICAgICAgICAgICBjbGVhcigpOwogICAgICAgICAgICByZXNlcnZlQ2Fw
YWNpdHkobmV3U2l6ZSk7CiAgICAgICAgICAgIGlmICghYmVnaW4oKSkKICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICB9CgogICAgICAgIHN0ZDo6ZmlsbChiZWdpbigpLCBlbmQoKSwgdmFs
KTsKICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoZW5kKCksIGJlZ2lu
KCkgKyBuZXdTaXplLCB2YWwpOwogICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CiAgICB9CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3I+CiAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmFw
cGVuZFJhbmdlKEl0ZXJhdG9yIHN0YXJ0LCBJdGVyYXRvciBlbmQpCiAgICB7CiAgICAgICAgZm9y
IChJdGVyYXRvciBpdCA9IHN0YXJ0OyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgIGFwcGVu
ZCgqaXQpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eT4KICAgIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHko
c2l6ZV90IG5ld01pbkNhcGFjaXR5KQogICAgewogICAgICAgIHJlc2VydmVDYXBhY2l0eShtYXgo
bmV3TWluQ2FwYWNpdHksIG1heChzdGF0aWNfY2FzdDxzaXplX3Q+KDE2KSwgY2FwYWNpdHkoKSAr
IGNhcGFjaXR5KCkgLyA0ICsgMSkpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICBjb25zdCBUKiBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+OjpleHBhbmRDYXBhY2l0eShzaXplX3QgbmV3TWluQ2FwYWNpdHksIGNvbnN0IFQqIHB0cikK
ICAgIHsKICAgICAgICBpZiAocHRyIDwgYmVnaW4oKSB8fCBwdHIgPj0gZW5kKCkpIHsKICAgICAg
ICAgICAgZXhwYW5kQ2FwYWNpdHkobmV3TWluQ2FwYWNpdHkpOwogICAgICAgICAgICByZXR1cm4g
cHRyOwogICAgICAgIH0KICAgICAgICBzaXplX3QgaW5kZXggPSBwdHIgLSBiZWdpbigpOwogICAg
ICAgIGV4cGFuZENhcGFjaXR5KG5ld01pbkNhcGFjaXR5KTsKICAgICAgICByZXR1cm4gYmVnaW4o
KSArIGluZGV4OwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KICAgIGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2Fw
YWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQogICAgewogICAgICAgIHJldHVybiB0cnlSZXNl
cnZlQ2FwYWNpdHkobWF4KG5ld01pbkNhcGFjaXR5LCBtYXgoc3RhdGljX2Nhc3Q8c2l6ZV90Pigx
NiksIGNhcGFjaXR5KCkgKyBjYXBhY2l0eSgpIC8gNCArIDEpKSk7CiAgICB9CgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgY29uc3QgVCogVmVjdG9y
PFQsIGlubGluZUNhcGFjaXR5Pjo6dHJ5RXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFj
aXR5LCBjb25zdCBUKiBwdHIpCiAgICB7CiAgICAgICAgaWYgKHB0ciA8IGJlZ2luKCkgfHwgcHRy
ID49IGVuZCgpKSB7CiAgICAgICAgICAgIGlmICghdHJ5RXhwYW5kQ2FwYWNpdHkobmV3TWluQ2Fw
YWNpdHkpKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIHJldHVybiBwdHI7
CiAgICAgICAgfQogICAgICAgIHNpemVfdCBpbmRleCA9IHB0ciAtIGJlZ2luKCk7CiAgICAgICAg
aWYgKCF0cnlFeHBhbmRDYXBhY2l0eShuZXdNaW5DYXBhY2l0eSkpCiAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgIHJldHVybiBiZWdpbigpICsgaW5kZXg7CiAgICB9CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgog
ICAgaW5saW5lIFUqIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KHNp
emVfdCBuZXdNaW5DYXBhY2l0eSwgVSogcHRyKQogICAgewogICAgICAgIGV4cGFuZENhcGFjaXR5
KG5ld01pbkNhcGFjaXR5KTsKICAgICAgICByZXR1cm4gcHRyOwogICAgfQoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgIGlubGluZSB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT46OnJlc2l6ZShzaXplX3Qgc2l6ZSkKICAgIHsKICAgICAgICBp
ZiAoc2l6ZSA8PSBtX3NpemUpCiAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjpkZXN0cnVjdChi
ZWdpbigpICsgc2l6ZSwgZW5kKCkpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoc2l6
ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKTsKICAg
ICAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5p
dGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOwogICAgICAgIH0KCiAgICAgICAgbV9zaXpl
ID0gc2l6ZTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CiAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OnNocmluayhzaXplX3Qg
c2l6ZSkKICAgIHsKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmRl
c3RydWN0KGJlZ2luKCkgKyBzaXplLCBlbmQoKSk7CiAgICAgICAgbV9zaXplID0gc2l6ZTsKICAg
IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICB2
b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Omdyb3coc2l6ZV90IHNpemUpCiAgICB7CiAg
ICAgICAgKCh2b2lkKTApOwogICAgICAgIGlmIChzaXplID4gY2FwYWNpdHkoKSkKICAgICAgICAg
ICAgZXhwYW5kQ2FwYWNpdHkoc2l6ZSk7CiAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgICAg
IFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGVuZCgpLCBiZWdpbigpICsgc2l6ZSk7CiAgICAg
ICAgbV9zaXplID0gc2l6ZTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+CiAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OnJlc2Vy
dmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICB7CiAgICAgICAgaWYgKG5ld0NhcGFj
aXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBUKiBvbGRCdWZm
ZXIgPSBiZWdpbigpOwogICAgICAgIFQqIG9sZEVuZCA9IGVuZCgpOwogICAgICAgIG1fYnVmZmVy
LmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAg
ICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwog
ICAgICAgIG1fYnVmZmVyLmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgIH0KCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICBib29sIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT46OnRyeVJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNp
dHkpCiAgICB7CiAgICAgICAgaWYgKG5ld0NhcGFjaXR5IDw9IGNhcGFjaXR5KCkpCiAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgIFQqIG9sZEJ1ZmZlciA9IGJlZ2luKCk7CiAgICAgICAg
VCogb2xkRW5kID0gZW5kKCk7CiAgICAgICAgaWYgKCFtX2J1ZmZlci50cnlBbGxvY2F0ZUJ1ZmZl
cihuZXdDYXBhY2l0eSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAoKHZvaWQp
MCk7CiAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2lu
KCkpOwogICAgICAgIG1fYnVmZmVyLmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CiAgICBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+Ojpy
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemVfdCBpbml0aWFsQ2FwYWNpdHkpCiAgICB7CiAgICAg
ICAgKCh2b2lkKTApOwogICAgICAgICgodm9pZCkwKTsKICAgICAgICBpZiAoaW5pdGlhbENhcGFj
aXR5ID4gaW5saW5lQ2FwYWNpdHkpCiAgICAgICAgICAgIG1fYnVmZmVyLmFsbG9jYXRlQnVmZmVy
KGluaXRpYWxDYXBhY2l0eSk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgogICAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpzaHJp
bmtDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCiAgICB7CiAgICAgICAgaWYgKG5ld0NhcGFj
aXR5ID49IGNhcGFjaXR5KCkpCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgaWYgKG5ld0Nh
cGFjaXR5IDwgc2l6ZSgpKQogICAgICAgICAgICBzaHJpbmsobmV3Q2FwYWNpdHkpOwoKICAgICAg
ICBUKiBvbGRCdWZmZXIgPSBiZWdpbigpOwogICAgICAgIGlmIChuZXdDYXBhY2l0eSA+IDApIHsK
ICAgICAgICAgICAgVCogb2xkRW5kID0gZW5kKCk7CiAgICAgICAgICAgIG1fYnVmZmVyLmFsbG9j
YXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKICAgICAgICAgICAgaWYgKGJlZ2luKCkgIT0gb2xkQnVm
ZmVyKQogICAgICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRF
bmQsIGJlZ2luKCkpOwogICAgICAgIH0KCiAgICAgICAgbV9idWZmZXIuZGVhbGxvY2F0ZUJ1ZmZl
cihvbGRCdWZmZXIpOwogICAgICAgIG1fYnVmZmVyLnJlc3RvcmVJbmxpbmVCdWZmZXJJZk5lZWRl
ZCgpOwogICAgfQoKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBh
Y2l0eT46OmFwcGVuZChjb25zdCBVKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCiAgICB7CiAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKICAgICAgICBpZiAobmV3U2l6
ZSA+IGNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5KG5ld1Np
emUsIGRhdGEpOwogICAgICAgICAgICBpZiAoIWJlZ2luKCkpCiAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgfQogICAgICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAgICAgICBk
byB7IFdURlJlcG9ydEJhY2t0cmFjZSgpOyBXVEZJbnZva2VDcmFzaEhvb2soKTsgKihpbnQgKiko
dWludHB0cl90KTB4YmJhZGJlZWYgPSAwOyAoKHZvaWQoKikoKSkwKSgpOyB9IHdoaWxlIChmYWxz
ZSk7CiAgICAgICAgVCogZGVzdCA9IGVuZCgpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGF0YVNpemU7ICsraSkKICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmZGVzdFtpXSkgVChk
YXRhW2ldKTsKICAgICAgICBtX3NpemUgPSBuZXdTaXplOwogICAgfQoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAg
IGJvb2wgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6dHJ5QXBwZW5kKGNvbnN0IFUqIGRhdGEs
IHNpemVfdCBkYXRhU2l6ZSkKICAgIHsKICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG1fc2l6ZSAr
IGRhdGFTaXplOwogICAgICAgIGlmIChuZXdTaXplID4gY2FwYWNpdHkoKSkgewogICAgICAgICAg
ICBkYXRhID0gdHJ5RXhwYW5kQ2FwYWNpdHkobmV3U2l6ZSwgZGF0YSk7CiAgICAgICAgICAgIGlm
ICghZGF0YSkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgKCh2b2lk
KTApOwogICAgICAgIH0KICAgICAgICBpZiAobmV3U2l6ZSA8IG1fc2l6ZSkKICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgIFQqIGRlc3QgPSBlbmQoKTsKICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGRhdGFTaXplOyArK2kpCiAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJmRl
c3RbaV0pIFQoZGF0YVtpXSk7CiAgICAgICAgbV9zaXplID0gbmV3U2l6ZTsKICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19h
bHdheXNfaW5saW5lX18pKSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmFwcGVuZChj
b25zdCBVJiB2YWwpCiAgICB7CiAgICAgICAgaWYgKHNpemUoKSAhPSBjYXBhY2l0eSgpKSB7CiAg
ICAgICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQodmFsKTsKICAgICAgICAgICAgKyttX3Np
emU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGFwcGVuZFNsb3dDYXNl
KHZhbCk7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogICAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNp
dHk+OjphcHBlbmRTbG93Q2FzZShjb25zdCBVJiB2YWwpCiAgICB7CiAgICAgICAgKCh2b2lkKTAp
OwoKICAgICAgICBjb25zdCBVKiBwdHIgPSAmdmFsOwogICAgICAgIHB0ciA9IGV4cGFuZENhcGFj
aXR5KHNpemUoKSArIDEsIHB0cik7CiAgICAgICAgaWYgKCFiZWdpbigpKQogICAgICAgICAgICBy
ZXR1cm47CgogICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoKnB0cik7CiAgICAgICAgKytt
X3NpemU7CiAgICB9CgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogICAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5Pjo6dW5jaGVja2VkQXBwZW5kKGNvbnN0IFUmIHZhbCkKICAgIHsKICAgICAg
ICAoKHZvaWQpMCk7CiAgICAgICAgY29uc3QgVSogcHRyID0gJnZhbDsKICAgICAgICBuZXcgKE5v
dE51bGwsIGVuZCgpKSBUKCpwdHIpOwogICAgICAgICsrbV9zaXplOwogICAgfQoKCgoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8c2l6ZV90
IG90aGVyQ2FwYWNpdHk+CiAgICBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+
OjphcHBlbmQoY29uc3QgVmVjdG9yPFQsIG90aGVyQ2FwYWNpdHk+JiB2YWwpCiAgICB7CiAgICAg
ICAgYXBwZW5kKHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAg
ICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Omluc2VydChzaXplX3QgcG9zaXRpb24s
IGNvbnN0IFUqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKICAgIHsKICAgICAgICAoKHZvaWQpMCk7
CiAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBtX3NpemUgKyBkYXRhU2l6ZTsKICAgICAgICBpZiAo
bmV3U2l6ZSA+IGNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgZGF0YSA9IGV4cGFuZENhcGFjaXR5
KG5ld1NpemUsIGRhdGEpOwogICAgICAgICAgICBpZiAoIWJlZ2luKCkpCiAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChuZXdTaXplIDwgbV9zaXplKQogICAgICAg
ICAgICBkbyB7IFdURlJlcG9ydEJhY2t0cmFjZSgpOyBXVEZJbnZva2VDcmFzaEhvb2soKTsgKihp
bnQgKikodWludHB0cl90KTB4YmJhZGJlZWYgPSAwOyAoKHZvaWQoKikoKSkwKSgpOyB9IHdoaWxl
IChmYWxzZSk7CiAgICAgICAgVCogc3BvdCA9IGJlZ2luKCkgKyBwb3NpdGlvbjsKICAgICAgICBU
eXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgpLCBzcG90ICsgZGF0YVNp
emUpOwogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YVNpemU7ICsraSkKICAgICAg
ICAgICAgbmV3IChOb3ROdWxsLCAmc3BvdFtpXSkgVChkYXRhW2ldKTsKICAgICAgICBtX3NpemUg
PSBuZXdTaXplOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT46Omluc2VydChzaXplX3QgcG9zaXRpb24sIGNvbnN0IFUmIHZhbCkKICAg
IHsKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgY29uc3QgVSogZGF0YSA9ICZ2YWw7CiAgICAg
ICAgaWYgKHNpemUoKSA9PSBjYXBhY2l0eSgpKSB7CiAgICAgICAgICAgIGRhdGEgPSBleHBhbmRD
YXBhY2l0eShzaXplKCkgKyAxLCBkYXRhKTsKICAgICAgICAgICAgaWYgKCFiZWdpbigpKQogICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBUKiBzcG90ID0gYmVnaW4oKSAr
IHBvc2l0aW9uOwogICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlT3ZlcmxhcHBpbmcoc3BvdCwg
ZW5kKCksIHNwb3QgKyAxKTsKICAgICAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoKmRhdGEpOwog
ICAgICAgICsrbV9zaXplOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGM+CiAgICBpbmxpbmUg
dm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnNlcnQoc2l6ZV90IHBvc2l0aW9uLCBj
b25zdCBWZWN0b3I8VSwgYz4mIHZhbCkKICAgIHsKICAgICAgICBpbnNlcnQocG9zaXRpb24sIHZh
bC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAgICB2b2lkIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT46OnByZXBlbmQoY29uc3QgVSogZGF0YSwgc2l6ZV90IGRhdGFT
aXplKQogICAgewogICAgICAgIGluc2VydCgwLCBkYXRhLCBkYXRhU2l6ZSk7CiAgICB9CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgogICAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6cHJlcGVu
ZChjb25zdCBVJiB2YWwpCiAgICB7CiAgICAgICAgaW5zZXJ0KDAsIHZhbCk7CiAgICB9CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBl
bmFtZSBVLCBzaXplX3QgYz4KICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT46OnByZXBlbmQoY29uc3QgVmVjdG9yPFUsIGM+JiB2YWwpCiAgICB7CiAgICAgICAgaW5zZXJ0
KDAsIHZhbC5iZWdpbigpLCB2YWwuc2l6ZSgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICBpbmxpbmUgdm9pZCBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQogICAgewogICAgICAgICgodm9p
ZCkwKTsKICAgICAgICBUKiBzcG90ID0gYmVnaW4oKSArIHBvc2l0aW9uOwogICAgICAgIHNwb3Qt
Pn5UKCk7CiAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90ICsgMSwg
ZW5kKCksIHNwb3QpOwogICAgICAgIC0tbV9zaXplOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT46OnJlbW92ZShzaXplX3QgcG9zaXRpb24sIHNpemVfdCBsZW5ndGgpCiAg
ICB7CiAgICAgICAgKCh2b2lkKTApOwogICAgICAgICgodm9pZCkwKTsKICAgICAgICBUKiBiZWdp
blNwb3QgPSBiZWdpbigpICsgcG9zaXRpb247CiAgICAgICAgVCogZW5kU3BvdCA9IGJlZ2luU3Bv
dCArIGxlbmd0aDsKICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW5TcG90LCBl
bmRTcG90KTsKICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKGVuZFNwb3Qs
IGVuZCgpLCBiZWdpblNwb3QpOwogICAgICAgIG1fc2l6ZSAtPSBsZW5ndGg7CiAgICB9CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6cmV2ZXJzZSgpCiAgICB7CiAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemUgLyAyOyArK2kpCiAgICAgICAgICAgIHN0ZDo6c3dh
cChhdChpKSwgYXQobV9zaXplIC0gMSAtIGkpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICBpbmxpbmUgVCogVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6cmVsZWFzZUJ1ZmZlcigpCiAgICB7CiAgICAgICAgVCogYnVmZmVyID0gbV9i
dWZmZXIucmVsZWFzZUJ1ZmZlcigpOwogICAgICAgIGlmIChpbmxpbmVDYXBhY2l0eSAmJiAhYnVm
ZmVyICYmIG1fc2l6ZSkgewoKCgogICAgICAgICAgICBzaXplX3QgYnl0ZXMgPSBtX3NpemUgKiBz
aXplb2YoVCk7CiAgICAgICAgICAgIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihmYXN0TWFsbG9j
KGJ5dGVzKSk7CiAgICAgICAgICAgIG1lbWNweShidWZmZXIsIGRhdGEoKSwgYnl0ZXMpOwogICAg
ICAgIH0KICAgICAgICBtX3NpemUgPSAwOwogICAgICAgIHJldHVybiBidWZmZXI7CiAgICB9Cgog
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgaW5saW5l
IHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAgICB7
CgoKCgogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KICAgIHZvaWQgZGVsZXRlQWxsVmFsdWVzKGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIGNvbGxlY3Rpb24pCiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICAgICAgICBpdGVyYXRv
ciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwogICAgICAgIGZvciAoaXRlcmF0b3IgaXQgPSBjb2xs
ZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgZGVsZXRlICppdDsK
ICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAg
ICBpbmxpbmUgdm9pZCBzd2FwKFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGEsIFZlY3RvcjxU
LCBpbmxpbmVDYXBhY2l0eT4mIGIpCiAgICB7CiAgICAgICAgYS5zd2FwKGIpOwogICAgfQoKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBWZWN0b3I8
VCwgaW5saW5lQ2FwYWNpdHk+JiBiKQogICAgewogICAgICAgIGlmIChhLnNpemUoKSAhPSBiLnNp
emUoKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICByZXR1cm4gVmVjdG9yVHlw
ZU9wZXJhdGlvbnM8VD46OmNvbXBhcmUoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7CiAg
ICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBh
LCBjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBiKQogICAgewogICAgICAgIHJldHVy
biAhKGEgPT0gYik7CiAgICB9CiMgMTE5MCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Zl
Y3Rvci5oIgp9Cgp1c2luZyBXVEY6OlZlY3RvcjsKIyAzMiAiLi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oIiAyCiMgNDQgIi4vU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaCIKbmFtZXNwYWNlIEpTQyB7CnN0cnVjdCBJZGVudGlmaWVy
Q1N0cmluZ1RyYW5zbGF0b3I7CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgSWRlbnRpZmll
ckNoYXJCdWZmZXJUcmFuc2xhdG9yOwpzdHJ1Y3QgSWRlbnRpZmllckxDaGFyRnJvbVVDaGFyVHJh
bnNsYXRvcjsKfQoKbmFtZXNwYWNlIFdURiB7CgpzdHJ1Y3QgQ1N0cmluZ1RyYW5zbGF0b3I7CnN0
cnVjdCBIYXNoQW5kQ2hhcmFjdGVyc1RyYW5zbGF0b3I7CnN0cnVjdCBIYXNoQW5kVVRGOENoYXJh
Y3RlcnNUcmFuc2xhdG9yOwpzdHJ1Y3QgU3Vic3RyaW5nVHJhbnNsYXRvcjsKc3RydWN0IFVDaGFy
QnVmZmVyVHJhbnNsYXRvcjsKCmVudW0gVGV4dENhc2VTZW5zaXRpdml0eSB7IFRleHRDYXNlU2Vu
c2l0aXZlLCBUZXh0Q2FzZUluc2Vuc2l0aXZlIH07Cgp0eXBlZGVmIGJvb2wgKCpDaGFyYWN0ZXJN
YXRjaEZ1bmN0aW9uUHRyKShVQ2hhcik7CnR5cGVkZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1bmN0
aW9uUHRyKShVQ2hhcik7CgpjbGFzcyBTdHJpbmdJbXBsIHsKICAgIHByaXZhdGU6IFN0cmluZ0lt
cGwoY29uc3QgU3RyaW5nSW1wbCYpOyBTdHJpbmdJbXBsJiBvcGVyYXRvcj0oY29uc3QgU3RyaW5n
SW1wbCYpOyBwdWJsaWM6IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQqIHApIHsgcmV0
dXJuIHA7IH0gdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkKiBwKSB7IHJldHVybiBw
OyB9IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSkgeyB2b2lkKiBwID0gOjpXVEY6OmZh
c3RNYWxsb2Moc2l6ZSk7IDo6V1RGOjpmYXN0TWFsbG9jTWF0Y2hWYWxpZGF0ZU1hbGxvYyhwLCA6
OldURjo6SW50ZXJuYWw6OkFsbG9jVHlwZUNsYXNzTmV3KTsgcmV0dXJuIHA7IH0gdm9pZCBvcGVy
YXRvciBkZWxldGUodm9pZCogcCkgeyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVGcmVl
KHAsIDo6V1RGOjpJbnRlcm5hbDo6QWxsb2NUeXBlQ2xhc3NOZXcpOyA6OldURjo6ZmFzdEZyZWUo
cCk7IH0gdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUpIHsgdm9pZCogcCA9IDo6V1RG
OjpmYXN0TWFsbG9jKHNpemUpOyA6OldURjo6ZmFzdE1hbGxvY01hdGNoVmFsaWRhdGVNYWxsb2Mo
cCwgOjpXVEY6OkludGVybmFsOjpBbGxvY1R5cGVDbGFzc05ld0FycmF5KTsgcmV0dXJuIHA7IH0g
dm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwKSB7IDo6V1RGOjpmYXN0TWFsbG9jTWF0Y2hW
YWxpZGF0ZUZyZWUocCwgOjpXVEY6OkludGVybmFsOjpBbGxvY1R5cGVDbGFzc05ld0FycmF5KTsg
OjpXVEY6OmZhc3RGcmVlKHApOyB9IHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIE5vdE51bGxU
YWcsIHZvaWQqIGxvY2F0aW9uKSB7ICgodm9pZCkwKTsgcmV0dXJuIGxvY2F0aW9uOyB9IHByaXZh
dGU6IHR5cGVkZWYgaW50IF9fdGhpc0lzSGVyZVRvRm9yY2VBU2VtaWNvbG9uQWZ0ZXJUaGlzTWFj
cm87CiAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckNTdHJpbmdUcmFuc2xhdG9yOwog
ICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJDaGFyQnVmZmVyVHJhbnNsYXRvcjxMQ2hh
cj47CiAgICBmcmllbmQgc3RydWN0IEpTQzo6SWRlbnRpZmllckNoYXJCdWZmZXJUcmFuc2xhdG9y
PFVDaGFyPjsKICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVyTENoYXJGcm9tVUNoYXJU
cmFuc2xhdG9yOwogICAgZnJpZW5kIHN0cnVjdCBXVEY6OkNTdHJpbmdUcmFuc2xhdG9yOwogICAg
ZnJpZW5kIHN0cnVjdCBXVEY6Okhhc2hBbmRDaGFyYWN0ZXJzVHJhbnNsYXRvcjsKICAgIGZyaWVu
ZCBzdHJ1Y3QgV1RGOjpIYXNoQW5kVVRGOENoYXJhY3RlcnNUcmFuc2xhdG9yOwogICAgZnJpZW5k
IHN0cnVjdCBXVEY6OlN1YnN0cmluZ1RyYW5zbGF0b3I7CiAgICBmcmllbmQgc3RydWN0IFdURjo6
VUNoYXJCdWZmZXJUcmFuc2xhdG9yOwogICAgZnJpZW5kIGNsYXNzIEF0b21pY1N0cmluZ0ltcGw7
Cgpwcml2YXRlOgogICAgZW51bSBCdWZmZXJPd25lcnNoaXAgewogICAgICAgIEJ1ZmZlckludGVy
bmFsLAogICAgICAgIEJ1ZmZlck93bmVkLAogICAgICAgIEJ1ZmZlclN1YnN0cmluZywKICAgIH07
CgoKCgogICAgZW51bSBDb25zdHJ1Y3RTdGF0aWNTdHJpbmdUYWcgeyBDb25zdHJ1Y3RTdGF0aWNT
dHJpbmcgfTsKICAgIFN0cmluZ0ltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3RyaW5nVGFnKQogICAgICAgIDogbV9yZWZDb3VudChz
X3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nKQogICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQog
ICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykKICAgICAgICAsIG1fYnVmZmVyKDApCiAgICAg
ICAgLCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnSXNJZGVudGlmaWVyIHwgQnVmZmVyT3duZWQp
CiAgICB7CgoKCiAgICAgICAgaGFzaCgpOwogICAgfQoKCgoKICAgIFN0cmluZ0ltcGwoY29uc3Qg
TENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29uc3RydWN0U3RhdGljU3RyaW5n
VGFnKQogICAgICAgIDogbV9yZWZDb3VudChzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nKQog
ICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQog
ICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4
Qml0QnVmZmVyIHwgc19oYXNoRmxhZ0lzSWRlbnRpZmllciB8IEJ1ZmZlck93bmVkKQogICAgewoK
CgogICAgICAgIGhhc2goKTsKICAgIH0KCgogICAgZW51bSBGb3JjZThCaXQgeyBGb3JjZThCaXRD
b25zdHJ1Y3RvciB9OwoKICAgIFN0cmluZ0ltcGwodW5zaWduZWQgbGVuZ3RoLCBGb3JjZThCaXQp
CiAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQpCiAgICAgICAgLCBtX2xl
bmd0aChsZW5ndGgpCiAgICAgICAgLCBtX2RhdGE4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPih0aGlzICsgMSkpCiAgICAgICAgLCBtX2J1ZmZlcigwKQogICAgICAgICwgbV9oYXNoQW5k
RmxhZ3Moc19oYXNoRmxhZzhCaXRCdWZmZXIgfCBCdWZmZXJJbnRlcm5hbCkKICAgIHsKICAgICAg
ICAoKHZvaWQpMCk7CiAgICAgICAgKCh2b2lkKTApOwogICAgfQoKCiAgICBTdHJpbmdJbXBsKHVu
c2lnbmVkIGxlbmd0aCkKICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEluY3JlbWVudCkK
ICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAgICAsIG1fZGF0YTE2KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPih0aGlzICsgMSkpCiAgICAgICAgLCBtX2J1ZmZlcigwKQogICAg
ICAgICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVySW50ZXJuYWwpCiAgICB7CiAgICAgICAgKCh2b2lk
KTApOwogICAgICAgICgodm9pZCkwKTsKICAgIH0KCgogICAgU3RyaW5nSW1wbChjb25zdCBMQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgICAgIDogbV9yZWZDb3VudChzX3Jl
ZkNvdW50SW5jcmVtZW50KQogICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICwgbV9k
YXRhOChjaGFyYWN0ZXJzKQogICAgICAgICwgbV9idWZmZXIoMCkKICAgICAgICAsIG1faGFzaEFu
ZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVyT3duZWQpCiAgICB7CiAgICAgICAg
KCh2b2lkKTApOwogICAgICAgICgodm9pZCkwKTsKICAgIH0KCgogICAgU3RyaW5nSW1wbChjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogICAgOiBtX3JlZkNvdW50KHNf
cmVmQ291bnRJbmNyZW1lbnQpCiAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICwgbV9kYXRhMTYo
Y2hhcmFjdGVycykKICAgICwgbV9idWZmZXIoMCkKICAgICwgbV9oYXNoQW5kRmxhZ3MoQnVmZmVy
T3duZWQpCiAgICB7CiAgICAgICAgKCh2b2lkKTApOwogICAgICAgICgodm9pZCkwKTsKICAgIH0K
CgogICAgU3RyaW5nSW1wbChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
LCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGJhc2UpCiAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVm
Q291bnRJbmNyZW1lbnQpCiAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAgLCBtX2Rh
dGE4KGNoYXJhY3RlcnMpCiAgICAgICAgLCBtX3N1YnN0cmluZ0J1ZmZlcihiYXNlLmxlYWtSZWYo
KSkKICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgQnVmZmVy
U3Vic3RyaW5nKQogICAgewogICAgICAgICgodm9pZCkwKTsKICAgICAgICAoKHZvaWQpMCk7CiAg
ICAgICAgKCh2b2lkKTApOwogICAgICAgICgodm9pZCkwKTsKICAgIH0KCgogICAgU3RyaW5nSW1w
bChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+IGJhc2UpCiAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRJbmNyZW1lbnQp
CiAgICAgICAgLCBtX2xlbmd0aChsZW5ndGgpCiAgICAgICAgLCBtX2RhdGExNihjaGFyYWN0ZXJz
KQogICAgICAgICwgbV9zdWJzdHJpbmdCdWZmZXIoYmFzZS5sZWFrUmVmKCkpCiAgICAgICAgLCBt
X2hhc2hBbmRGbGFncyhCdWZmZXJTdWJzdHJpbmcpCiAgICB7CiAgICAgICAgKCh2b2lkKTApOwog
ICAgICAgICgodm9pZCkwKTsKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgKCh2b2lkKTApOwog
ICAgfQoKcHVibGljOgogICAgflN0cmluZ0ltcGwoKTsKCiAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBjcmVhdGUoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IExDaGFyKiwgdW5zaWduZWQg
bGVuZ3RoKTsKICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShjb25zdCBjaGFyKiBzLCB1bnNpZ25l
ZCBsZW5ndGgpIHsgcmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
cyksIGxlbmd0aCk7IH0KICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZShj
b25zdCBMQ2hhciopOwogICAgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9f
KSkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKGNvbnN0IGNoYXIqIHMpIHsg
cmV0dXJuIGNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocykpOyB9CgogICAg
c3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gY3JlYXRlOChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiAgICB7CiAgICAgICAgKCh2b2lkKTApOwogICAg
ICAgICgodm9pZCkwKTsKCiAgICAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAgICAgIHJldHVybiBl
bXB0eSgpOwoKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgU3RyaW5nSW1wbCogb3duZXJSZXAg
PSAocmVwLT5idWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpID8gcmVwLT5tX3N1
YnN0cmluZ0J1ZmZlciA6IHJlcC5nZXQoKTsKICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0
cmluZ0ltcGwocmVwLT5tX2RhdGE4ICsgb2Zmc2V0LCBsZW5ndGgsIG93bmVyUmVwKSk7CiAgICB9
CgogICAgc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgIHsKICAgICAgICAoKHZvaWQpMCk7
CiAgICAgICAgKCh2b2lkKTApOwoKICAgICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgICAgcmV0
dXJuIGVtcHR5KCk7CgogICAgICAgIFN0cmluZ0ltcGwqIG93bmVyUmVwID0gKHJlcC0+YnVmZmVy
T3duZXJzaGlwKCkgPT0gQnVmZmVyU3Vic3RyaW5nKSA/IHJlcC0+bV9zdWJzdHJpbmdCdWZmZXIg
OiByZXAuZ2V0KCk7CiAgICAgICAgaWYgKHJlcC0+aXM4Qml0KCkpCiAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU3RyaW5nSW1wbChyZXAtPm1fZGF0YTggKyBvZmZzZXQsIGxlbmd0aCwg
b3duZXJSZXApKTsKICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0cmluZ0ltcGwocmVwLT5t
X2RhdGExNiArIG9mZnNldCwgbGVuZ3RoLCBvd25lclJlcCkpOwogICAgfQoKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVVuaW5pdGlhbGl6ZWQodW5zaWduZWQgbGVuZ3Ro
LCBMQ2hhciomIGRhdGEpOwogICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRl
VW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSk7CiAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp
bmVfXykpIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh1bnNp
Z25lZCBsZW5ndGgsIFQqJiBvdXRwdXQpCiAgICB7CiAgICAgICAgaWYgKCFsZW5ndGgpIHsKICAg
ICAgICAgICAgb3V0cHV0ID0gMDsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAgICAgICAg
fQoKICAgICAgICBpZiAobGVuZ3RoID4gKChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgLSBzaXplb2YoU3RyaW5nSW1wbCkpIC8gc2l6ZW9mKFQpKSkgewogICAgICAgICAgICBv
dXRwdXQgPSAwOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgU3RyaW5n
SW1wbCogcmVzdWx0SW1wbDsKICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2Moc2l6ZW9mKFQpICog
bGVuZ3RoICsgc2l6ZW9mKFN0cmluZ0ltcGwpKS5nZXRWYWx1ZShyZXN1bHRJbXBsKSkgewogICAg
ICAgICAgICBvdXRwdXQgPSAwOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAg
ICAgb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVzdWx0SW1wbCArIDEpOwoKICAgICAg
ICBpZiAoc2l6ZW9mKFQpID09IHNpemVvZihjaGFyKSkKICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyAoTm90TnVsbCwgcmVzdWx0SW1wbCkgU3RyaW5nSW1wbChsZW5ndGgsIEZvcmNlOEJp
dENvbnN0cnVjdG9yKSk7CgogICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgKE5vdE51bGwsIHJl
c3VsdEltcGwpIFN0cmluZ0ltcGwobGVuZ3RoKSk7CiAgICB9CgoKCgogICAgc3RhdGljIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gcmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdp
bmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIExDaGFyKiYgZGF0YSk7CiAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3Jp
Z2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqJiBkYXRhKTsKCiAgICBzdGF0aWMg
dW5zaWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxwdHJkaWZm
X3Q+KCYocmVpbnRlcnByZXRfY2FzdDxTdHJpbmdJbXBsKj4oMHg0MDAwKS0+bV9oYXNoQW5kRmxh
Z3MpKSAtIDB4NDAwMCk7IH0KICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4Qml0KCkgeyByZXR1
cm4gc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KICAgIHN0YXRpYyB1bnNpZ25lZCBkYXRhT2Zmc2V0
KCkgeyByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PigmKHJlaW50ZXJwcmV0X2Nh
c3Q8U3RyaW5nSW1wbCo+KDB4NDAwMCktPm1fZGF0YTgpKSAtIDB4NDAwMCk7IH0KICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVdpdGhUZXJtaW5hdGluZ051bGxDaGFyYWN0
ZXIoY29uc3QgU3RyaW5nSW1wbCYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUeXBlLCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBh
ZG9wdChWZWN0b3I8Q2hhclR5cGUsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgewogICAg
ICAgIGlmIChzaXplX3Qgc2l6ZSA9IHZlY3Rvci5zaXplKCkpIHsKICAgICAgICAgICAgKCh2b2lk
KTApOwogICAgICAgICAgICBpZiAoc2l6ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKICAgICAgICAgICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFdURklu
dm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7ICgodm9p
ZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTdHJpbmdJbXBsKHZlY3Rvci5yZWxlYXNlQnVmZmVyKCksIHNpemUpKTsKICAgICAgICB9
CiAgICAgICAgcmV0dXJuIGVtcHR5KCk7CiAgICB9CgogICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gYWRvcHQoU3RyaW5nQnVmZmVyPExDaGFyPiYgYnVmZmVyKTsKICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcik7
CgogICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgIGJv
b2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnOEJp
dEJ1ZmZlcjsgfQoKCiAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18p
KSBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7ICgodm9pZCkwKTsgcmV0dXJuIG1f
ZGF0YTg7IH0KICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7ICgodm9pZCkwKTsgcmV0dXJuIG1fZGF0
YTE2OyB9CiAgICBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBjb25z
dCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0CiAgICB7CiAgICAgICAgaWYgKCFpczhCaXQoKSkK
ICAgICAgICAgICAgcmV0dXJuIG1fZGF0YTE2OwoKICAgICAgICByZXR1cm4gZ2V0RGF0YTE2U2xv
d0Nhc2UoKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiAgICBpbmxp
bmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBjb25zdCBDaGFyVHlwZSAqIGdl
dENoYXJhY3RlcnMoKSBjb25zdDsKCiAgICBzaXplX3QgY29zdCgpCiAgICB7CgogICAgICAgIGlm
IChidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJTdWJzdHJpbmcpCiAgICAgICAgICAgIHJldHVy
biBtX3N1YnN0cmluZ0J1ZmZlci0+Y29zdCgpOwoKICAgICAgICBpZiAobV9oYXNoQW5kRmxhZ3Mg
JiBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCkKICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAg
IG1faGFzaEFuZEZsYWdzIHw9IHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0OwogICAgICAgIHJldHVy
biBtX2xlbmd0aDsKICAgIH0KCiAgICBib29sIGhhczE2Qml0U2hhZG93KCkgY29uc3QgeyByZXR1
cm4gbV9oYXNoQW5kRmxhZ3MgJiBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3c7IH0KICAgIHZvaWQg
dXBjb252ZXJ0Q2hhcmFjdGVycyh1bnNpZ25lZCwgdW5zaWduZWQpIGNvbnN0OwogICAgYm9vbCBp
c0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdJ
c0lkZW50aWZpZXI7IH0KICAgIHZvaWQgc2V0SXNJZGVudGlmaWVyKGJvb2wgaXNJZGVudGlmaWVy
KQogICAgewogICAgICAgICgodm9pZCkwKTsKICAgICAgICBpZiAoaXNJZGVudGlmaWVyKQogICAg
ICAgICAgICBtX2hhc2hBbmRGbGFncyB8PSBzX2hhc2hGbGFnSXNJZGVudGlmaWVyOwogICAgICAg
IGVsc2UKICAgICAgICAgICAgbV9oYXNoQW5kRmxhZ3MgJj0gfnNfaGFzaEZsYWdJc0lkZW50aWZp
ZXI7CiAgICB9CgogICAgYm9vbCBoYXNUZXJtaW5hdGluZ051bGxDaGFyYWN0ZXIoKSBjb25zdCB7
IHJldHVybiBtX2hhc2hBbmRGbGFncyAmIHNfaGFzaEZsYWdIYXNUZXJtaW5hdGluZ051bGxDaGFy
YWN0ZXI7IH0KCiAgICBib29sIGlzQXRvbWljKCkgY29uc3QgeyByZXR1cm4gbV9oYXNoQW5kRmxh
Z3MgJiBzX2hhc2hGbGFnSXNBdG9taWM7IH0KICAgIHZvaWQgc2V0SXNBdG9taWMoYm9vbCBpc0lk
ZW50aWZpZXIpCiAgICB7CiAgICAgICAgKCh2b2lkKTApOwogICAgICAgIGlmIChpc0lkZW50aWZp
ZXIpCiAgICAgICAgICAgIG1faGFzaEFuZEZsYWdzIHw9IHNfaGFzaEZsYWdJc0F0b21pYzsKICAg
ICAgICBlbHNlCiAgICAgICAgICAgIG1faGFzaEFuZEZsYWdzICY9IH5zX2hhc2hGbGFnSXNBdG9t
aWM7CiAgICB9Cgpwcml2YXRlOgoKCgogICAgdm9pZCBzZXRIYXNoKHVuc2lnbmVkIGhhc2gpIGNv
bnN0CiAgICB7CiAgICAgICAgKCh2b2lkKTApOwoKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAg
KCh2b2lkKTApOwoKICAgICAgICBoYXNoIDw8PSBzX2ZsYWdDb3VudDsKICAgICAgICAoKHZvaWQp
MCk7CiAgICAgICAgKCh2b2lkKTApOwoKICAgICAgICBtX2hhc2hBbmRGbGFncyB8PSBoYXNoOwog
ICAgfQoKICAgIHVuc2lnbmVkIHJhd0hhc2goKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBt
X2hhc2hBbmRGbGFncyA+PiBzX2ZsYWdDb3VudDsKICAgIH0KCnB1YmxpYzoKICAgIGJvb2wgaGFz
SGFzaCgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIHJhd0hhc2goKSAhPSAwOwogICAgfQoK
ICAgIHVuc2lnbmVkIGV4aXN0aW5nSGFzaCgpIGNvbnN0CiAgICB7CiAgICAgICAgKCh2b2lkKTAp
OwogICAgICAgIHJldHVybiByYXdIYXNoKCk7CiAgICB9CgogICAgdW5zaWduZWQgaGFzaCgpIGNv
bnN0CiAgICB7CiAgICAgICAgaWYgKGhhc0hhc2goKSkKICAgICAgICAgICAgcmV0dXJuIGV4aXN0
aW5nSGFzaCgpOwogICAgICAgIHJldHVybiBoYXNoU2xvd0Nhc2UoKTsKICAgIH0KCiAgICBpbmxp
bmUgYm9vbCBoYXNPbmVSZWYoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBtX3JlZkNvdW50
ID09IHNfcmVmQ291bnRJbmNyZW1lbnQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQgcmVmKCkKICAg
IHsKICAgICAgICBtX3JlZkNvdW50ICs9IHNfcmVmQ291bnRJbmNyZW1lbnQ7CiAgICB9CgogICAg
aW5saW5lIHZvaWQgZGVyZWYoKQogICAgewogICAgICAgIGlmIChtX3JlZkNvdW50ID09IHNfcmVm
Q291bnRJbmNyZW1lbnQpIHsKICAgICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICB9CgogICAgICAgIG1fcmVmQ291bnQgLT0gc19yZWZDb3VudEluY3JlbWVu
dDsKICAgIH0KCiAgICBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHkoKTsKCgogICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGNvcHlDaGFycyhUKiBkZXN0aW5hdGlvbiwgY29uc3Qg
VCogc291cmNlLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKQogICAgewogICAgICAgIGlmIChudW1D
aGFyYWN0ZXJzID09IDEpIHsKICAgICAgICAgICAgKmRlc3RpbmF0aW9uID0gKnNvdXJjZTsKICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPD0g
c19jb3B5Q2hhcnNJbmxpbmVDdXRPZmYpIHsKICAgICAgICAgICAgdW5zaWduZWQgaSA9IDA7CiMg
NDIyICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgiCiAgICAg
ICAgICAgIGZvciAoOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQogICAgICAgICAgICAgICAgZGVz
dGluYXRpb25baV0gPSBzb3VyY2VbaV07CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIG1lbWNw
eShkZXN0aW5hdGlvbiwgc291cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFQpKTsKICAgIH0K
CgoKCiAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGlzb2xhdGVkQ29weSgpIGNvbnN0OwoKICAg
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQg
bGVuID0gKDIxNDc0ODM2NDcgKiAyVSArIDFVKSk7CgogICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdAogICAgewogICAgICAgICgodm9pZCkwKTsKICAgICAgICBpZiAoaXM4Qml0
KCkpCiAgICAgICAgICAgIHJldHVybiBtX2RhdGE4W2ldOwogICAgICAgIHJldHVybiBtX2RhdGEx
NltpXTsKICAgIH0KICAgIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7Cgog
ICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCk7CgogICAgaW50IHRvSW50U3RyaWN0KGJv
b2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CiAgICB1bnNpZ25lZCB0b1VJbnRTdHJpY3QoYm9v
bCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKICAgIGludDY0X3QgdG9JbnQ2NFN0cmljdChib29s
KiBvayA9IDAsIGludCBiYXNlID0gMTApOwogICAgdWludDY0X3QgdG9VSW50NjRTdHJpY3QoYm9v
bCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKICAgIGludHB0cl90IHRvSW50UHRyU3RyaWN0KGJv
b2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CgogICAgaW50IHRvSW50KGJvb2wqIG9rID0gMCk7
CiAgICB1bnNpZ25lZCB0b1VJbnQoYm9vbCogb2sgPSAwKTsKICAgIGludDY0X3QgdG9JbnQ2NChi
b29sKiBvayA9IDApOwogICAgdWludDY0X3QgdG9VSW50NjQoYm9vbCogb2sgPSAwKTsKICAgIGlu
dHB0cl90IHRvSW50UHRyKGJvb2wqIG9rID0gMCk7CgogICAgZG91YmxlIHRvRG91YmxlKGJvb2wq
IG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwogICAgZmxvYXQgdG9GbG9hdChib29s
KiBvayA9IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAwKTsKCiAgICBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IGxvd2VyKCk7CiAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHVwcGVyKCk7CgogICAg
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBmaWxsKFVDaGFyKTsKCiAgICBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IGZvbGRDYXNlKCk7CgogICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHJpcFdoaXRl
U3BhY2UoKTsKICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyaXBXaGl0ZVNwYWNlKElzV2hp
dGVTcGFjZUZ1bmN0aW9uUHRyKTsKICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc2ltcGxpZnlX
aGl0ZVNwYWNlKCk7CiAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHNpbXBsaWZ5V2hpdGVTcGFj
ZShJc1doaXRlU3BhY2VGdW5jdGlvblB0cik7CgogICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBy
ZW1vdmVDaGFyYWN0ZXJzKENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIpOwogICAgdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgogICAgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu
bGluZV9fKSkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZW1vdmVDaGFyYWN0ZXJzKGNvbnN0IENo
YXJUeXBlKiBjaGFyYWN0ZXJzLCBDaGFyYWN0ZXJNYXRjaEZ1bmN0aW9uUHRyKTsKCiAgICBzaXpl
X3QgZmluZChVQ2hhciwgdW5zaWduZWQgaW5kZXggPSAwKTsKICAgIHNpemVfdCBmaW5kKENoYXJh
Y3Rlck1hdGNoRnVuY3Rpb25QdHIsIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAgICBzaXplX3QgZmlu
ZChjb25zdCBMQ2hhciosIHVuc2lnbmVkIGluZGV4ID0gMCk7CiAgICBpbmxpbmUgX19hdHRyaWJ1
dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBzaXplX3QgZmluZChjb25zdCBjaGFyKiBzLCB1bnNp
Z25lZCBpbmRleCA9IDApIHsgcmV0dXJuIGZpbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KHMpLCBpbmRleCk7IH07CiAgICBzaXplX3QgZmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQg
aW5kZXggPSAwKTsKICAgIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiwgdW5z
aWduZWQgaW5kZXggPSAwKTsKICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxp
bmVfXykpIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKGNvbnN0IGNoYXIqIHMsIHVuc2lnbmVkIGlu
ZGV4ID0gMCkgeyByZXR1cm4gZmluZElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0
IExDaGFyKj4ocyksIGluZGV4KTsgfTsKICAgIHNpemVfdCBmaW5kSWdub3JpbmdDYXNlKFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCBpbmRleCA9IDApOwoKICAgIHNpemVfdCByZXZlcnNlRmluZChVQ2hh
ciwgdW5zaWduZWQgaW5kZXggPSAoMjE0NzQ4MzY0NyAqIDJVICsgMVUpKTsKICAgIHNpemVfdCBy
ZXZlcnNlRmluZChTdHJpbmdJbXBsKiwgdW5zaWduZWQgaW5kZXggPSAoMjE0NzQ4MzY0NyAqIDJV
ICsgMVUpKTsKICAgIHNpemVfdCByZXZlcnNlRmluZElnbm9yaW5nQ2FzZShTdHJpbmdJbXBsKiwg
dW5zaWduZWQgaW5kZXggPSAoMjE0NzQ4MzY0NyAqIDJVICsgMVUpKTsKCiAgICBib29sIHN0YXJ0
c1dpdGgoU3RyaW5nSW1wbCogc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSB7IHJldHVy
biAoY2FzZVNlbnNpdGl2ZSA/IHJldmVyc2VGaW5kKHN0ciwgMCkgOiByZXZlcnNlRmluZElnbm9y
aW5nQ2FzZShzdHIsIDApKSA9PSAwOyB9CiAgICBib29sIGVuZHNXaXRoKFN0cmluZ0ltcGwqLCBi
b29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKTsKCiAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJl
cGxhY2UoVUNoYXIsIFVDaGFyKTsKICAgIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gcmVwbGFjZShV
Q2hhciwgU3RyaW5nSW1wbCopOwogICAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiByZXBsYWNlKFN0
cmluZ0ltcGwqLCBTdHJpbmdJbXBsKik7CiAgICBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHJlcGxh
Y2UodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGxlbiwgU3RyaW5nSW1wbCopOwoKICAgIFdURjo6
VW5pY29kZTo6RGlyZWN0aW9uIGRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKGJvb2wqIGhhc1N0cm9u
Z0RpcmVjdGlvbmFsaXR5ID0gMCk7CiMgNTA3ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdJbXBsLmgiCnByaXZhdGU6CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNf
Y29weUNoYXJzSW5saW5lQ3V0T2ZmID0gMjA7CgogICAgQnVmZmVyT3duZXJzaGlwIGJ1ZmZlck93
bmVyc2hpcCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJ1ZmZlck93bmVyc2hpcD4obV9o
YXNoQW5kRmxhZ3MgJiBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwKTsgfQogICAgYm9vbCBpc1N0
YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1fcmVmQ291bnQgJiBzX3JlZkNvdW50RmxhZ0lzU3RhdGlj
U3RyaW5nOyB9CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgVUNoYXJQcmVkaWNhdGU+IFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gc3RyaXBNYXRjaGVkQ2hhcmFjdGVycyhVQ2hhclByZWRpY2F0ZSk7CiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGUsIGNsYXNzIFVDaGFyUHJlZGljYXRlPiBQYXNzUmVm
UHRyPFN0cmluZ0ltcGw+IHNpbXBsaWZ5TWF0Y2hlZENoYXJhY3RlcnNUb1NwYWNlKFVDaGFyUHJl
ZGljYXRlKTsKICAgIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpIGNvbnN0IFVDaGFyKiBn
ZXREYXRhMTZTbG93Q2FzZSgpIGNvbnN0OwogICAgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9f
KSkgdW5zaWduZWQgaGFzaFNsb3dDYXNlKCkgY29uc3Q7CgoKICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nID0gMHgxOwogICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfcmVmQ291bnRJbmNyZW1lbnQgPSAweDI7CgoKICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDg7CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19mbGFn
TWFzayA9ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwogICAgdHlwZWRlZiBpbnQgZHVtbXlTdHJp
bmdIYXNoZXJfcmVzZXJ2ZXNfZW5vdWdoX2JpdHNfZm9yX1N0cmluZ0ltcGxfZmxhZ3MgWyhzX2Zs
YWdDb3VudCA9PSBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCkgPyAxIDogLTFdOwoKICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSGFzMTZCaXRTaGFkb3cgPSAxdSA8PCA3OwogICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWc4Qml0QnVmZmVyID0gMXUgPDwgNjsKICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSGFzVGVybWluYXRpbmdOdWxsQ2hhcmFj
dGVyID0gMXUgPDwgNTsKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSXNBdG9t
aWMgPSAxdSA8PCA0OwogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdEaWRSZXBv
cnRDb3N0ID0gMXUgPDwgMzsKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnSXNJ
ZGVudGlmaWVyID0gMXUgPDwgMjsKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hNYXNr
QnVmZmVyT3duZXJzaGlwID0gMXUgfCAoMXUgPDwgMSk7CgogICAgdW5zaWduZWQgbV9yZWZDb3Vu
dDsKICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogICAgdW5pb24gewogICAgICAgIGNvbnN0IExDaGFy
KiBtX2RhdGE4OwogICAgICAgIGNvbnN0IFVDaGFyKiBtX2RhdGExNjsKICAgIH07CiAgICB1bmlv
biB7CiAgICAgICAgdm9pZCogbV9idWZmZXI7CiAgICAgICAgU3RyaW5nSW1wbCogbV9zdWJzdHJp
bmdCdWZmZXI7CiAgICAgICAgbXV0YWJsZSBVQ2hhciogbV9jb3B5RGF0YTE2OwogICAgfTsKICAg
IG11dGFibGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7Cn07Cgp0ZW1wbGF0ZSA8PgppbmxpbmUg
X19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBjb25zdCBMQ2hhciogU3RyaW5nSW1w
bDo6Z2V0Q2hhcmFjdGVyczxMQ2hhcj4oKSBjb25zdCB7IHJldHVybiBjaGFyYWN0ZXJzOCgpOyB9
Cgp0ZW1wbGF0ZSA8PgppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKSBj
b25zdCBVQ2hhciogU3RyaW5nSW1wbDo6Z2V0Q2hhcmFjdGVyczxVQ2hhcj4oKSBjb25zdCB7IHJl
dHVybiBjaGFyYWN0ZXJzKCk7IH0KCiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25z
dCBTdHJpbmdJbXBsKik7CiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hh
ciopOwppbmxpbmUgYm9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBjaGFyKiBi
KSB7IHJldHVybiBlcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYikpOyB9
CiBib29sIGVxdWFsKGNvbnN0IFN0cmluZ0ltcGwqLCBjb25zdCBMQ2hhciosIHVuc2lnbmVkKTsK
aW5saW5lIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgY2hhciogYiwgdW5z
aWduZWQgbGVuZ3RoKSB7IHJldHVybiBlcXVhbChhLCByZWludGVycHJldF9jYXN0PGNvbnN0IExD
aGFyKj4oYiksIGxlbmd0aCk7IH0KaW5saW5lIGJvb2wgZXF1YWwoY29uc3QgTENoYXIqIGEsIFN0
cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsKGIsIGEpOyB9CmlubGluZSBib29sIGVxdWFsKGNv
bnN0IGNoYXIqIGEsIFN0cmluZ0ltcGwqIGIpIHsgcmV0dXJuIGVxdWFsKGIsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPihhKSk7IH0KIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCos
IGNvbnN0IFVDaGFyKiwgdW5zaWduZWQpOwojIDY3OSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3RleHQvU3RyaW5nSW1wbC5oIgppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s
aW5lX18pKSBib29sIGVxdWFsKGNvbnN0IExDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwgdW5zaWdu
ZWQgbGVuZ3RoKQp7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIHJldHVybiB0cnVlOwp9CgppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s
aW5lX18pKSBib29sIGVxdWFsKGNvbnN0IFVDaGFyKiBhLCBjb25zdCBVQ2hhciogYiwgdW5zaWdu
ZWQgbGVuZ3RoKQp7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICE9IGxlbmd0aDsgKytpKSB7
CiAgICAgICAgaWYgKGFbaV0gIT0gYltpXSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
fQoKICAgIHJldHVybiB0cnVlOwp9CgoKaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu
bGluZV9fKSkgYm9vbCBlcXVhbChjb25zdCBMQ2hhciogYSwgY29uc3QgVUNoYXIqIGIsIHVuc2ln
bmVkIGxlbmd0aCkKewogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkg
ewogICAgICAgIGlmIChhW2ldICE9IGJbaV0pCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KCiAgICByZXR1cm4gdHJ1ZTsKfQoKaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lu
bGluZV9fKSkgYm9vbCBlcXVhbChjb25zdCBVQ2hhciogYSwgY29uc3QgTENoYXIqIGIsIHVuc2ln
bmVkIGxlbmd0aCkKewogICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAhPSBsZW5ndGg7ICsraSkg
ewogICAgICAgIGlmIChhW2ldICE9IGJbaV0pCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KCiAgICByZXR1cm4gdHJ1ZTsKfQoKIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1w
bCosIFN0cmluZ0ltcGwqKTsKIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoU3RyaW5nSW1wbCosIGNv
bnN0IExDaGFyKik7CmlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBh
LCBTdHJpbmdJbXBsKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShiLCBhKTsgfQogYm9v
bCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciosIGNvbnN0IExDaGFyKiwgdW5zaWduZWQp
OwogYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciosIGNvbnN0IExDaGFyKiwgdW5z
aWduZWQpOwppbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBVQ2hhciogYSwgY29u
c3QgY2hhciogYiwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShh
LCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYiksIGxlbmd0aCk7IH0KaW5saW5lIGJv
b2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCB1bnNp
Z25lZCBsZW5ndGgpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGIsIGEsIGxlbmd0aCk7IH0K
aW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgVUNoYXIq
IGIsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYiwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGEpLCBsZW5ndGgpOyB9CgogYm9vbCBlcXVhbElnbm9y
aW5nTnVsbGl0eShTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopOwoKdGVtcGxhdGU8c2l6ZV90IGlu
bGluZUNhcGFjaXR5Pgpib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0IFZlY3RvcjxVQ2hh
ciwgaW5saW5lQ2FwYWNpdHk+JiBhLCBTdHJpbmdJbXBsKiBiKQp7CiAgICBpZiAoIWIpCiAgICAg
ICAgcmV0dXJuICFhLnNpemUoKTsKICAgIGlmIChhLnNpemUoKSAhPSBiLT5sZW5ndGgoKSkKICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gIW1lbWNtcChhLmRhdGEoKSwgYi0+Y2hhcmFj
dGVycygpLCBiLT5sZW5ndGgoKSk7Cn0KCiBpbnQgY29kZVBvaW50Q29tcGFyZShjb25zdCBTdHJp
bmdJbXBsKiwgY29uc3QgU3RyaW5nSW1wbCopOwoKc3RhdGljIGlubGluZSBib29sIGlzU3BhY2VP
ck5ld2xpbmUoVUNoYXIgYykKewoKCiAgICByZXR1cm4gYyA8PSAweDdGID8gV1RGOjppc0FTQ0lJ
U3BhY2UoYykgOiBXVEY6OlVuaWNvZGU6OmRpcmVjdGlvbihjKSA9PSBXVEY6OlVuaWNvZGU6Oldo
aXRlU3BhY2VOZXV0cmFsOwp9CgppbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjppc29sYXRlZENvcHkoKSBjb25zdAp7CiAgICBpZiAoaXM4Qml0KCkpCiAgICAgICAgcmV0
dXJuIGNyZWF0ZShtX2RhdGE4LCBtX2xlbmd0aCk7CiAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTE2
LCBtX2xlbmd0aCk7Cn0KCnN0cnVjdCBTdHJpbmdIYXNoOwoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U3RyaW5n
SW1wbCo+IHsKICAgIHR5cGVkZWYgU3RyaW5nSGFzaCBIYXNoOwp9Owp0ZW1wbGF0ZTw+IHN0cnVj
dCBEZWZhdWx0SGFzaDxSZWZQdHI8U3RyaW5nSW1wbD4gPiB7CiAgICB0eXBlZGVmIFN0cmluZ0hh
c2ggSGFzaDsKfTsKCn0KCnVzaW5nIFdURjo6U3RyaW5nSW1wbDsKdXNpbmcgV1RGOjplcXVhbDsK
dXNpbmcgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5Owp1c2luZyBXVEY6OlRleHRDYXNlU2Vuc2l0
aXZlOwp1c2luZyBXVEY6OlRleHRDYXNlSW5zZW5zaXRpdmU7CiMgMzAgIi4vU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIiAyCiMgNTggIi4vU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIgpuYW1lc3BhY2UgV1RGIHsKCmNsYXNzIENTdHJp
bmc7CnN0cnVjdCBTdHJpbmdIYXNoOwoKCgppbnQgY2hhcmFjdGVyc1RvSW50U3RyaWN0KGNvbnN0
IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApOwogaW50IGNoYXJh
Y3RlcnNUb0ludFN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBpbnQg
YmFzZSA9IDEwKTsKdW5zaWduZWQgY2hhcmFjdGVyc1RvVUludFN0cmljdChjb25zdCBMQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKIHVuc2lnbmVkIGNoYXJhY3Rl
cnNUb1VJbnRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJh
c2UgPSAxMCk7CmludDY0X3QgY2hhcmFjdGVyc1RvSW50NjRTdHJpY3QoY29uc3QgTENoYXIqLCBz
aXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CmludDY0X3QgY2hhcmFjdGVyc1Rv
SW50NjRTdHJpY3QoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2Ug
PSAxMCk7CnVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2NFN0cmljdChjb25zdCBMQ2hhciosIHNp
emVfdCwgYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKTsKdWludDY0X3QgY2hhcmFjdGVyc1Rv
VUludDY0U3RyaWN0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGludCBiYXNl
ID0gMTApOwppbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHJTdHJpY3QoY29uc3QgTENoYXIqLCBz
aXplX3QsIGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCk7CmludHB0cl90IGNoYXJhY3RlcnNU
b0ludFB0clN0cmljdChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBpbnQgYmFz
ZSA9IDEwKTsKCmludCBjaGFyYWN0ZXJzVG9JbnQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gMCk7CiBpbnQgY2hhcmFjdGVyc1RvSW50KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29s
KiBvayA9IDApOwp1bnNpZ25lZCBjaGFyYWN0ZXJzVG9VSW50KGNvbnN0IExDaGFyKiwgc2l6ZV90
LCBib29sKiBvayA9IDApOwp1bnNpZ25lZCBjaGFyYWN0ZXJzVG9VSW50KGNvbnN0IFVDaGFyKiwg
c2l6ZV90LCBib29sKiBvayA9IDApOwppbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0KGNvbnN0IExD
aGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOwppbnQ2NF90IGNoYXJhY3RlcnNUb0ludDY0KGNv
bnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOwp1aW50NjRfdCBjaGFyYWN0ZXJzVG9V
SW50NjQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7CnVpbnQ2NF90IGNoYXJh
Y3RlcnNUb1VJbnQ2NChjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsKaW50cHRy
X3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAp
OwppbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wq
IG9rID0gMCk7CgogZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhciosIHNpemVf
dCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7CiBkb3VibGUgY2hhcmFj
dGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGJvb2wqIGRp
ZFJlYWROdW1iZXIgPSAwKTsKZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBz
aXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwogZmxvYXQgY2hh
cmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9r
ID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwogZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQo
Y29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9
IDApOwogZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsoY29uc3QgVUNoYXIqLCBz
aXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwoKZW51bSBGbG9h
dENvbnZlcnNpb25GbGFncyB7CiAgICBTaG91bGRSb3VuZFNpZ25pZmljYW50RmlndXJlcyA9IDEg
PDwgMCwKICAgIFNob3VsZFJvdW5kRGVjaW1hbFBsYWNlcyA9IDEgPDwgMSwKICAgIFNob3VsZFRy
dW5jYXRlVHJhaWxpbmdaZXJvcyA9IDEgPDwgMgp9OwoKdGVtcGxhdGU8Ym9vbCBpc1NwZWNpYWxD
aGFyYWN0ZXIoVUNoYXIpPiBib29sIGlzQWxsU3BlY2lhbENoYXJhY3RlcnMoY29uc3QgVUNoYXIq
LCBzaXplX3QpOwoKY2xhc3MgU3RyaW5nIHsKcHVibGljOgoKICAgIFN0cmluZygpIHsgfQoKCiAg
ICBTdHJpbmcoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCk7CgoKCiAg
ICB0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICBleHBsaWNpdCBTdHJpbmcoY29u
c3QgVmVjdG9yPFVDaGFyLCBpbmxpbmVDYXBhY2l0eT4mKTsKCgogICAgU3RyaW5nKGNvbnN0IFVD
aGFyKik7CgoKICAgIFN0cmluZyhjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKTsKICAgIFN0cmluZyhjb25zdCBjaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgp
OwoKCiAgICBTdHJpbmcoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMpOwogICAgU3RyaW5nKGNvbnN0
IGNoYXIqIGNoYXJhY3RlcnMpOwoKCiAgICBTdHJpbmcoU3RyaW5nSW1wbCogaW1wbCkgOiBtX2lt
cGwoaW1wbCkgeyB9CiAgICBTdHJpbmcoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBpbXBsKSA6IG1f
aW1wbChpbXBsKSB7IH0KICAgIFN0cmluZyhSZWZQdHI8U3RyaW5nSW1wbD4gaW1wbCkgOiBtX2lt
cGwoaW1wbCkgeyB9CgoKICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVf
XykpIH5TdHJpbmcoKSB7IH0KCiAgICB2b2lkIHN3YXAoU3RyaW5nJiBvKSB7IG1faW1wbC5zd2Fw
KG8ubV9pbXBsKTsgfQoKICAgIHN0YXRpYyBTdHJpbmcgYWRvcHQoU3RyaW5nQnVmZmVyPExDaGFy
PiYgYnVmZmVyKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdChidWZmZXIpOyB9CiAgICBzdGF0
aWMgU3RyaW5nIGFkb3B0KFN0cmluZ0J1ZmZlcjxVQ2hhcj4mIGJ1ZmZlcikgeyByZXR1cm4gU3Ry
aW5nSW1wbDo6YWRvcHQoYnVmZmVyKTsgfQogICAgdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFj
aXR5PgogICAgc3RhdGljIFN0cmluZyBhZG9wdChWZWN0b3I8VUNoYXIsIGlubGluZUNhcGFjaXR5
PiYgdmVjdG9yKSB7IHJldHVybiBTdHJpbmdJbXBsOjphZG9wdCh2ZWN0b3IpOyB9CgogICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9pbXBsOyB9CiAgICBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhbV9pbXBsIHx8ICFtX2ltcGwtPmxlbmd0aCgpOyB9CgogICAgU3RyaW5n
SW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQoKICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0CiAgICB7CiAgICAgICAgaWYgKCFtX2ltcGwpCiAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgIHJldHVybiBtX2ltcGwtPmxlbmd0aCgpOwogICAgfQoKICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QKICAgIHsKICAgICAgICBpZiAoIW1faW1wbCkKICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2hhcmFjdGVycygpOwog
ICAgfQoKICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0CiAgICB7CiAgICAgICAg
aWYgKCFtX2ltcGwpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICgodm9pZCkwKTsKICAg
ICAgICByZXR1cm4gbV9pbXBsLT5jaGFyYWN0ZXJzOCgpOwogICAgfQoKICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzMTYoKSBjb25zdAogICAgewogICAgICAgIGlmICghbV9pbXBsKQogICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgcmV0dXJuIG1faW1wbC0+
Y2hhcmFjdGVyczE2KCk7CiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgog
ICAgaW5saW5lIGNvbnN0IENoYXJUeXBlKiBnZXRDaGFyYWN0ZXJzKCkgY29uc3Q7CgogICAgYm9v
bCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPmlzOEJpdCgpOyB9CgogICAgQ1N0cmlu
ZyBhc2NpaSgpIGNvbnN0OwogICAgQ1N0cmluZyBsYXRpbjEoKSBjb25zdDsKICAgIENTdHJpbmcg
dXRmOChib29sIHN0cmljdCA9IGZhbHNlKSBjb25zdDsKCiAgICBVQ2hhciBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdAogICAgewogICAgICAgIGlmICghbV9pbXBsIHx8IGluZGV4ID49
IG1faW1wbC0+bGVuZ3RoKCkpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiBt
X2ltcGwtPmNoYXJhY3RlcnMoKVtpbmRleF07CiAgICB9CgogICAgc3RhdGljIFN0cmluZyBudW1i
ZXIoc2hvcnQpOwogICAgc3RhdGljIFN0cmluZyBudW1iZXIodW5zaWduZWQgc2hvcnQpOwogICAg
c3RhdGljIFN0cmluZyBudW1iZXIoaW50KTsKICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKHVuc2ln
bmVkKTsKICAgIHN0YXRpYyBTdHJpbmcgbnVtYmVyKGxvbmcpOwogICAgc3RhdGljIFN0cmluZyBu
dW1iZXIodW5zaWduZWQgbG9uZyk7CiAgICBzdGF0aWMgU3RyaW5nIG51bWJlcihsb25nIGxvbmcp
OwogICAgc3RhdGljIFN0cmluZyBudW1iZXIodW5zaWduZWQgbG9uZyBsb25nKTsKICAgIHN0YXRp
YyBTdHJpbmcgbnVtYmVyKGRvdWJsZSwgdW5zaWduZWQgPSBTaG91bGRSb3VuZFNpZ25pZmljYW50
RmlndXJlcyB8IFNob3VsZFRydW5jYXRlVHJhaWxpbmdaZXJvcywgdW5zaWduZWQgcHJlY2lzaW9u
ID0gNik7CgoKICAgIHNpemVfdCBmaW5kKFVDaGFyIGMsIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29u
c3QKICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQoYywgc3RhcnQpIDogbm90
Rm91bmQ7IH0KICAgIHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFy
dCA9IDApIGNvbnN0CiAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5maW5kKHN0ci5p
bXBsKCksIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAgICBzaXplX3QgZmluZChDaGFyYWN0ZXJNYXRj
aEZ1bmN0aW9uUHRyIG1hdGNoRnVuY3Rpb24sIHVuc2lnbmVkIHN0YXJ0ID0gMCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQobWF0Y2hGdW5jdGlvbiwgc3RhcnQp
IDogbm90Rm91bmQ7IH0KICAgIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBzdHIsIHVuc2lnbmVk
IHN0YXJ0ID0gMCkgY29uc3QKICAgICAgICB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmZpbmQo
c3RyLCBzdGFydCkgOiBub3RGb3VuZDsgfQoKCiAgICBzaXplX3QgcmV2ZXJzZUZpbmQoVUNoYXIg
YywgdW5zaWduZWQgc3RhcnQgPSAoMjE0NzQ4MzY0NyAqIDJVICsgMVUpKSBjb25zdAogICAgICAg
IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoYywgc3RhcnQpIDogbm90Rm91
bmQ7IH0KICAgIHNpemVfdCByZXZlcnNlRmluZChjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQg
c3RhcnQgPSAoMjE0NzQ4MzY0NyAqIDJVICsgMVUpKSBjb25zdAogICAgICAgIHsgcmV0dXJuIG1f
aW1wbCA/IG1faW1wbC0+cmV2ZXJzZUZpbmQoc3RyLmltcGwoKSwgc3RhcnQpIDogbm90Rm91bmQ7
IH0KCgogICAgc2l6ZV90IGZpbmRJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIHN0ciwgdW5zaWdu
ZWQgc3RhcnQgPSAwKSBjb25zdAogICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+Zmlu
ZElnbm9yaW5nQ2FzZShzdHIsIHN0YXJ0KSA6IG5vdEZvdW5kOyB9CiAgICBzaXplX3QgZmluZEln
bm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIHN0ciwgdW5zaWduZWQgc3RhcnQgPSAwKSBjb25zdAog
ICAgICAgIHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZmluZElnbm9yaW5nQ2FzZShzdHIuaW1w
bCgpLCBzdGFydCkgOiBub3RGb3VuZDsgfQogICAgc2l6ZV90IHJldmVyc2VGaW5kSWdub3JpbmdD
YXNlKGNvbnN0IFN0cmluZyYgc3RyLCB1bnNpZ25lZCBzdGFydCA9ICgyMTQ3NDgzNjQ3ICogMlUg
KyAxVSkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5yZXZlcnNlRmlu
ZElnbm9yaW5nQ2FzZShzdHIuaW1wbCgpLCBzdGFydCkgOiBub3RGb3VuZDsgfQoKCiAgICBzaXpl
X3QgZmluZChjb25zdCBMQ2hhciogc3RyLCB1bnNpZ25lZCBzdGFydCwgYm9vbCBjYXNlU2Vuc2l0
aXZlKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyBmaW5kKHN0ciwgc3Rh
cnQpIDogZmluZElnbm9yaW5nQ2FzZShzdHIsIHN0YXJ0KTsgfQogICAgc2l6ZV90IGZpbmQoY29u
c3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0
CiAgICAgICAgeyByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IGZpbmQoc3RyLCBzdGFydCkgOiBmaW5k
SWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9CiAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29uc3Qg
U3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiAg
ICAgICAgeyByZXR1cm4gY2FzZVNlbnNpdGl2ZSA/IHJldmVyc2VGaW5kKHN0ciwgc3RhcnQpIDog
cmV2ZXJzZUZpbmRJZ25vcmluZ0Nhc2Uoc3RyLCBzdGFydCk7IH0KCiAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKTsKCiAgICBVQ2hhcjMyIGNoYXJhY3RlclN0
YXJ0aW5nQXQodW5zaWduZWQpIGNvbnN0OwoKICAgIGJvb2wgY29udGFpbnMoVUNoYXIgYykgY29u
c3QgeyByZXR1cm4gZmluZChjKSAhPSBub3RGb3VuZDsgfQogICAgYm9vbCBjb250YWlucyhjb25z
dCBMQ2hhciogc3RyLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25zdCB7IHJldHVybiBm
aW5kKHN0ciwgMCwgY2FzZVNlbnNpdGl2ZSkgIT0gbm90Rm91bmQ7IH0KICAgIGJvb2wgY29udGFp
bnMoY29uc3QgU3RyaW5nJiBzdHIsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0IHsg
cmV0dXJuIGZpbmQoc3RyLCAwLCBjYXNlU2Vuc2l0aXZlKSAhPSBub3RGb3VuZDsgfQoKICAgIGJv
b2wgc3RhcnRzV2l0aChjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUp
IGNvbnN0CiAgICAgICAgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5zdGFydHNXaXRoKHMuaW1w
bCgpLCBjYXNlU2Vuc2l0aXZlKSA6IHMuaXNFbXB0eSgpOyB9CiAgICBib29sIGVuZHNXaXRoKGNv
bnN0IFN0cmluZyYgcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICB7
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmVuZHNXaXRoKHMuaW1wbCgpLCBjYXNlU2Vuc2l0aXZl
KSA6IHMuaXNFbXB0eSgpOyB9CgogICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7CiAgICB2
b2lkIGFwcGVuZChMQ2hhcik7CiAgICB2b2lkIGFwcGVuZChjaGFyIGMpIHsgYXBwZW5kKHN0YXRp
Y19jYXN0PExDaGFyPihjKSk7IH07CiAgICB2b2lkIGFwcGVuZChVQ2hhcik7CiAgICB2b2lkIGFw
cGVuZChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICB2b2lkIGluc2VydChjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCBwb3MpOwogICAgdm9pZCBpbnNlcnQoY29uc3QgVUNoYXIqLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHBvcyk7CgogICAgU3RyaW5nJiByZXBsYWNlKFVDaGFy
IGEsIFVDaGFyIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEsIGIp
OyByZXR1cm4gKnRoaXM7IH0KICAgIFN0cmluZyYgcmVwbGFjZShVQ2hhciBhLCBjb25zdCBTdHJp
bmcmIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEsIGIuaW1wbCgp
KTsgcmV0dXJuICp0aGlzOyB9CiAgICBTdHJpbmcmIHJlcGxhY2UoY29uc3QgU3RyaW5nJiBhLCBj
b25zdCBTdHJpbmcmIGIpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9pbXBsLT5yZXBsYWNlKGEu
aW1wbCgpLCBiLmltcGwoKSk7IHJldHVybiAqdGhpczsgfQogICAgU3RyaW5nJiByZXBsYWNlKHVu
c2lnbmVkIGluZGV4LCB1bnNpZ25lZCBsZW4sIGNvbnN0IFN0cmluZyYgYikgeyBpZiAobV9pbXBs
KSBtX2ltcGwgPSBtX2ltcGwtPnJlcGxhY2UoaW5kZXgsIGxlbiwgYi5pbXBsKCkpOyByZXR1cm4g
KnRoaXM7IH0KCiAgICB2b2lkIG1ha2VMb3dlcigpIHsgaWYgKG1faW1wbCkgbV9pbXBsID0gbV9p
bXBsLT5sb3dlcigpOyB9CiAgICB2b2lkIG1ha2VVcHBlcigpIHsgaWYgKG1faW1wbCkgbV9pbXBs
ID0gbV9pbXBsLT51cHBlcigpOyB9CiAgICB2b2lkIGZpbGwoVUNoYXIgYykgeyBpZiAobV9pbXBs
KSBtX2ltcGwgPSBtX2ltcGwtPmZpbGwoYyk7IH0KCiAgICB2b2lkIHRydW5jYXRlKHVuc2lnbmVk
IGxlbik7CiAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBwb3MsIGludCBsZW4gPSAxKTsKCiAgICBT
dHJpbmcgc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQgbGVuID0gKDIxNDc0ODM2NDcg
KiAyVSArIDFVKSkgY29uc3Q7CiAgICBTdHJpbmcgc3Vic3RyaW5nU2hhcmluZ0ltcGwodW5zaWdu
ZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSAoMjE0NzQ4MzY0NyAqIDJVICsgMVUpKSBjb25zdDsKICAg
IFN0cmluZyBsZWZ0KHVuc2lnbmVkIGxlbikgY29uc3QgeyByZXR1cm4gc3Vic3RyaW5nKDAsIGxl
bik7IH0KICAgIFN0cmluZyByaWdodCh1bnNpZ25lZCBsZW4pIGNvbnN0IHsgcmV0dXJuIHN1YnN0
cmluZyhsZW5ndGgoKSAtIGxlbiwgbGVuKTsgfQoKCiAgICBTdHJpbmcgbG93ZXIoKSBjb25zdDsK
ICAgIFN0cmluZyB1cHBlcigpIGNvbnN0OwoKICAgIFN0cmluZyBzdHJpcFdoaXRlU3BhY2UoKSBj
b25zdDsKICAgIFN0cmluZyBzdHJpcFdoaXRlU3BhY2UoSXNXaGl0ZVNwYWNlRnVuY3Rpb25QdHIp
IGNvbnN0OwogICAgU3RyaW5nIHNpbXBsaWZ5V2hpdGVTcGFjZSgpIGNvbnN0OwogICAgU3RyaW5n
IHNpbXBsaWZ5V2hpdGVTcGFjZShJc1doaXRlU3BhY2VGdW5jdGlvblB0cikgY29uc3Q7CgogICAg
U3RyaW5nIHJlbW92ZUNoYXJhY3RlcnMoQ2hhcmFjdGVyTWF0Y2hGdW5jdGlvblB0cikgY29uc3Q7
CiAgICB0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihVQ2hhcik+IGJvb2wgaXNBbGxT
cGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0OwoKCiAgICBTdHJpbmcgZm9sZENhc2UoKSBjb25zdDsK
CgogICAgc3RhdGljIFN0cmluZyBmb3JtYXQoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRl
X18oKF9fZm9ybWF0X18ocHJpbnRmLCAxLCAyKSkpOwoKCgoKCgoKICAgIHN0YXRpYyBTdHJpbmcg
Y3JlYXRlVW5pbml0aWFsaXplZCh1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiYgZGF0YSkgeyByZXR1
cm4gU3RyaW5nSW1wbDo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGRhdGEpOyB9CgogICAg
dm9pZCBzcGxpdChjb25zdCBTdHJpbmcmIHNlcGFyYXRvciwgVmVjdG9yPFN0cmluZz4mIHJlc3Vs
dCkgY29uc3Q7CiAgICB2b2lkIHNwbGl0KGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yLCBib29sIGFs
bG93RW1wdHlFbnRyaWVzLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKICAgIHZvaWQg
c3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKICAg
IHZvaWQgc3BsaXQoVUNoYXIgc2VwYXJhdG9yLCBib29sIGFsbG93RW1wdHlFbnRyaWVzLCBWZWN0
b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdDsKCiAgICBpbnQgdG9JbnRTdHJpY3QoYm9vbCogb2sg
PSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKICAgIHVuc2lnbmVkIHRvVUludFN0cmljdChib29s
KiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogICAgaW50NjRfdCB0b0ludDY0U3RyaWN0
KGJvb2wqIG9rID0gMCwgaW50IGJhc2UgPSAxMCkgY29uc3Q7CiAgICB1aW50NjRfdCB0b1VJbnQ2
NFN0cmljdChib29sKiBvayA9IDAsIGludCBiYXNlID0gMTApIGNvbnN0OwogICAgaW50cHRyX3Qg
dG9JbnRQdHJTdHJpY3QoYm9vbCogb2sgPSAwLCBpbnQgYmFzZSA9IDEwKSBjb25zdDsKCiAgICBp
bnQgdG9JbnQoYm9vbCogb2sgPSAwKSBjb25zdDsKICAgIHVuc2lnbmVkIHRvVUludChib29sKiBv
ayA9IDApIGNvbnN0OwogICAgaW50NjRfdCB0b0ludDY0KGJvb2wqIG9rID0gMCkgY29uc3Q7CiAg
ICB1aW50NjRfdCB0b1VJbnQ2NChib29sKiBvayA9IDApIGNvbnN0OwogICAgaW50cHRyX3QgdG9J
bnRQdHIoYm9vbCogb2sgPSAwKSBjb25zdDsKICAgIGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9
IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAwKSBjb25zdDsKICAgIGZsb2F0IHRvRmxvYXQoYm9v
bCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCkgY29uc3Q7CgogICAgYm9vbCBwZXJj
ZW50YWdlKGludCYgcGVyY2VudGFnZSkgY29uc3Q7CgogICAgU3RyaW5nIGlzb2xhdGVkQ29weSgp
IGNvbnN0OwoKCgogICAgdHlwZWRlZiBzdHJ1Y3QgSW1wbGljaXRDb252ZXJzaW9uRnJvbVdURlN0
cmluZ1RvQm9vbERpc2FsbG93ZWRBKiAoU3RyaW5nOjoqVW5zcGVjaWZpZWRCb29sVHlwZUEpOwog
ICAgdHlwZWRlZiBzdHJ1Y3QgSW1wbGljaXRDb252ZXJzaW9uRnJvbVdURlN0cmluZ1RvQm9vbERp
c2FsbG93ZWRCKiAoU3RyaW5nOjoqVW5zcGVjaWZpZWRCb29sVHlwZUIpOwogICAgb3BlcmF0b3Ig
VW5zcGVjaWZpZWRCb29sVHlwZUEoKSBjb25zdDsKICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9v
bFR5cGVCKCkgY29uc3Q7CiMgMzU5ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9X
VEZTdHJpbmcuaCIKICAgIHN0YXRpYyBTdHJpbmcgZnJvbVVURjgoY29uc3QgTENoYXIqLCBzaXpl
X3QpOwogICAgc3RhdGljIFN0cmluZyBmcm9tVVRGOChjb25zdCBMQ2hhciopOwogICAgc3RhdGlj
IFN0cmluZyBmcm9tVVRGOChjb25zdCBjaGFyKiBzLCBzaXplX3QgbGVuZ3RoKSB7IHJldHVybiBm
cm9tVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGxlbmd0aCk7IH07CiAg
ICBzdGF0aWMgU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIGZyb21VVEY4
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPihzKSk7IH07CgoKICAgIHN0YXRpYyBTdHJp
bmcgZnJvbVVURjhXaXRoTGF0aW4xRmFsbGJhY2soY29uc3QgTENoYXIqLCBzaXplX3QpOwogICAg
c3RhdGljIFN0cmluZyBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhjb25zdCBjaGFyKiBzLCBz
aXplX3QgbGVuZ3RoKSB7IHJldHVybiBmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4ocyksIGxlbmd0aCk7IH07CgoKICAgIFdURjo6VW5pY29k
ZTo6RGlyZWN0aW9uIGRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKGJvb2wqIGhhc1N0cm9uZ0RpcmVj
dGlvbmFsaXR5ID0gMCkgY29uc3QKICAgIHsKICAgICAgICBpZiAobV9pbXBsKQogICAgICAgICAg
ICByZXR1cm4gbV9pbXBsLT5kZWZhdWx0V3JpdGluZ0RpcmVjdGlvbihoYXNTdHJvbmdEaXJlY3Rp
b25hbGl0eSk7CiAgICAgICAgaWYgKGhhc1N0cm9uZ0RpcmVjdGlvbmFsaXR5KQogICAgICAgICAg
ICAqaGFzU3Ryb25nRGlyZWN0aW9uYWxpdHkgPSBmYWxzZTsKICAgICAgICByZXR1cm4gV1RGOjpV
bmljb2RlOjpMZWZ0VG9SaWdodDsKICAgIH0KCiAgICBib29sIGNvbnRhaW5zT25seUFTQ0lJKCkg
Y29uc3Q7CiAgICBib29sIGNvbnRhaW5zT25seUxhdGluMSgpIGNvbnN0OwogICAgYm9vbCBjb250
YWluc09ubHlXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gIW1faW1wbCB8fCBtX2ltcGwtPmNv
bnRhaW5zT25seVdoaXRlc3BhY2UoKTsgfQoKCiAgICBTdHJpbmcoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKSA6IG1faW1wbChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkgeyB9CiAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLmlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KCgoKCgpwcml2YXRlOgogICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG1faW1wbDsKfTsKCgoKCgoKaW5saW5lIFN0cmluZyYgb3BlcmF0b3IrPShTdHJpbmcm
IGEsIGNvbnN0IFN0cmluZyYgYikgeyBhLmFwcGVuZChiKTsgcmV0dXJuIGE7IH0KCmlubGluZSBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJu
IGVxdWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbChhLmltcGwoKSwgYik7
IH0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIp
IHsgcmV0dXJuIGVxdWFsKGEuaW1wbCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4o
YikpOyB9CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgTENoYXIqIGEsIGNvbnN0IFN0cmlu
ZyYgYikgeyByZXR1cm4gZXF1YWwoYSwgYi5pbXBsKCkpOyB9CmlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChyZWludGVy
cHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQp0ZW1wbGF0ZTxzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9yPGNoYXIs
IGlubGluZUNhcGFjaXR5PiYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChiLmlt
cGwoKSwgYS5kYXRhKCksIGEuc2l6ZSgpKTsgfQp0ZW1wbGF0ZTxzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nJiBhLCBjb25zdCBWZWN0b3I8
Y2hhciwgaW5saW5lQ2FwYWNpdHk+JiBiKSB7IHJldHVybiBiID09IGE7IH0KCgppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiAh
ZXF1YWwoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFN0cmluZyYgYSwgY29uc3QgTENoYXIqIGIpIHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgYik7
IH0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIp
IHsgcmV0dXJuICFlcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExDaGFyKiBhLCBjb25zdCBTdHJp
bmcmIGIpIHsgcmV0dXJuICFlcXVhbChhLCBiLmltcGwoKSk7IH0KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuICFlcXVhbChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQp0ZW1wbGF0ZTxzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVjdG9yPGNo
YXIsIGlubGluZUNhcGFjaXR5PiYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0g
Yik7IH0KdGVtcGxhdGU8c2l6ZV90IGlubGluZUNhcGFjaXR5PgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgVmVjdG9yPGNoYXIsIGlubGluZUNhcGFjaXR5PiYg
YikgeyByZXR1cm4gYiAhPSBhOyB9CgppbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25z
dCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2Uo
YS5pbXBsKCksIGIuaW1wbCgpKTsgfQppbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25z
dCBTdHJpbmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShh
LmltcGwoKSwgYik7IH0KaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgU3RyaW5n
JiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsgfQppbmxpbmUgYm9vbCBlcXVhbEln
bm9yaW5nQ2FzZShjb25zdCBMQ2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVh
bElnbm9yaW5nQ2FzZShhLCBiLmltcGwoKSk7IH0KaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nh
c2UoY29uc3QgY2hhciogYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5n
Q2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSksIGIuaW1wbCgpKTsgfQoKaW5s
aW5lIGJvb2wgZXF1YWxQb3NzaWJseUlnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0
IFN0cmluZyYgYiwgYm9vbCBpZ25vcmVDYXNlKQp7CiAgICByZXR1cm4gaWdub3JlQ2FzZSA/IGVx
dWFsSWdub3JpbmdDYXNlKGEsIGIpIDogKGEgPT0gYik7Cn0KCmlubGluZSBib29sIGVxdWFsSWdu
b3JpbmdOdWxsaXR5KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiKSB7IHJldHVybiBl
cXVhbElnbm9yaW5nTnVsbGl0eShhLmltcGwoKSwgYi5pbXBsKCkpOyB9Cgp0ZW1wbGF0ZTxzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CmlubGluZSBib29sIGVxdWFsSWdub3JpbmdOdWxsaXR5KGNvbnN0
IFZlY3RvcjxVQ2hhciwgaW5saW5lQ2FwYWNpdHk+JiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0
dXJuIGVxdWFsSWdub3JpbmdOdWxsaXR5KGEsIGIuaW1wbCgpKTsgfQoKaW5saW5lIGJvb2wgb3Bl
cmF0b3IhKGNvbnN0IFN0cmluZyYgc3RyKSB7IHJldHVybiBzdHIuaXNOdWxsKCk7IH0KCmlubGlu
ZSB2b2lkIHN3YXAoU3RyaW5nJiBhLCBTdHJpbmcmIGIpIHsgYS5zd2FwKGIpOyB9CgoKCnRlbXBs
YXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KU3RyaW5nOjpTdHJpbmcoY29uc3QgVmVjdG9yPFVD
aGFyLCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgIDogbV9pbXBsKHZlY3Rvci5zaXplKCkg
PyBTdHJpbmdJbXBsOjpjcmVhdGUodmVjdG9yLmRhdGEoKSwgdmVjdG9yLnNpemUoKSkgOiAwKQp7
Cn0KCnRlbXBsYXRlPD4KaW5saW5lIGNvbnN0IExDaGFyKiBTdHJpbmc6OmdldENoYXJhY3RlcnM8
TENoYXI+KCkgY29uc3QKewogICAgKCh2b2lkKTApOwogICAgcmV0dXJuIGNoYXJhY3RlcnM4KCk7
Cn0KCnRlbXBsYXRlPD4KaW5saW5lIGNvbnN0IFVDaGFyKiBTdHJpbmc6OmdldENoYXJhY3RlcnM8
VUNoYXI+KCkgY29uc3QKewogICAgKCh2b2lkKTApOwogICAgcmV0dXJuIGNoYXJhY3RlcnMxNigp
Owp9CgppbmxpbmUgYm9vbCBTdHJpbmc6OmNvbnRhaW5zT25seUxhdGluMSgpIGNvbnN0CnsKICAg
IGlmIChpc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIHRydWU7CgogICAgaWYgKGlzOEJpdCgpKQog
ICAgICAgIHJldHVybiB0cnVlOwoKICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gY2hhcmFj
dGVyczE2KCk7CiAgICBVQ2hhciBvcmVkID0gMDsKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9pbXBsLT5sZW5ndGgoKTsgKytpKQogICAgICAgIG9yZWQgfD0gY2hhcmFjdGVyc1tpXTsKICAg
IHJldHVybiAhKG9yZWQgJiAweEZGMDApOwp9CiMgNDg3ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvdGV4dC9XVEZTdHJpbmcuaCIKaW5saW5lIGJvb2wgU3RyaW5nOjpjb250YWluc09ubHlB
U0NJSSgpIGNvbnN0CnsKICAgIGlmIChpc0VtcHR5KCkpCiAgICAgICAgcmV0dXJuIHRydWU7Cgog
ICAgaWYgKGlzOEJpdCgpKQogICAgICAgIHJldHVybiBjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoY2hh
cmFjdGVyczgoKSwgbV9pbXBsLT5sZW5ndGgoKSk7CgogICAgcmV0dXJuIGNoYXJhY3RlcnNBcmVB
bGxBU0NJSShjaGFyYWN0ZXJzMTYoKSwgbV9pbXBsLT5sZW5ndGgoKSk7Cn0KCiBpbnQgY29kZVBv
aW50Q29tcGFyZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKCmlubGluZSBib29sIGNv
ZGVQb2ludENvbXBhcmVMZXNzVGhhbihjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikK
ewogICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS5pbXBsKCksIGIuaW1wbCgpKSA8IDA7Cn0K
CmlubGluZSBzaXplX3QgZmluZChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoLCBMQ2hhciBtYXRjaENoYXJhY3RlciwgdW5zaWduZWQgaW5kZXggPSAwKQp7CiAgICB3aGls
ZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICBpZiAoY2hhcmFjdGVyc1tpbmRleF0gPT0gbWF0
Y2hDaGFyYWN0ZXIpCiAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICArK2luZGV4Owog
ICAgfQogICAgcmV0dXJuIG5vdEZvdW5kOwp9CgppbmxpbmUgc2l6ZV90IGZpbmQoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgbWF0Y2hDaGFyYWN0ZXIsIHVu
c2lnbmVkIGluZGV4ID0gMCkKewogICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CiAgICAgICAg
aWYgKGNoYXJhY3RlcnNbaW5kZXhdID09IG1hdGNoQ2hhcmFjdGVyKQogICAgICAgICAgICByZXR1
cm4gaW5kZXg7CiAgICAgICAgKytpbmRleDsKICAgIH0KICAgIHJldHVybiBub3RGb3VuZDsKfQoK
aW5saW5lIHNpemVfdCBmaW5kKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgsIENoYXJhY3Rlck1hdGNoRnVuY3Rpb25QdHIgbWF0Y2hGdW5jdGlvbiwgdW5zaWduZWQgaW5k
ZXggPSAwKQp7CiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKICAgICAgICBpZiAobWF0Y2hG
dW5jdGlvbihjaGFyYWN0ZXJzW2luZGV4XSkpCiAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAg
ICAgICArK2luZGV4OwogICAgfQogICAgcmV0dXJuIG5vdEZvdW5kOwp9CgppbmxpbmUgc2l6ZV90
IGZpbmQoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ2hhcmFjdGVy
TWF0Y2hGdW5jdGlvblB0ciBtYXRjaEZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCA9IDApCnsKICAg
IHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewogICAgICAgIGlmIChtYXRjaEZ1bmN0aW9uKGNoYXJh
Y3RlcnNbaW5kZXhdKSkKICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICsraW5kZXg7
CiAgICB9CiAgICByZXR1cm4gbm90Rm91bmQ7Cn0KCmlubGluZSBzaXplX3QgcmV2ZXJzZUZpbmQo
Y29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIgbWF0Y2hDaGFy
YWN0ZXIsIHVuc2lnbmVkIGluZGV4ID0gKDIxNDc0ODM2NDcgKiAyVSArIDFVKSkKewogICAgaWYg
KCFsZW5ndGgpCiAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwogICAgaWYgKGluZGV4ID49IGxlbmd0
aCkKICAgICAgICBpbmRleCA9IGxlbmd0aCAtIDE7CiAgICB3aGlsZSAoY2hhcmFjdGVyc1tpbmRl
eF0gIT0gbWF0Y2hDaGFyYWN0ZXIpIHsKICAgICAgICBpZiAoIWluZGV4LS0pCiAgICAgICAgICAg
IHJldHVybiBub3RGb3VuZDsKICAgIH0KICAgIHJldHVybiBpbmRleDsKfQoKaW5saW5lIHNpemVf
dCByZXZlcnNlRmluZChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBV
Q2hhciBtYXRjaENoYXJhY3RlciwgdW5zaWduZWQgaW5kZXggPSAoMjE0NzQ4MzY0NyAqIDJVICsg
MVUpKQp7CiAgICBpZiAoIWxlbmd0aCkKICAgICAgICByZXR1cm4gbm90Rm91bmQ7CiAgICBpZiAo
aW5kZXggPj0gbGVuZ3RoKQogICAgICAgIGluZGV4ID0gbGVuZ3RoIC0gMTsKICAgIHdoaWxlIChj
aGFyYWN0ZXJzW2luZGV4XSAhPSBtYXRjaENoYXJhY3RlcikgewogICAgICAgIGlmICghaW5kZXgt
LSkKICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwogICAgfQogICAgcmV0dXJuIGluZGV4Owp9
CgppbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPFVDaGFyPiYgdmVjdG9yLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKewogICAgdmVjdG9yLmFwcGVuZChzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcu
bGVuZ3RoKCkpOwp9CgppbmxpbmUgdm9pZCBhcHBlbmROdW1iZXIoVmVjdG9yPFVDaGFyPiYgdmVj
dG9yLCB1bnNpZ25lZCBjaGFyIG51bWJlcikKewogICAgaW50IG51bWJlckxlbmd0aCA9IG51bWJl
ciA+IDk5ID8gMyA6IChudW1iZXIgPiA5ID8gMiA6IDEpOwogICAgc2l6ZV90IHZlY3RvclNpemUg
PSB2ZWN0b3Iuc2l6ZSgpOwogICAgdmVjdG9yLmdyb3codmVjdG9yU2l6ZSArIG51bWJlckxlbmd0
aCk7CgogICAgc3dpdGNoIChudW1iZXJMZW5ndGgpIHsKICAgIGNhc2UgMzoKICAgICAgICB2ZWN0
b3JbdmVjdG9yU2l6ZSArIDJdID0gbnVtYmVyICUgMTAgKyAnMCc7CiAgICAgICAgbnVtYmVyIC89
IDEwOwoKICAgIGNhc2UgMjoKICAgICAgICB2ZWN0b3JbdmVjdG9yU2l6ZSArIDFdID0gbnVtYmVy
ICUgMTAgKyAnMCc7CiAgICAgICAgbnVtYmVyIC89IDEwOwoKICAgIGNhc2UgMToKICAgICAgICB2
ZWN0b3JbdmVjdG9yU2l6ZV0gPSBudW1iZXIgJSAxMCArICcwJzsKICAgIH0KfQoKdGVtcGxhdGU8
Ym9vbCBpc1NwZWNpYWxDaGFyYWN0ZXIoVUNoYXIpPiBpbmxpbmUgYm9vbCBpc0FsbFNwZWNpYWxD
aGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQp7CiAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKCFpc1NwZWNp
YWxDaGFyYWN0ZXIoY2hhcmFjdGVyc1tpXSkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KICAgIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZTxib29sIGlzU3BlY2lhbENoYXJhY3RlcihV
Q2hhcik+IGlubGluZSBib29sIFN0cmluZzo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVycygpIGNvbnN0
CnsKICAgIHJldHVybiBXVEY6OmlzQWxsU3BlY2lhbENoYXJhY3RlcnM8aXNTcGVjaWFsQ2hhcmFj
dGVyPihjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKfQoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBEZWZhdWx0SGFzaDsKdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8U3RyaW5nPiB7
CiAgICB0eXBlZGVmIFN0cmluZ0hhc2ggSGFzaDsKfTsKCnRlbXBsYXRlIDw+IHN0cnVjdCBWZWN0
b3JUcmFpdHM8U3RyaW5nPiA6IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsgfTsKCgogY29uc3Qg
U3RyaW5nJiBlbXB0eVN0cmluZygpOwoKfQoKdXNpbmcgV1RGOjpDU3RyaW5nOwp1c2luZyBXVEY6
OlN0cmluZzsKdXNpbmcgV1RGOjplbXB0eVN0cmluZzsKdXNpbmcgV1RGOjphcHBlbmQ7CnVzaW5n
IFdURjo6YXBwZW5kTnVtYmVyOwp1c2luZyBXVEY6OmNoYXJhY3RlcnNBcmVBbGxBU0NJSTsKdXNp
bmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnRTdHJpY3Q7CnVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvVUlu
dFN0cmljdDsKdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnQ2NFN0cmljdDsKdXNpbmcgV1RGOjpj
aGFyYWN0ZXJzVG9VSW50NjRTdHJpY3Q7CnVzaW5nIFdURjo6Y2hhcmFjdGVyc1RvSW50UHRyU3Ry
aWN0Owp1c2luZyBXVEY6OmNoYXJhY3RlcnNUb0ludDsKdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9V
SW50Owp1c2luZyBXVEY6OmNoYXJhY3RlcnNUb0ludDY0Owp1c2luZyBXVEY6OmNoYXJhY3RlcnNU
b1VJbnQ2NDsKdXNpbmcgV1RGOjpjaGFyYWN0ZXJzVG9JbnRQdHI7CnVzaW5nIFdURjo6Y2hhcmFj
dGVyc1RvRG91YmxlOwp1c2luZyBXVEY6OmNoYXJhY3RlcnNUb0Zsb2F0Owp1c2luZyBXVEY6OmVx
dWFsOwp1c2luZyBXVEY6OmVxdWFsSWdub3JpbmdDYXNlOwp1c2luZyBXVEY6OmZpbmQ7CnVzaW5n
IFdURjo6aXNBbGxTcGVjaWFsQ2hhcmFjdGVyczsKdXNpbmcgV1RGOjppc1NwYWNlT3JOZXdsaW5l
Owp1c2luZyBXVEY6OnJldmVyc2VGaW5kOwp1c2luZyBXVEY6OlNob3VsZFJvdW5kRGVjaW1hbFBs
YWNlczsKCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmgiIDEKIyAyNCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5n
LmgiCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nSW1w
bC5oIiAxCiMgMjYgIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0cmlu
Z0ltcGwuaCIKbmFtZXNwYWNlIFdURiB7CgpjbGFzcyBBdG9taWNTdHJpbmdJbXBsIDogcHVibGlj
IFN0cmluZ0ltcGwKewpwdWJsaWM6CiAgICBBdG9taWNTdHJpbmdJbXBsKCkgOiBTdHJpbmdJbXBs
KDApIHt9Cn07Cgp9Cgp1c2luZyBXVEY6OkF0b21pY1N0cmluZ0ltcGw7CiMgMjUgIi4vU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L0F0b21pY1N0cmluZy5oIiAyCiMgMSAiLi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgiIDEKIyAyNiAiLi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgiIDIKIyAzNSAiLi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgiCm5hbWVzcGFjZSBXVEYgewoKc3Ry
dWN0IEF0b21pY1N0cmluZ0hhc2g7CgpjbGFzcyBBdG9taWNTdHJpbmcgewpwdWJsaWM6CiAgICBz
dGF0aWMgdm9pZCBpbml0KCk7CgogICAgQXRvbWljU3RyaW5nKCkgeyB9CiAgICBBdG9taWNTdHJp
bmcoY29uc3QgTENoYXIqIHMpIDogbV9zdHJpbmcoYWRkKHMpKSB7IH0KICAgIEF0b21pY1N0cmlu
Zyhjb25zdCBjaGFyKiBzKSA6IG1fc3RyaW5nKGFkZChzKSkgeyB9CiAgICBBdG9taWNTdHJpbmco
Y29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCkgOiBtX3N0cmluZyhhZGQocywgbGVuZ3Ro
KSkgeyB9CiAgICBBdG9taWNTdHJpbmcoY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCwg
dW5zaWduZWQgZXhpc3RpbmdIYXNoKSA6IG1fc3RyaW5nKGFkZChzLCBsZW5ndGgsIGV4aXN0aW5n
SGFzaCkpIHsgfQogICAgQXRvbWljU3RyaW5nKGNvbnN0IFVDaGFyKiBzKSA6IG1fc3RyaW5nKGFk
ZChzKSkgeyB9CiAgICBBdG9taWNTdHJpbmcoU3RyaW5nSW1wbCogaW1wKSA6IG1fc3RyaW5nKGFk
ZChpbXApKSB7IH0KICAgIEF0b21pY1N0cmluZyhBdG9taWNTdHJpbmdJbXBsKiBpbXApIDogbV9z
dHJpbmcoaW1wKSB7IH0KICAgIEF0b21pY1N0cmluZyhjb25zdCBTdHJpbmcmIHMpIDogbV9zdHJp
bmcoYWRkKHMuaW1wbCgpKSkgeyB9CiAgICBBdG9taWNTdHJpbmcoU3RyaW5nSW1wbCogYmFzZVN0
cmluZywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkgOiBtX3N0cmluZyhhZGQoYmFz
ZVN0cmluZywgc3RhcnQsIGxlbmd0aCkpIHsgfQoKCiAgICBBdG9taWNTdHJpbmcoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fc3RyaW5nKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlKSB7IH0KICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CgogICAgc3RhdGljIEF0b21p
Y1N0cmluZ0ltcGwqIGZpbmQoY29uc3QgVUNoYXIqIHMsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWdu
ZWQgZXhpc3RpbmdIYXNoKTsKCiAgICBvcGVyYXRvciBjb25zdCBTdHJpbmcmKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmc7IH0KICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9zdHJpbmc7IH07CgogICAgQXRvbWljU3RyaW5nSW1wbCogaW1wbCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEF0b21pY1N0cmluZ0ltcGwgKj4obV9zdHJpbmcuaW1wbCgpKTsgfQoK
ICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuY2hh
cmFjdGVycygpOyB9CiAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5sZW5ndGgoKTsgfQoKICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaW50IGkpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nW2ldOyB9CgogICAgYm9vbCBjb250YWlucyhVQ2hhciBjKSBjb25z
dCB7IHJldHVybiBtX3N0cmluZy5jb250YWlucyhjKTsgfQogICAgYm9vbCBjb250YWlucyhjb25z
dCBMQ2hhciogcywgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICB7IHJl
dHVybiBtX3N0cmluZy5jb250YWlucyhzLCBjYXNlU2Vuc2l0aXZlKTsgfQogICAgYm9vbCBjb250
YWlucyhjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAg
ICAgICAgeyByZXR1cm4gbV9zdHJpbmcuY29udGFpbnMocywgY2FzZVNlbnNpdGl2ZSk7IH0KCiAg
ICBzaXplX3QgZmluZChVQ2hhciBjLCBzaXplX3Qgc3RhcnQgPSAwKSBjb25zdCB7IHJldHVybiBt
X3N0cmluZy5maW5kKGMsIHN0YXJ0KTsgfQogICAgc2l6ZV90IGZpbmQoY29uc3QgTENoYXIqIHMs
IHNpemVfdCBzdGFydCA9IDAsIGJvb2wgY2FzZVNlbnRpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gbV9zdHJpbmcuZmluZChzLCBzdGFydCwgY2FzZVNlbnRpdGl2ZSk7IH0KICAg
IHNpemVfdCBmaW5kKGNvbnN0IFN0cmluZyYgcywgc2l6ZV90IHN0YXJ0ID0gMCwgYm9vbCBjYXNl
U2VudGl0aXZlID0gdHJ1ZSkgY29uc3QKICAgICAgICB7IHJldHVybiBtX3N0cmluZy5maW5kKHMs
IHN0YXJ0LCBjYXNlU2VudGl0aXZlKTsgfQoKICAgIGJvb2wgc3RhcnRzV2l0aChjb25zdCBTdHJp
bmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAgICAgeyByZXR1cm4g
bV9zdHJpbmcuc3RhcnRzV2l0aChzLCBjYXNlU2Vuc2l0aXZlKTsgfQogICAgYm9vbCBlbmRzV2l0
aChjb25zdCBTdHJpbmcmIHMsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gbV9zdHJpbmcuZW5kc1dpdGgocywgY2FzZVNlbnNpdGl2ZSk7IH0KCiAgICBB
dG9taWNTdHJpbmcgbG93ZXIoKSBjb25zdDsKICAgIEF0b21pY1N0cmluZyB1cHBlcigpIGNvbnN0
IHsgcmV0dXJuIEF0b21pY1N0cmluZyhpbXBsKCktPnVwcGVyKCkpOyB9CgogICAgaW50IHRvSW50
KGJvb2wqIG9rID0gMCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9JbnQob2spOyB9CiAgICBk
b3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0Rv
dWJsZShvayk7IH0KICAgIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy50b0Zsb2F0KG9rKTsgfQogICAgYm9vbCBwZXJjZW50YWdlKGludCYgcCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcucGVyY2VudGFnZShwKTsgfQoKICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0KICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsgfQoKICAgIHN0YXRpYyB2b2lkIHJlbW92
ZShTdHJpbmdJbXBsKik7CiMgMTE1ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9B
dG9taWNTdHJpbmcuaCIKICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZnJvbVVURjgoY29uc3QgY2hh
ciosIHNpemVfdCk7CiAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZyb21VVEY4KGNvbnN0IGNoYXIq
KTsKCgoKCnByaXZhdGU6CiAgICBTdHJpbmcgbV9zdHJpbmc7CgogICAgc3RhdGljIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IExDaGFyKik7CiAgICBpbmxpbmUgX19hdHRyaWJ1dGVf
XygoX19hbHdheXNfaW5saW5lX18pKSBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQo
Y29uc3QgY2hhciogcykgeyByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIq
PihzKSk7IH07CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoY29uc3QgVUNo
YXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogICAgaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz
X2lubGluZV9fKSkgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IGNoYXIq
IHMsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gYWRkKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KHMpLCBsZW5ndGgpOyB9OwogICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
YWRkKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBleGlzdGluZ0hhc2gp
OwogICAgc3RhdGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gYWRkKGNvbnN0IFVDaGFyKik7CiAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGQoU3RyaW5nSW1wbCosIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fs
d2F5c19pbmxpbmVfXykpIHN0YXRpYyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkZChTdHJpbmdJ
bXBsKiByKQogICAgewogICAgICAgIGlmICghciB8fCByLT5pc0F0b21pYygpKQogICAgICAgICAg
ICByZXR1cm4gcjsKICAgICAgICByZXR1cm4gYWRkU2xvd0Nhc2Uocik7CiAgICB9CiAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBhZGRTbG93Q2FzZShTdHJpbmdJbXBsKik7CiAgICBz
dGF0aWMgQXRvbWljU3RyaW5nIGZyb21VVEY4SW50ZXJuYWwoY29uc3QgY2hhciosIGNvbnN0IGNo
YXIqKTsKfTsKCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBj
b25zdCBBdG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpID09IGIuaW1wbCgpOyB9CmJv
b2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmLCBjb25zdCBMQ2hhciopOwppbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyBy
ZXR1cm4gV1RGOjplcXVhbChhLmltcGwoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+
KGIpKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29u
c3QgVmVjdG9yPFVDaGFyPiYgYikgeyByZXR1cm4gYS5pbXBsKCkgJiYgZXF1YWwoYS5pbXBsKCks
IGIuZGF0YSgpLCBiLnNpemUoKSk7IH0KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9t
aWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gZXF1YWwoYS5pbXBsKCksIGIu
aW1wbCgpKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExDaGFyKiBhLCBjb25zdCBB
dG9taWNTdHJpbmcmIGIpIHsgcmV0dXJuIGIgPT0gYTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFN0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBlcXVhbChh
LmltcGwoKSwgYi5pbXBsKCkpOyB9CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVjdG9y
PFVDaGFyPiYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiBiID09IGE7IH0KCmlu
bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBBdG9taWNT
dHJpbmcmIGIpIHsgcmV0dXJuIGEuaW1wbCgpICE9IGIuaW1wbCgpOyB9CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1cm4g
IShhID09IGIpOyB9CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBh
LCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1cm4gIWVx
dWFsKGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBB
dG9taWNTdHJpbmcmIGEsIGNvbnN0IFZlY3RvcjxVQ2hhcj4mIGIpIHsgcmV0dXJuICEoYSA9PSBi
KTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExDaGFyKiBhLCBjb25zdCBBdG9taWNT
dHJpbmcmIGIpIHsgcmV0dXJuICEoYiA9PSBhKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFN0cmluZyYgYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJldHVybiAhZXF1YWwoYS5p
bXBsKCksIGIuaW1wbCgpKTsgfQppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlY3RvcjxV
Q2hhcj4mIGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gIShhID09IGIpOyB9Cgpp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0
IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIu
aW1wbCgpKTsgfQppbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJp
bmcmIGEsIGNvbnN0IExDaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwo
KSwgYik7IH0KaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgQXRvbWljU3RyaW5n
JiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLmltcGwoKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KGIpKTsgfQppbmxpbmUgYm9vbCBlcXVhbEln
bm9yaW5nQ2FzZShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikgeyByZXR1
cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQppbmxpbmUgYm9vbCBl
cXVhbElnbm9yaW5nQ2FzZShjb25zdCBMQ2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7
IHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShhLCBiLmltcGwoKSk7IH0KaW5saW5lIGJvb2wgZXF1
YWxJZ25vcmluZ0Nhc2UoY29uc3QgY2hhciogYSwgY29uc3QgQXRvbWljU3RyaW5nJiBiKSB7IHJl
dHVybiBlcXVhbElnbm9yaW5nQ2FzZShyZWludGVycHJldF9jYXN0PGNvbnN0IExDaGFyKj4oYSks
IGIuaW1wbCgpKTsgfQppbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBTdHJpbmcm
IGEsIGNvbnN0IEF0b21pY1N0cmluZyYgYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5p
bXBsKCksIGIuaW1wbCgpKTsgfQoKCgoKZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRv
bTsKZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207CmV4dGVybiBjb25zdCBBdG9t
aWNTdHJpbmcgdGV4dEF0b207CmV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgY29tbWVudEF0b207
CmV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgc3RhckF0b207CmV4dGVybiBjb25zdCBBdG9taWNT
dHJpbmcgeG1sQXRvbTsKZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyB4bWxuc0F0b207Cgppbmxp
bmUgQXRvbWljU3RyaW5nIEF0b21pY1N0cmluZzo6ZnJvbVVURjgoY29uc3QgY2hhciogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCkKewogICAgaWYgKCFjaGFyYWN0ZXJzKQogICAgICAgIHJldHVy
biBudWxsQXRvbTsKICAgIGlmICghbGVuZ3RoKQogICAgICAgIHJldHVybiBlbXB0eUF0b207CiAg
ICByZXR1cm4gZnJvbVVURjhJbnRlcm5hbChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVuZ3Ro
KTsKfQoKaW5saW5lIEF0b21pY1N0cmluZyBBdG9taWNTdHJpbmc6OmZyb21VVEY4KGNvbnN0IGNo
YXIqIGNoYXJhY3RlcnMpCnsKICAgIGlmICghY2hhcmFjdGVycykKICAgICAgICByZXR1cm4gbnVs
bEF0b207CiAgICBpZiAoISpjaGFyYWN0ZXJzKQogICAgICAgIHJldHVybiBlbXB0eUF0b207CiAg
ICByZXR1cm4gZnJvbVVURjhJbnRlcm5hbChjaGFyYWN0ZXJzLCAwKTsKfQoKCgp0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CnRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEF0b21pY1N0cmluZz4gewogICAgdHlwZWRlZiBBdG9taWNTdHJpbmdIYXNoIEhhc2g7Cn07
Cgp9CgoKdXNpbmcgV1RGOjpBdG9taWNTdHJpbmc7CnVzaW5nIFdURjo6bnVsbEF0b207CnVzaW5n
IFdURjo6ZW1wdHlBdG9tOwp1c2luZyBXVEY6OnRleHRBdG9tOwp1c2luZyBXVEY6OmNvbW1lbnRB
dG9tOwp1c2luZyBXVEY6OnN0YXJBdG9tOwp1c2luZyBXVEY6OnhtbEF0b207CnVzaW5nIFdURjo6
eG1sbnNBdG9tOwoKCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaCIgMQojIDM5ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZS5oIgpuYW1lc3BhY2UgV1RGIHsKCnRlbXBsYXRlPHR5cGVuYW1lIFN0
cmluZ1R5cGU+CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyIHsKfTsKCnRlbXBsYXRlPD4KY2xhc3Mg
U3RyaW5nVHlwZUFkYXB0ZXI8Y2hhcj4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxj
aGFyPihjaGFyIGJ1ZmZlcikKICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgIHsKICAgIH0K
CiAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiAxOyB9CgogICAgYm9vbCBpczhCaXQoKSB7
IHJldHVybiB0cnVlOyB9CgogICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKICAg
IHsKICAgICAgICAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsKICAgIH0KCiAgICB2b2lkIHdyaXRl
VG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7ICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOyB9Cgpwcml2
YXRlOgogICAgdW5zaWduZWQgY2hhciBtX2J1ZmZlcjsKfTsKCnRlbXBsYXRlPD4KY2xhc3MgU3Ry
aW5nVHlwZUFkYXB0ZXI8TENoYXI+IHsKcHVibGljOgogICAgU3RyaW5nVHlwZUFkYXB0ZXI8TENo
YXI+KExDaGFyIGJ1ZmZlcikKICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgIHsKICAgIH0K
CiAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiAxOyB9CgogICAgYm9vbCBpczhCaXQoKSB7
IHJldHVybiB0cnVlOyB9CgogICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKICAg
IHsKICAgICAgICAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsKICAgIH0KCiAgICB2b2lkIHdyaXRl
VG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7ICpkZXN0aW5hdGlvbiA9IG1fYnVmZmVyOyB9Cgpwcml2
YXRlOgogICAgTENoYXIgbV9idWZmZXI7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPFVDaGFyPiB7CnB1YmxpYzoKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFVDaGFyPihVQ2hh
ciBidWZmZXIpCiAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICB7CiAgICB9CgogICAgdW5z
aWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gMTsgfQoKICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4g
bV9idWZmZXIgPD0gMHhmZjsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24p
CiAgICB7CiAgICAgICAgKCh2b2lkKTApOwogICAgICAgICpkZXN0aW5hdGlvbiA9IHN0YXRpY19j
YXN0PExDaGFyPihtX2J1ZmZlcik7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0
aW5hdGlvbikgeyAqZGVzdGluYXRpb24gPSBtX2J1ZmZlcjsgfQoKcHJpdmF0ZToKICAgIFVDaGFy
IG1fYnVmZmVyOwp9OwoKdGVtcGxhdGU8PgpjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4g
ewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxjaGFyKj4oY2hhciogYnVmZmVyKQogICAg
ICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICAgICwgbV9sZW5ndGgoc3RybGVuKGJ1ZmZlcikp
CiAgICB7CiAgICB9CgogICAgdW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0K
CiAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIHRydWU7IH0KCiAgICB2b2lkIHdyaXRlVG8oTENo
YXIqIGRlc3RpbmF0aW9uKQogICAgewogICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2xlbmd0aDsgKytpKQogICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PExD
aGFyPihtX2J1ZmZlcltpXSk7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFyKiBkZXN0aW5h
dGlvbikKICAgIHsKICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9sZW5ndGg7ICsr
aSkgewogICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBtX2J1ZmZlcltpXTsKICAgICAgICAg
ICAgZGVzdGluYXRpb25baV0gPSBjOwogICAgICAgIH0KICAgIH0KCnByaXZhdGU6CiAgICBjb25z
dCBjaGFyKiBtX2J1ZmZlcjsKICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwp9OwoKdGVtcGxhdGU8Pgpj
bGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxMQ2hhcio+IHsKcHVibGljOgogICAgU3RyaW5nVHlwZUFk
YXB0ZXI8TENoYXIqPihMQ2hhciogYnVmZmVyKQogICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAs
IG1fbGVuZ3RoKHN0cmxlbihyZWludGVycHJldF9jYXN0PGNoYXIqPihidWZmZXIpKSkKICAgIHsK
ICAgIH0KCiAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQoKICAgIGJv
b2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVz
dGluYXRpb24pCiAgICB7CiAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgbV9s
ZW5ndGggKiBzaXplb2YoTENoYXIpKTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRl
c3RpbmF0aW9uKQogICAgewogICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xlbmd0
aDsgKytpKQogICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IG1fYnVmZmVyW2ldOwogICAgfQoK
cHJpdmF0ZToKICAgIGNvbnN0IExDaGFyKiBtX2J1ZmZlcjsKICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
Owp9OwoKdGVtcGxhdGU8PgpjbGFzcyBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBVQ2hhcio+IHsK
cHVibGljOgogICAgU3RyaW5nVHlwZUFkYXB0ZXI8Y29uc3QgVUNoYXIqPihjb25zdCBVQ2hhciog
YnVmZmVyKQogICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgewogICAgICAgIHNpemVfdCBs
ZW4gPSAwOwogICAgICAgIHdoaWxlIChtX2J1ZmZlcltsZW5dICE9IFVDaGFyKDApKQogICAgICAg
ICAgICBsZW4rKzsKCiAgICAgICAgaWYgKGxlbiA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkKICAgICAgICAgICAgZG8geyBXVEZSZXBvcnRCYWNrdHJhY2UoKTsgV1RGSW52
b2tlQ3Jhc2hIb29rKCk7ICooaW50ICopKHVpbnRwdHJfdCkweGJiYWRiZWVmID0gMDsgKCh2b2lk
KCopKCkpMCkoKTsgfSB3aGlsZSAoZmFsc2UpOwoKICAgICAgICBtX2xlbmd0aCA9IGxlbjsKICAg
IH0KCiAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQoKICAgIGJvb2wg
aXM4Qml0KCkgeyByZXR1cm4gZmFsc2U7IH0KCiAgICB2b2lkIHdyaXRlVG8oTENoYXIqKQogICAg
ewogICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFdURkludm9rZUNyYXNoSG9vaygp
OyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7ICgodm9pZCgqKSgpKTApKCk7IH0g
d2hpbGUgKGZhbHNlKTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9u
KQogICAgewogICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9idWZmZXIsIG1fbGVuZ3RoICog
c2l6ZW9mKFVDaGFyKSk7CiAgICB9Cgpwcml2YXRlOgogICAgY29uc3QgVUNoYXIqIG1fYnVmZmVy
OwogICAgdW5zaWduZWQgbV9sZW5ndGg7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVB
ZGFwdGVyPGNvbnN0IGNoYXIqPiB7CnB1YmxpYzoKICAgIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0
IGNoYXIqPihjb25zdCBjaGFyKiBidWZmZXIpCiAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAg
ICAgICAgLCBtX2xlbmd0aChzdHJsZW4oYnVmZmVyKSkKICAgIHsKICAgIH0KCiAgICB1bnNpZ25l
ZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQoKICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1
cm4gdHJ1ZTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pCiAgICB7CiAg
ICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBtX2J1ZmZlciwgc3RhdGljX2Nhc3Q8c2l6ZV90Piht
X2xlbmd0aCkgKiBzaXplb2YoTENoYXIpKTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIq
IGRlc3RpbmF0aW9uKQogICAgewogICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2xl
bmd0aDsgKytpKSB7CiAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IG1fYnVmZmVyW2ldOwog
ICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGM7CiAgICAgICAgfQogICAgfQoKcHJpdmF0ZToK
ICAgIGNvbnN0IGNoYXIqIG1fYnVmZmVyOwogICAgdW5zaWduZWQgbV9sZW5ndGg7Cn07Cgp0ZW1w
bGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPGNvbnN0IExDaGFyKj4gewpwdWJsaWM6CiAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxjb25zdCBMQ2hhcio+KGNvbnN0IExDaGFyKiBidWZmZXIpCiAg
ICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICAgICAgLCBtX2xlbmd0aChzdHJsZW4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyKSkpCiAgICB7CiAgICB9CgogICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KCiAgICBib29sIGlzOEJpdCgpIHsgcmV0
dXJuIHRydWU7IH0KCiAgICB2b2lkIHdyaXRlVG8oTENoYXIqIGRlc3RpbmF0aW9uKQogICAgewog
ICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwgbV9idWZmZXIsIHN0YXRpY19jYXN0PHNpemVfdD4o
bV9sZW5ndGgpICogc2l6ZW9mKExDaGFyKSk7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKFVDaGFy
KiBkZXN0aW5hdGlvbikKICAgIHsKICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9s
ZW5ndGg7ICsraSkKICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBtX2J1ZmZlcltpXTsKICAg
IH0KCnByaXZhdGU6CiAgICBjb25zdCBMQ2hhciogbV9idWZmZXI7CiAgICB1bnNpZ25lZCBtX2xl
bmd0aDsKfTsKCnRlbXBsYXRlPD4KY2xhc3MgU3RyaW5nVHlwZUFkYXB0ZXI8VmVjdG9yPGNoYXI+
ID4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxWZWN0b3I8Y2hhcj4gPihjb25zdCBW
ZWN0b3I8Y2hhcj4mIGJ1ZmZlcikKICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKICAgIHsKICAg
IH0KCiAgICBzaXplX3QgbGVuZ3RoKCkgeyByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOyB9CgogICAg
Ym9vbCBpczhCaXQoKSB7IHJldHVybiB0cnVlOyB9CgogICAgdm9pZCB3cml0ZVRvKExDaGFyKiBk
ZXN0aW5hdGlvbikKICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYnVmZmVy
LnNpemUoKTsgKytpKQogICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KG1fYnVmZmVyW2ldKTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIq
IGRlc3RpbmF0aW9uKQogICAgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZm
ZXIuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4obV9idWZmZXJbaV0pOwogICAgfQoKcHJpdmF0ZToKICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgbV9idWZmZXI7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVBZGFw
dGVyPFZlY3RvcjxMQ2hhcj4gPiB7CnB1YmxpYzoKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFZlY3Rv
cjxMQ2hhcj4gPihjb25zdCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiAgICAgICAgOiBtX2J1ZmZl
cihidWZmZXIpCiAgICB7CiAgICB9CgogICAgc2l6ZV90IGxlbmd0aCgpIHsgcmV0dXJuIG1fYnVm
ZmVyLnNpemUoKTsgfQoKICAgIGJvb2wgaXM4Qml0KCkgeyByZXR1cm4gdHJ1ZTsgfQoKICAgIHZv
aWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pCiAgICB7CiAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2J1ZmZlci5zaXplKCk7ICsraSkKICAgICAgICAgICAgZGVzdGluYXRpb25b
aV0gPSBtX2J1ZmZlcltpXTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0
aW9uKQogICAgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9idWZmZXIuc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gbV9idWZmZXJbaV07CiAgICB9Cgpw
cml2YXRlOgogICAgY29uc3QgVmVjdG9yPExDaGFyPiYgbV9idWZmZXI7Cn07Cgp0ZW1wbGF0ZTw+
CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZz4gewpwdWJsaWM6CiAgICBTdHJpbmdUeXBl
QWRhcHRlcjxTdHJpbmc+KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgICAgIDogbV9idWZmZXIo
c3RyaW5nKQogICAgewogICAgfQoKICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1fYnVm
ZmVyLmxlbmd0aCgpOyB9CgogICAgYm9vbCBpczhCaXQoKSB7IHJldHVybiBtX2J1ZmZlci5pc051
bGwoKSB8fCBtX2J1ZmZlci5pczhCaXQoKTsgfQoKICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVz
dGluYXRpb24pCiAgICB7CiAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9idWZmZXIubGVuZ3Ro
KCk7CgogICAgICAgICgodm9pZCkwKTsKICAgICAgICBjb25zdCBMQ2hhciogZGF0YSA9IG1fYnVm
ZmVyLmNoYXJhY3RlcnM4KCk7CiAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQogICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGRhdGFbaV07CgogICAgICAgICgo
dm9pZCkwKTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQogICAg
ewogICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fYnVmZmVyLmxlbmd0aCgpOwoKICAgICAgICBp
ZiAoaXM4Qml0KCkpIHsKICAgICAgICAgICAgY29uc3QgTENoYXIqIGRhdGEgPSBtX2J1ZmZlci5j
aGFyYWN0ZXJzOCgpOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGRhdGFbaV07CiAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBtX2J1ZmZlci5jaGFyYWN0
ZXJzMTYoKTsKICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQogICAgICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBkYXRhW2ldOwogICAgICAgIH0KCiAg
ICAgICAgKCh2b2lkKTApOwogICAgfQoKcHJpdmF0ZToKICAgIGNvbnN0IFN0cmluZyYgbV9idWZm
ZXI7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIFN0cmluZ1R5cGVBZGFwdGVyPEF0b21pY1N0cmluZz4g
ewpwdWJsaWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxBdG9taWNTdHJpbmc+KGNvbnN0IEF0b21p
Y1N0cmluZyYgc3RyaW5nKQogICAgICAgIDogbV9hZGFwdGVyKHN0cmluZy5zdHJpbmcoKSkKICAg
IHsKICAgIH0KCiAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2FkYXB0ZXIubGVuZ3Ro
KCk7IH0KCiAgICBib29sIGlzOEJpdCgpIHsgcmV0dXJuIG1fYWRhcHRlci5pczhCaXQoKTsgfQoK
ICAgIHZvaWQgd3JpdGVUbyhMQ2hhciogZGVzdGluYXRpb24pIHsgbV9hZGFwdGVyLndyaXRlVG8o
ZGVzdGluYXRpb24pOyB9CiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKSB7IG1f
YWRhcHRlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQoKcHJpdmF0ZToKICAgIFN0cmluZ1R5cGVB
ZGFwdGVyPFN0cmluZz4gbV9hZGFwdGVyOwp9OwoKaW5saW5lIHZvaWQgc3VtV2l0aE92ZXJmbG93
KHVuc2lnbmVkJiB0b3RhbCwgdW5zaWduZWQgYWRkZW5kLCBib29sJiBvdmVyZmxvdykKewogICAg
dW5zaWduZWQgb2xkVG90YWwgPSB0b3RhbDsKICAgIHRvdGFsID0gb2xkVG90YWwgKyBhZGRlbmQ7
CiAgICBpZiAodG90YWwgPCBvbGRUb3RhbCkKICAgICAgICBvdmVyZmxvdyA9IHRydWU7Cn0KCnRl
bXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMj4KUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmlu
Z1R5cGUyIHN0cmluZzIpCnsKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFw
dGVyMShzdHJpbmcxKTsKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVy
MihzdHJpbmcyKTsKCiAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7CiAgICB1bnNpZ25lZCBsZW5n
dGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBpZiAob3ZlcmZsb3cpCiAgICAgICAgcmV0dXJu
IDA7CgogICAgaWYgKGFkYXB0ZXIxLmlzOEJpdCgpICYmIGFkYXB0ZXIyLmlzOEJpdCgpKSB7CiAg
ICAgICAgTENoYXIqIGJ1ZmZlcjsKICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1w
bCA9IFN0cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwog
ICAgICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIExD
aGFyKiByZXN1bHQgPSBidWZmZXI7CiAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwog
ICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVyMi53cml0
ZVRvKHJlc3VsdCk7CgogICAgICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKICAgIH0K
CiAgICBVQ2hhciogYnVmZmVyOwogICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBT
dHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgIGlm
ICghcmVzdWx0SW1wbCkKICAgICAgICByZXR1cm4gMDsKCiAgICBVQ2hhciogcmVzdWx0ID0gYnVm
ZmVyOwogICAgYWRhcHRlcjEud3JpdGVUbyhyZXN1bHQpOwogICAgcmVzdWx0ICs9IGFkYXB0ZXIx
Lmxlbmd0aCgpOwogICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwoKICAgIHJldHVybiByZXN1
bHRJbXBsLnJlbGVhc2UoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiB0cnlNYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmlu
ZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMpCnsKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5
cGUxPiBhZGFwdGVyMShzdHJpbmcxKTsKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUy
PiBhZGFwdGVyMihzdHJpbmcyKTsKICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUzPiBh
ZGFwdGVyMyhzdHJpbmczKTsKCiAgICBib29sIG92ZXJmbG93ID0gZmFsc2U7CiAgICB1bnNpZ25l
ZCBsZW5ndGggPSBhZGFwdGVyMS5sZW5ndGgoKTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgs
IGFkYXB0ZXIyLmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyMy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgaWYgKG92ZXJmbG93KQogICAgICAg
IHJldHVybiAwOwoKICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQo
KSAmJiBhZGFwdGVyMy5pczhCaXQoKSkgewogICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAg
ICAgICAgIHJldHVybiAwOwoKICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwogICAgICAg
IGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVu
Z3RoKCk7CiAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyMi5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7Cgog
ICAgICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKICAgIH0KCiAgICBVQ2hhciogYnVm
ZmVyID0gMDsKICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICBpZiAoIXJlc3VsdElt
cGwpCiAgICAgICAgcmV0dXJuIDA7CgogICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKICAgIGFk
YXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsK
ICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5n
dGgoKTsKICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKCiAgICByZXR1cm4gcmVzdWx0SW1w
bC5yZWxlYXNlKCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0PgpQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwg
U3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3Ry
aW5nNCkKewogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmlu
ZzEpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIp
OwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwog
ICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+IGFkYXB0ZXI0KHN0cmluZzQpOwoKICAg
IGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFkYXB0ZXIxLmxl
bmd0aCgpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjIubGVuZ3RoKCksIG92
ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXIzLmxlbmd0aCgpLCBv
dmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNC5sZW5ndGgoKSwg
b3ZlcmZsb3cpOwogICAgaWYgKG92ZXJmbG93KQogICAgICAgIHJldHVybiAwOwoKICAgIGlmIChh
ZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQo
KSAmJiBhZGFwdGVyNC5pczhCaXQoKSkgewogICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAg
UmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAg
ICAgICAgIHJldHVybiAwOwoKICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwogICAgICAg
IGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVu
Z3RoKCk7CiAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJlc3VsdCAr
PSBhZGFwdGVyMi5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7CiAg
ICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXI0LndyaXRl
VG8ocmVzdWx0KTsKCiAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwogICAgfQoK
ICAgIFVDaGFyKiBidWZmZXI7CiAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0
cmluZ0ltcGw6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwogICAgaWYg
KCFyZXN1bHRJbXBsKQogICAgICAgIHJldHVybiAwOwoKICAgIFVDaGFyKiByZXN1bHQgPSBidWZm
ZXI7CiAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQgKz0gYWRhcHRlcjEu
bGVuZ3RoKCk7CiAgICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQgKz0gYWRh
cHRlcjIubGVuZ3RoKCk7CiAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQg
Kz0gYWRhcHRlcjMubGVuZ3RoKCk7CiAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7CgogICAg
cmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdU
eXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0eXBlbmFt
ZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTU+ClBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcy
LCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBz
dHJpbmc1KQp7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3Ry
aW5nMSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5n
Mik7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7
CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7CiAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5nNSk7CgogICAg
Ym9vbCBvdmVyZmxvdyA9IGZhbHNlOwogICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVu
Z3RoKCk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92
ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwg
b3ZlcmZsb3cpOwogICAgaWYgKG92ZXJmbG93KQogICAgICAgIHJldHVybiAwOwoKICAgIGlmIChh
ZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBhZGFwdGVyMy5pczhCaXQo
KSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQoKSkgewogICAgICAgIExD
aGFyKiBidWZmZXI7CiAgICAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJp
bmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICBp
ZiAoIXJlc3VsdEltcGwpCiAgICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBMQ2hhciogcmVz
dWx0ID0gYnVmZmVyOwogICAgICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKICAgICAgICBy
ZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1
bHQpOwogICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVy
My53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwog
ICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjQubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwoKICAgICAgICBy
ZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CiAgICB9CgogICAgVUNoYXIqIGJ1ZmZlcjsKICAg
IFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAg
cmV0dXJuIDA7CgogICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKICAgIGFkYXB0ZXIy
LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKICAgIGFk
YXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsK
ICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5n
dGgoKTsKICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKCiAgICByZXR1cm4gcmVzdWx0SW1w
bC5yZWxlYXNlKCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBT
dHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0
eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTY+ClBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBz
dHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdU
eXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2KQp7CiAgICBTdHJpbmdUeXBlQWRhcHRl
cjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMz4gYWRhcHRlcjMoc3RyaW5nMyk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlND4gYWRhcHRlcjQoc3RyaW5nNCk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
NT4gYWRhcHRlcjUoc3RyaW5nNSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4g
YWRhcHRlcjYoc3RyaW5nNik7CgogICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwogICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3RoKCk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3Ro
LCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0
aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5n
dGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVu
Z3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxl
bmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92ZXJmbG93KTsKICAgIGlmIChvdmVyZmxvdykKICAg
ICAgICByZXR1cm4gMDsKCiAgICBpZiAoYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4
Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRl
cjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYuaXM4Qml0KCkpIHsKICAgICAgICBMQ2hhciogYnVmZmVy
OwogICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICAgICAgaWYgKCFyZXN1bHRJ
bXBsKQogICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZl
cjsKICAgICAgICBhZGFwdGVyMS53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0ICs9IGFk
YXB0ZXIxLmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKICAgICAg
ICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhy
ZXN1bHQpOwogICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKICAgICAgICBhZGFw
dGVyNC53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgp
OwogICAgICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRh
cHRlcjUubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwoKICAgICAg
ICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CiAgICB9CgogICAgVUNoYXIqIGJ1ZmZlcjsK
ICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAg
ICAgcmV0dXJuIDA7CgogICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKICAgIGFkYXB0ZXIxLndy
aXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKICAgIGFkYXB0
ZXIyLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKICAg
IGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5ndGgo
KTsKICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyNC5s
ZW5ndGgoKTsKICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFw
dGVyNS5sZW5ndGgoKTsKICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKCiAgICByZXR1cm4g
cmVzdWx0SW1wbC5yZWxlYXNlKCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVu
YW1lIFN0cmluZ1R5cGU3PgpQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRyeU1ha2VTdHJpbmcoU3Ry
aW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5n
MywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlwZTYg
c3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNykKewogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3Ry
aW5nVHlwZTE+IGFkYXB0ZXIxKHN0cmluZzEpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5n
VHlwZTI+IGFkYXB0ZXIyKHN0cmluZzIpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTM+IGFkYXB0ZXIzKHN0cmluZzMpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTQ+
IGFkYXB0ZXI0KHN0cmluZzQpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTU+IGFk
YXB0ZXI1KHN0cmluZzUpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTY+IGFkYXB0
ZXI2KHN0cmluZzYpOwogICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTc+IGFkYXB0ZXI3
KHN0cmluZzcpOwoKICAgIGJvb2wgb3ZlcmZsb3cgPSBmYWxzZTsKICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGFkYXB0ZXIxLmxlbmd0aCgpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjIubGVuZ3RoKCksIG92ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXIzLmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyNC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRh
cHRlcjUubGVuZ3RoKCksIG92ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFk
YXB0ZXI2Lmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBh
ZGFwdGVyNy5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgaWYgKG92ZXJmbG93KQogICAgICAgIHJl
dHVybiAwOwoKICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAm
JiBhZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhC
aXQoKSAmJiBhZGFwdGVyNi5pczhCaXQoKSkgewogICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAg
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAg
ICAgICAgICAgIHJldHVybiAwOwoKICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwogICAg
ICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEu
bGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJlc3Vs
dCArPSBhZGFwdGVyMi5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7
CiAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIzLmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXI0Lndy
aXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7CiAgICAg
ICAgYWRhcHRlcjUud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNS5s
ZW5ndGgoKTsKICAgICAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0
ICs9IGFkYXB0ZXI2Lmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsK
CiAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwogICAgfQoKICAgIFVDaGFyKiBi
dWZmZXI7CiAgICBSZWZQdHI8U3RyaW5nSW1wbD4gcmVzdWx0SW1wbCA9IFN0cmluZ0ltcGw6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwogICAgaWYgKCFyZXN1bHRJbXBs
KQogICAgICAgIHJldHVybiAwOwoKICAgIFVDaGFyKiByZXN1bHQgPSBidWZmZXI7CiAgICBhZGFw
dGVyMS53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7CiAg
ICBhZGFwdGVyMi53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQgKz0gYWRhcHRlcjIubGVuZ3Ro
KCk7CiAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQgKz0gYWRhcHRlcjMu
bGVuZ3RoKCk7CiAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQgKz0gYWRh
cHRlcjQubGVuZ3RoKCk7CiAgICBhZGFwdGVyNS53cml0ZVRvKHJlc3VsdCk7CiAgICByZXN1bHQg
Kz0gYWRhcHRlcjUubGVuZ3RoKCk7CiAgICBhZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7CiAgICBy
ZXN1bHQgKz0gYWRhcHRlcjYubGVuZ3RoKCk7CiAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7
CgogICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFzZSgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBT
dHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTIsIHR5cGVuYW1lIFN0cmluZ1R5cGUzLCB0
eXBlbmFtZSBTdHJpbmdUeXBlNCwgdHlwZW5hbWUgU3RyaW5nVHlwZTUsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU2LCB0eXBlbmFtZSBTdHJpbmdUeXBlNywgdHlwZW5hbWUgU3RyaW5nVHlwZTg+ClBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhTdHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJp
bmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJpbmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0
LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBlNiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBz
dHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4KQp7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMT4gYWRhcHRlcjEoc3RyaW5nMSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdU
eXBlMj4gYWRhcHRlcjIoc3RyaW5nMik7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBl
Mz4gYWRhcHRlcjMoc3RyaW5nMyk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4g
YWRhcHRlcjQoc3RyaW5nNCk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRh
cHRlcjUoc3RyaW5nNSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRl
cjYoc3RyaW5nNik7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjco
c3RyaW5nNyk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRhcHRlcjgoc3Ry
aW5nOCk7CgogICAgYm9vbCBvdmVyZmxvdyA9IGZhbHNlOwogICAgdW5zaWduZWQgbGVuZ3RoID0g
YWRhcHRlcjEubGVuZ3RoKCk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5s
ZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMu
bGVuZ3RoKCksIG92ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0
Lmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVy
NS5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRl
cjYubGVuZ3RoKCksIG92ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0
ZXI3Lmxlbmd0aCgpLCBvdmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFw
dGVyOC5sZW5ndGgoKSwgb3ZlcmZsb3cpOwogICAgaWYgKG92ZXJmbG93KQogICAgICAgIHJldHVy
biAwOwoKICAgIGlmIChhZGFwdGVyMS5pczhCaXQoKSAmJiBhZGFwdGVyMi5pczhCaXQoKSAmJiBh
ZGFwdGVyMy5pczhCaXQoKSAmJiBhZGFwdGVyNC5pczhCaXQoKSAmJiBhZGFwdGVyNS5pczhCaXQo
KSAmJiBhZGFwdGVyNi5pczhCaXQoKSAmJiBhZGFwdGVyNy5pczhCaXQoKSAmJiBhZGFwdGVyOC5p
czhCaXQoKSkgewogICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdEltcGwgPSBTdHJpbmdJbXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0
aCwgYnVmZmVyKTsKICAgICAgICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAgICAgIHJldHVybiAw
OwoKICAgICAgICBMQ2hhciogcmVzdWx0ID0gYnVmZmVyOwogICAgICAgIGFkYXB0ZXIxLndyaXRl
VG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjEubGVuZ3RoKCk7CiAgICAgICAg
YWRhcHRlcjIud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5n
dGgoKTsKICAgICAgICBhZGFwdGVyMy53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0ICs9
IGFkYXB0ZXIzLmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKICAg
ICAgICByZXN1bHQgKz0gYWRhcHRlcjQubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjUud3JpdGVU
byhyZXN1bHQpOwogICAgICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKICAgICAgICBh
ZGFwdGVyNi53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI2Lmxlbmd0
aCgpOwogICAgICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0g
YWRhcHRlcjcubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjgud3JpdGVUbyhyZXN1bHQpOwoKICAg
ICAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CiAgICB9CgogICAgVUNoYXIqIGJ1ZmZl
cjsKICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAgICBpZiAoIXJlc3VsdEltcGwpCiAg
ICAgICAgcmV0dXJuIDA7CgogICAgVUNoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKICAgIGFkYXB0ZXIx
LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMS5sZW5ndGgoKTsKICAgIGFk
YXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMi5sZW5ndGgoKTsK
ICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyMy5sZW5n
dGgoKTsKICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVy
NC5sZW5ndGgoKTsKICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBh
ZGFwdGVyNS5sZW5ndGgoKTsKICAgIGFkYXB0ZXI2LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3Vs
dCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKICAgIGFkYXB0ZXI3LndyaXRlVG8ocmVzdWx0KTsKICAg
IHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0
KTsKCiAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1l
IFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMs
IHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3Ry
aW5nVHlwZTYsIHR5cGVuYW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOCwgdHlw
ZW5hbWUgU3RyaW5nVHlwZTk+ClBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdHJ5TWFrZVN0cmluZyhT
dHJpbmdUeXBlMSBzdHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyLCBTdHJpbmdUeXBlMyBzdHJp
bmczLCBTdHJpbmdUeXBlNCBzdHJpbmc0LCBTdHJpbmdUeXBlNSBzdHJpbmc1LCBTdHJpbmdUeXBl
NiBzdHJpbmc2LCBTdHJpbmdUeXBlNyBzdHJpbmc3LCBTdHJpbmdUeXBlOCBzdHJpbmc4LCBTdHJp
bmdUeXBlOSBzdHJpbmc5KQp7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRh
cHRlcjEoc3RyaW5nMSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRl
cjIoc3RyaW5nMik7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMz4gYWRhcHRlcjMo
c3RyaW5nMyk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlND4gYWRhcHRlcjQoc3Ry
aW5nNCk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNT4gYWRhcHRlcjUoc3RyaW5n
NSk7CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNj4gYWRhcHRlcjYoc3RyaW5nNik7
CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlNz4gYWRhcHRlcjcoc3RyaW5nNyk7CiAg
ICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOD4gYWRhcHRlcjgoc3RyaW5nOCk7CiAgICBT
dHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlOT4gYWRhcHRlcjkoc3RyaW5nOSk7CgogICAgYm9v
bCBvdmVyZmxvdyA9IGZhbHNlOwogICAgdW5zaWduZWQgbGVuZ3RoID0gYWRhcHRlcjEubGVuZ3Ro
KCk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyMi5sZW5ndGgoKSwgb3ZlcmZs
b3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjMubGVuZ3RoKCksIG92ZXJm
bG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI0Lmxlbmd0aCgpLCBvdmVy
Zmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyNS5sZW5ndGgoKSwgb3Zl
cmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjYubGVuZ3RoKCksIG92
ZXJmbG93KTsKICAgIHN1bVdpdGhPdmVyZmxvdyhsZW5ndGgsIGFkYXB0ZXI3Lmxlbmd0aCgpLCBv
dmVyZmxvdyk7CiAgICBzdW1XaXRoT3ZlcmZsb3cobGVuZ3RoLCBhZGFwdGVyOC5sZW5ndGgoKSwg
b3ZlcmZsb3cpOwogICAgc3VtV2l0aE92ZXJmbG93KGxlbmd0aCwgYWRhcHRlcjkubGVuZ3RoKCks
IG92ZXJmbG93KTsKICAgIGlmIChvdmVyZmxvdykKICAgICAgICByZXR1cm4gMDsKCiAgICBpZiAo
YWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4Qml0KCkgJiYgYWRhcHRlcjMuaXM4Qml0
KCkgJiYgYWRhcHRlcjQuaXM4Qml0KCkgJiYgYWRhcHRlcjUuaXM4Qml0KCkgJiYgYWRhcHRlcjYu
aXM4Qml0KCkgJiYgYWRhcHRlcjcuaXM4Qml0KCkgJiYgYWRhcHRlcjguaXM4Qml0KCkgJiYgYWRh
cHRlcjkuaXM4Qml0KCkpIHsKICAgICAgICBMQ2hhciogYnVmZmVyOwogICAgICAgIFJlZlB0cjxT
dHJpbmdJbXBsPiByZXN1bHRJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChsZW5ndGgsIGJ1ZmZlcik7CiAgICAgICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgICAgICBy
ZXR1cm4gMDsKCiAgICAgICAgTENoYXIqIHJlc3VsdCA9IGJ1ZmZlcjsKICAgICAgICBhZGFwdGVy
MS53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXIxLmxlbmd0aCgpOwog
ICAgICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRl
cjIubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjMud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJl
c3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVyNC53cml0ZVRvKHJlc3Vs
dCk7CiAgICAgICAgcmVzdWx0ICs9IGFkYXB0ZXI0Lmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXI1
LndyaXRlVG8ocmVzdWx0KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjUubGVuZ3RoKCk7CiAg
ICAgICAgYWRhcHRlcjYud3JpdGVUbyhyZXN1bHQpOwogICAgICAgIHJlc3VsdCArPSBhZGFwdGVy
Ni5sZW5ndGgoKTsKICAgICAgICBhZGFwdGVyNy53cml0ZVRvKHJlc3VsdCk7CiAgICAgICAgcmVz
dWx0ICs9IGFkYXB0ZXI3Lmxlbmd0aCgpOwogICAgICAgIGFkYXB0ZXI4LndyaXRlVG8ocmVzdWx0
KTsKICAgICAgICByZXN1bHQgKz0gYWRhcHRlcjgubGVuZ3RoKCk7CiAgICAgICAgYWRhcHRlcjku
d3JpdGVUbyhyZXN1bHQpOwoKICAgICAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNlKCk7CiAg
ICB9CgogICAgVUNoYXIqIGJ1ZmZlcjsKICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBs
ID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CiAg
ICBpZiAoIXJlc3VsdEltcGwpCiAgICAgICAgcmV0dXJuIDA7CgogICAgVUNoYXIqIHJlc3VsdCA9
IGJ1ZmZlcjsKICAgIGFkYXB0ZXIxLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFw
dGVyMS5sZW5ndGgoKTsKICAgIGFkYXB0ZXIyLndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCAr
PSBhZGFwdGVyMi5sZW5ndGgoKTsKICAgIGFkYXB0ZXIzLndyaXRlVG8ocmVzdWx0KTsKICAgIHJl
c3VsdCArPSBhZGFwdGVyMy5sZW5ndGgoKTsKICAgIGFkYXB0ZXI0LndyaXRlVG8ocmVzdWx0KTsK
ICAgIHJlc3VsdCArPSBhZGFwdGVyNC5sZW5ndGgoKTsKICAgIGFkYXB0ZXI1LndyaXRlVG8ocmVz
dWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyNS5sZW5ndGgoKTsKICAgIGFkYXB0ZXI2LndyaXRl
VG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyNi5sZW5ndGgoKTsKICAgIGFkYXB0ZXI3
LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyNy5sZW5ndGgoKTsKICAgIGFk
YXB0ZXI4LndyaXRlVG8ocmVzdWx0KTsKICAgIHJlc3VsdCArPSBhZGFwdGVyOC5sZW5ndGgoKTsK
ICAgIGFkYXB0ZXI5LndyaXRlVG8ocmVzdWx0KTsKCiAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxl
YXNlKCk7Cn0KCgoKdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTE+ClN0cmluZyBtYWtlU3Ry
aW5nKFN0cmluZ1R5cGUxIHN0cmluZzEpCnsKICAgIHJldHVybiBTdHJpbmcoc3RyaW5nMSk7Cn0K
CnRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBlMj4KU3Ry
aW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMikK
ewogICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmlu
ZzEsIHN0cmluZzIpOwogICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgIGRvIHsgV1RGUmVwb3J0
QmFja3RyYWNlKCk7IFdURkludm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhi
YmFkYmVlZiA9IDA7ICgodm9pZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgIHJldHVy
biByZXN1bHRJbXBsLnJlbGVhc2UoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEs
IHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMz4KU3RyaW5nIG1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMykKewogICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtl
U3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMpOwogICAgaWYgKCFyZXN1bHRJbXBsKQog
ICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFdURkludm9rZUNyYXNoSG9vaygpOyAq
KGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7ICgodm9pZCgqKSgpKTApKCk7IH0gd2hp
bGUgKGZhbHNlKTsKICAgIHJldHVybiByZXN1bHRJbXBsLnJlbGVhc2UoKTsKfQoKdGVtcGxhdGU8
dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJp
bmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQ+ClN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5
cGUxIHN0cmluZzEsIFN0cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0
cmluZ1R5cGU0IHN0cmluZzQpCnsKICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0g
dHJ5TWFrZVN0cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0KTsKICAgIGlm
ICghcmVzdWx0SW1wbCkKICAgICAgICBkbyB7IFdURlJlcG9ydEJhY2t0cmFjZSgpOyBXVEZJbnZv
a2VDcmFzaEhvb2soKTsgKihpbnQgKikodWludHB0cl90KTB4YmJhZGJlZWYgPSAwOyAoKHZvaWQo
KikoKSkwKSgpOyB9IHdoaWxlIChmYWxzZSk7CiAgICByZXR1cm4gcmVzdWx0SW1wbC5yZWxlYXNl
KCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0eXBlbmFtZSBTdHJpbmdUeXBl
MiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmluZ1R5cGU0LCB0eXBlbmFtZSBT
dHJpbmdUeXBlNT4KU3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5n
VHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwg
U3RyaW5nVHlwZTUgc3RyaW5nNSkKewogICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwg
PSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmlu
ZzUpOwogICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNl
KCk7IFdURkludm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9
IDA7ICgodm9pZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgIHJldHVybiByZXN1bHRJ
bXBsLnJlbGVhc2UoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVuYW1l
IFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlwZTQs
IHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNj4KU3RyaW5nIG1ha2VT
dHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlw
ZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3Ry
aW5nVHlwZTYgc3RyaW5nNikKewogICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0
cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUs
IHN0cmluZzYpOwogICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgIGRvIHsgV1RGUmVwb3J0QmFj
a3RyYWNlKCk7IFdURkludm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFk
YmVlZiA9IDA7ICgodm9pZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgIHJldHVybiBy
ZXN1bHRJbXBsLnJlbGVhc2UoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5
cGVuYW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5n
VHlwZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5h
bWUgU3RyaW5nVHlwZTc+ClN0cmluZyBtYWtlU3RyaW5nKFN0cmluZ1R5cGUxIHN0cmluZzEsIFN0
cmluZ1R5cGUyIHN0cmluZzIsIFN0cmluZ1R5cGUzIHN0cmluZzMsIFN0cmluZ1R5cGU0IHN0cmlu
ZzQsIFN0cmluZ1R5cGU1IHN0cmluZzUsIFN0cmluZ1R5cGU2IHN0cmluZzYsIFN0cmluZ1R5cGU3
IHN0cmluZzcpCnsKICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBsID0gdHJ5TWFrZVN0
cmluZyhzdHJpbmcxLCBzdHJpbmcyLCBzdHJpbmczLCBzdHJpbmc0LCBzdHJpbmc1LCBzdHJpbmc2
LCBzdHJpbmc3KTsKICAgIGlmICghcmVzdWx0SW1wbCkKICAgICAgICBkbyB7IFdURlJlcG9ydEJh
Y2t0cmFjZSgpOyBXVEZJbnZva2VDcmFzaEhvb2soKTsgKihpbnQgKikodWludHB0cl90KTB4YmJh
ZGJlZWYgPSAwOyAoKHZvaWQoKikoKSkwKSgpOyB9IHdoaWxlIChmYWxzZSk7CiAgICByZXR1cm4g
cmVzdWx0SW1wbC5yZWxlYXNlKCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFN0cmluZ1R5cGUxLCB0
eXBlbmFtZSBTdHJpbmdUeXBlMiwgdHlwZW5hbWUgU3RyaW5nVHlwZTMsIHR5cGVuYW1lIFN0cmlu
Z1R5cGU0LCB0eXBlbmFtZSBTdHJpbmdUeXBlNSwgdHlwZW5hbWUgU3RyaW5nVHlwZTYsIHR5cGVu
YW1lIFN0cmluZ1R5cGU3LCB0eXBlbmFtZSBTdHJpbmdUeXBlOD4KU3RyaW5nIG1ha2VTdHJpbmco
U3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5nMiwgU3RyaW5nVHlwZTMgc3Ry
aW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUgc3RyaW5nNSwgU3RyaW5nVHlw
ZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5nVHlwZTggc3RyaW5nOCkKewog
ICAgUmVmUHRyPFN0cmluZ0ltcGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEs
IHN0cmluZzIsIHN0cmluZzMsIHN0cmluZzQsIHN0cmluZzUsIHN0cmluZzYsIHN0cmluZzcsIHN0
cmluZzgpOwogICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3Ry
YWNlKCk7IFdURkludm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVl
ZiA9IDA7ICgodm9pZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgIHJldHVybiByZXN1
bHRJbXBsLnJlbGVhc2UoKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgU3RyaW5nVHlwZTEsIHR5cGVu
YW1lIFN0cmluZ1R5cGUyLCB0eXBlbmFtZSBTdHJpbmdUeXBlMywgdHlwZW5hbWUgU3RyaW5nVHlw
ZTQsIHR5cGVuYW1lIFN0cmluZ1R5cGU1LCB0eXBlbmFtZSBTdHJpbmdUeXBlNiwgdHlwZW5hbWUg
U3RyaW5nVHlwZTcsIHR5cGVuYW1lIFN0cmluZ1R5cGU4LCB0eXBlbmFtZSBTdHJpbmdUeXBlOT4K
U3RyaW5nIG1ha2VTdHJpbmcoU3RyaW5nVHlwZTEgc3RyaW5nMSwgU3RyaW5nVHlwZTIgc3RyaW5n
MiwgU3RyaW5nVHlwZTMgc3RyaW5nMywgU3RyaW5nVHlwZTQgc3RyaW5nNCwgU3RyaW5nVHlwZTUg
c3RyaW5nNSwgU3RyaW5nVHlwZTYgc3RyaW5nNiwgU3RyaW5nVHlwZTcgc3RyaW5nNywgU3RyaW5n
VHlwZTggc3RyaW5nOCwgU3RyaW5nVHlwZTkgc3RyaW5nOSkKewogICAgUmVmUHRyPFN0cmluZ0lt
cGw+IHJlc3VsdEltcGwgPSB0cnlNYWtlU3RyaW5nKHN0cmluZzEsIHN0cmluZzIsIHN0cmluZzMs
IHN0cmluZzQsIHN0cmluZzUsIHN0cmluZzYsIHN0cmluZzcsIHN0cmluZzgsIHN0cmluZzkpOwog
ICAgaWYgKCFyZXN1bHRJbXBsKQogICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFdU
Rkludm9rZUNyYXNoSG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7ICgo
dm9pZCgqKSgpKTApKCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgIHJldHVybiByZXN1bHRJbXBsLnJl
bGVhc2UoKTsKfQoKfQoKdXNpbmcgV1RGOjptYWtlU3RyaW5nOwoKIyAxICIuL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaCIgMQojIDI1ICIuL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdPcGVyYXRvcnMuaCIKbmFtZXNwYWNlIFdURiB7
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+CmNs
YXNzIFN0cmluZ0FwcGVuZCB7CnB1YmxpYzoKICAgIFN0cmluZ0FwcGVuZChTdHJpbmdUeXBlMSBz
dHJpbmcxLCBTdHJpbmdUeXBlMiBzdHJpbmcyKQogICAgICAgIDogbV9zdHJpbmcxKHN0cmluZzEp
CiAgICAgICAgLCBtX3N0cmluZzIoc3RyaW5nMikKICAgIHsKICAgIH0KCiAgICBvcGVyYXRvciBT
dHJpbmcoKSBjb25zdAogICAgewogICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiByZXN1bHRJbXBs
ID0gdHJ5TWFrZVN0cmluZyhtX3N0cmluZzEsIG1fc3RyaW5nMik7CiAgICAgICAgaWYgKCFyZXN1
bHRJbXBsKQogICAgICAgICAgICBkbyB7IFdURlJlcG9ydEJhY2t0cmFjZSgpOyBXVEZJbnZva2VD
cmFzaEhvb2soKTsgKihpbnQgKikodWludHB0cl90KTB4YmJhZGJlZWYgPSAwOyAoKHZvaWQoKiko
KSkwKSgpOyB9IHdoaWxlIChmYWxzZSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdEltcGwucmVsZWFz
ZSgpOwogICAgfQoKICAgIG9wZXJhdG9yIEF0b21pY1N0cmluZygpIGNvbnN0CiAgICB7CiAgICAg
ICAgcmV0dXJuIG9wZXJhdG9yIFN0cmluZygpOwogICAgfQoKICAgIGJvb2wgaXM4Qml0KCkKICAg
IHsKICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMT4gYWRhcHRlcjEobV9zdHJp
bmcxKTsKICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdUeXBlMj4gYWRhcHRlcjIobV9z
dHJpbmcyKTsKICAgICAgICByZXR1cm4gYWRhcHRlcjEuaXM4Qml0KCkgJiYgYWRhcHRlcjIuaXM4
Qml0KCk7CiAgICB9CgogICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0aW5hdGlvbikKICAgIHsK
ICAgICAgICAoKHZvaWQpMCk7CiAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlwZTE+
IGFkYXB0ZXIxKG1fc3RyaW5nMSk7CiAgICAgICAgU3RyaW5nVHlwZUFkYXB0ZXI8U3RyaW5nVHlw
ZTI+IGFkYXB0ZXIyKG1fc3RyaW5nMik7CiAgICAgICAgYWRhcHRlcjEud3JpdGVUbyhkZXN0aW5h
dGlvbik7CiAgICAgICAgYWRhcHRlcjIud3JpdGVUbyhkZXN0aW5hdGlvbiArIGFkYXB0ZXIxLmxl
bmd0aCgpKTsKICAgIH0KCiAgICB2b2lkIHdyaXRlVG8oVUNoYXIqIGRlc3RpbmF0aW9uKQogICAg
ewogICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUxPiBhZGFwdGVyMShtX3N0cmlu
ZzEpOwogICAgICAgIFN0cmluZ1R5cGVBZGFwdGVyPFN0cmluZ1R5cGUyPiBhZGFwdGVyMihtX3N0
cmluZzIpOwogICAgICAgIGFkYXB0ZXIxLndyaXRlVG8oZGVzdGluYXRpb24pOwogICAgICAgIGFk
YXB0ZXIyLndyaXRlVG8oZGVzdGluYXRpb24gKyBhZGFwdGVyMS5sZW5ndGgoKSk7CiAgICB9Cgog
ICAgdW5zaWduZWQgbGVuZ3RoKCkKICAgIHsKICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJp
bmdUeXBlMT4gYWRhcHRlcjEobV9zdHJpbmcxKTsKICAgICAgICBTdHJpbmdUeXBlQWRhcHRlcjxT
dHJpbmdUeXBlMj4gYWRhcHRlcjIobV9zdHJpbmcyKTsKICAgICAgICByZXR1cm4gYWRhcHRlcjEu
bGVuZ3RoKCkgKyBhZGFwdGVyMi5sZW5ndGgoKTsKICAgIH0KCnByaXZhdGU6CiAgICBTdHJpbmdU
eXBlMSBtX3N0cmluZzE7CiAgICBTdHJpbmdUeXBlMiBtX3N0cmluZzI7Cn07Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBTdHJpbmdUeXBlMSwgdHlwZW5hbWUgU3RyaW5nVHlwZTI+CmNsYXNzIFN0cmluZ1R5
cGVBZGFwdGVyPFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+ID4gewpwdWJs
aWM6CiAgICBTdHJpbmdUeXBlQWRhcHRlcjxTdHJpbmdBcHBlbmQ8U3RyaW5nVHlwZTEsIFN0cmlu
Z1R5cGUyPiA+KFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBidWZmZXIp
CiAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCiAgICB7CiAgICB9CgogICAgdW5zaWduZWQgbGVu
Z3RoKCkgeyByZXR1cm4gbV9idWZmZXIubGVuZ3RoKCk7IH0KCiAgICBib29sIGlzOEJpdCgpIHsg
cmV0dXJuIG1fYnVmZmVyLmlzOEJpdCgpOyB9CgogICAgdm9pZCB3cml0ZVRvKExDaGFyKiBkZXN0
aW5hdGlvbikgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsgfQogICAgdm9pZCB3cml0
ZVRvKFVDaGFyKiBkZXN0aW5hdGlvbikgeyBtX2J1ZmZlci53cml0ZVRvKGRlc3RpbmF0aW9uKTsg
fQoKcHJpdmF0ZToKICAgIFN0cmluZ0FwcGVuZDxTdHJpbmdUeXBlMSwgU3RyaW5nVHlwZTI+JiBt
X2J1ZmZlcjsKfTsKCmlubGluZSBTdHJpbmdBcHBlbmQ8Y29uc3QgY2hhciosIFN0cmluZz4gb3Bl
cmF0b3IrKGNvbnN0IGNoYXIqIHN0cmluZzEsIGNvbnN0IFN0cmluZyYgc3RyaW5nMikKewogICAg
cmV0dXJuIFN0cmluZ0FwcGVuZDxjb25zdCBjaGFyKiwgU3RyaW5nPihzdHJpbmcxLCBzdHJpbmcy
KTsKfQoKaW5saW5lIFN0cmluZ0FwcGVuZDxjb25zdCBjaGFyKiwgQXRvbWljU3RyaW5nPiBvcGVy
YXRvcisoY29uc3QgY2hhciogc3RyaW5nMSwgY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcyKQp7
CiAgICByZXR1cm4gU3RyaW5nQXBwZW5kPGNvbnN0IGNoYXIqLCBBdG9taWNTdHJpbmc+KHN0cmlu
ZzEsIHN0cmluZzIpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgpTdHJpbmdB
cHBlbmQ8Y29uc3QgY2hhciosIFN0cmluZ0FwcGVuZDxVLCBWPiA+IG9wZXJhdG9yKyhjb25zdCBj
aGFyKiBzdHJpbmcxLCBjb25zdCBTdHJpbmdBcHBlbmQ8VSwgVj4mIHN0cmluZzIpCnsKICAgIHJl
dHVybiBTdHJpbmdBcHBlbmQ8Y29uc3QgY2hhciosIFN0cmluZ0FwcGVuZDxVLCBWPiA+KHN0cmlu
ZzEsIHN0cmluZzIpOwp9CgppbmxpbmUgU3RyaW5nQXBwZW5kPGNvbnN0IFVDaGFyKiwgU3RyaW5n
PiBvcGVyYXRvcisoY29uc3QgVUNoYXIqIHN0cmluZzEsIGNvbnN0IFN0cmluZyYgc3RyaW5nMikK
ewogICAgcmV0dXJuIFN0cmluZ0FwcGVuZDxjb25zdCBVQ2hhciosIFN0cmluZz4oc3RyaW5nMSwg
c3RyaW5nMik7Cn0KCmlubGluZSBTdHJpbmdBcHBlbmQ8Y29uc3QgVUNoYXIqLCBBdG9taWNTdHJp
bmc+IG9wZXJhdG9yKyhjb25zdCBVQ2hhciogc3RyaW5nMSwgY29uc3QgQXRvbWljU3RyaW5nJiBz
dHJpbmcyKQp7CiAgICByZXR1cm4gU3RyaW5nQXBwZW5kPGNvbnN0IFVDaGFyKiwgQXRvbWljU3Ry
aW5nPihzdHJpbmcxLCBzdHJpbmcyKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KU3RyaW5nQXBwZW5kPGNvbnN0IFVDaGFyKiwgU3RyaW5nQXBwZW5kPFUsIFY+ID4gb3BlcmF0
b3IrKGNvbnN0IFVDaGFyKiBzdHJpbmcxLCBjb25zdCBTdHJpbmdBcHBlbmQ8VSwgVj4mIHN0cmlu
ZzIpCnsKICAgIHJldHVybiBTdHJpbmdBcHBlbmQ8Y29uc3QgVUNoYXIqLCBTdHJpbmdBcHBlbmQ8
VSwgVj4gPihzdHJpbmcxLCBzdHJpbmcyKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KU3RyaW5n
QXBwZW5kPFN0cmluZywgVD4gb3BlcmF0b3IrKGNvbnN0IFN0cmluZyYgc3RyaW5nMSwgVCBzdHJp
bmcyKQp7CiAgICByZXR1cm4gU3RyaW5nQXBwZW5kPFN0cmluZywgVD4oc3RyaW5nMSwgc3RyaW5n
Mik7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+ClN0cmlu
Z0FwcGVuZDxTdHJpbmdBcHBlbmQ8VSwgVj4sIFc+IG9wZXJhdG9yKyhjb25zdCBTdHJpbmdBcHBl
bmQ8VSwgVj4mIHN0cmluZzEsIFcgc3RyaW5nMikKewogICAgcmV0dXJuIFN0cmluZ0FwcGVuZDxT
dHJpbmdBcHBlbmQ8VSwgVj4sIFc+KHN0cmluZzEsIHN0cmluZzIpOwp9Cgp9CiMgOTY0ICIuL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oIiAyCiMgMjE3
ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIgMgojIDY1
MCAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgiIDIKIyAyOSAi
Li9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgiIDIKCm5hbWVz
cGFjZSBXZWJDb3JlIHsKCmNsYXNzIFNoYXJlZEJ1ZmZlcjsKClBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiB1dGY4QnVmZmVyKGNvbnN0IFN0cmluZyYpOwoKCgp1bnNpZ25lZCBudW1HcmFwaGVtZUNs
dXN0ZXJzKGNvbnN0IFN0cmluZyYgcyk7CgoKdW5zaWduZWQgbnVtQ2hhcmFjdGVyc0luR3JhcGhl
bWVDbHVzdGVycyhjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkKTsKCn0KIyAyOSAiU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcCIgMgoKCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL093bkFycmF5UHRyLmgiIDEKIyAyNyAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L093bkFycmF5UHRyLmgiCiMgMSAiLi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bhc3NPd25B
cnJheVB0ci5oIiAxCiMgMjggIi4vU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Pd25BcnJheVB0
ci5oIiAyCgoKbmFtZXNwYWNlIFdURiB7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNz
T3duQXJyYXlQdHI7CnRlbXBsYXRlPHR5cGVuYW1lIFQ+IFBhc3NPd25BcnJheVB0cjxUPiBhZG9w
dEFycmF5UHRyKFQqKTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBPd25BcnJheVB0ciB7
CnB1YmxpYzoKICAgIHR5cGVkZWYgVCogUHRyVHlwZTsKCiAgICBPd25BcnJheVB0cigpIDogbV9w
dHIoMCkgeyB9CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IE93bkFycmF5UHRyKGNvbnN0IFBh
c3NPd25BcnJheVB0cjxVPiYgbyk7CgoKCgoKICAgIE93bkFycmF5UHRyKGNvbnN0IE93bkFycmF5
UHRyPFQ+Jik7CgogICAgfk93bkFycmF5UHRyKCkgeyBkZWxldGVPd25lZEFycmF5UHRyKG1fcHRy
KTsgfQoKICAgIFB0clR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KCiAgICB2b2lk
IGNsZWFyKCk7CiAgICBQYXNzT3duQXJyYXlQdHI8VD4gcmVsZWFzZSgpOwogICAgUHRyVHlwZSBs
ZWFrUHRyKCkgX19hdHRyaWJ1dGVfXyAoKHdhcm5fdW51c2VkX3Jlc3VsdCkpOwoKICAgIFQmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgKCh2b2lkKTApOyByZXR1cm4gKm1fcHRyOyB9CiAgICBQdHJUeXBl
IG9wZXJhdG9yLT4oKSBjb25zdCB7ICgodm9pZCkwKTsgcmV0dXJuIG1fcHRyOyB9CgogICAgVCYg
b3BlcmF0b3JbXShzdGQ6OnB0cmRpZmZfdCBpKSBjb25zdCB7ICgodm9pZCkwKTsgKCh2b2lkKTAp
OyByZXR1cm4gbV9wdHJbaV07IH0KCiAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3B0cjsgfQoKCiAgICB0eXBlZGVmIFQqIE93bkFycmF5UHRyOjoqVW5zcGVjaWZpZWRCb29s
VHlwZTsKICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3B0ciA/ICZPd25BcnJheVB0cjo6bV9wdHIgOiAwOyB9CgogICAgT3duQXJyYXlQdHImIG9wZXJh
dG9yPShjb25zdCBQYXNzT3duQXJyYXlQdHI8VD4mKTsKICAgIE93bkFycmF5UHRyJiBvcGVyYXRv
cj0oc3RkOjpudWxscHRyX3QpIHsgY2xlYXIoKTsgcmV0dXJuICp0aGlzOyB9CiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBPd25BcnJheVB0ciYgb3BlcmF0b3I9KGNvbnN0IFBhc3NPd25BcnJheVB0
cjxVPiYpOwoKICAgIHZvaWQgc3dhcChPd25BcnJheVB0ciYgbykgeyBzdGQ6OnN3YXAobV9wdHIs
IG8ubV9wdHIpOyB9Cgpwcml2YXRlOgogICAgUHRyVHlwZSBtX3B0cjsKfTsKCnRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+IGlubGluZSBPd25BcnJheVB0cjxUPjo6T3du
QXJyYXlQdHIoY29uc3QgUGFzc093bkFycmF5UHRyPFU+JiBvKQogICAgOiBtX3B0cihvLmxlYWtQ
dHIoKSkKewp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBPd25BcnJheVB0cjxU
Pjo6Y2xlYXIoKQp7CiAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAgbV9wdHIgPSAwOwogICAg
ZGVsZXRlT3duZWRBcnJheVB0cihwdHIpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
UGFzc093bkFycmF5UHRyPFQ+IE93bkFycmF5UHRyPFQ+OjpyZWxlYXNlKCkKewogICAgUHRyVHlw
ZSBwdHIgPSBtX3B0cjsKICAgIG1fcHRyID0gMDsKICAgIHJldHVybiBhZG9wdEFycmF5UHRyKHB0
cik7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB0eXBlbmFtZSBPd25BcnJheVB0cjxU
Pjo6UHRyVHlwZSBPd25BcnJheVB0cjxUPjo6bGVha1B0cigpCnsKICAgIFB0clR5cGUgcHRyID0g
bV9wdHI7CiAgICBtX3B0ciA9IDA7CiAgICByZXR1cm4gcHRyOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgT3duQXJyYXlQdHI8VD4mIE93bkFycmF5UHRyPFQ+OjpvcGVyYXRvcj0oY29u
c3QgUGFzc093bkFycmF5UHRyPFQ+JiBvKQp7CiAgICBQdHJUeXBlIHB0ciA9IG1fcHRyOwogICAg
bV9wdHIgPSBvLmxlYWtQdHIoKTsKICAgICgodm9pZCkwKTsKICAgIGRlbGV0ZU93bmVkQXJyYXlQ
dHIocHRyKTsKICAgIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxh
dGU8dHlwZW5hbWUgVT4gaW5saW5lIE93bkFycmF5UHRyPFQ+JiBPd25BcnJheVB0cjxUPjo6b3Bl
cmF0b3I9KGNvbnN0IFBhc3NPd25BcnJheVB0cjxVPiYgbykKewogICAgUHRyVHlwZSBwdHIgPSBt
X3B0cjsKICAgIG1fcHRyID0gby5sZWFrUHRyKCk7CiAgICAoKHZvaWQpMCk7CiAgICBkZWxldGVP
d25lZEFycmF5UHRyKHB0cik7CiAgICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBzd2FwKE93bkFycmF5UHRyPFQ+JiBhLCBPd25BcnJheVB0cjxUPiYg
YikKewogICAgYS5zd2FwKGIpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE93bkFycmF5UHRyPFQ+JiBhLCBVKiBiKQp7CiAg
ICByZXR1cm4gYS5nZXQoKSA9PSBiOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFQqIGEsIGNvbnN0IE93bkFycmF5UHRyPFU+JiBiKQp7
CiAgICByZXR1cm4gYSA9PSBiLmdldCgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE93bkFycmF5UHRyPFQ+JiBhLCBVKiBi
KQp7CiAgICByZXR1cm4gYS5nZXQoKSAhPSBiOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KFQqIGEsIGNvbnN0IE93bkFycmF5UHRyPFU+
JiBiKQp7CiAgICByZXR1cm4gYSAhPSBiLmdldCgpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
aW5saW5lIFQqIGdldFB0cihjb25zdCBPd25BcnJheVB0cjxUPiYgcCkKewogICAgcmV0dXJuIHAu
Z2V0KCk7Cn0KCn0KCnVzaW5nIFdURjo6T3duQXJyYXlQdHI7CiMgMzIgIlNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xlbmd0aC5jcHAiIDIKIyAxICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdCdWZmZXIuaCIgMQojIDM2ICIuL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9TdHJpbmdCdWZmZXIuaCIKbmFtZXNwYWNlIFdURiB7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+CmNsYXNzIFN0cmluZ0J1ZmZlciB7CiAgICBwcml2YXRlOiBTdHJpbmdCdWZmZXIo
Y29uc3QgU3RyaW5nQnVmZmVyJik7IFN0cmluZ0J1ZmZlciYgb3BlcmF0b3I9KGNvbnN0IFN0cmlu
Z0J1ZmZlciYpOwpwdWJsaWM6CiAgICBleHBsaWNpdCBTdHJpbmdCdWZmZXIodW5zaWduZWQgbGVu
Z3RoKQogICAgICAgIDogbV9sZW5ndGgobGVuZ3RoKQogICAgewogICAgICAgIGlmIChtX2xlbmd0
aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAvIHNpemVvZihDaGFyVHlw
ZSkpCiAgICAgICAgICAgIGRvIHsgV1RGUmVwb3J0QmFja3RyYWNlKCk7IFdURkludm9rZUNyYXNo
SG9vaygpOyAqKGludCAqKSh1aW50cHRyX3QpMHhiYmFkYmVlZiA9IDA7ICgodm9pZCgqKSgpKTAp
KCk7IH0gd2hpbGUgKGZhbHNlKTsKICAgICAgICBtX2RhdGEgPSBzdGF0aWNfY2FzdDxDaGFyVHlw
ZSo+KGZhc3RNYWxsb2MobV9sZW5ndGggKiBzaXplb2YoQ2hhclR5cGUpKSk7CiAgICB9CgogICAg
flN0cmluZ0J1ZmZlcigpCiAgICB7CiAgICAgICAgZmFzdEZyZWUobV9kYXRhKTsKICAgIH0KCiAg
ICB2b2lkIHNocmluayh1bnNpZ25lZCBuZXdMZW5ndGgpCiAgICB7CiAgICAgICAgKCh2b2lkKTAp
OwogICAgICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgfQoKICAgIHZvaWQgcmVzaXplKHVu
c2lnbmVkIG5ld0xlbmd0aCkKICAgIHsKICAgICAgICBpZiAobmV3TGVuZ3RoID4gbV9sZW5ndGgp
IHsKICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSAvIHNpemVvZihVQ2hhcikpCiAgICAgICAgICAgICAgICBkbyB7IFdURlJlcG9y
dEJhY2t0cmFjZSgpOyBXVEZJbnZva2VDcmFzaEhvb2soKTsgKihpbnQgKikodWludHB0cl90KTB4
YmJhZGJlZWYgPSAwOyAoKHZvaWQoKikoKSkwKSgpOyB9IHdoaWxlIChmYWxzZSk7CiAgICAgICAg
ICAgIG1fZGF0YSA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdFJlYWxsb2MobV9kYXRhLCBuZXdM
ZW5ndGggKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgICAgfQogICAgICAgIG1fbGVuZ3RoID0gbmV3
TGVuZ3RoOwogICAgfQoKICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoOyB9CiAgICBDaGFyVHlwZSogY2hhcmFjdGVycygpIHsgcmV0dXJuIG1fZGF0YTsgfQoKICAg
IFVDaGFyJiBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIHsgKCh2b2lkKTApOyByZXR1cm4gbV9kYXRh
W2ldOyB9CgogICAgQ2hhclR5cGUqIHJlbGVhc2UoKSB7IENoYXJUeXBlKiBkYXRhID0gbV9kYXRh
OyBtX2RhdGEgPSAwOyByZXR1cm4gZGF0YTsgfQoKcHJpdmF0ZToKICAgIHVuc2lnbmVkIG1fbGVu
Z3RoOwogICAgQ2hhclR5cGUqIG1fZGF0YTsKfTsKCn0KCnVzaW5nIFdURjo6U3RyaW5nQnVmZmVy
OwojIDMzICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwIiAyCgp1c2luZyBuYW1l
c3BhY2UgV1RGOwoKbmFtZXNwYWNlIFdlYkNvcmUgewoKc3RhdGljIExlbmd0aCBwYXJzZUxlbmd0
aChjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQp7CiAgICBpZiAobGVuZ3RoID09
IDApCiAgICAgICAgcmV0dXJuIExlbmd0aCgxLCBSZWxhdGl2ZSk7CgogICAgdW5zaWduZWQgaSA9
IDA7CiAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBpc1NwYWNlT3JOZXdsaW5lKGRhdGFbaV0pKQog
ICAgICAgICsraTsKICAgIGlmIChpIDwgbGVuZ3RoICYmIChkYXRhW2ldID09ICcrJyB8fCBkYXRh
W2ldID09ICctJykpCiAgICAgICAgKytpOwogICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgaXNBU0NJ
SURpZ2l0KGRhdGFbaV0pKQogICAgICAgICsraTsKICAgIHVuc2lnbmVkIGludExlbmd0aCA9IGk7
CiAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiAoaXNBU0NJSURpZ2l0KGRhdGFbaV0pIHx8IGRhdGFb
aV0gPT0gJy4nKSkKICAgICAgICArK2k7CiAgICB1bnNpZ25lZCBkb3VibGVMZW5ndGggPSBpOwoK
CiAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBpc1NwYWNlT3JOZXdsaW5lKGRhdGFbaV0pKQogICAg
ICAgICsraTsKCiAgICBib29sIG9rOwogICAgVUNoYXIgbmV4dCA9IChpIDwgbGVuZ3RoKSA/IGRh
dGFbaV0gOiAnICc7CiAgICBpZiAobmV4dCA9PSAnJScpIHsKCiAgICAgICAgZG91YmxlIHIgPSBj
aGFyYWN0ZXJzVG9Eb3VibGUoZGF0YSwgZG91YmxlTGVuZ3RoLCAmb2spOwogICAgICAgIGlmIChv
aykKICAgICAgICAgICAgcmV0dXJuIExlbmd0aChyLCBQZXJjZW50KTsKICAgICAgICByZXR1cm4g
TGVuZ3RoKDEsIFJlbGF0aXZlKTsKICAgIH0KICAgIGludCByID0gY2hhcmFjdGVyc1RvSW50U3Ry
aWN0KGRhdGEsIGludExlbmd0aCwgJm9rKTsKICAgIGlmIChuZXh0ID09ICcqJykgewogICAgICAg
IGlmIChvaykKICAgICAgICAgICAgcmV0dXJuIExlbmd0aChyLCBSZWxhdGl2ZSk7CiAgICAgICAg
cmV0dXJuIExlbmd0aCgxLCBSZWxhdGl2ZSk7CiAgICB9CiAgICBpZiAob2spCiAgICAgICAgcmV0
dXJuIExlbmd0aChyLCBGaXhlZCk7CiAgICByZXR1cm4gTGVuZ3RoKDAsIFJlbGF0aXZlKTsKfQoK
c3RhdGljIGludCBjb3VudENoYXJhY3Rlcihjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgbGVu
Z3RoLCBVQ2hhciBjaGFyYWN0ZXIpCnsKICAgIGludCBjb3VudCA9IDA7CiAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKTsgKytpKQogICAgICAgIGNvdW50ICs9
IGRhdGFbaV0gPT0gY2hhcmFjdGVyOwogICAgcmV0dXJuIGNvdW50Owp9CgpQYXNzT3duQXJyYXlQ
dHI8TGVuZ3RoPiBuZXdDb29yZHNBcnJheShjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW4p
CnsKICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgIGNvbnN0IFVDaGFy
KiBkYXRhID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgIFN0cmluZ0J1ZmZlcjxVQ2hhcj4gc3Bh
Y2lmaWVkKGxlbmd0aCk7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICAgICAgICBVQ2hhciBjYyA9IGRhdGFbaV07CiAgICAgICAgaWYgKGNjID4gJzknIHx8IChj
YyA8ICcwJyAmJiBjYyAhPSAnLScgJiYgY2MgIT0gJyonICYmIGNjICE9ICcuJykpCiAgICAgICAg
ICAgIHNwYWNpZmllZFtpXSA9ICcgJzsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHNwYWNpZmll
ZFtpXSA9IGNjOwogICAgfQogICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0ciA9IFN0cmluZ0ltcGw6
OmFkb3B0KHNwYWNpZmllZCk7CgogICAgc3RyID0gc3RyLT5zaW1wbGlmeVdoaXRlU3BhY2UoKTsK
CiAgICBsZW4gPSBjb3VudENoYXJhY3RlcihzdHItPmNoYXJhY3RlcnMoKSwgc3RyLT5sZW5ndGgo
KSwgJyAnKSArIDE7CiAgICBPd25BcnJheVB0cjxMZW5ndGg+IHIgPSBhZG9wdEFycmF5UHRyKG5l
dyBMZW5ndGhbbGVuXSk7CgogICAgaW50IGkgPSAwOwogICAgdW5zaWduZWQgcG9zID0gMDsKICAg
IHNpemVfdCBwb3MyOwoKICAgIHdoaWxlICgocG9zMiA9IHN0ci0+ZmluZCgnICcsIHBvcykpICE9
IG5vdEZvdW5kKSB7CiAgICAgICAgcltpKytdID0gcGFyc2VMZW5ndGgoc3RyLT5jaGFyYWN0ZXJz
KCkgKyBwb3MsIHBvczIgLSBwb3MpOwogICAgICAgIHBvcyA9IHBvczIrMTsKICAgIH0KICAgIHJb
aV0gPSBwYXJzZUxlbmd0aChzdHItPmNoYXJhY3RlcnMoKSArIHBvcywgc3RyLT5sZW5ndGgoKSAt
IHBvcyk7CgogICAgKCh2b2lkKTApOwoKICAgIHJldHVybiByLnJlbGVhc2UoKTsKfQoKUGFzc093
bkFycmF5UHRyPExlbmd0aD4gbmV3TGVuZ3RoQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGlu
dCYgbGVuKQp7CiAgICBSZWZQdHI8U3RyaW5nSW1wbD4gc3RyID0gc3RyaW5nLmltcGwoKS0+c2lt
cGxpZnlXaGl0ZVNwYWNlKCk7CiAgICBpZiAoIXN0ci0+bGVuZ3RoKCkpIHsKICAgICAgICBsZW4g
PSAxOwogICAgICAgIHJldHVybiBudWxscHRyOwogICAgfQoKICAgIGxlbiA9IGNvdW50Q2hhcmFj
dGVyKHN0ci0+Y2hhcmFjdGVycygpLCBzdHItPmxlbmd0aCgpLCAnLCcpICsgMTsKICAgIE93bkFy
cmF5UHRyPExlbmd0aD4gciA9IGFkb3B0QXJyYXlQdHIobmV3IExlbmd0aFtsZW5dKTsKCiAgICBp
bnQgaSA9IDA7CiAgICB1bnNpZ25lZCBwb3MgPSAwOwogICAgc2l6ZV90IHBvczI7CgogICAgd2hp
bGUgKChwb3MyID0gc3RyLT5maW5kKCcsJywgcG9zKSkgIT0gbm90Rm91bmQpIHsKICAgICAgICBy
W2krK10gPSBwYXJzZUxlbmd0aChzdHItPmNoYXJhY3RlcnMoKSArIHBvcywgcG9zMiAtIHBvcyk7
CiAgICAgICAgcG9zID0gcG9zMisxOwogICAgfQoKICAgICgodm9pZCkwKTsKCgogICAgaWYgKHN0
ci0+bGVuZ3RoKCktcG9zID4gMCkKICAgICAgICByW2ldID0gcGFyc2VMZW5ndGgoc3RyLT5jaGFy
YWN0ZXJzKCkgKyBwb3MsIHN0ci0+bGVuZ3RoKCkgLSBwb3MpOwogICAgZWxzZQogICAgICAgIGxl
bi0tOwoKICAgIHJldHVybiByLnJlbGVhc2UoKTsKfQoKY2xhc3MgU2FtZVNpemVBc0xlbmd0aCB7
CiAgICBpbnQzMl90IHZhbHVlOwogICAgaW50MzJfdCBtZXRhRGF0YTsKfTsKdHlwZWRlZiBpbnQg
ZHVtbXlsZW5ndGhfc2hvdWxkX3N0YXlfc21hbGwgWyhzaXplb2YoTGVuZ3RoKSA9PSBzaXplb2Yo
U2FtZVNpemVBc0xlbmd0aCkpID8gMSA6IC0xXTsKCn0K
</data>

          </attachment>
      

    </bug>

</bugzilla>