<?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>165940</bug_id>
          
          <creation_ts>2016-12-15 18:11:54 -0800</creation_ts>
          <short_desc>Add public ICU headers in preparation for https://bugs.webkit.org/show_bug.cgi?id=160629</short_desc>
          <delta_ts>2017-01-14 22:34:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160629</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1260439</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-15 18:11:54 -0800</bug_when>
    <thetext>Add public ICU headers in preparation for https://bugs.webkit.org/show_bug.cgi?id=160629</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260443</commentid>
    <comment_count>1</comment_count>
      <attachid>297275</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-15 18:13:59 -0800</bug_when>
    <thetext>Created attachment 297275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260447</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-15 18:16:33 -0800</bug_when>
    <thetext>Attachment 297275 did not pass style-queue:

ERROR: Source/WTF/icu/unicode/uchriter.h:11:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/uchriter.h:18:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:44:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:59:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:60:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:78:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:79:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:80:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:81:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:90:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:96:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:117:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:142:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:152:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:163:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:173:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:191:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:201:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:214:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:221:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:228:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:237:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:247:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:259:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:269:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:280:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:289:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:298:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:309:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:322:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/uchriter.h:322:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:335:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/uchriter.h:335:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:341:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:350:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:357:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:364:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:371:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/uchriter.h:376:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/udata.h:20:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/udata.h:39:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/udata.h:173:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/udata.h:200:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/udata.h:252:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/udata.h:252:  The parameter name &quot;isAcceptable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/udata.h:253:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/udata.h:361:  The parameter name &quot;err&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/udata.h:392:  The parameter name &quot;err&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/udata.h:426:  The parameter name &quot;access&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:44:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/brkiter.h:45:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/brkiter.h:48:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/brkiter.h:50:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/brkiter.h:166:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:174:  The parameter name &quot;text&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:194:  The parameter name &quot;text&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:204:  The parameter name &quot;it&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:291:  The parameter name &quot;n&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:474:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:475:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:508:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:509:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:540:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:540:  The parameter name &quot;locale&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:556:  The parameter name &quot;key&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:572:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:581:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:611:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/brkiter.h:612:  The parameter name &quot;loc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:613:  The parameter name &quot;loc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:614:  The parameter name &quot;loc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:625:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/brkiter.h:625:  Missing space inside { }.  [whitespace/braces] [5]
ERROR: Source/WTF/icu/unicode/brkiter.h:627:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/brkiter.h:655:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:13:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:14:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:20:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/chariter.h:96:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:595:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/chariter.h:608:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/chariter.h:642:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/chariter.h:671:  Extra space between int32_t and pos  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/chariter.h:677:  Extra space between int32_t and begin  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/chariter.h:683:  Extra space between int32_t and end  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/chariter.h:687:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:692:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:697:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:702:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:707:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:712:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/chariter.h:717:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/umisc.h:37:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/umisc.h:42:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/umisc.h:47:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:22:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/ucasemap.h:23:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/ucasemap.h:269:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:270:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:271:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:300:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:302:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:329:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:330:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:331:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:381:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:419:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/ucasemap.h:421:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/locid.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/locid.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/locid.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/locid.h:267:  Extra space after ( in fun
ction call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:268:  Extra space between const and char  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:268:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:269:  Extra space between const and char  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:270:  Extra space between const and char  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:285:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
ERROR: Source/WTF/icu/unicode/locid.h:303:  Extra space between UBool and operator  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:313:  Extra space between UBool and operator  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:359:  Extra space between UErrorCode&amp; and success  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:359:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:388:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:388:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/WTF/icu/unicode/locid.h:397:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:397:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/WTF/icu/unicode/locid.h:404:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:404:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/WTF/icu/unicode/locid.h:411:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:411:  Extra space before )  [whitespace/parens] [2]
ERROR: Source/WTF/icu/unicode/locid.h:494:  Extra space between uint32_t and getLCID  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:522:  Extra space between UnicodeString&amp; and getDisplayLanguage  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:537:  Extra space between UnicodeString&amp; and getDisplayLanguage  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:537:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:538:  Extra space between UnicodeString&amp; and dispLang  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:538:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:549:  Extra space between UnicodeString&amp; and getDisplayScript  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:549:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:565:  Extra space between UnicodeString&amp; and getDisplayScript  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:565:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:566:  Extra space between UnicodeString&amp; and dispScript  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:566:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:577:  Extra space between UnicodeString&amp; and getDisplayCountry  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:577:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:593:  Extra space between UnicodeString&amp; and getDisplayCountry  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:593:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:594:  Extra space between UnicodeString&amp; and dispCountry  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:594:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:603:  Extra space between UnicodeString&amp; and getDisplayVariant  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:603:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:613:  Extra space between UnicodeString&amp; and getDisplayVariant  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:613:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:614:  Extra space between UnicodeString&amp; and dispVar  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:614:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:627:  Extra space between UnicodeString&amp; and getDisplayName  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:627:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:641:  Extra space between UnicodeString&amp; and getDisplayName  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:641:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/locid.h:642:  Extra space between UnicodeString&amp; and name  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:642:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/locid.h:648:  Extra space between int32_t and hashCode  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/locid.h:736:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
ERROR: Source/WTF/icu/unicode/locid.h:808:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/rbbi.h:27:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/rbbi.h:39:  Extra space between class and RuleBasedBreakIteratorTables  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:40:  Extra space between class and BreakIterator  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:41:  Extra space between class and RBBIDataWrapper  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:42:  Extra space between class and UStack  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:43:  Extra space between class and LanguageBreakEngine  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:44:  Extra space between class and UnhandledEngine  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:72:  Extra space between UText and *fText  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:79:  Extra space between CharacterIterator and *fCharIter  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:99:  Extra space between RBBIDataWrapper and *fData  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:104:  Extra space between int32_t and fLastRuleStatusIndex  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:112:  Extra space between UBool and fLastStatusIndexValid  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:119:  Extra space between uint32_t and fDictionaryCharCount  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:128:  Extra space between int32_t* and fCachedBreakPositions  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:134:  Extra space between int32_t and fNumCachedBreakPositions  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:141:  Extra space between int32_t and fPositionInCache  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:150:  Extra space between UStack and *fLanguageBreakEngines  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:159:  Extra space between UnhandledEngine and *fUnhandledBreakEngine  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:166:  Extra space between int32_t and fBreakType  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:196:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:206:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:206:  The parameter name &quot;dontAdopt&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:240:  Extra space after ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/icu/unicode/rbbi.h:241:  Extra space between UParseError and &amp;parseError  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:241:  The parameter name &quot;parseError&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:242:  Extra space between UErrorCode and &amp;status  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:268:  Extra space between uint32_t and ruleLength  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:268:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:269:  Extra space between UErrorCode and &amp;status  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:269:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:374:  Extra space between virtual and CharacterIterator&amp;  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:391:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:423:  The parameter name &quot;text&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:449:  The parameter name &quot;n&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:613:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:614:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/rbbi.h:697:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:759:  The parameter name &quot;c&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/icu/unicode/rbbi.h:774:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/icu/unicode/schriter.h:21:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/icu/unicode/schriter.h:29:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:52:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:63:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:64:  Extra space between int32_t and textPos  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:64:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:82:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:83:  Extra space between int32_t and textBegin  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:83:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:84:  Extra space between int32_t and textEnd  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:84:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:85:  Extra space between int32_t and textPos  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:85:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:95:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:112:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:138:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:147:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:154:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:161:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:168:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:176:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:182:  Extra space between UnicodeString and text  [whitespace/declaration] [3]
ERROR: Source/WTF/icu/unicode/schriter.h:182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 239 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260464</commentid>
    <comment_count>3</comment_count>
      <attachid>297275</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-12-15 18:34:29 -0800</bug_when>
    <thetext>Comment on attachment 297275
Patch

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

&gt; Source/WTF/icu/unicode/brkiter.h:100
&gt; +class U_COMMON_API BreakIterator : public UObject {

Up until this point we have quite deliberately stayed away from ICU’s C++ interface and used the equivalent C interfaces instead. Why not continue to use ubrk.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260500</commentid>
    <comment_count>4</comment_count>
      <attachid>297275</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-15 19:37:32 -0800</bug_when>
    <thetext>Comment on attachment 297275
Patch

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

&gt;&gt; Source/WTF/icu/unicode/brkiter.h:100
&gt;&gt; +class U_COMMON_API BreakIterator : public UObject {
&gt; 
&gt; Up until this point we have quite deliberately stayed away from ICU’s C++ interface and used the equivalent C interfaces instead. Why not continue to use ubrk.h?

We&apos;re only using this interface on macOS/iOS where the compiler for ICU is similar to our own. There is currently no way (that I have found) to use the C API with precompiled rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260630</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-16 10:43:39 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; There is currently no way (that I have found) to use the C API with precompiled rules.

I asked the icu-support mailing list if this is correct: https://sourceforge.net/p/icu/mailman/message/35554487/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260837</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-16 17:09:29 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 297275 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=297275&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WTF/icu/unicode/brkiter.h:100
&gt; &gt;&gt; +class U_COMMON_API BreakIterator : public UObject {
&gt; &gt; 
&gt; &gt; Up until this point we have quite deliberately stayed away from ICU’s C++ interface and used the equivalent C interfaces instead. Why not continue to use ubrk.h?
&gt; 
&gt; We&apos;re only using this interface on macOS/iOS where the compiler for ICU is
&gt; similar to our own.

Talking with Mitz about this, neither of us thinks that binary compatibility is a problem for builds which use this code path (aka builds which have the icugenbrk utility)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261515</commentid>
    <comment_count>7</comment_count>
      <attachid>297275</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-20 10:53:12 -0800</bug_when>
    <thetext>Comment on attachment 297275
Patch

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

&gt;&gt;&gt;&gt; Source/WTF/icu/unicode/brkiter.h:100
&gt;&gt;&gt;&gt; +class U_COMMON_API BreakIterator : public UObject {
&gt;&gt;&gt; 
&gt;&gt;&gt; Up until this point we have quite deliberately stayed away from ICU’s C++ interface and used the equivalent C interfaces instead. Why not continue to use ubrk.h?
&gt;&gt; 
&gt;&gt; We&apos;re only using this interface on macOS/iOS where the compiler for ICU is similar to our own. There is currently no way (that I have found) to use the C API with precompiled rules.
&gt; 
&gt; Talking with Mitz about this, neither of us thinks that binary compatibility is a problem for builds which use this code path (aka builds which have the icugenbrk utility)

There hasn&apos;t been a response on the mailing list about this. Do you have any more thoughts, Darin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1261525</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-12-20 10:57:45 -0800</bug_when>
    <thetext>Dan Bates brought up a good point about this - we have many folders containing ICU headers in WebKit, and it isn&apos;t clear what each one is used for (or if they are all necessary). Some of these folders are not kept in sync, and already have different headers in them. Perhaps some are not necessary, but if more than one is required, it&apos;s not clear if I should be putting these new headers in all of them or just the one I&apos;ve put them in for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1262094</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-12-21 12:42:30 -0800</bug_when>
    <thetext>I&apos;d like to see the ICU headers move to one directory under Source/ThirdParty instead of adding them in WTF. It&apos;s slightly odd to have only headers and no implementation under Source/ThirdParty, but these are still third-party sources that need to be tracked separately from our own code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266888</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-14 19:14:15 -0800</bug_when>
    <thetext>http://bugs.icu-project.org/trac/ticket/12914 shows that a C API in ICU was accepted to read precompiled rules. Therefore, this patch is no longer necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266931</commentid>
    <comment_count>11</comment_count>
      <attachid>297275</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-01-14 22:34:33 -0800</bug_when>
    <thetext>Comment on attachment 297275
Patch

Clearing review flag so that the patch does not show up in the list of pending reviews.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297275</attachid>
            <date>2016-12-15 18:13:59 -0800</date>
            <delta_ts>2017-01-14 22:34:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165940-20161215181306.patch</filename>
            <type>text/plain</type>
            <size>175948</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5ODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDUwMTU2NzdjMGIwYTJmNWFiMTM0YzUw
MjQ4NDI4ODRkMjg1MWQ3NTEuLmVlZDFiNWEwYTU1YTFjNDEwZmY2Mjg1YWZkYjM0Y2E0YTZmNWRl
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsNDEgQEAKIDIwMTYtMTItMTUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgcHVibGljIElDVSBoZWFkZXJzIGlu
IHByZXBhcmF0aW9uIGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYwNjI5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjU5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNjI5IHVzZXMgSUNVJ3Mg
UnVsZUJhc2VkQnJlYWtpbmdJdGVyYXRvciBpbnRlcmZhY2UsCisgICAgICAgIHdoaWNoIHJlcXVp
cmVzIGEgZmV3IG1vcmUgb2YgSUNVJ3MgcHVibGljIGhlYWRlcnMgdG8gYmUgYWRkZWQgdG8gV2Vi
S2l0LgorCisgICAgICAgICogaWN1L3VuaWNvZGUvYnJraXRlci5oOiBBZGRlZC4KKyAgICAgICAg
KEJyZWFrSXRlcmF0b3I6OmlzQnVmZmVyQ2xvbmUpOgorICAgICAgICAqIGljdS91bmljb2RlL2No
YXJpdGVyLmg6IEFkZGVkLgorICAgICAgICAoRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKENoYXJhY3Rlckl0ZXJhdG9yOjpzZXRUb1N0YXJ0KToKKyAgICAg
ICAgKENoYXJhY3Rlckl0ZXJhdG9yOjpzZXRUb0VuZCk6CisgICAgICAgIChDaGFyYWN0ZXJJdGVy
YXRvcjo6c3RhcnRJbmRleCk6CisgICAgICAgIChDaGFyYWN0ZXJJdGVyYXRvcjo6ZW5kSW5kZXgp
OgorICAgICAgICAoQ2hhcmFjdGVySXRlcmF0b3I6OmdldEluZGV4KToKKyAgICAgICAgKENoYXJh
Y3Rlckl0ZXJhdG9yOjpnZXRMZW5ndGgpOgorICAgICAgICAqIGljdS91bmljb2RlL2xvY2lkLmg6
IEFkZGVkLgorICAgICAgICAoTG9jYWxlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKExvY2FsZTo6
Z2V0Q291bnRyeSk6CisgICAgICAgIChMb2NhbGU6OmdldExhbmd1YWdlKToKKyAgICAgICAgKExv
Y2FsZTo6Z2V0U2NyaXB0KToKKyAgICAgICAgKExvY2FsZTo6Z2V0VmFyaWFudCk6CisgICAgICAg
IChMb2NhbGU6OmdldE5hbWUpOgorICAgICAgICAoTG9jYWxlOjppc0JvZ3VzKToKKyAgICAgICAg
KiBpY3UvdW5pY29kZS9yYmJpLmg6IEFkZGVkLgorICAgICAgICAoUnVsZUJhc2VkQnJlYWtJdGVy
YXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgICogaWN1L3VuaWNvZGUvc2Nocml0ZXIuaDogQWRk
ZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdWNhc2VtYXAuaDogQWRkZWQuCisgICAgICAgICog
aWN1L3VuaWNvZGUvdWNocml0ZXIuaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdWRh
dGEuaDogQWRkZWQuCisgICAgICAgICogaWN1L3VuaWNvZGUvdW1pc2MuaDogQWRkZWQuCisKKzIw
MTYtMTItMTUgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKwogICAg
ICAgICBTb3J0IFhjb2RlIHByb2plY3QgZmlsZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTkzNwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2lj
dS91bmljb2RlL2Jya2l0ZXIuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvYnJraXRlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRhYTVlNTUyNzk2MDkwZWFlYmNkN2NlN2I3ZDI3NWFhOGIzNzc1YjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2Jya2l0ZXIuaApAQCAtMCwwICsx
LDY1NSBAQAorLyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAx
OTk3LTIwMTQsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlv
biBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCisqCisqIEZpbGUgYnJraXRlci5oCisqCisqIE1vZGlmaWNhdGlvbiBIaXN0b3J5OgorKgor
KiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9uCisqICAgMDIvMTgvOTcgICAg
YWxpdSAgICAgICAgQWRkZWQgdHlwZWRlZiBmb3IgVGV4dENvdW50LiAgTWFkZSBET05FIGNvbnN0
LgorKiAgIDA1LzA3Lzk3ICAgIGFsaXUgICAgICAgIEZpeGVkIERMTCBkZWNsYXJhdGlvbi4KKyog
ICAwNy8wOS85NyAgICBqZml0eiAgICAgICBSZW5hbWVkIEJyZWFrSXRlcmF0b3IgYW5kIGludGVy
ZmFjZSBzeW5jZWQgd2l0aCBKREsKKyogICAwOC8xMS85OCAgICBoZWxlbmEgICAgICBTeW5jLXVw
IEpESzEuMi4KKyogICAwMS8xMy8yMDAwICBoZWxlbmEgICAgICBBZGRlZCBVRXJyb3JDb2RlIHBh
cmFtZXRlciB0byBjcmVhdGVYWFhJbnN0YW5jZSBtZXRob2RzLgorKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKKyovCisKKyNpZm5kZWYgQlJLSVRFUl9ICisjZGVmaW5lIEJSS0lURVJfSAorCisjaW5j
bHVkZSAidW5pY29kZS91dHlwZXMuaCIKKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMrKyBB
UEk6IEJyZWFrIEl0ZXJhdG9yLgorICovCisKKyNpZiBVQ09ORklHX05PX0JSRUFLX0lURVJBVElP
TgorCitVX05BTUVTUEFDRV9CRUdJTgorCisvKgorICogQWxsb3cgdGhlIGRlY2xhcmF0aW9uIG9m
IEFQSXMgd2l0aCBwb2ludGVycyB0byBCcmVha0l0ZXJhdG9yCisgKiBldmVuIHdoZW4gYnJlYWsg
aXRlcmF0aW9uIGlzIHJlbW92ZWQgZnJvbSB0aGUgYnVpbGQuCisgKi8KK2NsYXNzIEJyZWFrSXRl
cmF0b3I7CisKK1VfTkFNRVNQQUNFX0VORAorCisjZWxzZQorCisjaW5jbHVkZSAidW5pY29kZS91
b2JqZWN0LmgiCisjaW5jbHVkZSAidW5pY29kZS91bmlzdHIuaCIKKyNpbmNsdWRlICJ1bmljb2Rl
L2NoYXJpdGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS9sb2NpZC5oIgorI2luY2x1ZGUgInVuaWNv
ZGUvdWJyay5oIgorI2luY2x1ZGUgInVuaWNvZGUvc3RyZW51bS5oIgorI2luY2x1ZGUgInVuaWNv
ZGUvdXRleHQuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VtaXNjLmgiCisKK1VfTkFNRVNQQUNFX0JF
R0lOCisKKy8qKgorICogVGhlIEJyZWFrSXRlcmF0b3IgY2xhc3MgaW1wbGVtZW50cyBtZXRob2Rz
IGZvciBmaW5kaW5nIHRoZSBsb2NhdGlvbgorICogb2YgYm91bmRhcmllcyBpbiB0ZXh0LiBCcmVh
a0l0ZXJhdG9yIGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MuCisgKiBJbnN0YW5jZXMgb2YgQnJl
YWtJdGVyYXRvciBtYWludGFpbiBhIGN1cnJlbnQgcG9zaXRpb24gYW5kIHNjYW4gb3ZlcgorICog
dGV4dCByZXR1cm5pbmcgdGhlIGluZGV4IG9mIGNoYXJhY3RlcnMgd2hlcmUgYm91bmRhcmllcyBv
Y2N1ci4KKyAqIDxwPgorICogTGluZSBib3VuZGFyeSBhbmFseXNpcyBkZXRlcm1pbmVzIHdoZXJl
IGEgdGV4dCBzdHJpbmcgY2FuIGJlIGJyb2tlbgorICogd2hlbiBsaW5lLXdyYXBwaW5nLiBUaGUg
bWVjaGFuaXNtIGNvcnJlY3RseSBoYW5kbGVzIHB1bmN0dWF0aW9uIGFuZAorICogaHlwaGVuYXRl
ZCB3b3Jkcy4KKyAqIDxwPgorICogU2VudGVuY2UgYm91bmRhcnkgYW5hbHlzaXMgYWxsb3dzIHNl
bGVjdGlvbiB3aXRoIGNvcnJlY3QKKyAqIGludGVycHJldGF0aW9uIG9mIHBlcmlvZHMgd2l0aGlu
IG51bWJlcnMgYW5kIGFiYnJldmlhdGlvbnMsIGFuZAorICogdHJhaWxpbmcgcHVuY3R1YXRpb24g
bWFya3Mgc3VjaCBhcyBxdW90YXRpb24gbWFya3MgYW5kIHBhcmVudGhlc2VzLgorICogPHA+Cisg
KiBXb3JkIGJvdW5kYXJ5IGFuYWx5c2lzIGlzIHVzZWQgYnkgc2VhcmNoIGFuZCByZXBsYWNlIGZ1
bmN0aW9ucywgYXMKKyAqIHdlbGwgYXMgd2l0aGluIHRleHQgZWRpdGluZyBhcHBsaWNhdGlvbnMg
dGhhdCBhbGxvdyB0aGUgdXNlciB0bworICogc2VsZWN0IHdvcmRzIHdpdGggYSBkb3VibGUgY2xp
Y2suIFdvcmQgc2VsZWN0aW9uIHByb3ZpZGVzIGNvcnJlY3QKKyAqIGludGVycHJldGF0aW9uIG9m
IHB1bmN0dWF0aW9uIG1hcmtzIHdpdGhpbiBhbmQgZm9sbG93aW5nCisgKiB3b3Jkcy4gQ2hhcmFj
dGVycyB0aGF0IGFyZSBub3QgcGFydCBvZiBhIHdvcmQsIHN1Y2ggYXMgc3ltYm9scyBvcgorICog
cHVuY3R1YXRpb24gbWFya3MsIGhhdmUgd29yZC1icmVha3Mgb24gYm90aCBzaWRlcy4KKyAqIDxw
PgorICogQ2hhcmFjdGVyIGJvdW5kYXJ5IGFuYWx5c2lzIGFsbG93cyB1c2VycyB0byBpbnRlcmFj
dCB3aXRoCisgKiBjaGFyYWN0ZXJzIGFzIHRoZXkgZXhwZWN0IHRvLCBmb3IgZXhhbXBsZSwgd2hl
biBtb3ZpbmcgdGhlIGN1cnNvcgorICogdGhyb3VnaCBhIHRleHQgc3RyaW5nLiBDaGFyYWN0ZXIg
Ym91bmRhcnkgYW5hbHlzaXMgcHJvdmlkZXMgY29ycmVjdAorICogbmF2aWdhdGlvbiBvZiB0aHJv
dWdoIGNoYXJhY3RlciBzdHJpbmdzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGUKKyAqIGNoYXJhY3Rl
ciBpcyBzdG9yZWQuICBGb3IgZXhhbXBsZSwgYW4gYWNjZW50ZWQgY2hhcmFjdGVyIG1pZ2h0IGJl
CisgKiBzdG9yZWQgYXMgYSBiYXNlIGNoYXJhY3RlciBhbmQgYSBkaWFjcml0aWNhbCBtYXJrLiBX
aGF0IHVzZXJzCisgKiBjb25zaWRlciB0byBiZSBhIGNoYXJhY3RlciBjYW4gZGlmZmVyIGJldHdl
ZW4gbGFuZ3VhZ2VzLgorICogPHA+CisgKiBUaGUgdGV4dCBib3VuZGFyeSBwb3NpdGlvbnMgYXJl
IGZvdW5kIGFjY29yZGluZyB0byB0aGUgcnVsZXMKKyAqIGRlc2NyaWJlZCBpbiBVbmljb2RlIFN0
YW5kYXJkIEFubmV4ICMyOSwgVGV4dCBCb3VuZGFyaWVzLCBhbmQKKyAqIFVuaWNvZGUgU3RhbmRh
cmQgQW5uZXggIzE0LCBMaW5lIEJyZWFraW5nIFByb3BlcnRpZXMuICBUaGVzZQorICogYXJlIGF2
YWlsYWJsZSBhdCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIxNC8gYW5kCisgKiBo
dHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIyOS8uCisgKiA8cD4KKyAqIEluIGFkZGl0
aW9uIHRvIHRoZSBDKysgQVBJIGRlZmluZWQgaW4gdGhpcyBoZWFkZXIgZmlsZSwgYQorICogcGxh
aW4gQyBBUEkgd2l0aCBlcXVpdmFsZW50IGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5lZCBpbiB0aGUK
KyAqIGZpbGUgdWJyay5oCisgKiA8cD4KKyAqIENvZGUgc25pcHBldHMgaWxsdXN0cmF0aW5nIHRo
ZSB1c2Ugb2YgdGhlIEJyZWFrIEl0ZXJhdG9yIEFQSXMKKyAqIGFyZSBhdmFpbGFibGUgaW4gdGhl
IElDVSBVc2VyIEd1aWRlLAorICogaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy91c2VyZ3VpZGUvYm91
bmRhcnlBbmFseXNpcy5odG1sCisgKiBhbmQgaW4gdGhlIHNhbXBsZSBwcm9ncmFtIGljdS9zb3Vy
Y2Uvc2FtcGxlcy9icmVhay9icmVhay5jcHAKKyAqCisgKi8KK2NsYXNzIFVfQ09NTU9OX0FQSSBC
cmVha0l0ZXJhdG9yIDogcHVibGljIFVPYmplY3QgeworcHVibGljOgorICAgIC8qKgorICAgICAq
ICBkZXN0cnVjdG9yCisgICAgICogIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1
YWwgfkJyZWFrSXRlcmF0b3IoKTsKKworICAgIC8qKgorICAgICAqIFJldHVybiB0cnVlIGlmIGFu
b3RoZXIgb2JqZWN0IGlzIHNlbWFudGljYWxseSBlcXVhbCB0byB0aGlzCisgICAgICogb25lLiBU
aGUgb3RoZXIgb2JqZWN0IHNob3VsZCBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgc2FtZSBzdWJjbGFz
cyBvZgorICAgICAqIEJyZWFrSXRlcmF0b3IuIE9iamVjdHMgb2YgZGlmZmVyZW50IHN1YmNsYXNz
ZXMgYXJlIGNvbnNpZGVyZWQKKyAgICAgKiB1bmVxdWFsLgorICAgICAqIDxQPgorICAgICAqIFJl
dHVybiB0cnVlIGlmIHRoaXMgQnJlYWtJdGVyYXRvciBpcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBp
biB0aGUKKyAgICAgKiBzYW1lIHRleHQsIGFuZCBpcyB0aGUgc2FtZSBjbGFzcyBhbmQgdHlwZSAo
d29yZCwgbGluZSwgZXRjLikgb2YKKyAgICAgKiBCcmVha0l0ZXJhdG9yLCBhcyB0aGUgYXJndW1l
bnQuICBUZXh0IGlzIGNvbnNpZGVyZWQgdGhlIHNhbWUgaWYKKyAgICAgKiBpdCBjb250YWlucyB0
aGUgc2FtZSBjaGFyYWN0ZXJzLCBpdCBuZWVkIG5vdCBiZSB0aGUgc2FtZQorICAgICAqIG9iamVj
dCwgYW5kIHN0eWxlcyBhcmUgbm90IGNvbnNpZGVyZWQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4w
CisgICAgICovCisgICAgdmlydHVhbCBVQm9vbCBvcGVyYXRvcj09KGNvbnN0IEJyZWFrSXRlcmF0
b3ImKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjb21wbGVtZW50
IG9mIHRoZSByZXN1bHQgb2Ygb3BlcmF0b3I9PQorICAgICAqIEBwYXJhbSByaHMgVGhlIEJyZWFr
SXRlcmF0b3IgdG8gYmUgY29tcGFyZWQgZm9yIGluZXF1YWxpdHkKKyAgICAgKiBAcmV0dXJuIHRo
ZSBjb21wbGVtZW50IG9mIHRoZSByZXN1bHQgb2Ygb3BlcmF0b3I9PQorICAgICAqIEBzdGFibGUg
SUNVIDIuMAorICAgICAqLworICAgIFVCb29sIG9wZXJhdG9yIT0oY29uc3QgQnJlYWtJdGVyYXRv
ciYgcmhzKSBjb25zdCB7IHJldHVybiAhb3BlcmF0b3I9PShyaHMpOyB9CisKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm4gYSBwb2x5bW9ycGhpYyBjb3B5IG9mIHRoaXMgb2JqZWN0LiAgVGhpcyBpcyBh
biBhYnN0cmFjdAorICAgICAqIG1ldGhvZCB3aGljaCBzdWJjbGFzc2VzIGltcGxlbWVudC4KKyAg
ICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIEJyZWFrSXRlcmF0b3Iq
IGNsb25lKHZvaWQpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybiBhIHBvbHlt
b3JwaGljIGNsYXNzIElEIGZvciB0aGlzIG9iamVjdC4gRGlmZmVyZW50IHN1YmNsYXNzZXMKKyAg
ICAgKiB3aWxsIHJldHVybiBkaXN0aW5jdCB1bmVxdWFsIHZhbHVlcy4KKyAgICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIFVDbGFzc0lEIGdldER5bmFtaWNDbGFzc0lE
KHZvaWQpIGNvbnN0ID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybiBhIENoYXJhY3Rlckl0
ZXJhdG9yIG92ZXIgdGhlIHRleHQgYmVpbmcgYW5hbHl6ZWQuCisgICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCisgICAgICovCisgICAgdmlydHVhbCBDaGFyYWN0ZXJJdGVyYXRvciYgZ2V0VGV4dCh2b2lk
KSBjb25zdCA9IDA7CisKKworICAgIC8qKgorICAgICAgKiAgR2V0IGEgVVRleHQgZm9yIHRoZSB0
ZXh0IGJlaW5nIGFuYWx5emVkLgorICAgICAgKiAgVGhlIHJldHVybmVkIFVUZXh0IGlzIGEgc2hh
bGxvdyBjbG9uZSBvZiB0aGUgVVRleHQgdXNlZCBpbnRlcm5hbGx5CisgICAgICAqICBieSB0aGUg
YnJlYWsgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uICBJdCBjYW4gc2FmZWx5IGJlIHVzZWQgdG8K
KyAgICAgICogIGFjY2VzcyB0aGUgdGV4dCB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJlYWsgaXRl
cmF0b3Igb3BlcmF0aW9ucywKKyAgICAgICogIGJ1dCB0aGUgdW5kZXJseWluZyB0ZXh0IGl0c2Vs
ZiBtdXN0IG5vdCBiZSBhbHRlcmVkLgorICAgICAgKgorICAgICAgKiBAcGFyYW0gZmlsbEluIEEg
VVRleHQgdG8gYmUgZmlsbGVkIGluLiAgSWYgTlVMTCwgYSBuZXcgVVRleHQgd2lsbCBiZQorICAg
ICAgKiAgICAgICAgICAgYWxsb2NhdGVkIHRvIGhvbGQgdGhlIHJlc3VsdC4KKyAgICAgICogQHBh
cmFtIHN0YXR1cyByZWNlaXZlcyBhbnkgZXJyb3IgY29kZXMuCisgICAgICAqIEByZXR1cm4gICBU
aGUgY3VycmVudCBVVGV4dCBmb3IgdGhpcyBicmVhayBpdGVyYXRvci4gIElmIGFuIGlucHV0Cisg
ICAgICAqICAgICAgICAgICBVVGV4dCB3YXMgcHJvdmlkZWQsIGl0IHdpbGwgYWx3YXlzIGJlIHJl
dHVybmVkLgorICAgICAgKiBAc3RhYmxlIElDVSAzLjQKKyAgICAgICovCisgICAgIHZpcnR1YWwg
VVRleHQgKmdldFVUZXh0KFVUZXh0ICpmaWxsSW4sIFVFcnJvckNvZGUgJnN0YXR1cykgY29uc3Qg
PSAwOworCisgICAgLyoqCisgICAgICogQ2hhbmdlIHRoZSB0ZXh0IG92ZXIgd2hpY2ggdGhpcyBv
cGVyYXRlcy4gVGhlIHRleHQgYm91bmRhcnkgaXMKKyAgICAgKiByZXNldCB0byB0aGUgc3RhcnQu
CisgICAgICogQHBhcmFtIHRleHQgVGhlIFVuaWNvZGVTdHJpbmcgdXNlZCB0byBjaGFuZ2UgdGhl
IHRleHQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCB2b2lk
ICBzZXRUZXh0KGNvbnN0IFVuaWNvZGVTdHJpbmcgJnRleHQpID0gMDsKKworICAgIC8qKgorICAg
ICAqIFJlc2V0IHRoZSBicmVhayBpdGVyYXRvciB0byBvcGVyYXRlIG92ZXIgdGhlIHRleHQgcmVw
cmVzZW50ZWQgYnkKKyAgICAgKiB0aGUgVVRleHQuICBUaGUgaXRlcmF0b3IgcG9zaXRpb24gaXMg
cmVzZXQgdG8gdGhlIHN0YXJ0LgorICAgICAqCisgICAgICogVGhpcyBmdW5jdGlvbiBtYWtlcyBh
IHNoYWxsb3cgY2xvbmUgb2YgdGhlIHN1cHBsaWVkIFVUZXh0LiAgVGhpcyBtZWFucworICAgICAq
IHRoYXQgdGhlIGNhbGxlciBpcyBmcmVlIHRvIGltbWVkaWF0ZWx5IGNsb3NlIG9yIG90aGVyd2lz
ZSByZXVzZSB0aGUKKyAgICAgKiBVdGV4dCB0aGF0IHdhcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIs
IGJ1dCB0aGF0IHRoZSB1bmRlcmx5aW5nIHRleHQgaXRzZWxmCisgICAgICogbXVzdCBub3QgYmUg
YWx0ZXJlZCB3aGlsZSBiZWluZyByZWZlcmVuY2VkIGJ5IHRoZSBicmVhayBpdGVyYXRvci4KKyAg
ICAgKgorICAgICAqIEFsbCBpbmRleCBwb3NpdGlvbnMgcmV0dXJuZWQgYnkgYnJlYWsgaXRlcmF0
b3IgZnVuY3Rpb25zIGFyZQorICAgICAqIG5hdGl2ZSBpbmRpY2VzIGZyb20gdGhlIFVUZXh0LiBG
b3IgZXhhbXBsZSwgd2hlbiBicmVha2luZyBVVEYtOAorICAgICAqIGVuY29kZWQgdGV4dCwgdGhl
IGJyZWFrIHBvc2l0aW9ucyByZXR1cm5lZCBieSBuZXh0KCksIHByZXZpb3VzKCksIGV0Yy4KKyAg
ICAgKiB3aWxsIGJlIFVURi04IHN0cmluZyBpbmRpY2VzLCBub3QgVVRGLTE2IHBvc2l0aW9ucy4K
KyAgICAgKgorICAgICAqIEBwYXJhbSB0ZXh0IFRoZSBVVGV4dCB1c2VkIHRvIGNoYW5nZSB0aGUg
dGV4dC4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIHJlY2VpdmVzIGFueSBlcnJvciBjb2Rlcy4KKyAg
ICAgKiBAc3RhYmxlIElDVSAzLjQKKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgIHNldFRleHQo
VVRleHQgKnRleHQsIFVFcnJvckNvZGUgJnN0YXR1cykgPSAwOworCisgICAgLyoqCisgICAgICog
Q2hhbmdlIHRoZSB0ZXh0IG92ZXIgd2hpY2ggdGhpcyBvcGVyYXRlcy4gVGhlIHRleHQgYm91bmRh
cnkgaXMKKyAgICAgKiByZXNldCB0byB0aGUgc3RhcnQuCisgICAgICogTm90ZSB0aGF0IHNldFRl
eHQoVVRleHQgKikgcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5IHRvIHRoaXMgZnVuY3Rp
b24sCisgICAgICogYW5kIGlzIG1vcmUgZWZmaWNpZW50LgorICAgICAqIEBwYXJhbSBpdCBUaGUg
Q2hhcmFjdGVySXRlcmF0b3IgdXNlZCB0byBjaGFuZ2UgdGhlIHRleHQuCisgICAgICogQHN0YWJs
ZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCB2b2lkICBhZG9wdFRleHQoQ2hhcmFjdGVy
SXRlcmF0b3IqIGl0KSA9IDA7CisKKyAgICBlbnVtIHsKKyAgICAgICAgLyoqCisgICAgICAgICAq
IERPTkUgaXMgcmV0dXJuZWQgYnkgcHJldmlvdXMoKSBhbmQgbmV4dCgpIGFmdGVyIGFsbCB2YWxp
ZAorICAgICAgICAgKiBib3VuZGFyaWVzIGhhdmUgYmVlbiByZXR1cm5lZC4KKyAgICAgICAgICog
QHN0YWJsZSBJQ1UgMi4wCisgICAgICAgICAqLworICAgICAgICBET05FID0gKGludDMyX3QpLTEK
KyAgICB9OworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBpdGVyYXRpb24gcG9z
aXRpb24gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCwgcG9zaXRpb24gemVyby4KKyAgICAg
KiBAcmV0dXJuIFRoZSBvZmZzZXQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCwgemVyby4K
KyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludDMyX3QgZmly
c3Qodm9pZCkgPSAwOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpdGVyYXRvciBwb3NpdGlv
biB0byB0aGUgaW5kZXggaW1tZWRpYXRlbHkgQkVZT05EIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0
aGUgdGV4dCBiZWluZyBzY2FubmVkLgorICAgICAqIEByZXR1cm4gVGhlIGluZGV4IGltbWVkaWF0
ZWx5IEJFWU9ORCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQgYmVpbmcgc2Nhbm5lZC4K
KyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludDMyX3QgbGFz
dCh2b2lkKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGl0ZXJhdG9yIHBvc2l0aW9u
IHRvIHRoZSBib3VuZGFyeSBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgYm91bmRhcnkuCisgICAgICog
QHJldHVybiBUaGUgY2hhcmFjdGVyIGluZGV4IG9mIHRoZSBwcmV2aW91cyB0ZXh0IGJvdW5kYXJ5
IG9yIERPTkUgaWYgYWxsCisgICAgICogYm91bmRhcmllcyBoYXZlIGJlZW4gcmV0dXJuZWQuCisg
ICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBpbnQzMl90IHByZXZp
b3VzKHZvaWQpID0gMDsKKworICAgIC8qKgorICAgICAqIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRv
IHRoZSBib3VuZGFyeSBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgYm91bmRhcnkuCisgICAgICogQHJl
dHVybiBUaGUgY2hhcmFjdGVyIGluZGV4IG9mIHRoZSBuZXh0IHRleHQgYm91bmRhcnkgb3IgRE9O
RSBpZiBhbGwKKyAgICAgKiBib3VuZGFyaWVzIGhhdmUgYmVlbiByZXR1cm5lZC4KKyAgICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludDMyX3QgbmV4dCh2b2lkKSA9
IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gY2hhcmFjdGVyIGluZGV4IG9mIHRoZSBjdXJy
ZW50IGludGVyYXRvciBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQuCisgICAgICogQHJldHVybiBU
aGUgYm91bmRhcnkgbW9zdCByZWNlbnRseSByZXR1cm5lZC4KKyAgICAgKiBAc3RhYmxlIElDVSAy
LjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludDMyX3QgY3VycmVudCh2b2lkKSBjb25zdCA9IDA7
CisKKyAgICAvKioKKyAgICAgKiBBZHZhbmNlIHRoZSBpdGVyYXRvciB0byB0aGUgZmlyc3QgYm91
bmRhcnkgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgorICAgICAqIFRoZSB2YWx1ZSBy
ZXR1cm5lZCBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIHRoZSBvZmZzZXQgb3IKKyAgICAgKiB0aGUg
dmFsdWUgQnJlYWtJdGVyYXRvci5ET05FCisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0
IHRvIGJlZ2luIHNjYW5uaW5nLgorICAgICAqIEByZXR1cm4gVGhlIGZpcnN0IGJvdW5kYXJ5IGFm
dGVyIHRoZSBzcGVjaWZpZWQgb2Zmc2V0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAq
LworICAgIHZpcnR1YWwgaW50MzJfdCBmb2xsb3dpbmcoaW50MzJfdCBvZmZzZXQpID0gMDsKKwor
ICAgIC8qKgorICAgICAqIFNldCB0aGUgaXRlcmF0b3IgcG9zaXRpb24gdG8gdGhlIGZpcnN0IGJv
dW5kYXJ5IHByZWNlZGluZyB0aGUgc3BlY2lmaWVkIG9mZnNldC4KKyAgICAgKiBUaGUgdmFsdWUg
cmV0dXJuZWQgaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiB0aGUgb2Zmc2V0IG9yCisgICAgICogdGhl
IHZhbHVlIEJyZWFrSXRlcmF0b3IuRE9ORQorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNl
dCB0byBiZWdpbiBzY2FubmluZy4KKyAgICAgKiBAcmV0dXJuIFRoZSBmaXJzdCBib3VuZGFyeSBi
ZWZvcmUgdGhlIHNwZWNpZmllZCBvZmZzZXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAg
ICovCisgICAgdmlydHVhbCBpbnQzMl90IHByZWNlZGluZyhpbnQzMl90IG9mZnNldCkgPSAwOwor
CisgICAgLyoqCisgICAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNmaWVkIHBvc2l0aW9uIGlz
IGEgYm91bmRhcnkgcG9zaXRpb24uCisgICAgICogQXMgYSBzaWRlIGVmZmVjdCwgdGhlIGN1cnJl
bnQgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdG9yIGlzIHNldAorICAgICAqIHRvIHRoZSBmaXJzdCBi
b3VuZGFyeSBwb3NpdGlvbiBhdCBvciBmb2xsb3dpbmcgdGhlIHNwZWNpZmllZCBvZmZzZXQuCisg
ICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IHRvIGNoZWNrLgorICAgICAqIEByZXR1cm4g
VHJ1ZSBpZiAib2Zmc2V0IiBpcyBhIGJvdW5kYXJ5IHBvc2l0aW9uLgorICAgICAqIEBzdGFibGUg
SUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgVUJvb2wgaXNCb3VuZGFyeShpbnQzMl90IG9m
ZnNldCkgPSAwOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBpdGVyYXRvciBwb3NpdGlvbiB0
byB0aGUgbnRoIGJvdW5kYXJ5IGZyb20gdGhlIGN1cnJlbnQgYm91bmRhcnkKKyAgICAgKiBAcGFy
YW0gbiB0aGUgbnVtYmVyIG9mIGJvdW5kYXJpZXMgdG8gbW92ZSBieS4gIEEgdmFsdWUgb2YgMAor
ICAgICAqIGRvZXMgbm90aGluZy4gIE5lZ2F0aXZlIHZhbHVlcyBtb3ZlIHRvIHByZXZpb3VzIGJv
dW5kYXJpZXMKKyAgICAgKiBhbmQgcG9zaXRpdmUgdmFsdWVzIG1vdmUgdG8gbGF0ZXIgYm91bmRh
cmllcy4KKyAgICAgKiBAcmV0dXJuIFRoZSBuZXcgaXRlcmF0b3IgcG9zaXRpb24sIG9yCisgICAg
ICogRE9ORSBpZiB0aGVyZSBhcmUgZmV3ZXIgdGhhbiB8bnwgYm91bmRhcmllcyBpbiB0aGUgc3Bl
Y2ZpZWQgZGlyZWN0aW9uLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZp
cnR1YWwgaW50MzJfdCBuZXh0KGludDMyX3QgbikgPSAwOworCisgICAvKioKKyAgICAgKiBGb3Ig
UnVsZUJhc2VkQnJlYWtJdGVyYXRvcnMsIHJldHVybiB0aGUgc3RhdHVzIHRhZyBmcm9tIHRoZSAK
KyAgICAgKiBicmVhayBydWxlIHRoYXQgZGV0ZXJtaW5lZCB0aGUgbW9zdCByZWNlbnRseQorICAg
ICAqIHJldHVybmVkIGJyZWFrIHBvc2l0aW9uLgorICAgICAqIDxwPgorICAgICAqIEZvciBicmVh
ayBpdGVyYXRvciB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGEgcnVsZSBzdGF0dXMsCisgICAg
ICogYSBkZWZhdWx0IHZhbHVlIG9mIDAgaXMgcmV0dXJuZWQuCisgICAgICogPHA+CisgICAgICog
QHJldHVybiB0aGUgc3RhdHVzIGZyb20gdGhlIGJyZWFrIHJ1bGUgdGhhdCBkZXRlcm1pbmVkIHRo
ZSBtb3N0IHJlY2VudGx5CisgICAgICogICAgICAgICByZXR1cm5lZCBicmVhayBwb3NpdGlvbi4K
KyAgICAgKiBAc2VlIFJ1bGVCYXNlQnJlYWtJdGVyYXRvcjo6Z2V0UnVsZVN0YXR1cygpCisgICAg
ICogQHNlZSBVV29yZEJyZWFrCisgICAgICogQHN0YWJsZSBJQ1UgNTIKKyAgICAgKi8KKyAgICB2
aXJ0dWFsIGludDMyX3QgZ2V0UnVsZVN0YXR1cygpIGNvbnN0OworCisgICAvKioKKyAgICAqIEZv
ciBSdWxlQmFzZWRCcmVha0l0ZXJhdG9ycywgZ2V0IHRoZSBzdGF0dXMgKHRhZykgdmFsdWVzIGZy
b20gdGhlIGJyZWFrIHJ1bGUocykgCisgICAgKiB0aGF0IGRldGVybWluZWQgdGhlIG1vc3QgcmVj
ZW50bHkgcmV0dXJuZWQgYnJlYWsgcG9zaXRpb24uCisgICAgKiA8cD4KKyAgICAqIEZvciBicmVh
ayBpdGVyYXRvciB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHJ1bGUgc3RhdHVzLAorICAgICog
bm8gdmFsdWVzIGFyZSByZXR1cm5lZC4KKyAgICAqIDxwPgorICAgICogVGhlIHJldHVybmVkIHN0
YXR1cyB2YWx1ZShzKSBhcmUgc3RvcmVkIGludG8gYW4gYXJyYXkgcHJvdmlkZWQgYnkgdGhlIGNh
bGxlci4KKyAgICAqIFRoZSB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBzb3J0ZWQgKGFzY2VuZGluZykg
b3JkZXIuCisgICAgKiBJZiB0aGUgY2FwYWNpdHkgb2YgdGhlIG91dHB1dCBhcnJheSBpcyBpbnN1
ZmZpY2llbnQgdG8gaG9sZCB0aGUgZGF0YSwKKyAgICAqICB0aGUgb3V0cHV0IHdpbGwgYmUgdHJ1
bmNhdGVkIHRvIHRoZSBhdmFpbGFibGUgbGVuZ3RoLCBhbmQgYQorICAgICogIFVfQlVGRkVSX09W
RVJGTE9XX0VSUk9SIHdpbGwgYmUgc2lnbmFsZWQuCisgICAgKiA8cD4KKyAgICAqIEBzZWUgUnVs
ZUJhc2VCcmVha0l0ZXJhdG9yOjpnZXRSdWxlU3RhdHVzVmVjCisgICAgKgorICAgICogQHBhcmFt
IGZpbGxJblZlYyBhbiBhcnJheSB0byBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgc3RhdHVzIHZhbHVl
cy4KKyAgICAqIEBwYXJhbSBjYXBhY2l0eSAgdGhlIGxlbmd0aCBvZiB0aGUgc3VwcGxpZWQgdmVj
dG9yLiAgQSBsZW5ndGggb2YgemVybyBjYXVzZXMKKyAgICAqICAgICAgICAgICAgICAgICAgdGhl
IGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgbnVtYmVyIG9mIHN0YXR1cyB2YWx1ZXMsIGluIHRoZQor
ICAgICogICAgICAgICAgICAgICAgICBub3JtYWwgd2F5LCB3aXRob3V0IGF0dGVtdHBpbmcgdG8g
c3RvcmUgYW55IHZhbHVlcy4KKyAgICAqIEBwYXJhbSBzdGF0dXMgICAgcmVjZWl2ZXMgZXJyb3Ig
Y29kZXMuCisgICAgKiBAcmV0dXJuICAgICAgICAgIFRoZSBudW1iZXIgb2YgcnVsZSBzdGF0dXMg
dmFsdWVzIGZyb20gcnVsZXMgdGhhdCBkZXRlcm1pbmVkCisgICAgKiAgICAgICAgICAgICAgICAg
IHRoZSBtb3N0IHJlY2VudCBib3VuZGFyeSByZXR1cm5lZCBieSB0aGUgYnJlYWsgaXRlcmF0b3Iu
CisgICAgKiAgICAgICAgICAgICAgICAgIEluIHRoZSBldmVudCBvZiBhIFVfQlVGRkVSX09WRVJG
TE9XX0VSUk9SLCB0aGUgcmV0dXJuIHZhbHVlCisgICAgKiAgICAgICAgICAgICAgICAgIGlzIHRo
ZSB0b3RhbCBudW1iZXIgb2Ygc3RhdHVzIHZhbHVlcyB0aGF0IHdlcmUgYXZhaWxhYmxlLAorICAg
ICogICAgICAgICAgICAgICAgICBub3QgdGhlIHJlZHVjZWQgbnVtYmVyIHRoYXQgd2VyZSBhY3R1
YWxseSByZXR1cm5lZC4KKyAgICAqIEBzZWUgZ2V0UnVsZVN0YXR1cworICAgICogQHN0YWJsZSBJ
Q1UgNTIKKyAgICAqLworICAgIHZpcnR1YWwgaW50MzJfdCBnZXRSdWxlU3RhdHVzVmVjKGludDMy
X3QgKmZpbGxJblZlYywgaW50MzJfdCBjYXBhY2l0eSwgVUVycm9yQ29kZSAmc3RhdHVzKTsKKwor
ICAgIC8qKgorICAgICAqIENyZWF0ZSBCcmVha0l0ZXJhdG9yIGZvciB3b3JkLWJyZWFrcyB1c2lu
ZyB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgYSBCcmVh
a0l0ZXJhdG9yIGltcGxlbWVudGluZyB3b3JkIGJyZWFrcy4KKyAgICAgKiBXb3JkQnJlYWsgaXMg
dXNlZnVsIGZvciB3b3JkIHNlbGVjdGlvbiAoZXguIGRvdWJsZSBjbGljaykKKyAgICAgKiBAcGFy
YW0gd2hlcmUgdGhlIGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gc3RhdHVzIHRoZSBlcnJvciBjb2Rl
CisgICAgICogQHJldHVybiBBIEJyZWFrSXRlcmF0b3IgZm9yIHdvcmQtYnJlYWtzLiAgVGhlIFVF
cnJvckNvZGUmIHN0YXR1cworICAgICAqIHBhcmFtZXRlciBpcyB1c2VkIHRvIHJldHVybiBzdGF0
dXMgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXIuCisgICAgICogVG8gY2hlY2sgd2hldGhlciB0aGUg
Y29uc3RydWN0aW9uIHN1Y2NlZWRlZCBvciBub3QsIHlvdSBzaG91bGQgY2hlY2sKKyAgICAgKiB0
aGUgdmFsdWUgb2YgVV9TVUNDRVNTKGVycikuICBJZiB5b3Ugd2lzaCBtb3JlIGRldGFpbGVkIGlu
Zm9ybWF0aW9uLCB5b3UKKyAgICAgKiBjYW4gY2hlY2sgZm9yIGluZm9ybWF0aW9uYWwgZXJyb3Ig
cmVzdWx0cyB3aGljaCBzdGlsbCBpbmRpY2F0ZSBzdWNjZXNzLgorICAgICAqIFVfVVNJTkdfRkFM
TEJBQ0tfV0FSTklORyBpbmRpY2F0ZXMgdGhhdCBhIGZhbGwgYmFjayBsb2NhbGUgd2FzIHVzZWQu
ICBGb3IKKyAgICAgKiBleGFtcGxlLCAnZGVfQ0gnIHdhcyByZXF1ZXN0ZWQsIGJ1dCBub3RoaW5n
IHdhcyBmb3VuZCB0aGVyZSwgc28gJ2RlJyB3YXMKKyAgICAgKiB1c2VkLiAgVV9VU0lOR19ERUZB
VUxUX1dBUk5JTkcgaW5kaWNhdGVzIHRoYXQgdGhlIGRlZmF1bHQgbG9jYWxlIGRhdGEgd2FzCisg
ICAgICogdXNlZDsgbmVpdGhlciB0aGUgcmVxdWVzdGVkIGxvY2FsZSBub3IgYW55IG9mIGl0cyBm
YWxsIGJhY2sgbG9jYWxlcworICAgICAqIGNvdWxkIGJlIGZvdW5kLgorICAgICAqIFRoZSBjYWxs
ZXIgb3ducyB0aGUgcmV0dXJuZWQgb2JqZWN0IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRp
bmcgaXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgc3RhdGljIEJyZWFr
SXRlcmF0b3IqIFVfRVhQT1JUMgorICAgIGNyZWF0ZVdvcmRJbnN0YW5jZShjb25zdCBMb2NhbGUm
IHdoZXJlLCBVRXJyb3JDb2RlJiBzdGF0dXMpOworCisgICAgLyoqCisgICAgICogQ3JlYXRlIEJy
ZWFrSXRlcmF0b3IgZm9yIGxpbmUtYnJlYWtzIHVzaW5nIHNwZWNpZmllZCBsb2NhbGUuCisgICAg
ICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiBhIEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50aW5nIGxp
bmUgYnJlYWtzLiBMaW5lCisgICAgICogYnJlYWtzIGFyZSBsb2dpY2FsbHkgcG9zc2libGUgbGlu
ZSBicmVha3MsIGFjdHVhbCBsaW5lIGJyZWFrcyBhcmUKKyAgICAgKiB1c3VhbGx5IGRldGVybWlu
ZWQgYmFzZWQgb24gZGlzcGxheSB3aWR0aC4KKyAgICAgKiBMaW5lQnJlYWsgaXMgdXNlZnVsIGZv
ciB3b3JkIHdyYXBwaW5nIHRleHQuCisgICAgICogQHBhcmFtIHdoZXJlIHRoZSBsb2NhbGUuCisg
ICAgICogQHBhcmFtIHN0YXR1cyBUaGUgZXJyb3IgY29kZS4KKyAgICAgKiBAcmV0dXJuIEEgQnJl
YWtJdGVyYXRvciBmb3IgbGluZS1icmVha3MuICBUaGUgVUVycm9yQ29kZSYgc3RhdHVzCisgICAg
ICogcGFyYW1ldGVyIGlzIHVzZWQgdG8gcmV0dXJuIHN0YXR1cyBpbmZvcm1hdGlvbiB0byB0aGUg
dXNlci4KKyAgICAgKiBUbyBjaGVjayB3aGV0aGVyIHRoZSBjb25zdHJ1Y3Rpb24gc3VjY2VlZGVk
IG9yIG5vdCwgeW91IHNob3VsZCBjaGVjaworICAgICAqIHRoZSB2YWx1ZSBvZiBVX1NVQ0NFU1Mo
ZXJyKS4gIElmIHlvdSB3aXNoIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24sIHlvdQorICAgICAq
IGNhbiBjaGVjayBmb3IgaW5mb3JtYXRpb25hbCBlcnJvciByZXN1bHRzIHdoaWNoIHN0aWxsIGlu
ZGljYXRlIHN1Y2Nlc3MuCisgICAgICogVV9VU0lOR19GQUxMQkFDS19XQVJOSU5HIGluZGljYXRl
cyB0aGF0IGEgZmFsbCBiYWNrIGxvY2FsZSB3YXMgdXNlZC4gIEZvcgorICAgICAqIGV4YW1wbGUs
ICdkZV9DSCcgd2FzIHJlcXVlc3RlZCwgYnV0IG5vdGhpbmcgd2FzIGZvdW5kIHRoZXJlLCBzbyAn
ZGUnIHdhcworICAgICAqIHVzZWQuICBVX1VTSU5HX0RFRkFVTFRfV0FSTklORyBpbmRpY2F0ZXMg
dGhhdCB0aGUgZGVmYXVsdCBsb2NhbGUgZGF0YSB3YXMKKyAgICAgKiB1c2VkOyBuZWl0aGVyIHRo
ZSByZXF1ZXN0ZWQgbG9jYWxlIG5vciBhbnkgb2YgaXRzIGZhbGwgYmFjayBsb2NhbGVzCisgICAg
ICogY291bGQgYmUgZm91bmQuCisgICAgICogVGhlIGNhbGxlciBvd25zIHRoZSByZXR1cm5lZCBv
YmplY3QgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyBpdC4KKyAgICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICAgKi8KKyAgICBzdGF0aWMgQnJlYWtJdGVyYXRvciogVV9FWFBPUlQyCisg
ICAgY3JlYXRlTGluZUluc3RhbmNlKGNvbnN0IExvY2FsZSYgd2hlcmUsIFVFcnJvckNvZGUmIHN0
YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgQnJlYWtJdGVyYXRvciBmb3IgY2hhcmFj
dGVyLWJyZWFrcyB1c2luZyBzcGVjaWZpZWQgbG9jYWxlCisgICAgICogUmV0dXJucyBhbiBpbnN0
YW5jZSBvZiBhIEJyZWFrSXRlcmF0b3IgaW1wbGVtZW50aW5nIGNoYXJhY3RlciBicmVha3MuCisg
ICAgICogQ2hhcmFjdGVyIGJyZWFrcyBhcmUgYm91bmRhcmllcyBvZiBjb21iaW5pbmcgY2hhcmFj
dGVyIHNlcXVlbmNlcy4KKyAgICAgKiBAcGFyYW0gd2hlcmUgdGhlIGxvY2FsZS4KKyAgICAgKiBA
cGFyYW0gc3RhdHVzIFRoZSBlcnJvciBjb2RlLgorICAgICAqIEByZXR1cm4gQSBCcmVha0l0ZXJh
dG9yIGZvciBjaGFyYWN0ZXItYnJlYWtzLiAgVGhlIFVFcnJvckNvZGUmIHN0YXR1cworICAgICAq
IHBhcmFtZXRlciBpcyB1c2VkIHRvIHJldHVybiBzdGF0dXMgaW5mb3JtYXRpb24gdG8gdGhlIHVz
ZXIuCisgICAgICogVG8gY2hlY2sgd2hldGhlciB0aGUgY29uc3RydWN0aW9uIHN1Y2NlZWRlZCBv
ciBub3QsIHlvdSBzaG91bGQgY2hlY2sKKyAgICAgKiB0aGUgdmFsdWUgb2YgVV9TVUNDRVNTKGVy
cikuICBJZiB5b3Ugd2lzaCBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLCB5b3UKKyAgICAgKiBj
YW4gY2hlY2sgZm9yIGluZm9ybWF0aW9uYWwgZXJyb3IgcmVzdWx0cyB3aGljaCBzdGlsbCBpbmRp
Y2F0ZSBzdWNjZXNzLgorICAgICAqIFVfVVNJTkdfRkFMTEJBQ0tfV0FSTklORyBpbmRpY2F0ZXMg
dGhhdCBhIGZhbGwgYmFjayBsb2NhbGUgd2FzIHVzZWQuICBGb3IKKyAgICAgKiBleGFtcGxlLCAn
ZGVfQ0gnIHdhcyByZXF1ZXN0ZWQsIGJ1dCBub3RoaW5nIHdhcyBmb3VuZCB0aGVyZSwgc28gJ2Rl
JyB3YXMKKyAgICAgKiB1c2VkLiAgVV9VU0lOR19ERUZBVUxUX1dBUk5JTkcgaW5kaWNhdGVzIHRo
YXQgdGhlIGRlZmF1bHQgbG9jYWxlIGRhdGEgd2FzCisgICAgICogdXNlZDsgbmVpdGhlciB0aGUg
cmVxdWVzdGVkIGxvY2FsZSBub3IgYW55IG9mIGl0cyBmYWxsIGJhY2sgbG9jYWxlcworICAgICAq
IGNvdWxkIGJlIGZvdW5kLgorICAgICAqIFRoZSBjYWxsZXIgb3ducyB0aGUgcmV0dXJuZWQgb2Jq
ZWN0IGFuZCBpcyByZXNwb25zaWJsZSBmb3IgZGVsZXRpbmcgaXQuCisgICAgICogQHN0YWJsZSBJ
Q1UgMi4wCisgICAgICovCisgICAgc3RhdGljIEJyZWFrSXRlcmF0b3IqIFVfRVhQT1JUMgorICAg
IGNyZWF0ZUNoYXJhY3Rlckluc3RhbmNlKGNvbnN0IExvY2FsZSYgd2hlcmUsIFVFcnJvckNvZGUm
IHN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgQnJlYWtJdGVyYXRvciBmb3Igc2Vu
dGVuY2UtYnJlYWtzIHVzaW5nIHNwZWNpZmllZCBsb2NhbGUKKyAgICAgKiBSZXR1cm5zIGFuIGlu
c3RhbmNlIG9mIGEgQnJlYWtJdGVyYXRvciBpbXBsZW1lbnRpbmcgc2VudGVuY2UgYnJlYWtzLgor
ICAgICAqIEBwYXJhbSB3aGVyZSB0aGUgbG9jYWxlLgorICAgICAqIEBwYXJhbSBzdGF0dXMgVGhl
IGVycm9yIGNvZGUuCisgICAgICogQHJldHVybiBBIEJyZWFrSXRlcmF0b3IgZm9yIHNlbnRlbmNl
LWJyZWFrcy4gIFRoZSBVRXJyb3JDb2RlJiBzdGF0dXMKKyAgICAgKiBwYXJhbWV0ZXIgaXMgdXNl
ZCB0byByZXR1cm4gc3RhdHVzIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyLgorICAgICAqIFRvIGNo
ZWNrIHdoZXRoZXIgdGhlIGNvbnN0cnVjdGlvbiBzdWNjZWVkZWQgb3Igbm90LCB5b3Ugc2hvdWxk
IGNoZWNrCisgICAgICogdGhlIHZhbHVlIG9mIFVfU1VDQ0VTUyhlcnIpLiAgSWYgeW91IHdpc2gg
bW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiwgeW91CisgICAgICogY2FuIGNoZWNrIGZvciBpbmZv
cm1hdGlvbmFsIGVycm9yIHJlc3VsdHMgd2hpY2ggc3RpbGwgaW5kaWNhdGUgc3VjY2Vzcy4KKyAg
ICAgKiBVX1VTSU5HX0ZBTExCQUNLX1dBUk5JTkcgaW5kaWNhdGVzIHRoYXQgYSBmYWxsIGJhY2sg
bG9jYWxlIHdhcyB1c2VkLiAgRm9yCisgICAgICogZXhhbXBsZSwgJ2RlX0NIJyB3YXMgcmVxdWVz
dGVkLCBidXQgbm90aGluZyB3YXMgZm91bmQgdGhlcmUsIHNvICdkZScgd2FzCisgICAgICogdXNl
ZC4gIFVfVVNJTkdfREVGQVVMVF9XQVJOSU5HIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IGxv
Y2FsZSBkYXRhIHdhcworICAgICAqIHVzZWQ7IG5laXRoZXIgdGhlIHJlcXVlc3RlZCBsb2NhbGUg
bm9yIGFueSBvZiBpdHMgZmFsbCBiYWNrIGxvY2FsZXMKKyAgICAgKiBjb3VsZCBiZSBmb3VuZC4K
KyAgICAgKiBUaGUgY2FsbGVyIG93bnMgdGhlIHJldHVybmVkIG9iamVjdCBhbmQgaXMgcmVzcG9u
c2libGUgZm9yIGRlbGV0aW5nIGl0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLwor
ICAgIHN0YXRpYyBCcmVha0l0ZXJhdG9yKiBVX0VYUE9SVDIKKyAgICBjcmVhdGVTZW50ZW5jZUlu
c3RhbmNlKGNvbnN0IExvY2FsZSYgd2hlcmUsIFVFcnJvckNvZGUmIHN0YXR1cyk7CisKKyAgICAv
KioKKyAgICAgKiBDcmVhdGUgQnJlYWtJdGVyYXRvciBmb3IgdGl0bGUtY2FzaW5nIGJyZWFrcyB1
c2luZyB0aGUgc3BlY2lmaWVkIGxvY2FsZQorICAgICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2Yg
YSBCcmVha0l0ZXJhdG9yIGltcGxlbWVudGluZyB0aXRsZSBicmVha3MuCisgICAgICogVGhlIGl0
ZXJhdG9yIHJldHVybmVkIGxvY2F0ZXMgdGl0bGUgYm91bmRhcmllcyBhcyBkZXNjcmliZWQgZm9y
CisgICAgICogVW5pY29kZSAzLjIgb25seS4gRm9yIFVuaWNvZGUgNC4wIGFuZCBhYm92ZSB0aXRs
ZSBib3VuZGFyeSBpdGVyYXRpb24sCisgICAgICogcGxlYXNlIHVzZSBXb3JkIEJvdW5kYXJ5IGl0
ZXJhdG9yLntAbGluayAjY3JlYXRlV29yZEluc3RhbmNlIH0KKyAgICAgKgorICAgICAqIEBwYXJh
bSB3aGVyZSB0aGUgbG9jYWxlLgorICAgICAqIEBwYXJhbSBzdGF0dXMgVGhlIGVycm9yIGNvZGUu
CisgICAgICogQHJldHVybiBBIEJyZWFrSXRlcmF0b3IgZm9yIHRpdGxlLWJyZWFrcy4gIFRoZSBV
RXJyb3JDb2RlJiBzdGF0dXMKKyAgICAgKiBwYXJhbWV0ZXIgaXMgdXNlZCB0byByZXR1cm4gc3Rh
dHVzIGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyLgorICAgICAqIFRvIGNoZWNrIHdoZXRoZXIgdGhl
IGNvbnN0cnVjdGlvbiBzdWNjZWVkZWQgb3Igbm90LCB5b3Ugc2hvdWxkIGNoZWNrCisgICAgICog
dGhlIHZhbHVlIG9mIFVfU1VDQ0VTUyhlcnIpLiAgSWYgeW91IHdpc2ggbW9yZSBkZXRhaWxlZCBp
bmZvcm1hdGlvbiwgeW91CisgICAgICogY2FuIGNoZWNrIGZvciBpbmZvcm1hdGlvbmFsIGVycm9y
IHJlc3VsdHMgd2hpY2ggc3RpbGwgaW5kaWNhdGUgc3VjY2Vzcy4KKyAgICAgKiBVX1VTSU5HX0ZB
TExCQUNLX1dBUk5JTkcgaW5kaWNhdGVzIHRoYXQgYSBmYWxsIGJhY2sgbG9jYWxlIHdhcyB1c2Vk
LiAgRm9yCisgICAgICogZXhhbXBsZSwgJ2RlX0NIJyB3YXMgcmVxdWVzdGVkLCBidXQgbm90aGlu
ZyB3YXMgZm91bmQgdGhlcmUsIHNvICdkZScgd2FzCisgICAgICogdXNlZC4gIFVfVVNJTkdfREVG
QVVMVF9XQVJOSU5HIGluZGljYXRlcyB0aGF0IHRoZSBkZWZhdWx0IGxvY2FsZSBkYXRhIHdhcwor
ICAgICAqIHVzZWQ7IG5laXRoZXIgdGhlIHJlcXVlc3RlZCBsb2NhbGUgbm9yIGFueSBvZiBpdHMg
ZmFsbCBiYWNrIGxvY2FsZXMKKyAgICAgKiBjb3VsZCBiZSBmb3VuZC4KKyAgICAgKiBUaGUgY2Fs
bGVyIG93bnMgdGhlIHJldHVybmVkIG9iamVjdCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIGRlbGV0
aW5nIGl0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAgIHN0YXRpYyBCcmVh
a0l0ZXJhdG9yKiBVX0VYUE9SVDIKKyAgICBjcmVhdGVUaXRsZUluc3RhbmNlKGNvbnN0IExvY2Fs
ZSYgd2hlcmUsIFVFcnJvckNvZGUmIHN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhl
IHNldCBvZiBMb2NhbGVzIGZvciB3aGljaCBUZXh0Qm91bmRhcmllcyBhcmUgaW5zdGFsbGVkLgor
ICAgICAqIDxwPjxiPk5vdGU6PC9iPiB0aGlzIHdpbGwgbm90IHJldHVybiBsb2NhbGVzIGFkZGVk
IHRocm91Z2ggdGhlIHJlZ2lzdGVyCisgICAgICogY2FsbC4gVG8gc2VlIHRoZSByZWdpc3RlcmVk
IGxvY2FsZXMgdG9vLCB1c2UgdGhlIGdldEF2YWlsYWJsZUxvY2FsZXMKKyAgICAgKiBmdW5jdGlv
biB0aGF0IHJldHVybnMgYSBTdHJpbmdFbnVtZXJhdGlvbiBvYmplY3QgPC9wPgorICAgICAqIEBw
YXJhbSBjb3VudCB0aGUgb3V0cHV0IHBhcmFtZXRlciBvZiBudW1iZXIgb2YgZWxlbWVudHMgaW4g
dGhlIGxvY2FsZSBsaXN0CisgICAgICogQHJldHVybiBhdmFpbGFibGUgbG9jYWxlcworICAgICAq
IEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUqIFVfRVhQ
T1JUMiBnZXRBdmFpbGFibGVMb2NhbGVzKGludDMyX3QmIGNvdW50KTsKKworICAgIC8qKgorICAg
ICAqIEdldCBuYW1lIG9mIHRoZSBvYmplY3QgZm9yIHRoZSBkZXNpcmVkIExvY2FsZSwgaW4gdGhl
IGRlc2lyZWQgbGFuZ2F1Z2UuCisgICAgICogQHBhcmFtIG9iamVjdExvY2FsZSBtdXN0IGJlIGZy
b20gZ2V0QXZhaWxhYmxlTG9jYWxlcy4KKyAgICAgKiBAcGFyYW0gZGlzcGxheUxvY2FsZSBzcGVj
aWZpZXMgdGhlIGRlc2lyZWQgbG9jYWxlIGZvciBvdXRwdXQuCisgICAgICogQHBhcmFtIG5hbWUg
dGhlIGZpbGwtaW4gcGFyYW1ldGVyIG9mIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgKiBVc2VzIGJl
c3QgbWF0Y2guCisgICAgICogQHJldHVybiB1c2VyLWRpc3BsYXlhYmxlIG5hbWUKKyAgICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBzdGF0aWMgVW5pY29kZVN0cmluZyYgVV9FWFBP
UlQyIGdldERpc3BsYXlOYW1lKGNvbnN0IExvY2FsZSYgb2JqZWN0TG9jYWxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMb2NhbGUmIGRpc3BsYXlMb2Nh
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJp
bmcmIG5hbWUpOworCisgICAgLyoqCisgICAgICogR2V0IG5hbWUgb2YgdGhlIG9iamVjdCBmb3Ig
dGhlIGRlc2lyZWQgTG9jYWxlLCBpbiB0aGUgbGFuZ2F1Z2Ugb2YgdGhlCisgICAgICogZGVmYXVs
dCBsb2NhbGUuCisgICAgICogQHBhcmFtIG9iamVjdExvY2FsZSBtdXN0IGJlIGZyb20gZ2V0TWF0
Y2hpbmdMb2NhbGVzCisgICAgICogQHBhcmFtIG5hbWUgdGhlIGZpbGwtaW4gcGFyYW1ldGVyIG9m
IHRoZSByZXR1cm4gdmFsdWUKKyAgICAgKiBAcmV0dXJuIHVzZXItZGlzcGxheWFibGUgbmFtZQor
ICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHN0YXRpYyBVbmljb2RlU3RyaW5n
JiBVX0VYUE9SVDIgZ2V0RGlzcGxheU5hbWUoY29uc3QgTG9jYWxlJiBvYmplY3RMb2NhbGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIG5h
bWUpOworCisgICAgLyoqCisgICAgICogRGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5LiBVc2UgY2xv
bmUoKSBpbnN0ZWFkLgorICAgICAqCisgICAgICogVGhyZWFkIHNhZmUgY2xpZW50LWJ1ZmZlci1i
YXNlZCBjbG9uaW5nIG9wZXJhdGlvbgorICAgICAqICAgIERvIE5PVCBjYWxsIGRlbGV0ZSBvbiBh
IHNhZmVjbG9uZSwgc2luY2UgJ25ldycgaXMgbm90IHVzZWQgdG8gY3JlYXRlIGl0LgorICAgICAq
IEBwYXJhbSBzdGFja0J1ZmZlciB1c2VyIGFsbG9jYXRlZCBzcGFjZSBmb3IgdGhlIG5ldyBjbG9u
ZS4gSWYgTlVMTCBuZXcgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkLgorICAgICAqIElmIGJ1ZmZl
ciBpcyBub3QgbGFyZ2UgZW5vdWdoLCBuZXcgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkLgorICAg
ICAqIEBwYXJhbSBCdWZmZXJTaXplIHJlZmVyZW5jZSB0byBzaXplIG9mIGFsbG9jYXRlZCBzcGFj
ZS4KKyAgICAgKiBJZiBCdWZmZXJTaXplID09IDAsIGEgc3VmZmljaWVudCBzaXplIGZvciB1c2Ug
aW4gY2xvbmluZyB3aWxsCisgICAgICogYmUgcmV0dXJuZWQgKCdwcmUtZmxpZ2h0aW5nJykKKyAg
ICAgKiBJZiBCdWZmZXJTaXplIGlzIG5vdCBlbm91Z2ggZm9yIGEgc3RhY2stYmFzZWQgc2FmZSBj
bG9uZSwKKyAgICAgKiBuZXcgbWVtb3J5IHdpbGwgYmUgYWxsb2NhdGVkLgorICAgICAqIEBwYXJh
bSBzdGF0dXMgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgb3BlcmF0aW9uIHdlbnQgb24gc21vb3Ro
bHkgb3IgdGhlcmUgd2VyZSBlcnJvcnMKKyAgICAgKiAgQW4gaW5mb3JtYXRpb25hbCBzdGF0dXMg
dmFsdWUsIFVfU0FGRUNMT05FX0FMTE9DQVRFRF9FUlJPUiwgaXMgdXNlZCBpZiBhbnkgYWxsb2Nh
dGlvbnMgd2VyZQorICAgICAqICBuZWNlc3NhcnkuCisgICAgICogQHJldHVybiBwb2ludGVyIHRv
IHRoZSBuZXcgY2xvbmUKKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIElDVSA1Mi4gVXNlIGNs
b25lKCkgaW5zdGVhZC4KKyAgICAgKi8KKyAgICB2aXJ0dWFsIEJyZWFrSXRlcmF0b3IgKiAgY3Jl
YXRlQnVmZmVyQ2xvbmUodm9pZCAqc3RhY2tCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgJkJ1ZmZlclNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJnN0YXR1cykg
PSAwOworCisjaWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQorCisgICAgLyoqCisgICAgICog
ICBEZXRlcm1pbmUgd2hldGhlciB0aGUgQnJlYWtJdGVyYXRvciB3YXMgY3JlYXRlZCBpbiB1c2Vy
IG1lbW9yeSBieQorICAgICAqICAgY3JlYXRlQnVmZmVyQ2xvbmUoKSwgYW5kIHRodXMgc2hvdWxk
IG5vdCBiZSBkZWxldGVkLiAgU3VjaCBvYmplY3RzCisgICAgICogICBtdXN0IGJlIGNsb3NlZCBi
eSBhbiBleHBsaWNpdCBjYWxsIHRvIHRoZSBkZXN0cnVjdG9yIChub3QgZGVsZXRlKS4KKyAgICAg
KiBAZGVwcmVjYXRlZCBJQ1UgNTIuIEFsd2F5cyBkZWxldGUgdGhlIEJyZWFrSXRlcmF0b3IuCisg
ICAgICovCisgICAgaW5saW5lIFVCb29sIGlzQnVmZmVyQ2xvbmUodm9pZCk7CisKKyNlbmRpZiAv
KiBVX0hJREVfREVQUkVDQVRFRF9BUEkgKi8KKworI2lmICFVQ09ORklHX05PX1NFUlZJQ0UKKyAg
ICAvKioKKyAgICAgKiBSZWdpc3RlciBhIG5ldyBicmVhayBpdGVyYXRvciBvZiB0aGUgaW5kaWNh
dGVkIGtpbmQsIHRvIHVzZSBpbiB0aGUgZ2l2ZW4gbG9jYWxlLgorICAgICAqIFRoZSBicmVhayBp
dGVyYXRvciB3aWxsIGJlIGFkb3B0ZWQuICBDbG9uZXMgb2YgdGhlIGl0ZXJhdG9yIHdpbGwgYmUg
cmV0dXJuZWQKKyAgICAgKiBpZiBhIHJlcXVlc3QgZm9yIGEgYnJlYWsgaXRlcmF0b3Igb2YgdGhl
IGdpdmVuIGtpbmQgbWF0Y2hlcyBvciBmYWxscyBiYWNrIHRvCisgICAgICogdGhpcyBsb2NhbGUu
CisgICAgICogQmVjYXVzZSBJQ1UgbWF5IGNob29zZSB0byBjYWNoZSBCcmVha0l0ZXJhdG9ycyBp
bnRlcm5hbGx5LCB0aGlzIG11c3QKKyAgICAgKiBiZSBjYWxsZWQgYXQgYXBwbGljYXRpb24gc3Rh
cnR1cCwgcHJpb3IgdG8gYW55IGNhbGxzIHRvCisgICAgICogQnJlYWtJdGVyYXRvcjo6Y3JlYXRl
WFhYSW5zdGFuY2UgdG8gYXZvaWQgdW5kZWZpbmVkIGJlaGF2aW9yLgorICAgICAqIEBwYXJhbSB0
b0Fkb3B0IHRoZSBCcmVha0l0ZXJhdG9yIGluc3RhbmNlIHRvIGJlIGFkb3B0ZWQKKyAgICAgKiBA
cGFyYW0gbG9jYWxlIHRoZSBMb2NhbGUgZm9yIHdoaWNoIHRoaXMgaW5zdGFuY2UgaXMgdG8gYmUg
cmVnaXN0ZXJlZAorICAgICAqIEBwYXJhbSBraW5kIHRoZSB0eXBlIG9mIGl0ZXJhdG9yIGZvciB3
aGljaCB0aGlzIGluc3RhbmNlIGlzIHRvIGJlIHJlZ2lzdGVyZWQKKyAgICAgKiBAcGFyYW0gc3Rh
dHVzIHRoZSBpbi9vdXQgc3RhdHVzIGNvZGUsIG5vIHNwZWNpYWwgbWVhbmluZ3MgYXJlIGFzc2ln
bmVkCisgICAgICogQHJldHVybiBhIHJlZ2lzdHJ5IGtleSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVu
cmVnaXN0ZXIgdGhpcyBpbnN0YW5jZQorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLwor
ICAgIHN0YXRpYyBVUmVnaXN0cnlLZXkgVV9FWFBPUlQyIHJlZ2lzdGVySW5zdGFuY2UoQnJlYWtJ
dGVyYXRvciogdG9BZG9wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBMb2NhbGUmIGxvY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVQnJlYWtJdGVyYXRvclR5cGUga2luZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlJiBzdGF0dXMpOworCisgICAgLyoqCisgICAgICog
VW5yZWdpc3RlciBhIHByZXZpb3VzbHktcmVnaXN0ZXJlZCBCcmVha0l0ZXJhdG9yIHVzaW5nIHRo
ZSBrZXkgcmV0dXJuZWQgZnJvbSB0aGUKKyAgICAgKiByZWdpc3RlciBjYWxsLiAgS2V5IGJlY29t
ZXMgaW52YWxpZCBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCBhbmQgc2hvdWxkIG5vdCBiZSB1c2Vk
IGFnYWluLgorICAgICAqIFRoZSBCcmVha0l0ZXJhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtl
eSB3aWxsIGJlIGRlbGV0ZWQuCisgICAgICogQmVjYXVzZSBJQ1UgbWF5IGNob29zZSB0byBjYWNo
ZSBCcmVha0l0ZXJhdG9ycyBpbnRlcm5hbGx5LCB0aGlzIHNob3VsZAorICAgICAqIGJlIGNhbGxl
ZCBkdXJpbmcgYXBwbGljYXRpb24gc2h1dGRvd24sIGFmdGVyIGFsbCBjYWxscyB0bworICAgICAq
IEJyZWFrSXRlcmF0b3I6OmNyZWF0ZVhYWEluc3RhbmNlIHRvIGF2b2lkIHVuZGVmaW5lZCBiZWhh
dmlvci4KKyAgICAgKiBAcGFyYW0ga2V5IHRoZSByZWdpc3RyeSBrZXkgcmV0dXJuZWQgYnkgYSBw
cmV2aW91cyBjYWxsIHRvIHJlZ2lzdGVySW5zdGFuY2UKKyAgICAgKiBAcGFyYW0gc3RhdHVzIHRo
ZSBpbi9vdXQgc3RhdHVzIGNvZGUsIG5vIHNwZWNpYWwgbWVhbmluZ3MgYXJlIGFzc2lnbmVkCisg
ICAgICogQHJldHVybiBUUlVFIGlmIHRoZSBpdGVyYXRvciBmb3IgdGhlIGtleSB3YXMgc3VjY2Vz
c2Z1bGx5IHVucmVnaXN0ZXJlZAorICAgICAqIEBzdGFibGUgSUNVIDIuNAorICAgICAqLworICAg
IHN0YXRpYyBVQm9vbCBVX0VYUE9SVDIgdW5yZWdpc3RlcihVUmVnaXN0cnlLZXkga2V5LCBVRXJy
b3JDb2RlJiBzdGF0dXMpOworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgU3RyaW5nRW51bWVy
YXRpb24gb3ZlciB0aGUgbG9jYWxlcyBhdmFpbGFibGUgYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGws
CisgICAgICogaW5jbHVkaW5nIHJlZ2lzdGVyZWQgbG9jYWxlcy4KKyAgICAgKiBAcmV0dXJuIGEg
U3RyaW5nRW51bWVyYXRpb24gb3ZlciB0aGUgbG9jYWxlcyBhdmFpbGFibGUgYXQgdGhlIHRpbWUg
b2YgdGhlIGNhbGwKKyAgICAgKiBAc3RhYmxlIElDVSAyLjQKKyAgICAgKi8KKyAgICBzdGF0aWMg
U3RyaW5nRW51bWVyYXRpb24qIFVfRVhQT1JUMiBnZXRBdmFpbGFibGVMb2NhbGVzKHZvaWQpOwor
I2VuZGlmCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbGUgZm9yIHRoaXMgYnJl
YWsgaXRlcmF0b3IuIFR3byBmbGF2b3JzIGFyZSBhdmFpbGFibGU6IHZhbGlkIGFuZAorICAgICAq
IGFjdHVhbCBsb2NhbGUuCisgICAgICogQHN0YWJsZSBJQ1UgMi44CisgICAgICovCisgICAgTG9j
YWxlIGdldExvY2FsZShVTG9jRGF0YUxvY2FsZVR5cGUgdHlwZSwgVUVycm9yQ29kZSYgc3RhdHVz
KSBjb25zdDsKKworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisgICAgLyoqIEdldCB0aGUg
bG9jYWxlIGZvciB0aGlzIGJyZWFrIGl0ZXJhdG9yIG9iamVjdC4gWW91IGNhbiBjaG9vc2UgYmV0
d2VlbiB2YWxpZCBhbmQgYWN0dWFsIGxvY2FsZS4KKyAgICAgKiAgQHBhcmFtIHR5cGUgdHlwZSBv
ZiB0aGUgbG9jYWxlIHdlJ3JlIGxvb2tpbmcgZm9yICh2YWxpZCBvciBhY3R1YWwpCisgICAgICog
IEBwYXJhbSBzdGF0dXMgZXJyb3IgY29kZSBmb3IgdGhlIG9wZXJhdGlvbgorICAgICAqICBAcmV0
dXJuIHRoZSBsb2NhbGUKKyAgICAgKiAgQGludGVybmFsCisgICAgICovCisgICAgY29uc3QgY2hh
ciAqZ2V0TG9jYWxlSUQoVUxvY0RhdGFMb2NhbGVUeXBlIHR5cGUsIFVFcnJvckNvZGUmIHN0YXR1
cykgY29uc3Q7CisjZW5kaWYgIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KKworICAgIC8qKgor
ICAgICAqICBTZXQgdGhlIHN1YmplY3QgdGV4dCBzdHJpbmcgdXBvbiB3aGljaCB0aGUgYnJlYWsg
aXRlcmF0b3IgaXMgb3BlcmF0aW5nCisgICAgICogIHdpdGhvdXQgY2hhbmdpbmcgYW55IG90aGVy
IGFzcGVjdCBvZiB0aGUgbWF0Y2hpbmcgc3RhdGUuCisgICAgICogIFRoZSBuZXcgYW5kIHByZXZp
b3VzIHRleHQgc3RyaW5ncyBtdXN0IGhhdmUgdGhlIHNhbWUgY29udGVudC4KKyAgICAgKgorICAg
ICAqICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgaW4gZW52aXJvbm1lbnRzIHdo
ZXJlIElDVSBpcyBvcGVyYXRpbmcgb24KKyAgICAgKiAgc3RyaW5ncyB0aGF0IG1heSBtb3ZlIGFy
b3VuZCBpbiBtZW1vcnkuICBJdCBwcm92aWRlcyBhIG1lY2hhbmlzbSBmb3Igbm90aWZ5aW5nCisg
ICAgICogIElDVSB0aGF0IHRoZSBzdHJpbmcgaGFzIGJlZW4gcmVsb2NhdGVkLCBhbmQgcHJvdmlk
aW5nIGEgbmV3IFVUZXh0IHRvIGFjY2VzcyB0aGUKKyAgICAgKiAgc3RyaW5nIGluIGl0cyBuZXcg
cG9zaXRpb24uCisgICAgICoKKyAgICAgKiAgTm90ZSB0aGF0IHRoZSBicmVhayBpdGVyYXRvciBp
bXBsZW1lbnRhdGlvbiBuZXZlciBjb3BpZXMgdGhlIHVuZGVybHlpbmcgdGV4dAorICAgICAqICBv
ZiBhIHN0cmluZyBiZWluZyBwcm9jZXNzZWQsIGJ1dCBhbHdheXMgb3BlcmF0ZXMgZGlyZWN0bHkg
b24gdGhlIG9yaWdpbmFsIHRleHQKKyAgICAgKiAgcHJvdmlkZWQgYnkgdGhlIHVzZXIuIFJlZnJl
c2hpbmcgc2ltcGx5IGRyb3BzIHRoZSByZWZlcmVuY2VzIHRvIHRoZSBvbGQgdGV4dAorICAgICAq
ICBhbmQgcmVwbGFjZXMgdGhlbSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIG5ldy4KKyAgICAgKgor
ICAgICAqICBDYXV0aW9uOiAgdGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSB1c2VkIG9ubHkgYnkg
dmVyeSBzcGVjaWFsaXplZCwKKyAgICAgKiAgc3lzdGVtLWxldmVsIGNvZGUuICBPbmUgZXhhbXBs
ZSB1c2UgY2FzZSBpcyB3aXRoIGdhcmJhZ2UgY29sbGVjdGlvbiB0aGF0IG1vdmVzCisgICAgICog
IHRoZSB0ZXh0IGluIG1lbW9yeS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbnB1dCAgICAgIFRo
ZSBuZXcgKG1vdmVkKSB0ZXh0IHN0cmluZy4KKyAgICAgKiBAcGFyYW0gc3RhdHVzICAgICBSZWNl
aXZlcyBlcnJvcnMgZGV0ZWN0ZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICAgKiBAcmV0dXJuICAg
ICAgICAgICAqdGhpcworICAgICAqCisgICAgICogQHN0YWJsZSBJQ1UgNDkKKyAgICAgKi8KKyAg
ICB2aXJ0dWFsIEJyZWFrSXRlcmF0b3IgJnJlZnJlc2hJbnB1dFRleHQoVVRleHQgKmlucHV0LCBV
RXJyb3JDb2RlICZzdGF0dXMpID0gMDsKKworIHByaXZhdGU6CisgICAgc3RhdGljIEJyZWFrSXRl
cmF0b3IqIGJ1aWxkSW5zdGFuY2UoY29uc3QgTG9jYWxlJiBsb2MsIGNvbnN0IGNoYXIgKnR5cGUs
IGludDMyX3Qga2luZCwgVUVycm9yQ29kZSYgc3RhdHVzKTsKKyAgICBzdGF0aWMgQnJlYWtJdGVy
YXRvciogY3JlYXRlSW5zdGFuY2UoY29uc3QgTG9jYWxlJiBsb2MsIGludDMyX3Qga2luZCwgVUVy
cm9yQ29kZSYgc3RhdHVzKTsKKyAgICBzdGF0aWMgQnJlYWtJdGVyYXRvciogbWFrZUluc3RhbmNl
KGNvbnN0IExvY2FsZSYgbG9jLCBpbnQzMl90IGtpbmQsIFVFcnJvckNvZGUmIHN0YXR1cyk7CisK
KyAgICBmcmllbmQgY2xhc3MgSUNVQnJlYWtJdGVyYXRvckZhY3Rvcnk7CisgICAgZnJpZW5kIGNs
YXNzIElDVUJyZWFrSXRlcmF0b3JTZXJ2aWNlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRG8gbm90
IGVuY2xvc2UgcHJvdGVjdGVkIGRlZmF1bHQvY29weSBjb25zdHJ1Y3RvcnMgd2l0aCAjaWZuZGVm
IFVfSElERV9JTlRFUk5BTF9BUEkKKyAgICAvLyBvciBlbHNlIHRoZSBjb21waWxlciB3aWxsIGNy
ZWF0ZSBhIHB1YmxpYyBvbmVzLgorICAgIC8qKiBAaW50ZXJuYWwgKi8KKyAgICBCcmVha0l0ZXJh
dG9yKCk7CisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIEJyZWFrSXRlcmF0b3IgKGNvbnN0IEJy
ZWFrSXRlcmF0b3IgJm90aGVyKSA6IFVPYmplY3Qob3RoZXIpIHt9CisgICAgLyoqIEBpbnRlcm5h
bCAqLworICAgIEJyZWFrSXRlcmF0b3IgKGNvbnN0IExvY2FsZSYgdmFsaWQsIGNvbnN0IExvY2Fs
ZSYgYWN0dWFsKTsKK3ByaXZhdGU6CisKKyAgICAvKiogQGludGVybmFsICovCisgICAgY2hhciBh
Y3R1YWxMb2NhbGVbVUxPQ19GVUxMTkFNRV9DQVBBQ0lUWV07CisgICAgY2hhciB2YWxpZExvY2Fs
ZVtVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKKworICAgIC8qKgorICAgICAqIFRoZSBhc3NpZ25t
ZW50IG9wZXJhdG9yIGhhcyBubyByZWFsIGltcGxlbWVudGF0aW9uLgorICAgICAqIEl0J3MgcHJv
dmlkZWQgdG8gbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuIERvIG5vdCBjYWxsLgorICAgICAqLwor
ICAgIEJyZWFrSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBCcmVha0l0ZXJhdG9yJik7Cit9Owor
CisjaWZuZGVmIFVfSElERV9ERVBSRUNBVEVEX0FQSQorCitpbmxpbmUgVUJvb2wgQnJlYWtJdGVy
YXRvcjo6aXNCdWZmZXJDbG9uZSgpCit7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisjZW5kaWYg
LyogVV9ISURFX0RFUFJFQ0FURURfQVBJICovCisKK1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYg
LyogI2lmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTiAqLworCisjZW5kaWYgLy8gX0JSS0lU
RVIKKy8vZW9mCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2NoYXJpdGVyLmgg
Yi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2NoYXJpdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThkNjUwOTBh
NDBhNjA4NTk1MWM3MzMwN2Y3NGFjZjgzYmExYmJjOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XVEYvaWN1L3VuaWNvZGUvY2hhcml0ZXIuaApAQCAtMCwwICsxLDcyMiBAQAorLyoKKyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqCisqCisqICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTEsIEludGVybmF0aW9uYWwgQnVz
aW5lc3MgTWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCisqLworCisjaWZuZGVmIENIQVJJVEVSX0gKKyNkZWZp
bmUgQ0hBUklURVJfSAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1
bmljb2RlL3VvYmplY3QuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VuaXN0ci5oIgorLyoqCisgKiBc
ZmlsZQorICogXGJyaWVmIEMrKyBBUEk6IENoYXJhY3RlciBJdGVyYXRvcgorICovCisgCitVX05B
TUVTUEFDRV9CRUdJTgorLyoqCisgKiBBYnN0cmFjdCBjbGFzcyB0aGF0IGRlZmluZXMgYW4gQVBJ
IGZvciBmb3J3YXJkLW9ubHkgaXRlcmF0aW9uCisgKiBvbiB0ZXh0IG9iamVjdHMuCisgKiBUaGlz
IGlzIGEgbWluaW1hbCBpbnRlcmZhY2UgZm9yIGl0ZXJhdGlvbiB3aXRob3V0IHJhbmRvbSBhY2Nl
c3MKKyAqIG9yIGJhY2t3YXJkcyBpdGVyYXRpb24uIEl0IGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZv
ciB3cmFwcGluZworICogc3RyZWFtcyB3aXRoIGNvbnZlcnRlcnMgaW50byBhbiBvYmplY3QgZm9y
IGNvbGxhdGlvbiBvcgorICogbm9ybWFsaXphdGlvbi4KKyAqCisgKiA8cD5DaGFyYWN0ZXJzIGNh
biBiZSBhY2Nlc3NlZCBpbiB0d28gd2F5czogYXMgY29kZSB1bml0cyBvciBhcworICogY29kZSBw
b2ludHMuCisgKiBVbmljb2RlIGNvZGUgcG9pbnRzIGFyZSAyMS1iaXQgaW50ZWdlcnMgYW5kIGFy
ZSB0aGUgc2NhbGFyIHZhbHVlcworICogb2YgVW5pY29kZSBjaGFyYWN0ZXJzLiBJQ1UgdXNlcyB0
aGUgdHlwZSBVQ2hhcjMyIGZvciB0aGVtLgorICogVW5pY29kZSBjb2RlIHVuaXRzIGFyZSB0aGUg
c3RvcmFnZSB1bml0cyBvZiBhIGdpdmVuCisgKiBVbmljb2RlL1VDUyBUcmFuc2Zvcm1hdGlvbiBG
b3JtYXQgKGEgY2hhcmFjdGVyIGVuY29kaW5nIHNjaGVtZSkuCisgKiBXaXRoIFVURi0xNiwgYWxs
IGNvZGUgcG9pbnRzIGNhbiBiZSByZXByZXNlbnRlZCB3aXRoIGVpdGhlciBvbmUKKyAqIG9yIHR3
byBjb2RlIHVuaXRzICgic3Vycm9nYXRlcyIpLgorICogU3RyaW5nIHN0b3JhZ2UgaXMgdHlwaWNh
bGx5IGJhc2VkIG9uIGNvZGUgdW5pdHMsIHdoaWxlIHByb3BlcnRpZXMKKyAqIG9mIGNoYXJhY3Rl
cnMgYXJlIHR5cGljYWxseSBkZXRlcm1pbmVkIHVzaW5nIGNvZGUgcG9pbnQgdmFsdWVzLgorICog
U29tZSBwcm9jZXNzZXMgbWF5IGJlIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCBzZXF1ZW5jZXMgb2Yg
Y29kZSB1bml0cywKKyAqIG9yIGl0IG1heSBiZSBrbm93biB0aGF0IGFsbCBjaGFyYWN0ZXJzIHRo
YXQgYXJlIGltcG9ydGFudCB0byBhbgorICogYWxnb3JpdGhtIGNhbiBiZSByZXByZXNlbnRlZCB3
aXRoIHNpbmdsZSBjb2RlIHVuaXRzLgorICogT3RoZXIgcHJvY2Vzc2VzIHdpbGwgbmVlZCB0byB1
c2UgdGhlIGNvZGUgcG9pbnQgYWNjZXNzIGZ1bmN0aW9ucy48L3A+CisgKgorICogPHA+Rm9yd2Fy
ZENoYXJhY3Rlckl0ZXJhdG9yIHByb3ZpZGVzIG5leHRQb3N0SW5jKCkgdG8gYWNjZXNzCisgKiBh
IGNvZGUgdW5pdCBhbmQgYWR2YW5jZSBhbiBpbnRlcm5hbCBwb3NpdGlvbiBpbnRvIHRoZSB0ZXh0
IG9iamVjdCwKKyAqIHNpbWlsYXIgdG8gYSA8Y29kZT5yZXR1cm4gdGV4dFtwb3NpdGlvbisrXTwv
Y29kZT4uPGJyPgorICogSXQgcHJvdmlkZXMgbmV4dDMyUG9zdEluYygpIHRvIGFjY2VzcyBhIGNv
ZGUgcG9pbnQgYW5kIGFkdmFuY2UgYW4gaW50ZXJuYWwKKyAqIHBvc2l0aW9uLjwvcD4KKyAqCisg
KiA8cD5uZXh0MzJQb3N0SW5jKCkgYXNzdW1lcyB0aGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uIGlz
IHRoYXQgb2YKKyAqIHRoZSBiZWdpbm5pbmcgb2YgYSBjb2RlIHBvaW50LCBpLmUuLCBvZiBpdHMg
Zmlyc3QgY29kZSB1bml0LgorICogQWZ0ZXIgbmV4dDMyUG9zdEluYygpLCB0aGlzIHdpbGwgYmUg
dHJ1ZSBhZ2Fpbi4KKyAqIEluIGdlbmVyYWwsIGFjY2VzcyB0byBjb2RlIHVuaXRzIGFuZCBjb2Rl
IHBvaW50cyBpbiB0aGUgc2FtZQorICogaXRlcmF0aW9uIGxvb3Agc2hvdWxkIG5vdCBiZSBtaXhl
ZC4gSW4gVVRGLTE2LCBpZiB0aGUgY3VycmVudCBwb3NpdGlvbgorICogaXMgb24gYSBzZWNvbmQg
Y29kZSB1bml0IChMb3cgU3Vycm9nYXRlKSwgdGhlbiBvbmx5IHRoYXQgY29kZSB1bml0CisgKiBp
cyByZXR1cm5lZCBldmVuIGJ5IG5leHQzMlBvc3RJbmMoKS48L3A+CisgKgorICogPHA+Rm9yIGl0
ZXJhdGlvbiB3aXRoIGVpdGhlciBmdW5jdGlvbiwgdGhlcmUgYXJlIHR3byB3YXlzIHRvCisgKiBj
aGVjayBmb3IgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLiBXaGVuIHRoZXJlIGFyZSBubyBtb3Jl
CisgKiBjaGFyYWN0ZXJzIGluIHRoZSB0ZXh0IG9iamVjdDoKKyAqIDx1bD4KKyAqIDxsaT5UaGUg
aGFzTmV4dCgpIGZ1bmN0aW9uIHJldHVybnMgRkFMU0UuPC9saT4KKyAqIDxsaT5uZXh0UG9zdElu
YygpIGFuZCBuZXh0MzJQb3N0SW5jKCkgcmV0dXJuIERPTkUKKyAqICAgICB3aGVuIG9uZSBhdHRl
bXB0cyB0byByZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB0ZXh0IG9iamVjdC48L2xpPgorICog
PC91bD4KKyAqCisgKiBFeGFtcGxlOgorICogXGNvZGUgCisgKiB2b2lkIGZ1bmN0aW9uMShGb3J3
YXJkQ2hhcmFjdGVySXRlcmF0b3IgJml0KSB7CisgKiAgICAgVUNoYXIzMiBjOworICogICAgIHdo
aWxlKGl0Lmhhc05leHQoKSkgeworICogICAgICAgICBjPWl0Lm5leHQzMlBvc3RJbmMoKTsKKyAq
ICAgICAgICAgLy8gdXNlIGMKKyAqICAgICB9CisgKiB9CisgKgorICogdm9pZCBmdW5jdGlvbjEo
Rm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yICZpdCkgeworICogICAgIFVDaGFyIGM7CisgKiAgICAg
d2hpbGUoKGM9aXQubmV4dFBvc3RJbmMoKSkhPUZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcjo6RE9O
RSkgeworICogICAgICAgICAvLyB1c2UgYworICogICAgICB9CisgKiAgfQorICogXGVuZGNvZGUK
KyAqIDwvcD4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworY2xhc3MgVV9DT01NT05fQVBJ
IEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciA6IHB1YmxpYyBVT2JqZWN0IHsKK3B1YmxpYzoKKyAg
ICAvKioKKyAgICAgKiBWYWx1ZSByZXR1cm5lZCBieSBtb3N0IG9mIEZvcndhcmRDaGFyYWN0ZXJJ
dGVyYXRvcidzIGZ1bmN0aW9ucworICAgICAqIHdoZW4gdGhlIGl0ZXJhdG9yIGhhcyByZWFjaGVk
IHRoZSBsaW1pdHMgb2YgaXRzIGl0ZXJhdGlvbi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAg
ICAgKi8KKyAgICBlbnVtIHsgRE9ORSA9IDB4ZmZmZiB9OworICAgIAorICAgIC8qKgorICAgICAq
IERlc3RydWN0b3IuICAKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0
dWFsIH5Gb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBS
ZXR1cm5zIHRydWUgd2hlbiBib3RoIGl0ZXJhdG9ycyByZWZlciB0byB0aGUgc2FtZQorICAgICAq
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSBjaGFyYWN0ZXItc3RvcmFnZSBvYmplY3QuICAKKyAgICAg
KiBAcGFyYW0gdGhhdCBUaGUgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yIHRvIGJlIGNvbXBhcmVk
IGZvciBlcXVhbGl0eQorICAgICAqIEByZXR1cm4gdHJ1ZSB3aGVuIGJvdGggaXRlcmF0b3JzIHJl
ZmVyIHRvIHRoZSBzYW1lCisgICAgICogY2hhcmFjdGVyIGluIHRoZSBzYW1lIGNoYXJhY3Rlci1z
dG9yYWdlIG9iamVjdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1
YWwgVUJvb2wgb3BlcmF0b3I9PShjb25zdCBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3ImIHRoYXQp
IGNvbnN0ID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgd2hlbiB0aGUg
aXRlcmF0b3JzIHJlZmVyIHRvIGRpZmZlcmVudAorICAgICAqIHRleHQtc3RvcmFnZSBvYmplY3Rz
LCBvciB0byBkaWZmZXJlbnQgY2hhcmFjdGVycyBpbiB0aGUKKyAgICAgKiBzYW1lIHRleHQtc3Rv
cmFnZSBvYmplY3QuICAKKyAgICAgKiBAcGFyYW0gdGhhdCBUaGUgRm9yd2FyZENoYXJhY3Rlckl0
ZXJhdG9yIHRvIGJlIGNvbXBhcmVkIGZvciBpbmVxdWFsaXR5CisgICAgICogQHJldHVybiB0cnVl
IHdoZW4gdGhlIGl0ZXJhdG9ycyByZWZlciB0byBkaWZmZXJlbnQKKyAgICAgKiB0ZXh0LXN0b3Jh
Z2Ugb2JqZWN0cywgb3IgdG8gZGlmZmVyZW50IGNoYXJhY3RlcnMgaW4gdGhlCisgICAgICogc2Ft
ZSB0ZXh0LXN0b3JhZ2Ugb2JqZWN0CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisg
ICAgaW5saW5lIFVCb29sIG9wZXJhdG9yIT0oY29uc3QgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9y
JiB0aGF0KSBjb25zdDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgYSBoYXNoIGNv
ZGUgZm9yIHRoaXMgaXRlcmF0b3IuICAKKyAgICAgKiBAcmV0dXJuIHRoZSBoYXNoIGNvZGUuCisg
ICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBpbnQzMl90IGhhc2hD
b2RlKHZvaWQpIGNvbnN0ID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgVUNs
YXNzSUQgZm9yIHRoaXMgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yICgicG9vciBtYW4ncworICAg
ICAqIFJUVEkiKS48UD4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgcHVi
bGljLAorICAgICAqIERPIE5PVCBDT05TSURFUiBJVCBQQVJUIE9GIENIQVJBQ1RFUklURVJBVE9S
J1MgQVBJISAKKyAgICAgKiBAcmV0dXJuIGEgVUNsYXNzSUQgZm9yIHRoaXMgRm9yd2FyZENoYXJh
Y3Rlckl0ZXJhdG9yIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1
YWwgVUNsYXNzSUQgZ2V0RHluYW1pY0NsYXNzSUQodm9pZCkgY29uc3QgPSAwOworICAgIAorICAg
IC8qKgorICAgICAqIEdldHMgdGhlIGN1cnJlbnQgY29kZSB1bml0IGZvciByZXR1cm5pbmcgYW5k
IGFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgdW5pdAorICAgICAqIGluIHRoZSBpdGVyYXRpb24g
cmFuZ2UKKyAgICAgKiAodG93YXJkIGVuZEluZGV4KCkpLiAgSWYgdGhlcmUgYXJlCisgICAgICog
bm8gbW9yZSBjb2RlIHVuaXRzIHRvIHJldHVybiwgcmV0dXJucyBET05FLgorICAgICAqIEByZXR1
cm4gdGhlIGN1cnJlbnQgY29kZSB1bml0LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAq
LworICAgIHZpcnR1YWwgVUNoYXIgICAgICAgICBuZXh0UG9zdEluYyh2b2lkKSA9IDA7CisgICAg
CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgY3VycmVudCBjb2RlIHBvaW50IGZvciByZXR1cm5p
bmcgYW5kIGFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgcG9pbnQKKyAgICAgKiBpbiB0aGUgaXRl
cmF0aW9uIHJhbmdlCisgICAgICogKHRvd2FyZCBlbmRJbmRleCgpKS4gIElmIHRoZXJlIGFyZQor
ICAgICAqIG5vIG1vcmUgY29kZSBwb2ludHMgdG8gcmV0dXJuLCByZXR1cm5zIERPTkUuCisgICAg
ICogQHJldHVybiB0aGUgY3VycmVudCBjb2RlIHBvaW50LgorICAgICAqIEBzdGFibGUgSUNVIDIu
MAorICAgICAqLworICAgIHZpcnR1YWwgVUNoYXIzMiAgICAgICBuZXh0MzJQb3N0SW5jKHZvaWQp
ID0gMDsKKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIEZBTFNFIGlmIHRoZXJlIGFyZSBu
byBtb3JlIGNvZGUgdW5pdHMgb3IgY29kZSBwb2ludHMKKyAgICAgKiBhdCBvciBhZnRlciB0aGUg
Y3VycmVudCBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLgorICAgICAqIFRoaXMgaXMg
dXNlZCB3aXRoIG5leHRQb3N0SW5jKCkgb3IgbmV4dDMyUG9zdEluYygpIGluIGZvcndhcmQKKyAg
ICAgKiBpdGVyYXRpb24uCisgICAgICogQHJldHVybnMgRkFMU0UgaWYgdGhlcmUgYXJlIG5vIG1v
cmUgY29kZSB1bml0cyBvciBjb2RlIHBvaW50cworICAgICAqIGF0IG9yIGFmdGVyIHRoZSBjdXJy
ZW50IHBvc2l0aW9uIGluIHRoZSBpdGVyYXRpb24gcmFuZ2UuCisgICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCisgICAgICovCisgICAgdmlydHVhbCBVQm9vbCAgICAgICAgaGFzTmV4dCgpID0gMDsKKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICAvKiogRGVmYXVsdCBjb25zdHJ1Y3RvciB0byBiZSBvdmVycmlk
ZGVuIGluIHRoZSBpbXBsZW1lbnRpbmcgY2xhc3MuIEBzdGFibGUgSUNVIDIuMCovCisgICAgRm9y
d2FyZENoYXJhY3Rlckl0ZXJhdG9yKCk7CisgICAgCisgICAgLyoqIENvcHkgY29uc3RydWN0b3Ig
dG8gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgaW1wbGVtZW50aW5nIGNsYXNzLiBAc3RhYmxlIElDVSAy
LjAqLworICAgIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcihjb25zdCBGb3J3YXJkQ2hhcmFjdGVy
SXRlcmF0b3IgJm90aGVyKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBBc3NpZ25tZW50IG9wZXJh
dG9yIHRvIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGltcGxlbWVudGluZyBjbGFzcy4KKyAgICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IgJm9w
ZXJhdG9yPShjb25zdCBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3ImKSB7IHJldHVybiAqdGhpczsg
fQorfTsKKworLyoqCisgKiBBYnN0cmFjdCBjbGFzcyB0aGF0IGRlZmluZXMgYW4gQVBJIGZvciBp
dGVyYXRpb24KKyAqIG9uIHRleHQgb2JqZWN0cy4KKyAqIFRoaXMgaXMgYW4gaW50ZXJmYWNlIGZv
ciBmb3J3YXJkIGFuZCBiYWNrd2FyZCBpdGVyYXRpb24KKyAqIGFuZCByYW5kb20gYWNjZXNzIGlu
dG8gYSB0ZXh0IG9iamVjdC4KKyAqCisgKiA8cD5UaGUgQVBJIHByb3ZpZGVzIGJhY2t3YXJkIGNv
bXBhdGliaWxpdHkgdG8gdGhlIEphdmEgYW5kIG9sZGVyIElDVQorICogQ2hhcmFjdGVySXRlcmF0
b3IgY2xhc3NlcyBidXQgZXh0ZW5kcyB0aGVtIHNpZ25pZmljYW50bHk6CisgKiA8b2w+CisgKiA8
bGk+Q2hhcmFjdGVySXRlcmF0b3IgaXMgbm93IGEgc3ViY2xhc3Mgb2YgRm9yd2FyZENoYXJhY3Rl
ckl0ZXJhdG9yLjwvbGk+CisgKiA8bGk+V2hpbGUgdGhlIG9sZCBBUEkgZnVuY3Rpb25zIHByb3Zp
ZGVkIGZvcndhcmQgaXRlcmF0aW9uIHdpdGgKKyAqICAgICAicHJlLWluY3JlbWVudCIgc2VtYW50
aWNzLCB0aGUgbmV3IG9uZSBhbHNvIHByb3ZpZGVzIGZ1bmN0aW9ucworICogICAgIHdpdGggInBv
c3QtaW5jcmVtZW50IiBzZW1hbnRpY3MuIFRoZXkgYXJlIG1vcmUgZWZmaWNpZW50IGFuZCBzaG91
bGQKKyAqICAgICBiZSB0aGUgcHJlZmVycmVkIGl0ZXJhdG9yIGZ1bmN0aW9ucyBmb3IgbmV3IGlt
cGxlbWVudGF0aW9ucy4KKyAqICAgICBUaGUgYmFja3dhcmQgaXRlcmF0aW9uIGFsd2F5cyBoYWQg
InByZS1kZWNyZW1lbnQiIHNlbWFudGljcywgd2hpY2gKKyAqICAgICBhcmUgZWZmaWNpZW50Ljwv
bGk+CisgKiA8bGk+SnVzdCBsaWtlIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciwgaXQgcHJvdmlk
ZXMgYWNjZXNzIHRvCisgKiAgICAgYm90aCBjb2RlIHVuaXRzIGFuZCBjb2RlIHBvaW50cy4gQ29k
ZSBwb2ludCBhY2Nlc3MgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZQorICogICAgIGZvciB0aGUgb2xk
IGFuZCB0aGUgbmV3IGl0ZXJhdGlvbiBzZW1hbnRpY3MuPC9saT4KKyAqIDxsaT5UaGVyZSBhcmUg
bmV3IGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgbW92aW5nIHRoZSBjdXJyZW50IHBvc2l0aW9u
CisgKiAgICAgd2l0aG91dCByZXR1cm5pbmcgYSBjaGFyYWN0ZXIsIGZvciBlZmZpY2llbmN5Ljwv
bGk+CisgKiA8L29sPgorICoKKyAqIFNlZSBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IgZm9yIGV4
YW1wbGVzIGZvciB1c2luZyB0aGUgbmV3IGZvcndhcmQgaXRlcmF0aW9uCisgKiBmdW5jdGlvbnMu
IEZvciBiYWNrd2FyZCBpdGVyYXRpb24sIHRoZXJlIGlzIGFsc28gYSBoYXNQcmV2aW91cygpIGZ1
bmN0aW9uCisgKiB0aGF0IGNhbiBiZSB1c2VkIGFuYWxvZ291c2x5IHRvIGhhc05leHQoKS4KKyAq
IFRoZSBvbGQgZnVuY3Rpb25zIHdvcmsgYXMgYmVmb3JlIGFuZCBhcmUgc2hvd24gYmVsb3cuPC9w
PgorICoKKyAqIDxwPkV4YW1wbGVzIGZvciBzb21lIG9mIHRoZSBuZXcgZnVuY3Rpb25zOjwvcD4K
KyAqCisgKiBGb3J3YXJkIGl0ZXJhdGlvbiB3aXRoIGhhc05leHQoKToKKyAqIFxjb2RlCisgKiB2
b2lkIGZvcndhcmQxKENoYXJhY3Rlckl0ZXJhdG9yICZpdCkgeworICogICAgIFVDaGFyMzIgYzsK
KyAqICAgICBmb3IoaXQuc2V0VG9TdGFydCgpOyBpdC5oYXNOZXh0KCk7KSB7CisgKiAgICAgICAg
IGM9aXQubmV4dDMyUG9zdEluYygpOworICogICAgICAgICAvLyB1c2UgYworICogICAgIH0KKyAq
ICB9CisgKiBcZW5kY29kZQorICogRm9yd2FyZCBpdGVyYXRpb24gbW9yZSBzaW1pbGFyIHRvIGxv
b3BzIHdpdGggdGhlIG9sZCBmb3J3YXJkIGl0ZXJhdGlvbiwKKyAqIHNob3dpbmcgYSB3YXkgdG8g
Y29udmVydCBzaW1wbGUgZm9yKCkgbG9vcHM6CisgKiBcY29kZQorICogdm9pZCBmb3J3YXJkMihD
aGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKKyAqICAgICBVQ2hhciBjOworICogICAgIGZvcihjPWl0
LmZpcnN0UG9zdEluYygpOyBjIT1DaGFyYWN0ZXJJdGVyYXRvcjo6RE9ORTsgYz1pdC5uZXh0UG9z
dEluYygpKSB7CisgKiAgICAgICAgICAvLyB1c2UgYworICogICAgICB9CisgKiB9CisgKiBcZW5k
Y29kZQorICogQmFja3dhcmQgaXRlcmF0aW9uIHdpdGggc2V0VG9FbmQoKSBhbmQgaGFzUHJldmlv
dXMoKToKKyAqIFxjb2RlCisgKiAgdm9pZCBiYWNrd2FyZDEoQ2hhcmFjdGVySXRlcmF0b3IgJml0
KSB7CisgKiAgICAgIFVDaGFyMzIgYzsKKyAqICAgICAgZm9yKGl0LnNldFRvRW5kKCk7IGl0Lmhh
c1ByZXZpb3VzKCk7KSB7CisgKiAgICAgICAgIGM9aXQucHJldmlvdXMzMigpOworICogICAgICAg
ICAgLy8gdXNlIGMKKyAqICAgICAgfQorICogIH0KKyAqIFxlbmRjb2RlCisgKiBCYWNrd2FyZCBp
dGVyYXRpb24gd2l0aCBhIG1vcmUgdHJhZGl0aW9uYWwgZm9yKCkgbG9vcDoKKyAqIFxjb2RlCisg
KiB2b2lkIGJhY2t3YXJkMihDaGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKKyAqICAgICBVQ2hhciBj
OworICogICAgIGZvcihjPWl0Lmxhc3QoKTsgYyE9Q2hhcmFjdGVySXRlcmF0b3I6OkRPTkU7IGM9
aXQucHJldmlvdXMoKSkgeworICogICAgICAgICAvLyB1c2UgYworICogICAgICB9CisgKiAgfQor
ICogXGVuZGNvZGUKKyAqCisgKiBFeGFtcGxlIGZvciByYW5kb20gYWNjZXNzOgorICogXGNvZGUK
KyAqICB2b2lkIHJhbmRvbShDaGFyYWN0ZXJJdGVyYXRvciAmaXQpIHsKKyAqICAgICAgLy8gc2V0
IHRvIHRoZSB0aGlyZCBjb2RlIHBvaW50IGZyb20gdGhlIGJlZ2lubmluZworICogICAgICBpdC5t
b3ZlMzIoMywgQ2hhcmFjdGVySXRlcmF0b3I6OmtTdGFydCk7CisgKiAgICAgIC8vIGdldCBhIGNv
ZGUgcG9pbnQgZnJvbSBoZXJlIHdpdGhvdXQgbW92aW5nIHRoZSBwb3NpdGlvbgorICogICAgICBV
Q2hhcjMyIGM9aXQuY3VycmVudDMyKCk7CisgKiAgICAgIC8vIGdldCB0aGUgcG9zaXRpb24KKyAq
ICAgICAgaW50MzJfdCBwb3M9aXQuZ2V0SW5kZXgoKTsKKyAqICAgICAgLy8gZ2V0IHRoZSBwcmV2
aW91cyBjb2RlIHVuaXQKKyAqICAgICAgVUNoYXIgdT1pdC5wcmV2aW91cygpOworICogICAgICAv
LyBtb3ZlIGJhY2sgb25lIG1vcmUgY29kZSB1bml0CisgKiAgICAgIGl0Lm1vdmUoLTEsIENoYXJh
Y3Rlckl0ZXJhdG9yOjprQ3VycmVudCk7CisgKiAgICAgIC8vIHNldCB0aGUgcG9zaXRpb24gYmFj
ayB0byB3aGVyZSBpdCB3YXMKKyAqICAgICAgLy8gYW5kIHJlYWQgdGhlIHNhbWUgY29kZSBwb2lu
dCBjIGFuZCBtb3ZlIGJleW9uZCBpdAorICogICAgICBpdC5zZXRJbmRleChwb3MpOworICogICAg
ICBpZihjIT1pdC5uZXh0MzJQb3N0SW5jKCkpIHsKKyAqICAgICAgICAgIGV4aXQoMSk7IC8vIENo
YXJhY3Rlckl0ZXJhdG9yIGluY29uc2lzdGVudAorICogICAgICB9CisgKiAgfQorICogXGVuZGNv
ZGUKKyAqCisgKiA8cD5FeGFtcGxlcywgZXNwZWNpYWxseSBmb3IgdGhlIG9sZCBBUEk6PC9wPgor
ICoKKyAqIEZ1bmN0aW9uIHByb2Nlc3NpbmcgY2hhcmFjdGVycywgaW4gdGhpcyBleGFtcGxlIHNp
bXBsZSBvdXRwdXQKKyAqIDxwcmU+CisgKiBcY29kZQorICogIHZvaWQgcHJvY2Vzc0NoYXIoIFVD
aGFyIGMgKQorICogIHsKKyAqICAgICAgY291dCA8PCAiICIgPDwgYzsKKyAqICB9CisgKiBcZW5k
Y29kZQorICogPC9wcmU+CisgKiBUcmF2ZXJzZSB0aGUgdGV4dCBmcm9tIHN0YXJ0IHRvIGZpbmlz
aAorICogPHByZT4gCisgKiBcY29kZQorICogIHZvaWQgdHJhdmVyc2VGb3J3YXJkKENoYXJhY3Rl
ckl0ZXJhdG9yJiBpdGVyKQorICogIHsKKyAqICAgICAgZm9yKFVDaGFyIGMgPSBpdGVyLmZpcnN0
KCk7IGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORTsgYyA9IGl0ZXIubmV4dCgpKSB7CisgKiAg
ICAgICAgICBwcm9jZXNzQ2hhcihjKTsKKyAqICAgICAgfQorICogIH0KKyAqIFxlbmRjb2RlCisg
KiA8L3ByZT4KKyAqIFRyYXZlcnNlIHRoZSB0ZXh0IGJhY2t3YXJkcywgZnJvbSBlbmQgdG8gc3Rh
cnQKKyAqIDxwcmU+CisgKiBcY29kZQorICogIHZvaWQgdHJhdmVyc2VCYWNrd2FyZChDaGFyYWN0
ZXJJdGVyYXRvciYgaXRlcikKKyAqICB7CisgKiAgICAgIGZvcihVQ2hhciBjID0gaXRlci5sYXN0
KCk7IGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORTsgYyA9IGl0ZXIucHJldmlvdXMoKSkgewor
ICogICAgICAgICAgcHJvY2Vzc0NoYXIoYyk7CisgKiAgICAgIH0KKyAqICB9CisgKiBcZW5kY29k
ZQorICogPC9wcmU+CisgKiBUcmF2ZXJzZSBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkIGZyb20g
YSBnaXZlbiBwb3NpdGlvbiBpbiB0aGUgdGV4dC4gCisgKiBDYWxscyB0byBub3RCb3VuZGFyeSgp
IGluIHRoaXMgZXhhbXBsZSByZXByZXNlbnRzIHNvbWUgYWRkaXRpb25hbCBzdG9wcGluZyBjcml0
ZXJpYS4KKyAqIDxwcmU+CisgKiBcY29kZQorICogdm9pZCB0cmF2ZXJzZU91dChDaGFyYWN0ZXJJ
dGVyYXRvciYgaXRlciwgaW50MzJfdCBwb3MpCisgKiB7CisgKiAgICAgIFVDaGFyIGM7CisgKiAg
ICAgIGZvciAoYyA9IGl0ZXIuc2V0SW5kZXgocG9zKTsKKyAqICAgICAgYyAhPSBDaGFyYWN0ZXJJ
dGVyYXRvci5ET05FICYmIChVbmljb2RlOjppc0xldHRlcihjKSB8fCBVbmljb2RlOjppc0RpZ2l0
KGMpKTsKKyAqICAgICAgICAgIGMgPSBpdGVyLm5leHQoKSkge30KKyAqICAgICAgaW50MzJfdCBl
bmQgPSBpdGVyLmdldEluZGV4KCk7CisgKiAgICAgIGZvciAoYyA9IGl0ZXIuc2V0SW5kZXgocG9z
KTsKKyAqICAgICAgICAgIGMgIT0gQ2hhcmFjdGVySXRlcmF0b3IuRE9ORSAmJiAoVW5pY29kZTo6
aXNMZXR0ZXIoYykgfHwgVW5pY29kZTo6aXNEaWdpdChjKSk7CisgKiAgICAgICAgICBjID0gaXRl
ci5wcmV2aW91cygpKSB7fQorICogICAgICBpbnQzMl90IHN0YXJ0ID0gaXRlci5nZXRJbmRleCgp
ICsgMTsKKyAqICAKKyAqICAgICAgY291dCA8PCAic3RhcnQ6ICIgPDwgc3RhcnQgPDwgIiBlbmQ6
ICIgPDwgZW5kIDw8IGVuZGw7CisgKiAgICAgIGZvciAoYyA9IGl0ZXIuc2V0SW5kZXgoc3RhcnQp
OyBpdGVyLmdldEluZGV4KCkgPCBlbmQ7IGMgPSBpdGVyLm5leHQoKSApIHsKKyAqICAgICAgICAg
IHByb2Nlc3NDaGFyKGMpOworICogICAgIH0KKyAqICB9CisgKiBcZW5kY29kZQorICogPC9wcmU+
CisgKiBDcmVhdGluZyBhIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIGFuZCBjYWxsaW5nIHRoZSB0
ZXN0IGZ1bmN0aW9ucworICogPHByZT4KKyAqIFxjb2RlCisgKiAgdm9pZCBDaGFyYWN0ZXJJdGVy
YXRvcl9FeGFtcGxlKCB2b2lkICkKKyAqICAgeworICogICAgICAgY291dCA8PCBlbmRsIDw8ICI9
PT09PSBDaGFyYWN0ZXJJdGVyYXRvcl9FeGFtcGxlOiA9PT09PSIgPDwgZW5kbDsKKyAqICAgICAg
IFVuaWNvZGVTdHJpbmcgdGV4dCgiRWluIGtsZWluZXIgU2F0ei4iKTsKKyAqICAgICAgIFN0cmlu
Z0NoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yKHRleHQpOworICogICAgICAgY291dCA8PCAiLS0t
LS0gdHJhdmVyc2VGb3J3YXJkOiAtLS0tLS0tLS0tLSIgPDwgZW5kbDsKKyAqICAgICAgIHRyYXZl
cnNlRm9yd2FyZCggaXRlcmF0b3IgKTsKKyAqICAgICAgIGNvdXQgPDwgZW5kbCA8PCBlbmRsIDw8
ICItLS0tLSB0cmF2ZXJzZUJhY2t3YXJkOiAtLS0tLS0tLS0tIiA8PCBlbmRsOworICogICAgICAg
dHJhdmVyc2VCYWNrd2FyZCggaXRlcmF0b3IgKTsKKyAqICAgICAgIGNvdXQgPDwgZW5kbCA8PCBl
bmRsIDw8ICItLS0tLSB0cmF2ZXJzZU91dDogLS0tLS0tLS0tLS0tLS0tIiA8PCBlbmRsOworICog
ICAgICAgdHJhdmVyc2VPdXQoIGl0ZXJhdG9yLCA3ICk7CisgKiAgICAgICBjb3V0IDw8IGVuZGwg
PDwgZW5kbCA8PCAiLS0tLS0iIDw8IGVuZGw7CisgKiAgIH0KKyAqIFxlbmRjb2RlCisgKiA8L3By
ZT4KKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworY2xhc3MgVV9DT01NT05fQVBJIENoYXJh
Y3Rlckl0ZXJhdG9yIDogcHVibGljIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciB7CitwdWJsaWM6
CisgICAgLyoqCisgICAgICogT3JpZ2luIGVudW1lcmF0aW9uIGZvciB0aGUgbW92ZSgpIGFuZCBt
b3ZlMzIoKSBmdW5jdGlvbnMuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAg
ZW51bSBFT3JpZ2luIHsga1N0YXJ0LCBrQ3VycmVudCwga0VuZCB9OworCisgICAgLyoqCisgICAg
ICogRGVzdHJ1Y3Rvci4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0
dWFsIH5DaGFyYWN0ZXJJdGVyYXRvcigpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHBv
aW50ZXIgdG8gYSBuZXcgQ2hhcmFjdGVySXRlcmF0b3Igb2YgdGhlIHNhbWUKKyAgICAgKiBjb25j
cmV0ZSBjbGFzcyBhcyB0aGlzIG9uZSwgYW5kIHJlZmVycmluZyB0byB0aGUgc2FtZQorICAgICAq
IGNoYXJhY3RlciBpbiB0aGUgc2FtZSB0ZXh0LXN0b3JhZ2Ugb2JqZWN0IGFzIHRoaXMgb25lLiAg
VGhlCisgICAgICogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZWxldGluZyB0aGUgbmV3IGNs
b25lLiAgCisgICAgICogQHJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXcgQ2hhcmFjdGVySXRlcmF0
b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIENoYXJhY3Rl
ckl0ZXJhdG9yKiBjbG9uZSh2b2lkKSBjb25zdCA9IDA7CisKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgZmlyc3QgY29kZSB1bml0IGluIGl0cworICAg
ICAqIGl0ZXJhdGlvbiByYW5nZSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHVuaXQuCisgICAgICog
VGhpcyBjYW4gYmUgdXNlZCB0byBiZWdpbiBhbiBpdGVyYXRpb24gd2l0aCBuZXh0KCkuCisgICAg
ICogQHJldHVybiB0aGUgZmlyc3QgY29kZSB1bml0IGluIGl0cyBpdGVyYXRpb24gcmFuZ2UuCisg
ICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBVQ2hhciAgICAgICAg
IGZpcnN0KHZvaWQpID0gMDsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRv
IHJlZmVyIHRvIHRoZSBmaXJzdCBjb2RlIHVuaXQgaW4gaXRzCisgICAgICogaXRlcmF0aW9uIHJh
bmdlLCByZXR1cm5zIHRoYXQgY29kZSB1bml0LCBhbmQgbW92ZXMgdGhlIHBvc2l0aW9uCisgICAg
ICogdG8gdGhlIHNlY29uZCBjb2RlIHVuaXQuIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gc2V0
VG9TdGFydCgpCisgICAgICogZm9yIGZvcndhcmQgaXRlcmF0aW9uIHdpdGggbmV4dFBvc3RJbmMo
KS4KKyAgICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBjb2RlIHVuaXQgaW4gaXRzIGl0ZXJhdGlvbiBy
YW5nZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIFVDaGFy
ICAgICAgICAgZmlyc3RQb3N0SW5jKHZvaWQpOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUg
aXRlcmF0b3IgdG8gcmVmZXIgdG8gdGhlIGZpcnN0IGNvZGUgcG9pbnQgaW4gaXRzCisgICAgICog
aXRlcmF0aW9uIHJhbmdlLCBhbmQgcmV0dXJucyB0aGF0IGNvZGUgdW5pdCwKKyAgICAgKiBUaGlz
IGNhbiBiZSB1c2VkIHRvIGJlZ2luIGFuIGl0ZXJhdGlvbiB3aXRoIG5leHQzMigpLgorICAgICAq
IE5vdGUgdGhhdCBhbiBpdGVyYXRpb24gd2l0aCBuZXh0MzJQb3N0SW5jKCksIGJlZ2lubmluZyB3
aXRoLAorICAgICAqIGUuZy4sIHNldFRvU3RhcnQoKSBvciBmaXJzdFBvc3RJbmMoKSwgaXMgbW9y
ZSBlZmZpY2llbnQuCisgICAgICogQHJldHVybiB0aGUgZmlyc3QgY29kZSBwb2ludCBpbiBpdHMg
aXRlcmF0aW9uIHJhbmdlLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZp
cnR1YWwgVUNoYXIzMiAgICAgICBmaXJzdDMyKHZvaWQpID0gMDsKKworICAgIC8qKgorICAgICAq
IFNldHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBmaXJzdCBjb2RlIHBvaW50IGluIGl0
cworICAgICAqIGl0ZXJhdGlvbiByYW5nZSwgcmV0dXJucyB0aGF0IGNvZGUgcG9pbnQsIGFuZCBt
b3ZlcyB0aGUgcG9zaXRpb24KKyAgICAgKiB0byB0aGUgc2Vjb25kIGNvZGUgcG9pbnQuIFRoaXMg
aXMgYW4gYWx0ZXJuYXRpdmUgdG8gc2V0VG9TdGFydCgpCisgICAgICogZm9yIGZvcndhcmQgaXRl
cmF0aW9uIHdpdGggbmV4dDMyUG9zdEluYygpLgorICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGNv
ZGUgcG9pbnQgaW4gaXRzIGl0ZXJhdGlvbiByYW5nZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAK
KyAgICAgKi8KKyAgICB2aXJ0dWFsIFVDaGFyMzIgICAgICAgZmlyc3QzMlBvc3RJbmModm9pZCk7
CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgZmly
c3QgY29kZSB1bml0IG9yIGNvZGUgcG9pbnQgaW4gaXRzCisgICAgICogaXRlcmF0aW9uIHJhbmdl
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGEgZm9yd2FyZAorICAgICAqIGl0ZXJhdGlvbiB3
aXRoIG5leHRQb3N0SW5jKCkgb3IgbmV4dDMyUG9zdEluYygpLgorICAgICAqIEByZXR1cm4gdGhl
IHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRpb24gcmFuZ2UKKyAgICAgKiBAc3RhYmxlIElD
VSAyLjAKKyAgICAgKi8KKyAgICBpbmxpbmUgaW50MzJfdCAgICBzZXRUb1N0YXJ0KCk7CisKKyAg
ICAvKioKKyAgICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgbGFzdCBjb2Rl
IHVuaXQgaW4gaXRzCisgICAgICogaXRlcmF0aW9uIHJhbmdlLCBhbmQgcmV0dXJucyB0aGF0IGNv
ZGUgdW5pdC4KKyAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGFuIGl0ZXJhdGlvbiB3
aXRoIHByZXZpb3VzKCkuCisgICAgICogQHJldHVybiB0aGUgbGFzdCBjb2RlIHVuaXQuCisgICAg
ICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBVQ2hhciAgICAgICAgIGxh
c3Qodm9pZCkgPSAwOworICAgICAgICAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBpdGVyYXRv
ciB0byByZWZlciB0byB0aGUgbGFzdCBjb2RlIHBvaW50IGluIGl0cworICAgICAqIGl0ZXJhdGlv
biByYW5nZSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHVuaXQuCisgICAgICogVGhpcyBjYW4gYmUg
dXNlZCB0byBiZWdpbiBhbiBpdGVyYXRpb24gd2l0aCBwcmV2aW91czMyKCkuCisgICAgICogQHJl
dHVybiB0aGUgbGFzdCBjb2RlIHBvaW50LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAq
LworICAgIHZpcnR1YWwgVUNoYXIzMiAgICAgICBsYXN0MzIodm9pZCkgPSAwOworCisgICAgLyoq
CisgICAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gdGhlIGVuZCBvZiBpdHMgaXRlcmF0aW9uIHJh
bmdlLCBqdXN0IGJlaGluZAorICAgICAqIHRoZSBsYXN0IGNvZGUgdW5pdCBvciBjb2RlIHBvaW50
LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGEgYmFja3dhcmQKKyAgICAgKiBpdGVyYXRpb24g
d2l0aCBwcmV2aW91cygpIG9yIHByZXZpb3VzMzIoKS4KKyAgICAgKiBAcmV0dXJuIHRoZSBlbmQg
cG9zaXRpb24gb2YgdGhlIGl0ZXJhdGlvbiByYW5nZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAor
ICAgICAqLworICAgIGlubGluZSBpbnQzMl90ICAgIHNldFRvRW5kKCk7CisKKyAgICAvKioKKyAg
ICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgInBvc2l0aW9uIi10aCBjb2Rl
IHVuaXQKKyAgICAgKiBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdCB0aGUgaXRlcmF0b3IgcmVm
ZXJzIHRvLCBhbmQKKyAgICAgKiByZXR1cm5zIHRoYXQgY29kZSB1bml0LiAgCisgICAgICogQHBh
cmFtIHBvc2l0aW9uIHRoZSAicG9zaXRpb24iLXRoIGNvZGUgdW5pdCBpbiB0aGUgdGV4dC1zdG9y
YWdlIG9iamVjdAorICAgICAqIEByZXR1cm4gdGhlICJwb3NpdGlvbiItdGggY29kZSB1bml0Lgor
ICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgVUNoYXIgICAgICAg
ICBzZXRJbmRleChpbnQzMl90IHBvc2l0aW9uKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBTZXRz
IHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2RlIHBvaW50
CisgICAgICogdGhhdCBjb250YWlucyB0aGUgInBvc2l0aW9uIi10aCBjb2RlIHVuaXQKKyAgICAg
KiBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdCB0aGUgaXRlcmF0b3IgcmVmZXJzIHRvLCBhbmQK
KyAgICAgKiByZXR1cm5zIHRoYXQgY29kZSBwb2ludC4KKyAgICAgKiBUaGUgY3VycmVudCBwb3Np
dGlvbiBpcyBhZGp1c3RlZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2RlIHBvaW50CisgICAg
ICogKGl0cyBmaXJzdCBjb2RlIHVuaXQpLgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgInBv
c2l0aW9uIi10aCBjb2RlIHVuaXQgaW4gdGhlIHRleHQtc3RvcmFnZSBvYmplY3QKKyAgICAgKiBA
cmV0dXJuIHRoZSAicG9zaXRpb24iLXRoIGNvZGUgcG9pbnQuCisgICAgICogQHN0YWJsZSBJQ1Ug
Mi4wCisgICAgICovCisgICAgdmlydHVhbCBVQ2hhcjMyICAgICAgIHNldEluZGV4MzIoaW50MzJf
dCBwb3NpdGlvbikgPSAwOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY29kZSB1bml0
IHRoZSBpdGVyYXRvciBjdXJyZW50bHkgcmVmZXJzIHRvLiAKKyAgICAgKiBAcmV0dXJuIHRoZSBj
dXJyZW50IGNvZGUgdW5pdC4gCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAg
dmlydHVhbCBVQ2hhciAgICAgICAgIGN1cnJlbnQodm9pZCkgY29uc3QgPSAwOworICAgICAgICAK
KyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjb2RlIHBvaW50IHRoZSBpdGVyYXRvciBjdXJy
ZW50bHkgcmVmZXJzIHRvLiAgCisgICAgICogQHJldHVybiB0aGUgY3VycmVudCBjb2RlIHBvaW50
LgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgVUNoYXIzMiAg
ICAgICBjdXJyZW50MzIodm9pZCkgY29uc3QgPSAwOworICAgICAgICAKKyAgICAvKioKKyAgICAg
KiBBZHZhbmNlcyB0byB0aGUgbmV4dCBjb2RlIHVuaXQgaW4gdGhlIGl0ZXJhdGlvbiByYW5nZQor
ICAgICAqICh0b3dhcmQgZW5kSW5kZXgoKSksIGFuZCByZXR1cm5zIHRoYXQgY29kZSB1bml0LiAg
SWYgdGhlcmUgYXJlCisgICAgICogbm8gbW9yZSBjb2RlIHVuaXRzIHRvIHJldHVybiwgcmV0dXJu
cyBET05FLgorICAgICAqIEByZXR1cm4gdGhlIG5leHQgY29kZSB1bml0LgorICAgICAqIEBzdGFi
bGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgVUNoYXIgICAgICAgICBuZXh0KHZvaWQp
ID0gMDsKKyAgICAgICAgCisgICAgLyoqCisgICAgICogQWR2YW5jZXMgdG8gdGhlIG5leHQgY29k
ZSBwb2ludCBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlCisgICAgICogKHRvd2FyZCBlbmRJbmRleCgp
KSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHBvaW50LiAgSWYgdGhlcmUgYXJlCisgICAgICogbm8g
bW9yZSBjb2RlIHBvaW50cyB0byByZXR1cm4sIHJldHVybnMgRE9ORS4KKyAgICAgKiBOb3RlIHRo
YXQgaXRlcmF0aW9uIHdpdGggInByZS1pbmNyZW1lbnQiIHNlbWFudGljcyBpcyBsZXNzCisgICAg
ICogZWZmaWNpZW50IHRoYW4gaXRlcmF0aW9uIHdpdGggInBvc3QtaW5jcmVtZW50IiBzZW1hbnRp
Y3MKKyAgICAgKiB0aGF0IGlzIHByb3ZpZGVkIGJ5IG5leHQzMlBvc3RJbmMoKS4KKyAgICAgKiBA
cmV0dXJuIHRoZSBuZXh0IGNvZGUgcG9pbnQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAg
ICovCisgICAgdmlydHVhbCBVQ2hhcjMyICAgICAgIG5leHQzMih2b2lkKSA9IDA7CisgICAgICAg
IAorICAgIC8qKgorICAgICAqIEFkdmFuY2VzIHRvIHRoZSBwcmV2aW91cyBjb2RlIHVuaXQgaW4g
dGhlIGl0ZXJhdGlvbiByYW5nZQorICAgICAqICh0b3dhcmQgc3RhcnRJbmRleCgpKSwgYW5kIHJl
dHVybnMgdGhhdCBjb2RlIHVuaXQuICBJZiB0aGVyZSBhcmUKKyAgICAgKiBubyBtb3JlIGNvZGUg
dW5pdHMgdG8gcmV0dXJuLCByZXR1cm5zIERPTkUuICAKKyAgICAgKiBAcmV0dXJuIHRoZSBwcmV2
aW91cyBjb2RlIHVuaXQuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmly
dHVhbCBVQ2hhciAgICAgICAgIHByZXZpb3VzKHZvaWQpID0gMDsKKworICAgIC8qKgorICAgICAq
IEFkdmFuY2VzIHRvIHRoZSBwcmV2aW91cyBjb2RlIHBvaW50IGluIHRoZSBpdGVyYXRpb24gcmFu
Z2UKKyAgICAgKiAodG93YXJkIHN0YXJ0SW5kZXgoKSksIGFuZCByZXR1cm5zIHRoYXQgY29kZSBw
b2ludC4gIElmIHRoZXJlIGFyZQorICAgICAqIG5vIG1vcmUgY29kZSBwb2ludHMgdG8gcmV0dXJu
LCByZXR1cm5zIERPTkUuIAorICAgICAqIEByZXR1cm4gdGhlIHByZXZpb3VzIGNvZGUgcG9pbnQu
IAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgVUNoYXIzMiAg
ICAgICBwcmV2aW91czMyKHZvaWQpID0gMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgRkFM
U0UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29kZSB1bml0cyBvciBjb2RlIHBvaW50cworICAgICAq
IGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLgorICAg
ICAqIFRoaXMgaXMgdXNlZCB3aXRoIHByZXZpb3VzKCkgb3IgcHJldmlvdXMzMigpIGluIGJhY2t3
YXJkCisgICAgICogaXRlcmF0aW9uLgorICAgICAqIEByZXR1cm4gRkFMU0UgaWYgdGhlcmUgYXJl
IG5vIG1vcmUgY29kZSB1bml0cyBvciBjb2RlIHBvaW50cworICAgICAqIGJlZm9yZSB0aGUgY3Vy
cmVudCBwb3NpdGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLCByZXR1cm4gVFJVRSBvdGhlcndp
c2UuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBVQm9vbCAg
ICAgICAgaGFzUHJldmlvdXMoKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBu
dW1lcmljIGluZGV4IGluIHRoZSB1bmRlcmx5aW5nIHRleHQtc3RvcmFnZQorICAgICAqIG9iamVj
dCBvZiB0aGUgY2hhcmFjdGVyIHJldHVybmVkIGJ5IGZpcnN0KCkuICBTaW5jZSBpdCdzCisgICAg
ICogcG9zc2libGUgdG8gY3JlYXRlIGFuIGl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgYWNyb3NzIG9u
bHkKKyAgICAgKiBwYXJ0IG9mIGEgdGV4dC1zdG9yYWdlIG9iamVjdCwgdGhpcyBudW1iZXIgaXNu
J3QKKyAgICAgKiBuZWNlc3NhcmlseSAwLiAgCisgICAgICogQHJldHVybnMgdGhlIG51bWVyaWMg
aW5kZXggaW4gdGhlIHVuZGVybHlpbmcgdGV4dC1zdG9yYWdlCisgICAgICogb2JqZWN0IG9mIHRo
ZSBjaGFyYWN0ZXIgcmV0dXJuZWQgYnkgZmlyc3QoKS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAK
KyAgICAgKi8KKyAgICBpbmxpbmUgaW50MzJfdCAgICAgICBzdGFydEluZGV4KHZvaWQpIGNvbnN0
OworICAgICAgICAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBudW1lcmljIGluZGV4IGlu
IHRoZSB1bmRlcmx5aW5nIHRleHQtc3RvcmFnZQorICAgICAqIG9iamVjdCBvZiB0aGUgcG9zaXRp
b24gaW1tZWRpYXRlbHkgQkVZT05EIHRoZSBjaGFyYWN0ZXIKKyAgICAgKiByZXR1cm5lZCBieSBs
YXN0KCkuICAKKyAgICAgKiBAcmV0dXJuIHRoZSBudW1lcmljIGluZGV4IGluIHRoZSB1bmRlcmx5
aW5nIHRleHQtc3RvcmFnZQorICAgICAqIG9iamVjdCBvZiB0aGUgcG9zaXRpb24gaW1tZWRpYXRl
bHkgQkVZT05EIHRoZSBjaGFyYWN0ZXIKKyAgICAgKiByZXR1cm5lZCBieSBsYXN0KCkuCisgICAg
ICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgaW5saW5lIGludDMyX3QgICAgICAgZW5k
SW5kZXgodm9pZCkgY29uc3Q7CisgICAgICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhl
IG51bWVyaWMgaW5kZXggaW4gdGhlIHVuZGVybHlpbmcgdGV4dC1zdG9yYWdlCisgICAgICogb2Jq
ZWN0IG9mIHRoZSBjaGFyYWN0ZXIgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSByZWZlcnMgdG8KKyAg
ICAgKiAoaS5lLiwgdGhlIGNoYXJhY3RlciByZXR1cm5lZCBieSBjdXJyZW50KCkpLiAgCisgICAg
ICogQHJldHVybiB0aGUgbnVtYmVyaWMgaW5kZXggaW4gdGhlIHRleHQtc3RvcmFnZSBvYmplY3Qg
b2YgCisgICAgICogdGhlIGNoYXJhY3RlciB0aGUgaXRlcmF0b3IgY3VycmVudGx5IHJlZmVycyB0
bworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGlubGluZSBpbnQzMl90ICAg
ICAgIGdldEluZGV4KHZvaWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUg
bGVuZ3RoIG9mIHRoZSBlbnRpcmUgdGV4dCBpbiB0aGUgdW5kZXJseWluZworICAgICAqIHRleHQt
c3RvcmFnZSBvYmplY3QuCisgICAgICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUg
dGV4dCBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdAorICAgICAqIEBzdGFibGUgSUNVIDIuMAor
ICAgICAqLworICAgIGlubGluZSBpbnQzMl90ICAgICAgICAgICBnZXRMZW5ndGgoKSBjb25zdDsK
KworICAgIC8qKgorICAgICAqIE1vdmVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIHJlbGF0aXZlIHRv
IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlCisgICAgICogaXRlcmF0aW9uIHJhbmdlLCBvciByZWxh
dGl2ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBpdHNlbGYuCisgICAgICogVGhlIG1vdmVtZW50
IGlzIGV4cHJlc3NlZCBpbiBudW1iZXJzIG9mIGNvZGUgdW5pdHMgZm9yd2FyZAorICAgICAqIG9y
IGJhY2t3YXJkIGJ5IHNwZWNpZnlpbmcgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBkZWx0YS4KKyAg
ICAgKiBAcGFyYW0gZGVsdGEgdGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIG9yaWdpbi4gQSBwb3Np
dGl2ZSBkZWx0YSBtZWFucyBmb3J3YXJkOworICAgICAqIGEgbmVnYXRpdmUgZGVsdGEgbWVhbnMg
YmFja3dhcmQuCisgICAgICogQHBhcmFtIG9yaWdpbiBPcmlnaW4gZW51bWVyYXRpb24ge2tTdGFy
dCwga0N1cnJlbnQsIGtFbmR9CisgICAgICogQHJldHVybiB0aGUgbmV3IHBvc2l0aW9uCisgICAg
ICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBpbnQzMl90ICAgICAgbW92
ZShpbnQzMl90IGRlbHRhLCBFT3JpZ2luIG9yaWdpbikgPSAwOworCisgICAgLyoqCisgICAgICog
TW92ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9yIGVuZCBv
ZiB0aGUKKyAgICAgKiBpdGVyYXRpb24gcmFuZ2UsIG9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50
IHBvc2l0aW9uIGl0c2VsZi4KKyAgICAgKiBUaGUgbW92ZW1lbnQgaXMgZXhwcmVzc2VkIGluIG51
bWJlcnMgb2YgY29kZSBwb2ludHMgZm9yd2FyZAorICAgICAqIG9yIGJhY2t3YXJkIGJ5IHNwZWNp
ZnlpbmcgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBkZWx0YS4KKyAgICAgKiBAcGFyYW0gZGVsdGEg
dGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIG9yaWdpbi4gQSBwb3NpdGl2ZSBkZWx0YSBtZWFucyBm
b3J3YXJkOworICAgICAqIGEgbmVnYXRpdmUgZGVsdGEgbWVhbnMgYmFja3dhcmQuCisgICAgICog
QHBhcmFtIG9yaWdpbiBPcmlnaW4gZW51bWVyYXRpb24ge2tTdGFydCwga0N1cnJlbnQsIGtFbmR9
CisgICAgICogQHJldHVybiB0aGUgbmV3IHBvc2l0aW9uCisgICAgICogQHN0YWJsZSBJQ1UgMi4w
CisgICAgICovCisgICAgdmlydHVhbCBpbnQzMl90ICAgICAgbW92ZTMyKGludDMyX3QgZGVsdGEs
IEVPcmlnaW4gb3JpZ2luKSA9IDA7CisKKyAgICAvKioKKyAgICAgKiBDb3BpZXMgdGhlIHRleHQg
dW5kZXIgaXRlcmF0aW9uIGludG8gdGhlIFVuaWNvZGVTdHJpbmcKKyAgICAgKiByZWZlcnJlZCB0
byBieSAicmVzdWx0Ii4gIAorICAgICAqIEBwYXJhbSByZXN1bHQgUmVjZWl2ZXMgYSBjb3B5IG9m
IHRoZSB0ZXh0IHVuZGVyIGl0ZXJhdGlvbi4gIAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAg
ICAqLworICAgIHZpcnR1YWwgdm9pZCAgICAgICAgICAgIGdldFRleHQoVW5pY29kZVN0cmluZyYg
IHJlc3VsdCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgLyoqCisgICAgICogRW1wdHkgY29uc3Ry
dWN0b3IuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgQ2hhcmFjdGVySXRl
cmF0b3IoKTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLCBqdXN0IHNldHRpbmcgdGhl
IGxlbmd0aCBmaWVsZCBpbiB0aGlzIGJhc2UgY2xhc3MuCisgICAgICogQHN0YWJsZSBJQ1UgMi4w
CisgICAgICovCisgICAgQ2hhcmFjdGVySXRlcmF0b3IoaW50MzJfdCBsZW5ndGgpOworCisgICAg
LyoqCisgICAgICogQ29uc3RydWN0b3IsIGp1c3Qgc2V0dGluZyB0aGUgbGVuZ3RoIGFuZCBwb3Np
dGlvbiBmaWVsZHMgaW4gdGhpcyBiYXNlIGNsYXNzLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAor
ICAgICAqLworICAgIENoYXJhY3Rlckl0ZXJhdG9yKGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IHBv
c2l0aW9uKTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLCBqdXN0IHNldHRpbmcgdGhl
IGxlbmd0aCwgc3RhcnQsIGVuZCwgYW5kIHBvc2l0aW9uIGZpZWxkcyBpbiB0aGlzIGJhc2UgY2xh
c3MuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgQ2hhcmFjdGVySXRlcmF0
b3IoaW50MzJfdCBsZW5ndGgsIGludDMyX3QgdGV4dEJlZ2luLCBpbnQzMl90IHRleHRFbmQsIGlu
dDMyX3QgcG9zaXRpb24pOworICAKKyAgICAvKioKKyAgICAgKiBDb3B5IGNvbnN0cnVjdG9yLgor
ICAgICAqCisgICAgICogQHBhcmFtIHRoYXQgVGhlIENoYXJhY3Rlckl0ZXJhdG9yIHRvIGJlIGNv
cGllZAorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIENoYXJhY3Rlckl0ZXJh
dG9yKGNvbnN0IENoYXJhY3Rlckl0ZXJhdG9yICZ0aGF0KTsKKworICAgIC8qKgorICAgICAqIEFz
c2lnbm1lbnQgb3BlcmF0b3IuICBTZXRzIHRoaXMgQ2hhcmFjdGVySXRlcmF0b3IgdG8gaGF2ZSB0
aGUgc2FtZSBiZWhhdmlvciwKKyAgICAgKiBhcyB0aGUgb25lIHBhc3NlZCBpbi4KKyAgICAgKiBA
cGFyYW0gdGhhdCBUaGUgQ2hhcmFjdGVySXRlcmF0b3IgcGFzc2VkIGluLgorICAgICAqIEByZXR1
cm4gdGhlIG5ld2x5IHNldCBDaGFyYWN0ZXJJdGVyYXRvci4KKyAgICAgKiBAc3RhYmxlIElDVSAy
LjAKKyAgICAgKi8KKyAgICBDaGFyYWN0ZXJJdGVyYXRvciAmb3BlcmF0b3I9KGNvbnN0IENoYXJh
Y3Rlckl0ZXJhdG9yICZ0aGF0KTsKKworICAgIC8qKgorICAgICAqIEJhc2UgY2xhc3MgdGV4dCBs
ZW5ndGggZmllbGQuCisgICAgICogTmVjZXNzYXJ5IHRoaXMgZm9yIGNvcnJlY3QgZ2V0VGV4dCgp
IGFuZCBoYXNoQ29kZSgpLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGlu
dDMyX3QgdGV4dExlbmd0aDsKKworICAgIC8qKgorICAgICAqIEJhc2UgY2xhc3MgZmllbGQgZm9y
IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLwor
ICAgIGludDMyX3QgIHBvczsKKworICAgIC8qKgorICAgICAqIEJhc2UgY2xhc3MgZmllbGQgZm9y
IHRoZSBzdGFydCBvZiB0aGUgaXRlcmF0aW9uIHJhbmdlLgorICAgICAqIEBzdGFibGUgSUNVIDIu
MAorICAgICAqLworICAgIGludDMyX3QgIGJlZ2luOworCisgICAgLyoqCisgICAgICogQmFzZSBj
bGFzcyBmaWVsZCBmb3IgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uIHJhbmdlLgorICAgICAqIEBz
dGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGludDMyX3QgIGVuZDsKK307CisKK2lubGluZSBV
Qm9vbAorRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEZvcndhcmRD
aGFyYWN0ZXJJdGVyYXRvciYgdGhhdCkgY29uc3QgeworICAgIHJldHVybiAhb3BlcmF0b3I9PSh0
aGF0KTsKK30KKworaW5saW5lIGludDMyX3QKK0NoYXJhY3Rlckl0ZXJhdG9yOjpzZXRUb1N0YXJ0
KCkgeworICAgIHJldHVybiBtb3ZlKDAsIGtTdGFydCk7Cit9CisKK2lubGluZSBpbnQzMl90CitD
aGFyYWN0ZXJJdGVyYXRvcjo6c2V0VG9FbmQoKSB7CisgICAgcmV0dXJuIG1vdmUoMCwga0VuZCk7
Cit9CisKK2lubGluZSBpbnQzMl90CitDaGFyYWN0ZXJJdGVyYXRvcjo6c3RhcnRJbmRleCh2b2lk
KSBjb25zdCB7CisgICAgcmV0dXJuIGJlZ2luOworfQorCitpbmxpbmUgaW50MzJfdAorQ2hhcmFj
dGVySXRlcmF0b3I6OmVuZEluZGV4KHZvaWQpIGNvbnN0IHsKKyAgICByZXR1cm4gZW5kOworfQor
CitpbmxpbmUgaW50MzJfdAorQ2hhcmFjdGVySXRlcmF0b3I6OmdldEluZGV4KHZvaWQpIGNvbnN0
IHsKKyAgICByZXR1cm4gcG9zOworfQorCitpbmxpbmUgaW50MzJfdAorQ2hhcmFjdGVySXRlcmF0
b3I6OmdldExlbmd0aCh2b2lkKSBjb25zdCB7CisgICAgcmV0dXJuIHRleHRMZW5ndGg7Cit9CisK
K1VfTkFNRVNQQUNFX0VORAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL2ljdS91bmlj
b2RlL2xvY2lkLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL2xvY2lkLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWFkNWNiNTQ2ZWJlMzk3ZWY0MzZkZjM2NTAzZWI0MzcxYzM4NjY5NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvbG9jaWQuaApAQCAtMCwwICsxLDgxNCBAQAorLyoK
KyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDE1LCBJ
bnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVy
cy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyog
RmlsZSBsb2NpZC5oCisqCisqIENyZWF0ZWQgYnk6IEhlbGVuYSBTaGloCisqCisqIE1vZGlmaWNh
dGlvbiBIaXN0b3J5OgorKgorKiAgIERhdGUgICAgICAgIE5hbWUgICAgICAgIERlc2NyaXB0aW9u
CisqICAgMDIvMTEvOTcgICAgYWxpdSAgICAgICAgQ2hhbmdlZCBnTG9jUGF0aCB0byBmZ0xvY1Bh
dGggYW5kIGFkZGVkIG1ldGhvZHMgdG8KKyogICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQg
YW5kIHNldCBpdC4KKyogICAwNC8wMi85NyAgICBhbGl1ICAgICAgICBNYWRlIG9wZXJhdG9yIT0g
aW5saW5lOyBmaXhlZCByZXR1cm4gdmFsdWUgb2YgZ2V0TmFtZSgpLgorKiAgIDA0LzE1Lzk3ICAg
IGFsaXUgICAgICAgIENsZWFudXAgZm9yIEFJWC9XaW4zMi4KKyogICAwNC8yNC85NyAgICBhbGl1
ICAgICAgICBOdW1lcm91cyBjaGFuZ2VzIHBlciBjb2RlIHJldmlldy4KKyogICAwOC8xOC85OCAg
ICBzdGVwaGVuICAgICBBZGRlZCB0b2tlbml6ZVN0cmluZygpLGNoYW5nZWQgZ2V0RGlzcGxheU5h
bWUoKQorKiAgIDA5LzA4Lzk4ICAgIHN0ZXBoZW4gICAgIE1vdmVkIGRlZmluaXRpb24gb2Yga0Vt
cHR5U3RyaW5nIGZvciBNYWMgUG9ydAorKiAgIDExLzA5Lzk5ICAgIHdlaXYgICAgICAgIEFkZGVk
IGNvbnN0IGNoYXIgKiBnZXROYW1lKCkgY29uc3Q7CisqICAgMDQvMTIvMDAgICAgc3JsICAgICAg
ICAgcmVtb3ZpbmcgdW5pY29kZXN0cmluZyBhcGkncyBhbmQgY2FjaGVkIGhhc2ggY29kZQorKiAg
IDA4LzEwLzAxICAgIGdyaG90ZW4gICAgIENoYW5nZSB0aGUgc3RhdGljIExvY2FsZXMgdG8gYWNj
ZXNzb3IgZnVuY3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgTE9D
SURfSAorI2RlZmluZSBMT0NJRF9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2lu
Y2x1ZGUgInVuaWNvZGUvdW9iamVjdC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdW5pc3RyLmgiCisj
aW5jbHVkZSAidW5pY29kZS9wdXRpbC5oIgorI2luY2x1ZGUgInVuaWNvZGUvdWxvYy5oIgorI2lu
Y2x1ZGUgInVuaWNvZGUvc3RyZW51bS5oIgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgQysr
IEFQSTogTG9jYWxlIElEIG9iamVjdC4KKyAqLworCitVX05BTUVTUEFDRV9CRUdJTgorCisvLyBG
b3J3YXJkIERlY2xhcmF0aW9ucwordm9pZCBVX0NBTExDT05WIGxvY2FsZV9hdmFpbGFibGVfaW5p
dCgpOyAvKio8IEBpbnRlcm5hbCAqLworCisvKioKKyAqIEEgPGNvZGU+TG9jYWxlPC9jb2RlPiBv
YmplY3QgcmVwcmVzZW50cyBhIHNwZWNpZmljIGdlb2dyYXBoaWNhbCwgcG9saXRpY2FsLAorICog
b3IgY3VsdHVyYWwgcmVnaW9uLiBBbiBvcGVyYXRpb24gdGhhdCByZXF1aXJlcyBhIDxjb2RlPkxv
Y2FsZTwvY29kZT4gdG8gcGVyZm9ybQorICogaXRzIHRhc2sgaXMgY2FsbGVkIDxlbT5sb2NhbGUt
c2Vuc2l0aXZlPC9lbT4gYW5kIHVzZXMgdGhlIDxjb2RlPkxvY2FsZTwvY29kZT4KKyAqIHRvIHRh
aWxvciBpbmZvcm1hdGlvbiBmb3IgdGhlIHVzZXIuIEZvciBleGFtcGxlLCBkaXNwbGF5aW5nIGEg
bnVtYmVyCisgKiBpcyBhIGxvY2FsZS1zZW5zaXRpdmUgb3BlcmF0aW9uLS10aGUgbnVtYmVyIHNo
b3VsZCBiZSBmb3JtYXR0ZWQKKyAqIGFjY29yZGluZyB0byB0aGUgY3VzdG9tcy9jb252ZW50aW9u
cyBvZiB0aGUgdXNlcidzIG5hdGl2ZSBjb3VudHJ5LAorICogcmVnaW9uLCBvciBjdWx0dXJlLgor
ICoKKyAqIFRoZSBMb2NhbGUgY2xhc3MgaXMgbm90IHN1aXRhYmxlIGZvciBzdWJjbGFzc2luZy4K
KyAqCisgKiA8UD4KKyAqIFlvdSBjYW4gY3JlYXRlIGEgPGNvZGU+TG9jYWxlPC9jb2RlPiBvYmpl
Y3QgdXNpbmcgdGhlIGNvbnN0cnVjdG9yIGluCisgKiB0aGlzIGNsYXNzOgorICogXGh0bWxvbmx5
PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogICAgICAgTG9jYWxlKCBjb25z
dCAgIGNoYXIqICBsYW5ndWFnZSwKKyAqICAgICAgICAgICAgICAgY29uc3QgICBjaGFyKiAgY291
bnRyeSwKKyAqICAgICAgICAgICAgICAgY29uc3QgICBjaGFyKiAgdmFyaWFudCk7CisgKiA8L3By
ZT4KKyAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIFRoZSBmaXJzdCBh
cmd1bWVudCB0byB0aGUgY29uc3RydWN0b3JzIGlzIGEgdmFsaWQgPFNUUk9ORz5JU08KKyAqIExh
bmd1YWdlIENvZGUuPC9TVFJPTkc+IFRoZXNlIGNvZGVzIGFyZSB0aGUgbG93ZXItY2FzZSB0d28t
bGV0dGVyCisgKiBjb2RlcyBhcyBkZWZpbmVkIGJ5IElTTy02MzkuCisgKiBZb3UgY2FuIGZpbmQg
YSBmdWxsIGxpc3Qgb2YgdGhlc2UgY29kZXMgYXQ6CisgKiA8QlI+PGEgaHJlZiA9Imh0dHA6Ly93
d3cubG9jLmdvdi9zdGFuZGFyZHMvaXNvNjM5LTIvIj4KKyAqIGh0dHA6Ly93d3cubG9jLmdvdi9z
dGFuZGFyZHMvaXNvNjM5LTIvPC9hPgorICoKKyAqIDxQPgorICogVGhlIHNlY29uZCBhcmd1bWVu
dCB0byB0aGUgY29uc3RydWN0b3JzIGlzIGEgdmFsaWQgPFNUUk9ORz5JU08gQ291bnRyeQorICog
Q29kZS48L1NUUk9ORz4gVGhlc2UgY29kZXMgYXJlIHRoZSB1cHBlci1jYXNlIHR3by1sZXR0ZXIg
Y29kZXMKKyAqIGFzIGRlZmluZWQgYnkgSVNPLTMxNjYuCisgKiBZb3UgY2FuIGZpbmQgYSBmdWxs
IGxpc3Qgb2YgdGhlc2UgY29kZXMgYXQgYSBudW1iZXIgb2Ygc2l0ZXMsIHN1Y2ggYXM6CisgKiA8
QlI+PGEgaHJlZj0iaHR0cDovL3d3dy5pc28ub3JnL2lzby9lbi9wcm9kcy1zZXJ2aWNlcy9pc28z
MTY2bWEvaW5kZXguaHRtbCI+CisgKiBodHRwOi8vd3d3Lmlzby5vcmcvaXNvL2VuL3Byb2RzLXNl
cnZpY2VzL2lzbzMxNjZtYS9pbmRleC5odG1sPC9hPgorICoKKyAqIDxQPgorICogVGhlIHRoaXJk
IGNvbnN0cnVjdG9yIHJlcXVpcmVzIGEgdGhpcmQgYXJndW1lbnQtLXRoZSA8U1RST05HPlZhcmlh
bnQuPC9TVFJPTkc+CisgKiBUaGUgVmFyaWFudCBjb2RlcyBhcmUgdmVuZG9yIGFuZCBicm93c2Vy
LXNwZWNpZmljLgorICogRm9yIGV4YW1wbGUsIHVzZSBSRVZJU0VEIGZvciBhIGxhbmdhdWdlJ3Mg
cmV2aXNlZCBzY3JpcHQgb3J0aG9ncmFwaHksIGFuZCBQT1NJWCBmb3IgUE9TSVguCisgKiBXaGVy
ZSB0aGVyZSBhcmUgdHdvIHZhcmlhbnRzLCBzZXBhcmF0ZSB0aGVtIHdpdGggYW4gdW5kZXJzY29y
ZSwgYW5kCisgKiBwdXQgdGhlIG1vc3QgaW1wb3J0YW50IG9uZSBmaXJzdC4gRm9yCisgKiBleGFt
cGxlLCBhIFRyYWRpdGlvbmFsIFNwYW5pc2ggY29sbGF0aW9uIG1pZ2h0IGJlIHJlZmVyZW5jZWQs
IHdpdGgKKyAqICJFUyIsICJFUyIsICJUcmFkaXRpb25hbF9QT1NJWCIuCisgKgorICogPFA+Cisg
KiBCZWNhdXNlIGEgPGNvZGU+TG9jYWxlPC9jb2RlPiBvYmplY3QgaXMganVzdCBhbiBpZGVudGlm
aWVyIGZvciBhIHJlZ2lvbiwKKyAqIG5vIHZhbGlkaXR5IGNoZWNrIGlzIHBlcmZvcm1lZCB3aGVu
IHlvdSBjb25zdHJ1Y3QgYSA8Y29kZT5Mb2NhbGU8L2NvZGU+LgorICogSWYgeW91IHdhbnQgdG8g
c2VlIHdoZXRoZXIgcGFydGljdWxhciByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCisg
KiA8Y29kZT5Mb2NhbGU8L2NvZGU+IHlvdSBjb25zdHJ1Y3QsIHlvdSBtdXN0IHF1ZXJ5IHRob3Nl
IHJlc291cmNlcy4gRm9yCisgKiBleGFtcGxlLCBhc2sgdGhlIDxjb2RlPk51bWJlckZvcm1hdDwv
Y29kZT4gZm9yIHRoZSBsb2NhbGVzIGl0IHN1cHBvcnRzCisgKiB1c2luZyBpdHMgPGNvZGU+Z2V0
QXZhaWxhYmxlTG9jYWxlczwvY29kZT4gbWV0aG9kLgorICogPEJSPjxTVFJPTkc+Tm90ZTo8L1NU
Uk9ORz4gV2hlbiB5b3UgYXNrIGZvciBhIHJlc291cmNlIGZvciBhIHBhcnRpY3VsYXIKKyAqIGxv
Y2FsZSwgeW91IGdldCBiYWNrIHRoZSBiZXN0IGF2YWlsYWJsZSBtYXRjaCwgbm90IG5lY2Vzc2Fy
aWx5CisgKiBwcmVjaXNlbHkgd2hhdCB5b3UgYXNrZWQgZm9yLiBGb3IgbW9yZSBpbmZvcm1hdGlv
biwgbG9vayBhdAorICogPGNvZGU+UmVzb3VyY2VCdW5kbGU8L2NvZGU+LgorICoKKyAqIDxQPgor
ICogVGhlIDxjb2RlPkxvY2FsZTwvY29kZT4gY2xhc3MgcHJvdmlkZXMgYSBudW1iZXIgb2YgY29u
dmVuaWVudCBjb25zdGFudHMKKyAqIHRoYXQgeW91IGNhbiB1c2UgdG8gY3JlYXRlIDxjb2RlPkxv
Y2FsZTwvY29kZT4gb2JqZWN0cyBmb3IgY29tbW9ubHkgdXNlZAorICogbG9jYWxlcy4gRm9yIGV4
YW1wbGUsIHRoZSBmb2xsb3dpbmcgcmVmZXJzIHRvIGEgPGNvZGU+TG9jYWxlPC9jb2RlPiBvYmpl
Y3QKKyAqIGZvciB0aGUgVW5pdGVkIFN0YXRlczoKKyAqIFxodG1sb25seTxibG9ja3F1b3RlPlxl
bmRodG1sb25seQorICogPHByZT4KKyAqICAgICAgIExvY2FsZTo6Z2V0VVMoKQorICogPC9wcmU+
CisgKiBcaHRtbG9ubHk8L2Jsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKgorICogPFA+CisgKiBP
bmNlIHlvdSd2ZSBjcmVhdGVkIGEgPGNvZGU+TG9jYWxlPC9jb2RlPiB5b3UgY2FuIHF1ZXJ5IGl0
IGZvciBpbmZvcm1hdGlvbiBhYm91dAorICogaXRzZWxmLiBVc2UgPGNvZGU+Z2V0Q291bnRyeTwv
Y29kZT4gdG8gZ2V0IHRoZSBJU08gQ291bnRyeSBDb2RlIGFuZAorICogPGNvZGU+Z2V0TGFuZ3Vh
Z2U8L2NvZGU+IHRvIGdldCB0aGUgSVNPIExhbmd1YWdlIENvZGUuIFlvdSBjYW4KKyAqIHVzZSA8
Y29kZT5nZXREaXNwbGF5Q291bnRyeTwvY29kZT4gdG8gZ2V0IHRoZQorICogbmFtZSBvZiB0aGUg
Y291bnRyeSBzdWl0YWJsZSBmb3IgZGlzcGxheWluZyB0byB0aGUgdXNlci4gU2ltaWxhcmx5LAor
ICogeW91IGNhbiB1c2UgPGNvZGU+Z2V0RGlzcGxheUxhbmd1YWdlPC9jb2RlPiB0byBnZXQgdGhl
IG5hbWUgb2YKKyAqIHRoZSBsYW5ndWFnZSBzdWl0YWJsZSBmb3IgZGlzcGxheWluZyB0byB0aGUg
dXNlci4gSW50ZXJlc3RpbmdseSwKKyAqIHRoZSA8Y29kZT5nZXREaXNwbGF5WFhYPC9jb2RlPiBt
ZXRob2RzIGFyZSB0aGVtc2VsdmVzIGxvY2FsZS1zZW5zaXRpdmUKKyAqIGFuZCBoYXZlIHR3byB2
ZXJzaW9uczogb25lIHRoYXQgdXNlcyB0aGUgZGVmYXVsdCBsb2NhbGUgYW5kIG9uZQorICogdGhh
dCB0YWtlcyBhIGxvY2FsZSBhcyBhbiBhcmd1bWVudCBhbmQgZGlzcGxheXMgdGhlIG5hbWUgb3Ig
Y291bnRyeSBpbgorICogYSBsYW5ndWFnZSBhcHByb3ByaWF0ZSB0byB0aGF0IGxvY2FsZS4KKyAq
CisgKiA8UD4KKyAqIElDVSBwcm92aWRlcyBhIG51bWJlciBvZiBjbGFzc2VzIHRoYXQgcGVyZm9y
bSBsb2NhbGUtc2Vuc2l0aXZlCisgKiBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSwgdGhlIDxjb2Rl
Pk51bWJlckZvcm1hdDwvY29kZT4gY2xhc3MgZm9ybWF0cworICogbnVtYmVycywgY3VycmVuY3ks
IG9yIHBlcmNlbnRhZ2VzIGluIGEgbG9jYWxlLXNlbnNpdGl2ZSBtYW5uZXIuIENsYXNzZXMKKyAq
IHN1Y2ggYXMgPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPiBoYXZlIGEgbnVtYmVyIG9mIGNvbnZl
bmllbmNlIG1ldGhvZHMKKyAqIGZvciBjcmVhdGluZyBhIGRlZmF1bHQgb2JqZWN0IG9mIHRoYXQg
dHlwZS4gRm9yIGV4YW1wbGUsIHRoZQorICogPGNvZGU+TnVtYmVyRm9ybWF0PC9jb2RlPiBjbGFz
cyBwcm92aWRlcyB0aGVzZSB0aHJlZSBjb252ZW5pZW5jZSBtZXRob2RzCisgKiBmb3IgY3JlYXRp
bmcgYSBkZWZhdWx0IDxjb2RlPk51bWJlckZvcm1hdDwvY29kZT4gb2JqZWN0OgorICogXGh0bWxv
bmx5PGJsb2NrcXVvdGU+XGVuZGh0bWxvbmx5CisgKiA8cHJlPgorICogICAgIFVFcnJvckNvZGUg
c3VjY2VzcyA9IFVfWkVST19FUlJPUjsKKyAqICAgICBMb2NhbGUgbXlMb2NhbGU7CisgKiAgICAg
TnVtYmVyRm9ybWF0ICpuZjsKKyAqCisgKiAgICAgbmYgPSBOdW1iZXJGb3JtYXQ6OmNyZWF0ZUlu
c3RhbmNlKCBzdWNjZXNzICk7ICAgICAgICAgIGRlbGV0ZSBuZjsKKyAqICAgICBuZiA9IE51bWJl
ckZvcm1hdDo6Y3JlYXRlQ3VycmVuY3lJbnN0YW5jZSggc3VjY2VzcyApOyAgZGVsZXRlIG5mOwor
ICogICAgIG5mID0gTnVtYmVyRm9ybWF0OjpjcmVhdGVQZXJjZW50SW5zdGFuY2UoIHN1Y2Nlc3Mg
KTsgICBkZWxldGUgbmY7CisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwvYmxvY2txdW90ZT5cZW5k
aHRtbG9ubHkKKyAqIEVhY2ggb2YgdGhlc2UgbWV0aG9kcyBoYXMgdHdvIHZhcmlhbnRzOyBvbmUg
d2l0aCBhbiBleHBsaWNpdCBsb2NhbGUKKyAqIGFuZCBvbmUgd2l0aG91dDsgdGhlIGxhdHRlciB1
c2luZyB0aGUgZGVmYXVsdCBsb2NhbGUuCisgKiBcaHRtbG9ubHk8YmxvY2txdW90ZT5cZW5kaHRt
bG9ubHkKKyAqIDxwcmU+CisgKiAgICAgbmYgPSBOdW1iZXJGb3JtYXQ6OmNyZWF0ZUluc3RhbmNl
KCBteUxvY2FsZSwgc3VjY2VzcyApOyAgICAgICAgICBkZWxldGUgbmY7CisgKiAgICAgbmYgPSBO
dW1iZXJGb3JtYXQ6OmNyZWF0ZUN1cnJlbmN5SW5zdGFuY2UoIG15TG9jYWxlLCBzdWNjZXNzICk7
ICBkZWxldGUgbmY7CisgKiAgICAgbmYgPSBOdW1iZXJGb3JtYXQ6OmNyZWF0ZVBlcmNlbnRJbnN0
YW5jZSggbXlMb2NhbGUsIHN1Y2Nlc3MgKTsgICBkZWxldGUgbmY7CisgKiA8L3ByZT4KKyAqIFxo
dG1sb25seTwvYmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqIEEgPGNvZGU+TG9jYWxlPC9jb2Rl
PiBpcyB0aGUgbWVjaGFuaXNtIGZvciBpZGVudGlmeWluZyB0aGUga2luZCBvZiBvYmplY3QKKyAq
ICg8Y29kZT5OdW1iZXJGb3JtYXQ8L2NvZGU+KSB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIGdldC4g
VGhlIGxvY2FsZSBpcworICogPFNUUk9ORz5qdXN0PC9TVFJPTkc+IGEgbWVjaGFuaXNtIGZvciBp
ZGVudGlmeWluZyBvYmplY3RzLAorICogPFNUUk9ORz5ub3Q8L1NUUk9ORz4gYSBjb250YWluZXIg
Zm9yIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCisgKgorICogPFA+CisgKiBFYWNoIGNsYXNzIHRo
YXQgcGVyZm9ybXMgbG9jYWxlLXNlbnNpdGl2ZSBvcGVyYXRpb25zIGFsbG93cyB5b3UKKyAqIHRv
IGdldCBhbGwgdGhlIGF2YWlsYWJsZSBvYmplY3RzIG9mIHRoYXQgdHlwZS4gWW91IGNhbiBzaWZ0
CisgKiB0aHJvdWdoIHRoZXNlIG9iamVjdHMgYnkgbGFuZ3VhZ2UsIGNvdW50cnksIG9yIHZhcmlh
bnQsCisgKiBhbmQgdXNlIHRoZSBkaXNwbGF5IG5hbWVzIHRvIHByZXNlbnQgYSBtZW51IHRvIHRo
ZSB1c2VyLgorICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gY3JlYXRlIGEgbWVudSBvZiBhbGwgdGhl
IGNvbGxhdGlvbiBvYmplY3RzCisgKiBzdWl0YWJsZSBmb3IgYSBnaXZlbiBsYW5ndWFnZS4gU3Vj
aCBjbGFzc2VzIGltcGxlbWVudCB0aGVzZQorICogdGhyZWUgY2xhc3MgbWV0aG9kczoKKyAqIFxo
dG1sb25seTxibG9ja3F1b3RlPlxlbmRodG1sb25seQorICogPHByZT4KKyAqICAgICAgIHN0YXRp
YyBMb2NhbGUqIGdldEF2YWlsYWJsZUxvY2FsZXMoaW50MzJfdCYgbnVtTG9jYWxlcykKKyAqICAg
ICAgIHN0YXRpYyBVbmljb2RlU3RyaW5nJiBnZXREaXNwbGF5TmFtZShjb25zdCBMb2NhbGUmICBv
YmplY3RMb2NhbGUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTG9jYWxlJiAgZGlzcGxheUxvY2FsZSwKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiBkaXNwbGF5TmFtZSkKKyAqICAg
ICAgIHN0YXRpYyBVbmljb2RlU3RyaW5nJiBnZXREaXNwbGF5TmFtZShjb25zdCBMb2NhbGUmICBv
YmplY3RMb2NhbGUsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVW5pY29kZVN0cmluZyYgZGlzcGxheU5hbWUpCisgKiA8L3ByZT4KKyAqIFxodG1sb25seTwv
YmxvY2txdW90ZT5cZW5kaHRtbG9ubHkKKyAqCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqIEBzZWUg
UmVzb3VyY2VCdW5kbGUKKyAqLworY2xhc3MgVV9DT01NT05fQVBJIExvY2FsZSA6IHB1YmxpYyBV
T2JqZWN0IHsKK3B1YmxpYzoKKyAgICAvKiogVXNlZnVsIGNvbnN0YW50IGZvciB0aGUgUm9vdCBs
b2NhbGUuIEBzdGFibGUgSUNVIDQuNCAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUgJlVfRVhQ
T1JUMiBnZXRSb290KHZvaWQpOworICAgIC8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgbGFu
Z3VhZ2UuIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUgJlVfRVhQ
T1JUMiBnZXRFbmdsaXNoKHZvaWQpOworICAgIC8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMg
bGFuZ3VhZ2UuIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUgJlVf
RVhQT1JUMiBnZXRGcmVuY2godm9pZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhp
cyBsYW5ndWFnZS4gQHN0YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0IExvY2FsZSAm
VV9FWFBPUlQyIGdldEdlcm1hbih2b2lkKTsKKyAgICAvKiogVXNlZnVsIGNvbnN0YW50IGZvciB0
aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBzdGF0aWMgY29uc3QgTG9jYWxl
ICZVX0VYUE9SVDIgZ2V0SXRhbGlhbih2b2lkKTsKKyAgICAvKiogVXNlZnVsIGNvbnN0YW50IGZv
ciB0aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBzdGF0aWMgY29uc3QgTG9j
YWxlICZVX0VYUE9SVDIgZ2V0SmFwYW5lc2Uodm9pZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFu
dCBmb3IgdGhpcyBsYW5ndWFnZS4gQHN0YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0
IExvY2FsZSAmVV9FWFBPUlQyIGdldEtvcmVhbih2b2lkKTsKKyAgICAvKiogVXNlZnVsIGNvbnN0
YW50IGZvciB0aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBzdGF0aWMgY29u
c3QgTG9jYWxlICZVX0VYUE9SVDIgZ2V0Q2hpbmVzZSh2b2lkKTsKKyAgICAvKiogVXNlZnVsIGNv
bnN0YW50IGZvciB0aGlzIGxhbmd1YWdlLiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBzdGF0aWMg
Y29uc3QgTG9jYWxlICZVX0VYUE9SVDIgZ2V0U2ltcGxpZmllZENoaW5lc2Uodm9pZCk7CisgICAg
LyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBsYW5ndWFnZS4gQHN0YWJsZSBJQ1UgMi4wICov
CisgICAgc3RhdGljIGNvbnN0IExvY2FsZSAmVV9FWFBPUlQyIGdldFRyYWRpdGlvbmFsQ2hpbmVz
ZSh2b2lkKTsKKworICAgIC8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdp
b24uIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUgJlVfRVhQT1JU
MiBnZXRGcmFuY2Uodm9pZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBjb3Vu
dHJ5L3JlZ2lvbi4gQHN0YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0IExvY2FsZSAm
VV9FWFBPUlQyIGdldEdlcm1hbnkodm9pZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFudCBmb3Ig
dGhpcyBjb3VudHJ5L3JlZ2lvbi4gQHN0YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0
IExvY2FsZSAmVV9FWFBPUlQyIGdldEl0YWx5KHZvaWQpOworICAgIC8qKiBVc2VmdWwgY29uc3Rh
bnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHN0YXRp
YyBjb25zdCBMb2NhbGUgJlVfRVhQT1JUMiBnZXRKYXBhbih2b2lkKTsKKyAgICAvKiogVXNlZnVs
IGNvbnN0YW50IGZvciB0aGlzIGNvdW50cnkvcmVnaW9uLiBAc3RhYmxlIElDVSAyLjAgKi8KKyAg
ICBzdGF0aWMgY29uc3QgTG9jYWxlICZVX0VYUE9SVDIgZ2V0S29yZWEodm9pZCk7CisgICAgLyoq
IFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBjb3VudHJ5L3JlZ2lvbi4gQHN0YWJsZSBJQ1UgMi4w
ICovCisgICAgc3RhdGljIGNvbnN0IExvY2FsZSAmVV9FWFBPUlQyIGdldENoaW5hKHZvaWQpOwor
ICAgIC8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291bnRyeS9yZWdpb24uIEBzdGFibGUg
SUNVIDIuMCAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUgJlVfRVhQT1JUMiBnZXRQUkModm9p
ZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBjb3VudHJ5L3JlZ2lvbi4gQHN0
YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0IExvY2FsZSAmVV9FWFBPUlQyIGdldFRh
aXdhbih2b2lkKTsKKyAgICAvKiogVXNlZnVsIGNvbnN0YW50IGZvciB0aGlzIGNvdW50cnkvcmVn
aW9uLiBAc3RhYmxlIElDVSAyLjAgKi8KKyAgICBzdGF0aWMgY29uc3QgTG9jYWxlICZVX0VYUE9S
VDIgZ2V0VUsodm9pZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFudCBmb3IgdGhpcyBjb3VudHJ5
L3JlZ2lvbi4gQHN0YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0IExvY2FsZSAmVV9F
WFBPUlQyIGdldFVTKHZvaWQpOworICAgIC8qKiBVc2VmdWwgY29uc3RhbnQgZm9yIHRoaXMgY291
bnRyeS9yZWdpb24uIEBzdGFibGUgSUNVIDIuMCAqLworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUg
JlVfRVhQT1JUMiBnZXRDYW5hZGEodm9pZCk7CisgICAgLyoqIFVzZWZ1bCBjb25zdGFudCBmb3Ig
dGhpcyBjb3VudHJ5L3JlZ2lvbi4gQHN0YWJsZSBJQ1UgMi4wICovCisgICAgc3RhdGljIGNvbnN0
IExvY2FsZSAmVV9FWFBPUlQyIGdldENhbmFkYUZyZW5jaCh2b2lkKTsKKworCisgICAgLyoqCisg
ICAgICogQ29uc3RydWN0IGEgZGVmYXVsdCBsb2NhbGUgb2JqZWN0LCBhIExvY2FsZSBmb3IgdGhl
IGRlZmF1bHQgbG9jYWxlIElELgorICAgICAqCisgICAgICogQHNlZSBnZXREZWZhdWx0CisgICAg
ICogQHNlZSB1bG9jX2dldERlZmF1bHQKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8K
KyAgICBMb2NhbGUoKTsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIGxvY2FsZSBmcm9t
IGxhbmd1YWdlLCBjb3VudHJ5LCB2YXJpYW50LgorICAgICAqIElmIGFuIGVycm9yIG9jY3Vycywg
dGhlbiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IHdpbGwgYmUgImJvZ3VzIgorICAgICAqIChpc0Jv
Z3VzKCkgd2lsbCByZXR1cm4gVFJVRSkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbGFuZ3VhZ2Ug
TG93ZXJjYXNlIHR3by1sZXR0ZXIgb3IgdGhyZWUtbGV0dGVyIElTTy02MzkgY29kZS4KKyAgICAg
KiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGluc3RlYWQgYmUgYW4gSUNVIHN0eWxlIEMgbG9jYWxlIChl
LmcuICJlbl9VUyIpLAorICAgICAqICBidXQgdGhlIG90aGVyIHBhcmFtZXRlcnMgbXVzdCBub3Qg
YmUgdXNlZC4KKyAgICAgKiAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIE5VTEw7IGlmIHNvLAorICAg
ICAqICB0aGUgbG9jYWxlIGlzIGluaXRpYWxpemVkIHRvIG1hdGNoIHRoZSBjdXJyZW50IGRlZmF1
bHQgbG9jYWxlLgorICAgICAqICAoVGhpcyBpcyB0aGUgc2FtZSBhcyB1c2luZyB0aGUgZGVmYXVs
dCBjb25zdHJ1Y3Rvci4pCisgICAgICogIFBsZWFzZSBub3RlOiBUaGUgSmF2YSBMb2NhbGUgY2xh
c3MgZG9lcyBOT1QgYWNjZXB0IHRoZSBmb3JtCisgICAgICogICduZXcgTG9jYWxlKCJlbl9VUyIp
JyBidXQgb25seSAnbmV3IExvY2FsZSgiZW4iLCJVUyIpJworICAgICAqCisgICAgICogQHBhcmFt
IGNvdW50cnkgIFVwcGVyY2FzZSB0d28tbGV0dGVyIElTTy0zMTY2IGNvZGUuIChvcHRpb25hbCkK
KyAgICAgKiBAcGFyYW0gdmFyaWFudCAgVXBwZXJjYXNlIHZlbmRvciBhbmQgYnJvd3NlciBzcGVj
aWZpYyBjb2RlLiBTZWUgY2xhc3MKKyAgICAgKiAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24u
IChvcHRpb25hbCkKKyAgICAgKiBAcGFyYW0ga2V5d29yZHNBbmRWYWx1ZXMgQSBzdHJpbmcgY29u
c2lzdGluZyBvZiBrZXl3b3JkL3ZhbHVlcyBwYWlycywgc3VjaCBhcworICAgICAqICAgICAgICAg
ICAgICAgICAiY29sbGF0aW9uPXBob25lYm9vaztjdXJyZW5jeT1ldXJvIgorICAgICAqCisgICAg
ICogQHNlZSBnZXREZWZhdWx0CisgICAgICogQHNlZSB1bG9jX2dldERlZmF1bHQKKyAgICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBMb2NhbGUoIGNvbnN0ICAgY2hhciAqIGxhbmd1
YWdlLAorICAgICAgICAgICAgY29uc3QgICBjaGFyICogY291bnRyeSAgPSAwLAorICAgICAgICAg
ICAgY29uc3QgICBjaGFyICogdmFyaWFudCAgPSAwLAorICAgICAgICAgICAgY29uc3QgICBjaGFy
ICoga2V5d29yZHNBbmRWYWx1ZXMgPSAwKTsKKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemVz
IGEgTG9jYWxlIG9iamVjdCBmcm9tIGFub3RoZXIgTG9jYWxlIG9iamVjdC4KKyAgICAgKgorICAg
ICAqIEBwYXJhbSBvdGhlciBUaGUgTG9jYWxlIG9iamVjdCBiZWluZyBjb3BpZWQgaW4uCisgICAg
ICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgTG9jYWxlKGNvbnN0ICAgIExvY2FsZSYg
b3RoZXIpOworCisKKyAgICAvKioKKyAgICAgKiBEZXN0cnVjdG9yCisgICAgICogQHN0YWJsZSBJ
Q1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCB+TG9jYWxlKCkgOworCisgICAgLyoqCisgICAg
ICogUmVwbGFjZXMgdGhlIGVudGlyZSBjb250ZW50cyBvZiAqdGhpcyB3aXRoIHRoZSBzcGVjaWZp
ZWQgdmFsdWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIExvY2FsZSBvYmplY3Qg
YmVpbmcgY29waWVkIGluLgorICAgICAqIEByZXR1cm4gICAgICAqdGhpcworICAgICAqIEBzdGFi
bGUgSUNVIDIuMAorICAgICAqLworICAgIExvY2FsZSYgb3BlcmF0b3I9KGNvbnN0IExvY2FsZSYg
b3RoZXIpOworCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIHR3byBsb2NhbGUga2V5cyBhcmUg
dGhlIHNhbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gb3RoZXIgVGhlIGxvY2FsZSBrZXkgb2Jq
ZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGggdGhpcy4KKyAgICAgKiBAcmV0dXJuICAgICAgVHJ1ZSBp
ZiB0aGUgdHdvIGxvY2FsZSBrZXlzIGFyZSB0aGUgc2FtZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAg
ICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIFVCb29sICAgb3BlcmF0b3I9PShjb25z
dCAgICBMb2NhbGUmICAgICBvdGhlcikgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBDaGVja3Mg
aWYgdHdvIGxvY2FsZSBrZXlzIGFyZSBub3QgdGhlIHNhbWUuCisgICAgICoKKyAgICAgKiBAcGFy
YW0gb3RoZXIgVGhlIGxvY2FsZSBrZXkgb2JqZWN0IHRvIGJlIGNvbXBhcmVkIHdpdGggdGhpcy4K
KyAgICAgKiBAcmV0dXJuICAgICAgVHJ1ZSBpZiB0aGUgdHdvIGxvY2FsZSBrZXlzIGFyZSBub3Qg
dGhlIHNhbWUsIGZhbHNlCisgICAgICogICAgICAgICAgICAgIG90aGVyd2lzZS4KKyAgICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBVQm9vbCAgIG9wZXJhdG9yIT0oY29uc3QgICAg
TG9jYWxlJiAgICAgb3RoZXIpIGNvbnN0OworCisgICAgLyoqCisgICAgICogQ2xvbmUgdGhpcyBv
YmplY3QuCisgICAgICogQ2xvbmVzIGNhbiBiZSB1c2VkIGNvbmN1cnJlbnRseSBpbiBtdWx0aXBs
ZSB0aHJlYWRzLgorICAgICAqIElmIGFuIGVycm9yIG9jY3VycywgdGhlbiBOVUxMIGlzIHJldHVy
bmVkLgorICAgICAqIFRoZSBjYWxsZXIgbXVzdCBkZWxldGUgdGhlIGNsb25lLgorICAgICAqCisg
ICAgICogQHJldHVybiBhIGNsb25lIG9mIHRoaXMgb2JqZWN0CisgICAgICoKKyAgICAgKiBAc2Vl
IGdldER5bmFtaWNDbGFzc0lECisgICAgICogQHN0YWJsZSBJQ1UgMi44CisgICAgICovCisgICAg
TG9jYWxlICpjbG9uZSgpIGNvbnN0OworCisjaWZuZGVmIFVfSElERV9TWVNURU1fQVBJCisgICAg
LyoqCisgICAgICogQ29tbW9uIG1ldGhvZHMgb2YgZ2V0dGluZyB0aGUgY3VycmVudCBkZWZhdWx0
IExvY2FsZS4gVXNlZCBmb3IgdGhlCisgICAgICogcHJlc2VudGF0aW9uOiBtZW51cywgZGlhbG9n
cywgZXRjLiBHZW5lcmFsbHkgc2V0IG9uY2Ugd2hlbiB5b3VyIGFwcGxldCBvcgorICAgICAqIGFw
cGxpY2F0aW9uIGlzIGluaXRpYWxpemVkLCB0aGVuIG5ldmVyIHJlc2V0LiAoSWYgeW91IGRvIHJl
c2V0IHRoZQorICAgICAqIGRlZmF1bHQgbG9jYWxlLCB5b3UgcHJvYmFibHkgd2FudCB0byByZWxv
YWQgeW91ciBHVUksIHNvIHRoYXQgdGhlIGNoYW5nZQorICAgICAqIGlzIHJlZmxlY3RlZCBpbiB5
b3VyIGludGVyZmFjZS4pCisgICAgICoKKyAgICAgKiBNb3JlIGFkdmFuY2VkIHByb2dyYW1zIHdp
bGwgYWxsb3cgdXNlcnMgdG8gdXNlIGRpZmZlcmVudCBsb2NhbGVzIGZvcgorICAgICAqIGRpZmZl
cmVudCBmaWVsZHMsIGUuZy4gaW4gYSBzcHJlYWRzaGVldC4KKyAgICAgKgorICAgICAqIE5vdGUg
dGhhdCB0aGUgaW5pdGlhbCBzZXR0aW5nIHdpbGwgbWF0Y2ggdGhlIGhvc3Qgc3lzdGVtLgorICAg
ICAqIEByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIExvY2FsZSBvYmplY3QgZm9yIHRoZSBkZWZh
dWx0IGxvY2FsZSBJRAorICAgICAqIEBzeXN0ZW0KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAg
ICAgKi8KKyAgICBzdGF0aWMgY29uc3QgTG9jYWxlJiBVX0VYUE9SVDIgZ2V0RGVmYXVsdCh2b2lk
KTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlZmF1bHQuIE5vcm1hbGx5IHNldCBvbmNl
IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwcm9jZXNzLAorICAgICAqIHRoZW4gbmV2ZXIgcmVzZXQu
CisgICAgICogc2V0RGVmYXVsdCgpIG9ubHkgY2hhbmdlcyBJQ1UncyBkZWZhdWx0IGxvY2FsZSBJ
RCwgPHN0cm9uZz5ub3Q8L3N0cm9uZz4KKyAgICAgKiB0aGUgZGVmYXVsdCBsb2NhbGUgSUQgb2Yg
dGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmV3TG9jYWxl
IExvY2FsZSB0byBzZXQgdG8uICBJZiBOVUxMLCBzZXQgdG8gdGhlIHZhbHVlIG9idGFpbmVkCisg
ICAgICogICAgICAgICAgICAgICAgICBmcm9tIHRoZSBydW50aW1lIGVudmlyb25lbWVudC4KKyAg
ICAgKiBAcGFyYW0gc3VjY2VzcyBUaGUgZXJyb3IgY29kZS4KKyAgICAgKiBAc3lzdGVtCisgICAg
ICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgc3RhdGljIHZvaWQgVV9FWFBPUlQyIHNl
dERlZmF1bHQoY29uc3QgTG9jYWxlJiBuZXdMb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVUVycm9yQ29kZSYgICBzdWNjZXNzKTsKKyNlbmRpZiAgLyogVV9ISURF
X1NZU1RFTV9BUEkgKi8KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBsb2NhbGUgd2hpY2gg
aGFzIGhhZCBtaW5pbWFsIGNhbm9uaWNhbGl6YXRpb24KKyAgICAgKiBhcyBwZXIgdWxvY19nZXRO
YW1lKCkuCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gY3JlYXRlIGZyb20uICBJZiBu
YW1lIGlzIG51bGwsCisgICAgICogIHRoZSBkZWZhdWx0IExvY2FsZSBpcyB1c2VkLgorICAgICAq
IEByZXR1cm4gbmV3IGxvY2FsZSBvYmplY3QKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAg
KiBAc2VlIHVsb2NfZ2V0TmFtZQorICAgICAqLworICAgIHN0YXRpYyBMb2NhbGUgVV9FWFBPUlQy
IGNyZWF0ZUZyb21OYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworCisgICAgLyoqCisgICAgICogQ3Jl
YXRlcyBhIGxvY2FsZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcgYWZ0ZXIgY2Fub25pY2FsaXppbmcK
KyAgICAgKiB0aGUgc3RyaW5nIGJ5IGNhbGxpbmcgdWxvY19jYW5vbmljYWxpemUoKS4KKyAgICAg
KiBAcGFyYW0gbmFtZSB0aGUgbG9jYWxlIElEIHRvIGNyZWF0ZSBmcm9tLiAgTXVzdCBub3QgYmUg
TlVMTC4KKyAgICAgKiBAcmV0dXJuIGEgbmV3IGxvY2FsZSBvYmplY3QgY29ycmVzcG9uZGluZyB0
byB0aGUgZ2l2ZW4gbmFtZQorICAgICAqIEBzdGFibGUgSUNVIDMuMAorICAgICAqIEBzZWUgdWxv
Y19jYW5vbmljYWxpemUKKyAgICAgKi8KKyAgICBzdGF0aWMgTG9jYWxlIFVfRVhQT1JUMiBjcmVh
dGVDYW5vbmljYWwoY29uc3QgY2hhciogbmFtZSk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5z
IHRoZSBsb2NhbGUncyBJU08tNjM5IGxhbmd1YWdlIGNvZGUuCisgICAgICogQHJldHVybiAgICAg
IEFuIGFsaWFzIHRvIHRoZSBjb2RlCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisg
ICAgaW5saW5lIGNvbnN0IGNoYXIgKiAgZ2V0TGFuZ3VhZ2UoICkgY29uc3Q7CisKKyAgICAvKioK
KyAgICAgKiBSZXR1cm5zIHRoZSBsb2NhbGUncyBJU08tMTU5MjQgYWJicmV2aWF0aW9uIHNjcmlw
dCBjb2RlLgorICAgICAqIEByZXR1cm4gICAgICBBbiBhbGlhcyB0byB0aGUgY29kZQorICAgICAq
IEBzZWUgdXNjcmlwdF9nZXRTaG9ydE5hbWUKKyAgICAgKiBAc2VlIHVzY3JpcHRfZ2V0Q29kZQor
ICAgICAqIEBzdGFibGUgSUNVIDIuOAorICAgICAqLworICAgIGlubGluZSBjb25zdCBjaGFyICog
IGdldFNjcmlwdCggKSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxvY2Fs
ZSdzIElTTy0zMTY2IGNvdW50cnkgY29kZS4KKyAgICAgKiBAcmV0dXJuICAgICAgQW4gYWxpYXMg
dG8gdGhlIGNvZGUKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBpbmxpbmUg
Y29uc3QgY2hhciAqICBnZXRDb3VudHJ5KCApIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgbG9jYWxlJ3MgdmFyaWFudCBjb2RlLgorICAgICAqIEByZXR1cm4gICAgICBBbiBh
bGlhcyB0byB0aGUgY29kZQorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGlu
bGluZSBjb25zdCBjaGFyICogIGdldFZhcmlhbnQoICkgY29uc3Q7CisKKyAgICAvKioKKyAgICAg
KiBSZXR1cm5zIHRoZSBwcm9ncmFtbWF0aWMgbmFtZSBvZiB0aGUgZW50aXJlIGxvY2FsZSwgd2l0
aCB0aGUgbGFuZ3VhZ2UsCisgICAgICogY291bnRyeSBhbmQgdmFyaWFudCBzZXBhcmF0ZWQgYnkg
dW5kZXJiYXJzLiBJZiBhIGZpZWxkIGlzIG1pc3NpbmcsIHVwCisgICAgICogdG8gdHdvIGxlYWRp
bmcgdW5kZXJiYXJzIHdpbGwgb2NjdXIuIEV4YW1wbGU6ICJlbiIsICJkZV9ERSIsICJlbl9VU19X
SU4iLAorICAgICAqICJkZV9fUE9TSVgiLCAiZnJfX01BQyIsICJfX01BQyIsICJfTVQiLCAiX0ZS
X0VVUk8iCisgICAgICogQHJldHVybiAgICAgIEEgcG9pbnRlciB0byAibmFtZSIuCisgICAgICog
QHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgaW5saW5lIGNvbnN0IGNoYXIgKiBnZXROYW1l
KCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwcm9ncmFtbWF0aWMgbmFt
ZSBvZiB0aGUgZW50aXJlIGxvY2FsZSBhcyBnZXROYW1lKCkgd291bGQgcmV0dXJuLAorICAgICAq
IGJ1dCB3aXRob3V0IGtleXdvcmRzLgorICAgICAqIEByZXR1cm4gICAgICBBIHBvaW50ZXIgdG8g
Im5hbWUiLgorICAgICAqIEBzZWUgZ2V0TmFtZQorICAgICAqIEBzdGFibGUgSUNVIDIuOAorICAg
ICAqLworICAgIGNvbnN0IGNoYXIgKiBnZXRCYXNlTmFtZSgpIGNvbnN0OworCisKKyAgICAvKioK
KyAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIGtleXdvcmRzIGZvciB0aGUgc3BlY2lmaWVkIGxvY2Fs
ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGF0dXMgdGhlIHN0YXR1cyBjb2RlCisgICAgICog
QHJldHVybiBwb2ludGVyIHRvIFN0cmluZ0VudW1lcmF0aW9uIGNsYXNzLCBvciBOVUxMIGlmIHRo
ZXJlIGFyZSBubyBrZXl3b3Jkcy4gCisgICAgICogQ2xpZW50IG11c3QgZGlzcG9zZSBvZiBpdCBi
eSBjYWxsaW5nIGRlbGV0ZS4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjgKKyAgICAgKi8KKyAgICBT
dHJpbmdFbnVtZXJhdGlvbiAqIGNyZWF0ZUtleXdvcmRzKFVFcnJvckNvZGUgJnN0YXR1cykgY29u
c3Q7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB2YWx1ZSBmb3IgYSBrZXl3b3JkLgorICAg
ICAqCisgICAgICogQHBhcmFtIGtleXdvcmROYW1lIG5hbWUgb2YgdGhlIGtleXdvcmQgZm9yIHdo
aWNoIHdlIHdhbnQgdGhlIHZhbHVlLiBDYXNlIGluc2Vuc2l0aXZlLgorICAgICAqIEBwYXJhbSBi
dWZmZXIgVGhlIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBrZXl3b3JkIHZhbHVlLgorICAgICAqIEBw
YXJhbSBidWZmZXJDYXBhY2l0eSBUaGUgY2FwYWNpdHkgb2YgcmVjZWl2aW5nIGJ1ZmZlcgorICAg
ICAqIEBwYXJhbSBzdGF0dXMgUmV0dXJucyBhbnkgZXJyb3IgaW5mb3JtYXRpb24gd2hpbGUgcGVy
Zm9ybWluZyB0aGlzIG9wZXJhdGlvbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhl
IGtleXdvcmQgdmFsdWUKKyAgICAgKgorICAgICAqIEBzdGFibGUgSUNVIDIuOAorICAgICAqLwor
ICAgIGludDMyX3QgZ2V0S2V5d29yZFZhbHVlKGNvbnN0IGNoYXIqIGtleXdvcmROYW1lLCBjaGFy
ICpidWZmZXIsIGludDMyX3QgYnVmZmVyQ2FwYWNpdHksIFVFcnJvckNvZGUgJnN0YXR1cykgY29u
c3Q7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIG9yIHJlbW92ZXMgdGhlIHZhbHVlIGZvciBhIGtl
eXdvcmQuCisgICAgICoKKyAgICAgKiBGb3IgcmVtb3ZpbmcgYWxsIGtleXdvcmRzLCB1c2UgZ2V0
QmFzZU5hbWUoKSwKKyAgICAgKiBhbmQgY29uc3RydWN0IGEgbmV3IExvY2FsZSBpZiBpdCBkaWZm
ZXJzIGZyb20gZ2V0TmFtZSgpLgorICAgICAqCisgICAgICogQHBhcmFtIGtleXdvcmROYW1lIG5h
bWUgb2YgdGhlIGtleXdvcmQgdG8gYmUgc2V0LiBDYXNlIGluc2Vuc2l0aXZlLgorICAgICAqIEBw
YXJhbSBrZXl3b3JkVmFsdWUgdmFsdWUgb2YgdGhlIGtleXdvcmQgdG8gYmUgc2V0LiBJZiAwLWxl
bmd0aCBvcgorICAgICAqICBOVUxMLCB3aWxsIHJlc3VsdCBpbiB0aGUga2V5d29yZCBiZWluZyBy
ZW1vdmVkLiBObyBlcnJvciBpcyBnaXZlbiBpZgorICAgICAqICB0aGF0IGtleXdvcmQgZG9lcyBu
b3QgZXhpc3QuCisgICAgICogQHBhcmFtIHN0YXR1cyBSZXR1cm5zIGFueSBlcnJvciBpbmZvcm1h
dGlvbiB3aGlsZSBwZXJmb3JtaW5nIHRoaXMgb3BlcmF0aW9uLgorICAgICAqCisgICAgICogQHN0
YWJsZSBJQ1UgNDkKKyAgICAgKi8KKyAgICB2b2lkIHNldEtleXdvcmRWYWx1ZShjb25zdCBjaGFy
KiBrZXl3b3JkTmFtZSwgY29uc3QgY2hhcioga2V5d29yZFZhbHVlLCBVRXJyb3JDb2RlICZzdGF0
dXMpOworCisgICAgLyoqCisgICAgICogcmV0dXJucyB0aGUgbG9jYWxlJ3MgdGhyZWUtbGV0dGVy
IGxhbmd1YWdlIGNvZGUsIGFzIHNwZWNpZmllZAorICAgICAqIGluIElTTyBkcmFmdCBzdGFuZGFy
ZCBJU08tNjM5LTIuCisgICAgICogQHJldHVybiAgICAgIEFuIGFsaWFzIHRvIHRoZSBjb2RlLCBv
ciBhbiBlbXB0eSBzdHJpbmcKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBj
b25zdCBjaGFyICogZ2V0SVNPM0xhbmd1YWdlKCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBG
aWxscyBpbiAibmFtZSIgd2l0aCB0aGUgbG9jYWxlJ3MgdGhyZWUtbGV0dGVyIElTTy0zMTY2IGNv
dW50cnkgY29kZS4KKyAgICAgKiBAcmV0dXJuICAgICAgQW4gYWxpYXMgdG8gdGhlIGNvZGUsIG9y
IGFuIGVtcHR5IHN0cmluZworICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIGNv
bnN0IGNoYXIgKiBnZXRJU08zQ291bnRyeSgpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0
dXJucyB0aGUgV2luZG93cyBMQ0lEIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBsb2NhbGUu
CisgICAgICogVGhpcyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHJlc291cmNlIGRhdGEgZm9yIHRo
ZSBsb2NhbGUgYXMgYSBvbmUtdG8tZm91ci1kaWdpdAorICAgICAqIGhleGFkZWNpbWFsIG51bWJl
ci4gIElmIHRoZSByZXNvdXJjZSBpcyBtaXNzaW5nLCBpbiB0aGUgd3JvbmcgZm9ybWF0LCBvcgor
ICAgICAqIHRoZXJlIGlzIG5vIFdpbmRvd3MgTENJRCB2YWx1ZSB0aGF0IGNvcnJlc3BvbmRzIHRv
IHRoaXMgbG9jYWxlLCByZXR1cm5zIDAuCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICov
CisgICAgdWludDMyX3QgICAgICAgIGdldExDSUQodm9pZCkgY29uc3Q7CisKKyNpZm5kZWYgVV9I
SURFX0RSQUZUX0FQSQorICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIGxvY2Fs
ZSdzIHNjcmlwdCBpcyB3cml0dGVuIHJpZ2h0LXRvLWxlZnQuCisgICAgICogSWYgdGhlcmUgaXMg
bm8gc2NyaXB0IHN1YnRhZywgdGhlbiB0aGUgbGlrZWx5IHNjcmlwdCBpcyB1c2VkLCBzZWUgdWxv
Y19hZGRMaWtlbHlTdWJ0YWdzKCkuCisgICAgICogSWYgbm8gbGlrZWx5IHNjcmlwdCBpcyBrbm93
biwgdGhlbiBGQUxTRSBpcyByZXR1cm5lZC4KKyAgICAgKgorICAgICAqIEEgc2NyaXB0IGlzIHJp
Z2h0LXRvLWxlZnQgYWNjb3JkaW5nIHRvIHRoZSBDTERSIHNjcmlwdCBtZXRhZGF0YQorICAgICAq
IHdoaWNoIGNvcnJlc3BvbmRzIHRvIHdoZXRoZXIgdGhlIHNjcmlwdCdzIGxldHRlcnMgaGF2ZSBC
aWRpX0NsYXNzPVIgb3IgQUwuCisgICAgICoKKyAgICAgKiBSZXR1cm5zIFRSVUUgZm9yICJhciIg
YW5kICJlbi1IZWJyIiwgRkFMU0UgZm9yICJ6aCIgYW5kICJmYS1DeXJsIi4KKyAgICAgKgorICAg
ICAqIEByZXR1cm4gVFJVRSBpZiB0aGUgbG9jYWxlJ3Mgc2NyaXB0IGlzIHdyaXR0ZW4gcmlnaHQt
dG8tbGVmdAorICAgICAqIEBkcmFmdCBJQ1UgNTQKKyAgICAgKi8KKyAgICBVQm9vbCBpc1JpZ2h0
VG9MZWZ0KCkgY29uc3Q7CisjZW5kaWYgIC8qIFVfSElERV9EUkFGVF9BUEkgKi8KKworICAgIC8q
KgorICAgICAqIEZpbGxzIGluICJkaXNwTGFuZyIgd2l0aCB0aGUgbmFtZSBvZiB0aGlzIGxvY2Fs
ZSdzIGxhbmd1YWdlIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvcgorICAgICAqIHVzZXIgZGlzcGxh
eSBpbiB0aGUgZGVmYXVsdCBsb2NhbGUuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGxvY2FsZSdzIGxh
bmd1YWdlIGNvZGUgaXMKKyAgICAgKiAiZnIiIGFuZCB0aGUgZGVmYXVsdCBsb2NhbGUncyBsYW5n
dWFnZSBjb2RlIGlzICJlbiIsIHRoaXMgZnVuY3Rpb24gd291bGQgc2V0CisgICAgICogZGlzcExh
bmcgdG8gIkZyZW5jaCIuCisgICAgICogQHBhcmFtIGRpc3BMYW5nICBSZWNlaXZlcyB0aGUgbGFu
Z3VhZ2UncyBkaXNwbGF5IG5hbWUuCisgICAgICogQHJldHVybiAgICAgICAgICBBIHJlZmVyZW5j
ZSB0byAiZGlzcExhbmciLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIFVu
aWNvZGVTdHJpbmcmICBnZXREaXNwbGF5TGFuZ3VhZ2UoVW5pY29kZVN0cmluZyYgICBkaXNwTGFu
ZykgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBGaWxscyBpbiAiZGlzcExhbmciIHdpdGggdGhl
IG5hbWUgb2YgdGhpcyBsb2NhbGUncyBsYW5ndWFnZSBpbiBhIGZvcm1hdCBzdWl0YWJsZSBmb3IK
KyAgICAgKiB1c2VyIGRpc3BsYXkgaW4gdGhlIGxvY2FsZSBzcGVjaWZpZWQgYnkgImRpc3BsYXlM
b2NhbGUiLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBsb2NhbGUncworICAgICAqIGxhbmd1YWdlIGNv
ZGUgaXMgImVuIiBhbmQgZGlzcGxheUxvY2FsZSdzIGxhbmd1YWdlIGNvZGUgaXMgImZyIiwgdGhp
cyBmdW5jdGlvbiB3b3VsZCBzZXQKKyAgICAgKiBkaXNwTGFuZyB0byAiQW5nbGFpcyIuCisgICAg
ICogQHBhcmFtIGRpc3BsYXlMb2NhbGUgIFNwZWNpZmllcyB0aGUgbG9jYWxlIHRvIGJlIHVzZWQg
dG8gZGlzcGxheSB0aGUgbmFtZS4gIEluIG90aGVyIHdvcmRzLAorICAgICAqICAgICAgICAgICAg
ICAgICAgaWYgdGhlIGxvY2FsZSdzIGxhbmd1YWdlIGNvZGUgaXMgImVuIiwgcGFzc2luZyBMb2Nh
bGU6OmdldEZyZW5jaCgpIGZvcgorICAgICAqICAgICAgICAgICAgICAgICAgZGlzcGxheUxvY2Fs
ZSB3b3VsZCByZXN1bHQgaW4gIkFuZ2xhaXMiLCB3aGlsZSBwYXNzaW5nIExvY2FsZTo6Z2V0R2Vy
bWFuKCkKKyAgICAgKiAgICAgICAgICAgICAgICAgIGZvciBkaXNwbGF5TG9jYWxlIHdvdWxkIHJl
c3VsdCBpbiAiRW5nbGlzY2giLgorICAgICAqIEBwYXJhbSBkaXNwTGFuZyAgUmVjZWl2ZXMgdGhl
IGxhbmd1YWdlJ3MgZGlzcGxheSBuYW1lLgorICAgICAqIEByZXR1cm4gICAgICAgICAgQSByZWZl
cmVuY2UgdG8gImRpc3BMYW5nIi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAg
ICBVbmljb2RlU3RyaW5nJiAgZ2V0RGlzcGxheUxhbmd1YWdlKCBjb25zdCAgIExvY2FsZSYgICAg
ICAgICBkaXNwbGF5TG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVW5pY29kZVN0cmluZyYgIGRpc3BMYW5nKSBjb25zdDsKKworICAgIC8qKgor
ICAgICAqIEZpbGxzIGluICJkaXNwU2NyaXB0IiB3aXRoIHRoZSBuYW1lIG9mIHRoaXMgbG9jYWxl
J3Mgc2NyaXB0IGluIGEgZm9ybWF0IHN1aXRhYmxlCisgICAgICogZm9yIHVzZXIgZGlzcGxheSBp
biB0aGUgZGVmYXVsdCBsb2NhbGUuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGxvY2FsZSdzIHNjcmlw
dCBjb2RlCisgICAgICogaXMgIkxBVE4iIGFuZCB0aGUgZGVmYXVsdCBsb2NhbGUncyBsYW5ndWFn
ZSBjb2RlIGlzICJlbiIsIHRoaXMgZnVuY3Rpb24gd291bGQgc2V0CisgICAgICogZGlzcFNjcmlw
dCB0byAiTGF0aW4iLgorICAgICAqIEBwYXJhbSBkaXNwU2NyaXB0ICAgIFJlY2VpdmVzIHRoZSBz
Y3JpcHRzJ3MgZGlzcGxheSBuYW1lLgorICAgICAqIEByZXR1cm4gICAgICAgICAgICAgIEEgcmVm
ZXJlbmNlIHRvICJkaXNwU2NyaXB0Ii4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjgKKyAgICAgKi8K
KyAgICBVbmljb2RlU3RyaW5nJiAgZ2V0RGlzcGxheVNjcmlwdCggICAgICAgICAgVW5pY29kZVN0
cmluZyYgZGlzcFNjcmlwdCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBGaWxscyBpbiAiZGlz
cFNjcmlwdCIgd2l0aCB0aGUgbmFtZSBvZiB0aGlzIGxvY2FsZSdzIGNvdW50cnkgaW4gYSBmb3Jt
YXQgc3VpdGFibGUKKyAgICAgKiBmb3IgdXNlciBkaXNwbGF5IGluIHRoZSBsb2NhbGUgc3BlY2lm
aWVkIGJ5ICJkaXNwbGF5TG9jYWxlIi4gIEZvciBleGFtcGxlLCBpZiB0aGUgbG9jYWxlJ3MKKyAg
ICAgKiBzY3JpcHQgY29kZSBpcyAiTEFUTiIgYW5kIGRpc3BsYXlMb2NhbGUncyBsYW5ndWFnZSBj
b2RlIGlzICJlbiIsIHRoaXMgZnVuY3Rpb24gd291bGQgc2V0CisgICAgICogZGlzcFNjcmlwdCB0
byAiTGF0aW4iLgorICAgICAqIEBwYXJhbSBkaXNwbGF5TG9jYWxlICAgICAgU3BlY2lmaWVzIHRo
ZSBsb2NhbGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBuYW1lLiAgSW4gb3RoZXIKKyAgICAg
KiAgICAgICAgICAgICAgICAgICAgICB3b3JkcywgaWYgdGhlIGxvY2FsZSdzIHNjcmlwdCBjb2Rl
IGlzICJMQVROIiwgcGFzc2luZworICAgICAqICAgICAgICAgICAgICAgICAgICAgIExvY2FsZTo6
Z2V0RnJlbmNoKCkgZm9yIGRpc3BsYXlMb2NhbGUgd291bGQgcmVzdWx0IGluICIiLCB3aGlsZQor
ICAgICAqICAgICAgICAgICAgICAgICAgICAgIHBhc3NpbmcgTG9jYWxlOjpnZXRHZXJtYW4oKSBm
b3IgZGlzcGxheUxvY2FsZSB3b3VsZCByZXN1bHQgaW4KKyAgICAgKiAgICAgICAgICAgICAgICAg
ICAgICAiIi4KKyAgICAgKiBAcGFyYW0gZGlzcFNjcmlwdCAgICBSZWNlaXZlcyB0aGUgc2NyaXB0
cydzIGRpc3BsYXkgbmFtZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICBBIHJlZmVyZW5j
ZSB0byAiZGlzcFNjcmlwdCIuCisgICAgICogQHN0YWJsZSBJQ1UgMi44CisgICAgICovCisgICAg
VW5pY29kZVN0cmluZyYgIGdldERpc3BsYXlTY3JpcHQoICBjb25zdCAgIExvY2FsZSYgICAgICAg
ICBkaXNwbGF5TG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVbmljb2RlU3RyaW5nJiAgZGlzcFNjcmlwdCkgY29uc3Q7CisKKyAgICAvKioKKyAg
ICAgKiBGaWxscyBpbiAiZGlzcENvdW50cnkiIHdpdGggdGhlIG5hbWUgb2YgdGhpcyBsb2NhbGUn
cyBjb3VudHJ5IGluIGEgZm9ybWF0IHN1aXRhYmxlCisgICAgICogZm9yIHVzZXIgZGlzcGxheSBp
biB0aGUgZGVmYXVsdCBsb2NhbGUuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGxvY2FsZSdzIGNvdW50
cnkgY29kZQorICAgICAqIGlzICJGUiIgYW5kIHRoZSBkZWZhdWx0IGxvY2FsZSdzIGxhbmd1YWdl
IGNvZGUgaXMgImVuIiwgdGhpcyBmdW5jdGlvbiB3b3VsZCBzZXQKKyAgICAgKiBkaXNwQ291bnRy
eSB0byAiRnJhbmNlIi4KKyAgICAgKiBAcGFyYW0gZGlzcENvdW50cnkgICBSZWNlaXZlcyB0aGUg
Y291bnRyeSdzIGRpc3BsYXkgbmFtZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICBBIHJl
ZmVyZW5jZSB0byAiZGlzcENvdW50cnkiLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAq
LworICAgIFVuaWNvZGVTdHJpbmcmICBnZXREaXNwbGF5Q291bnRyeSggICAgICAgICAgVW5pY29k
ZVN0cmluZyYgZGlzcENvdW50cnkpIGNvbnN0OworCisgICAgLyoqCisgICAgICogRmlsbHMgaW4g
ImRpc3BDb3VudHJ5IiB3aXRoIHRoZSBuYW1lIG9mIHRoaXMgbG9jYWxlJ3MgY291bnRyeSBpbiBh
IGZvcm1hdCBzdWl0YWJsZQorICAgICAqIGZvciB1c2VyIGRpc3BsYXkgaW4gdGhlIGxvY2FsZSBz
cGVjaWZpZWQgYnkgImRpc3BsYXlMb2NhbGUiLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBsb2NhbGUn
cworICAgICAqIGNvdW50cnkgY29kZSBpcyAiVVMiIGFuZCBkaXNwbGF5TG9jYWxlJ3MgbGFuZ3Vh
Z2UgY29kZSBpcyAiZnIiLCB0aGlzIGZ1bmN0aW9uIHdvdWxkIHNldAorICAgICAqIGRpc3BDb3Vu
dHJ5IHRvICImRWFjdXRlO3RhdHMtVW5pcyIuCisgICAgICogQHBhcmFtIGRpc3BsYXlMb2NhbGUg
ICAgICBTcGVjaWZpZXMgdGhlIGxvY2FsZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG5hbWUu
ICBJbiBvdGhlcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgIHdvcmRzLCBpZiB0aGUgbG9j
YWxlJ3MgY291bnRyeSBjb2RlIGlzICJVUyIsIHBhc3NpbmcKKyAgICAgKiAgICAgICAgICAgICAg
ICAgICAgICBMb2NhbGU6OmdldEZyZW5jaCgpIGZvciBkaXNwbGF5TG9jYWxlIHdvdWxkIHJlc3Vs
dCBpbiAiJkVhY3V0ZTt0YXRzLVVuaXMiLCB3aGlsZQorICAgICAqICAgICAgICAgICAgICAgICAg
ICAgIHBhc3NpbmcgTG9jYWxlOjpnZXRHZXJtYW4oKSBmb3IgZGlzcGxheUxvY2FsZSB3b3VsZCBy
ZXN1bHQgaW4KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAiVmVyZWluaWd0ZSBTdGFhdGVu
Ii4KKyAgICAgKiBAcGFyYW0gZGlzcENvdW50cnkgICBSZWNlaXZlcyB0aGUgY291bnRyeSdzIGRp
c3BsYXkgbmFtZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICBBIHJlZmVyZW5jZSB0byAi
ZGlzcENvdW50cnkiLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIFVuaWNv
ZGVTdHJpbmcmICBnZXREaXNwbGF5Q291bnRyeSggIGNvbnN0ICAgTG9jYWxlJiAgICAgICAgIGRp
c3BsYXlMb2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVbmljb2RlU3RyaW5nJiAgZGlzcENvdW50cnkpIGNvbnN0OworCisgICAgLyoqCisgICAg
ICogRmlsbHMgaW4gImRpc3BWYXIiIHdpdGggdGhlIG5hbWUgb2YgdGhpcyBsb2NhbGUncyB2YXJp
YW50IGNvZGUgaW4gYSBmb3JtYXQgc3VpdGFibGUKKyAgICAgKiBmb3IgdXNlciBkaXNwbGF5IGlu
IHRoZSBkZWZhdWx0IGxvY2FsZS4KKyAgICAgKiBAcGFyYW0gZGlzcFZhciAgIFJlY2VpdmVzIHRo
ZSB2YXJpYW50J3MgbmFtZS4KKyAgICAgKiBAcmV0dXJuICAgICAgICAgIEEgcmVmZXJlbmNlIHRv
ICJkaXNwVmFyIi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBVbmljb2Rl
U3RyaW5nJiAgZ2V0RGlzcGxheVZhcmlhbnQoICAgICAgVW5pY29kZVN0cmluZyYgZGlzcFZhcikg
Y29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBGaWxscyBpbiAiZGlzcFZhciIgd2l0aCB0aGUgbmFt
ZSBvZiB0aGlzIGxvY2FsZSdzIHZhcmlhbnQgY29kZSBpbiBhIGZvcm1hdAorICAgICAqIHN1aXRh
YmxlIGZvciB1c2VyIGRpc3BsYXkgaW4gdGhlIGxvY2FsZSBzcGVjaWZpZWQgYnkgImRpc3BsYXlM
b2NhbGUiLgorICAgICAqIEBwYXJhbSBkaXNwbGF5TG9jYWxlICBTcGVjaWZpZXMgdGhlIGxvY2Fs
ZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIG5hbWUuCisgICAgICogQHBhcmFtIGRpc3BWYXIg
ICBSZWNlaXZlcyB0aGUgdmFyaWFudCdzIGRpc3BsYXkgbmFtZS4KKyAgICAgKiBAcmV0dXJuICAg
ICAgICAgIEEgcmVmZXJlbmNlIHRvICJkaXNwVmFyIi4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAK
KyAgICAgKi8KKyAgICBVbmljb2RlU3RyaW5nJiAgZ2V0RGlzcGxheVZhcmlhbnQoICBjb25zdCAg
IExvY2FsZSYgICAgICAgICBkaXNwbGF5TG9jYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZVN0cmluZyYgIGRpc3BWYXIpIGNvbnN0Owor
CisgICAgLyoqCisgICAgICogRmlsbHMgaW4gIm5hbWUiIHdpdGggdGhlIG5hbWUgb2YgdGhpcyBs
b2NhbGUgaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIHVzZXIgZGlzcGxheQorICAgICAqIGluIHRo
ZSBkZWZhdWx0IGxvY2FsZS4gIFRoaXMgZnVuY3Rpb24gdXNlcyBnZXREaXNwbGF5TGFuZ3VhZ2Uo
KSwgZ2V0RGlzcGxheUNvdW50cnkoKSwKKyAgICAgKiBhbmQgZ2V0RGlzcGxheVZhcmlhbnQoKSB0
byBkbyBpdHMgd29yaywgYW5kIG91dHB1dHMgdGhlIGRpc3BsYXkgbmFtZSBpbiB0aGUgZm9ybWF0
CisgICAgICogImxhbmd1YWdlIChjb3VudHJ5Wyx2YXJpYW50XSkiLiAgRm9yIGV4YW1wbGUsIGlm
IHRoZSBkZWZhdWx0IGxvY2FsZSBpcyBlbl9VUywgdGhlbgorICAgICAqIGZyX0ZSJ3MgZGlzcGxh
eSBuYW1lIHdvdWxkIGJlICJGcmVuY2ggKEZyYW5jZSkiLCBhbmQgZXNfTVhfVHJhZGl0aW9uYWwn
cyBkaXNwbGF5IG5hbWUKKyAgICAgKiB3b3VsZCBiZSAiU3BhbmlzaCAoTWV4aWNvLFRyYWRpdGlv
bmFsKSIuCisgICAgICogQHBhcmFtIG5hbWUgIFJlY2VpdmVzIHRoZSBsb2NhbGUncyBkaXNwbGF5
IG5hbWUuCisgICAgICogQHJldHVybiAgICAgIEEgcmVmZXJlbmNlIHRvICJuYW1lIi4KKyAgICAg
KiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBVbmljb2RlU3RyaW5nJiAgZ2V0RGlzcGxh
eU5hbWUoICAgICAgICAgVW5pY29kZVN0cmluZyYgIG5hbWUpIGNvbnN0OworCisgICAgLyoqCisg
ICAgICogRmlsbHMgaW4gIm5hbWUiIHdpdGggdGhlIG5hbWUgb2YgdGhpcyBsb2NhbGUgaW4gYSBm
b3JtYXQgc3VpdGFibGUgZm9yIHVzZXIgZGlzcGxheQorICAgICAqIGluIHRoZSBsb2NhbGUgc3Bl
Y2ZpZWQgYnkgImRpc3BsYXlMb2NhbGUiLiAgVGhpcyBmdW5jdGlvbiB1c2VzIGdldERpc3BsYXlM
YW5ndWFnZSgpLAorICAgICAqIGdldERpc3BsYXlDb3VudHJ5KCksIGFuZCBnZXREaXNwbGF5VmFy
aWFudCgpIHRvIGRvIGl0cyB3b3JrLCBhbmQgb3V0cHV0cyB0aGUgZGlzcGxheQorICAgICAqIG5h
bWUgaW4gdGhlIGZvcm1hdCAibGFuZ3VhZ2UgKGNvdW50cnlbLHZhcmlhbnRdKSIuICBGb3IgZXhh
bXBsZSwgaWYgZGlzcGxheUxvY2FsZSBpcworICAgICAqIGZyX0ZSLCB0aGVuIGVuX1VTJ3MgZGlz
cGxheSBuYW1lIHdvdWxkIGJlICJBbmdsYWlzICgmRWFjdXRlO3RhdHMtVW5pcykiLCBhbmQgbm9f
Tk9fTlkncworICAgICAqIGRpc3BsYXkgbmFtZSB3b3VsZCBiZSAibm9ydiZlYWN1dGU7Z2llbiAo
Tm9ydiZlZ3JhdmU7Z2UsTlkpIi4KKyAgICAgKiBAcGFyYW0gZGlzcGxheUxvY2FsZSAgU3BlY2lm
aWVzIHRoZSBsb2NhbGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBuYW1lLgorICAgICAqIEBw
YXJhbSBuYW1lICAgICAgUmVjZWl2ZXMgdGhlIGxvY2FsZSdzIGRpc3BsYXkgbmFtZS4KKyAgICAg
KiBAcmV0dXJuICAgICAgICAgIEEgcmVmZXJlbmNlIHRvICJuYW1lIi4KKyAgICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICAgKi8KKyAgICBVbmljb2RlU3RyaW5nJiAgZ2V0RGlzcGxheU5hbWUoIGNv
bnN0ICAgTG9jYWxlJiAgICAgICAgIGRpc3BsYXlMb2NhbGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcmICBuYW1lKSBjb25zdDsKKwor
ICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyBhIGhhc2ggY29kZSBmb3IgdGhlIGxvY2FsZS4KKyAg
ICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBpbnQzMl90ICAgICAgICAgaGFzaENv
ZGUodm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsb2NhbGUgdG8gYm9n
dXMKKyAgICAgKiBBIGJvZ3VzIGxvY2FsZSByZXByZXNlbnRzIGEgbm9uLWV4aXN0aW5nIGxvY2Fs
ZSBhc3NvY2lhdGVkCisgICAgICogd2l0aCBzZXJ2aWNlcyB0aGF0IGNhbiBiZSBpbnN0YW50aWF0
ZWQgZnJvbSBub24tbG9jYWxlIGRhdGEKKyAgICAgKiBpbiBhZGRpdGlvbiB0byBsb2NhbGUgKGZv
ciBleGFtcGxlLCBjb2xsYXRpb24gY2FuIGJlCisgICAgICogaW5zdGFudGlhdGVkIGZyb20gYSBs
b2NhbGUgYW5kIGZyb20gYSBydWxlIHNldCkuCisgICAgICogQHN0YWJsZSBJQ1UgMi4xCisgICAg
ICovCisgICAgdm9pZCBzZXRUb0JvZ3VzKCk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBi
b2d1cyBzdGF0ZS4gTG9jYWxlIG9iamVjdCBjYW4gYmUgYm9ndXMgaWYgaXQgZG9lc24ndCBleGlz
dAorICAgICAqIEByZXR1cm4gRkFMU0UgaWYgaXQgaXMgYSByZWFsIGxvY2FsZSwgVFJVRSBpZiBp
dCBpcyBhIGJvZ3VzIGxvY2FsZQorICAgICAqIEBzdGFibGUgSUNVIDIuMQorICAgICAqLworICAg
IFVCb29sIGlzQm9ndXModm9pZCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEg
bGlzdCBvZiBhbGwgaW5zdGFsbGVkIGxvY2FsZXMuCisgICAgICogQHBhcmFtIGNvdW50IFJlY2Vp
dmVzIHRoZSBudW1iZXIgb2YgbG9jYWxlcyBpbiB0aGUgbGlzdC4KKyAgICAgKiBAcmV0dXJuICAg
ICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIExvY2FsZSBvYmplY3RzLiAgVGhpcyBhcnJheSBp
cyB0aGUgbGlzdAorICAgICAqICAgICAgICAgICAgICBvZiBhbGwgbG9jYWxlcyB3aXRoIGluc3Rh
bGxlZCByZXNvdXJjZSBmaWxlcy4gIFRoZSBjYWxsZWQgZG9lcyBOT1QKKyAgICAgKiAgICAgICAg
ICAgICAgZ2V0IG93bmVyc2hpcCBvZiB0aGlzIGxpc3QsIGFuZCBtdXN0IE5PVCBkZWxldGUgaXQu
CisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgc3RhdGljIGNvbnN0IExvY2Fs
ZSogVV9FWFBPUlQyIGdldEF2YWlsYWJsZUxvY2FsZXMoaW50MzJfdCYgY291bnQpOworCisgICAg
LyoqCisgICAgICogR2V0cyBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSAyLWxldHRlciBjb3VudHJ5
IGNvZGVzIGRlZmluZWQgaW4gSVNPIDMxNjYuICBUaGlzIGlzIGEKKyAgICAgKiBwb2ludGVyIHRv
IGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIGFycmF5cyBvZiBjaGFyLiAgQWxsIG9mIHRoZXNlIHBv
aW50ZXJzIGFyZQorICAgICAqIG93bmVkIGJ5IElDVS0tIGRvIG5vdCBkZWxldGUgdGhlbSwgYW5k
IGRvIG5vdCB3cml0ZSB0aHJvdWdoIHRoZW0uICBUaGUgYXJyYXkgaXMKKyAgICAgKiB0ZXJtaW5h
dGVkIHdpdGggYSBudWxsIHBvaW50ZXIuCisgICAgICogQHJldHVybiBhIGxpc3Qgb2YgYWxsIGF2
YWlsYWJsZSBjb3VudHJ5IGNvZGVzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0KiBVX0VYUE9SVDIgZ2V0SVNPQ291bnRyaWVzKCk7
CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGEgbGlzdCBvZiBhbGwgYXZhaWxhYmxlIGxhbmd1YWdl
IGNvZGVzIGRlZmluZWQgaW4gSVNPIDYzOS4gIFRoaXMgaXMgYSBwb2ludGVyCisgICAgICogdG8g
YW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYXJyYXlzIG9mIGNoYXIuICBBbGwgb2YgdGhlc2UgcG9p
bnRlcnMgYXJlIG93bmVkCisgICAgICogYnkgSUNVLS0gZG8gbm90IGRlbGV0ZSB0aGVtLCBhbmQg
ZG8gbm90IHdyaXRlIHRocm91Z2ggdGhlbS4gIFRoZSBhcnJheSBpcworICAgICAqIHRlcm1pbmF0
ZWQgd2l0aCBhIG51bGwgcG9pbnRlci4KKyAgICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBhbGwgYXZh
aWxhYmxlIGxhbmd1YWdlIGNvZGVzCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0KiBVX0VYUE9SVDIgZ2V0SVNPTGFuZ3VhZ2VzKCk7
CisKKyAgICAvKioKKyAgICAgKiBJQ1UgInBvb3IgbWFuJ3MgUlRUSSIsIHJldHVybnMgYSBVQ2xh
c3NJRCBmb3IgdGhpcyBjbGFzcy4KKyAgICAgKgorICAgICAqIEBzdGFibGUgSUNVIDIuMgorICAg
ICAqLworICAgIHN0YXRpYyBVQ2xhc3NJRCBVX0VYUE9SVDIgZ2V0U3RhdGljQ2xhc3NJRCgpOwor
CisgICAgLyoqCisgICAgICogSUNVICJwb29yIG1hbidzIFJUVEkiLCByZXR1cm5zIGEgVUNsYXNz
SUQgZm9yIHRoZSBhY3R1YWwgY2xhc3MuCisgICAgICoKKyAgICAgKiBAc3RhYmxlIElDVSAyLjIK
KyAgICAgKi8KKyAgICB2aXJ0dWFsIFVDbGFzc0lEIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3Q7
CisKK3Byb3RlY3RlZDogLyogb25seSBwcm90ZWN0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuIERP
IE5PVCBVU0UuICovCisjaWZuZGVmIFVfSElERV9JTlRFUk5BTF9BUEkKKyAgICAvKioKKyAgICAg
KiBTZXQgdGhpcyBmcm9tIGEgc2luZ2xlIFBPU0lYIHN0eWxlIGxvY2FsZSBzdHJpbmcuCisgICAg
ICogQGludGVybmFsCisgICAgICovCisgICAgdm9pZCBzZXRGcm9tUE9TSVhJRChjb25zdCBjaGFy
ICpwb3NpeElEKTsKKyNlbmRpZiAgLyogVV9ISURFX0lOVEVSTkFMX0FQSSAqLworCitwcml2YXRl
OgorICAgIC8qKgorICAgICAqIEluaXRpYWxpemUgdGhlIGxvY2FsZSBvYmplY3Qgd2l0aCBhIG5l
dyBuYW1lLgorICAgICAqIFdhcyBkZXByZWNhdGVkIC0gdXNlZCBpbiBpbXBsZW1lbnRhdGlvbiAt
IG1vdmVkIGludGVybmFsCisgICAgICoKKyAgICAgKiBAcGFyYW0gY0xvY2FsZUlEIFRoZSBuZXcg
bG9jYWxlIG5hbWUuCisgICAgICogQHBhcmFtIGNhbm9uaWNhbGl6ZSB3aGV0aGVyIHRvIGNhbGwg
dWxvY19jYW5vbmljYWxpemUgb24gY0xvY2FsZUlECisgICAgICovCisgICAgTG9jYWxlJiBpbml0
KGNvbnN0IGNoYXIqIGNMb2NhbGVJRCwgVUJvb2wgY2Fub25pY2FsaXplKTsKKworICAgIC8qCisg
ICAgICogSW50ZXJuYWwgY29uc3RydWN0b3IgdG8gYWxsb3cgY29uc3RydWN0aW9uIG9mIGEgbG9j
YWxlIG9iamVjdCB3aXRoCisgICAgICogICBOTyBzaWRlIGVmZmVjdHMuICAgKERlZmF1bHQgY29u
c3RydWN0b3IgdHJpZXMgdG8gZ2V0CisgICAgICogICB0aGUgZGVmYXVsdCBsb2NhbGUuKQorICAg
ICAqLworICAgIGVudW0gRUxvY2FsZVR5cGUgeworICAgICAgICBlQk9HVVMKKyAgICB9OworICAg
IExvY2FsZShFTG9jYWxlVHlwZSk7CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplIHRoZSBs
b2NhbGUgY2FjaGUgZm9yIGNvbW1vbmx5IHVzZWQgbG9jYWxlcworICAgICAqLworICAgIHN0YXRp
YyBMb2NhbGUgKmdldExvY2FsZUNhY2hlKHZvaWQpOworCisgICAgY2hhciBsYW5ndWFnZVtVTE9D
X0xBTkdfQ0FQQUNJVFldOworICAgIGNoYXIgc2NyaXB0W1VMT0NfU0NSSVBUX0NBUEFDSVRZXTsK
KyAgICBjaGFyIGNvdW50cnlbVUxPQ19DT1VOVFJZX0NBUEFDSVRZXTsKKyAgICBpbnQzMl90IHZh
cmlhbnRCZWdpbjsKKyAgICBjaGFyKiBmdWxsTmFtZTsKKyAgICBjaGFyIGZ1bGxOYW1lQnVmZmVy
W1VMT0NfRlVMTE5BTUVfQ0FQQUNJVFldOworICAgIC8vIG5hbWUgd2l0aG91dCBrZXl3b3Jkcwor
ICAgIGNoYXIqIGJhc2VOYW1lOworICAgIHZvaWQgaW5pdEJhc2VOYW1lKFVFcnJvckNvZGUmIHN0
YXR1cyk7CisKKyAgICBVQm9vbCBmSXNCb2d1czsKKworICAgIHN0YXRpYyBjb25zdCBMb2NhbGUg
JmdldExvY2FsZShpbnQgbG9jaWQpOworCisgICAgLyoqCisgICAgICogQSBmcmllbmQgdG8gYWxs
b3cgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGJlIHNldCBieSBlaXRoZXIgdGhlIEMgb3IgQysrIEFQ
SS4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBmcmllbmQgTG9jYWxlICpsb2NhbGVf
c2V0X2RlZmF1bHRfaW50ZXJuYWwoY29uc3QgY2hhciAqLCBVRXJyb3JDb2RlJiBzdGF0dXMpOwor
CisgICAgLyoqCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgZnJpZW5kIHZvaWQgVV9D
QUxMQ09OViBsb2NhbGVfYXZhaWxhYmxlX2luaXQoKTsKK307CisKK2lubGluZSBVQm9vbAorTG9j
YWxlOjpvcGVyYXRvciE9KGNvbnN0ICAgIExvY2FsZSYgICAgIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7Cit9CisKK2lubGluZSBjb25zdCBjaGFyICoKK0xv
Y2FsZTo6Z2V0Q291bnRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvdW50cnk7Cit9CisKK2lu
bGluZSBjb25zdCBjaGFyICoKK0xvY2FsZTo6Z2V0TGFuZ3VhZ2UoKSBjb25zdAoreworICAgIHJl
dHVybiBsYW5ndWFnZTsKK30KKworaW5saW5lIGNvbnN0IGNoYXIgKgorTG9jYWxlOjpnZXRTY3Jp
cHQoKSBjb25zdAoreworICAgIHJldHVybiBzY3JpcHQ7Cit9CisKK2lubGluZSBjb25zdCBjaGFy
ICoKK0xvY2FsZTo6Z2V0VmFyaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICZiYXNlTmFtZVt2
YXJpYW50QmVnaW5dOworfQorCitpbmxpbmUgY29uc3QgY2hhciAqCitMb2NhbGU6OmdldE5hbWUo
KSBjb25zdAoreworICAgIHJldHVybiBmdWxsTmFtZTsKK30KKworaW5saW5lIFVCb29sCitMb2Nh
bGU6OmlzQm9ndXModm9pZCkgY29uc3QgeworICAgIHJldHVybiBmSXNCb2d1czsKK30KKworVV9O
QU1FU1BBQ0VfRU5ECisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29k
ZS9yYmJpLmggYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3JiYmkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDc1
OThhNTBlNmZhM2JhYjJhZDQ5ZTAyMmFhZjM5NmNhYzMyOWU1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dURi9pY3UvdW5pY29kZS9yYmJpLmgKQEAgLTAsMCArMSw3ODIgQEAKKy8qCisqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKKyogICBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBJbnRlcm5hdGlvbmFs
IEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uICAgKgorKiAgIGFuZCBvdGhlcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIERhdGUgICAgICAgIE5hbWUg
ICAgICAgIERlc2NyaXB0aW9uCisqICAgMTAvMjIvOTkgICAgYWxhbiAgICAgICAgQ3JlYXRpb24u
CisqICAgMTEvMTEvOTkgICAgcmdpbGxhbSAgICAgQ29tcGxldGUgcG9ydCBmcm9tIEphdmEuCisq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisqLworCisjaWZuZGVmIFJCQklfSAorI2RlZmluZSBSQkJJX0gKKworI2lu
Y2x1ZGUgInVuaWNvZGUvdXR5cGVzLmgiCisKKy8qKgorICogXGZpbGUKKyAqIFxicmllZiBDKysg
QVBJOiBSdWxlIEJhc2VkIEJyZWFrIEl0ZXJhdG9yCisgKi8KKworI2lmICFVQ09ORklHX05PX0JS
RUFLX0lURVJBVElPTgorCisjaW5jbHVkZSAidW5pY29kZS9icmtpdGVyLmgiCisjaW5jbHVkZSAi
dW5pY29kZS91ZGF0YS5oIgorI2luY2x1ZGUgInVuaWNvZGUvcGFyc2VlcnIuaCIKKyNpbmNsdWRl
ICJ1bmljb2RlL3NjaHJpdGVyLmgiCisjaW5jbHVkZSAidW5pY29kZS91Y2hyaXRlci5oIgorCisK
K3N0cnVjdCBVVHJpZTsKKworVV9OQU1FU1BBQ0VfQkVHSU4KKworLyoqIEBpbnRlcm5hbCAqLwor
c3RydWN0IFJCQklEYXRhSGVhZGVyOworY2xhc3MgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3JUYWJs
ZXM7CitjbGFzcyAgQnJlYWtJdGVyYXRvcjsKK2NsYXNzICBSQkJJRGF0YVdyYXBwZXI7CitjbGFz
cyAgVVN0YWNrOworY2xhc3MgIExhbmd1YWdlQnJlYWtFbmdpbmU7CitjbGFzcyAgVW5oYW5kbGVk
RW5naW5lOworc3RydWN0IFJCQklTdGF0ZVRhYmxlOworCisKKworCisvKioKKyAqCisgKiBBIHN1
YmNsYXNzIG9mIEJyZWFrSXRlcmF0b3Igd2hvc2UgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIHVzaW5n
IGEgbGlzdCBvZiBydWxlcy4KKyAqIDxwPkluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGFyZSBtb3N0
IGNvbW1vbmx5IGNyZWF0ZWQgYnkgdGhlIGZhY3RvcnkgbWV0aG9kcyBvZgorICogIEJyZWFrSXRl
cmF0b3I6OmNyZWF0ZVdvcmRJbnN0YW5jZSgpLCBCcmVha0l0ZXJhdG9yOjpjcmVhdGVMaW5lSW5z
dGFuY2UoKSwgZXRjLiwKKyAqICBhbmQgdGhlbiB1c2VkIHZpYSB0aGUgYWJzdHJhY3QgQVBJIGlu
IGNsYXNzIEJyZWFrSXRlcmF0b3I8L3A+CisgKgorICogPHA+U2VlIHRoZSBJQ1UgVXNlciBHdWlk
ZSBmb3IgaW5mb3JtYXRpb24gb24gQnJlYWsgSXRlcmF0b3IgUnVsZXMuPC9wPgorICoKKyAqIDxw
PlRoaXMgY2xhc3MgaXMgbm90IGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQuICAoQ2xhc3MgRGlj
dGlvbmFyeUJhc2VkQnJlYWtJdGVyYXRvcgorICogICAgaXMgYSBzdWJjbGFzcywgYnV0IHRoYXQg
cmVsYXRpb25zaGlwIGlzIGVmZmVjdGl2ZWx5IGludGVybmFsIHRvIHRoZSBJQ1UKKyAqICAgIGlt
cGxlbWVudGF0aW9uLiAgVGhlIHN1YmNsYXNzaW5nIGludGVyZmFjZSB0byBSdWxlc0Jhc2VkQnJl
YWtJdGVyYXRvciBpcworICogICAgbm90IHBhcnQgb2YgdGhlIElDVSBBUEksIGFuZCBtYXkgbm90
IHJlbWFpbiBzdGFibGUuPC9wPgorICoKKyAqLworY2xhc3MgVV9DT01NT05fQVBJIFJ1bGVCYXNl
ZEJyZWFrSXRlcmF0b3IgLypVX0ZJTkFMKi8gOiBwdWJsaWMgQnJlYWtJdGVyYXRvciB7CisKK3By
b3RlY3RlZDoKKyAgICAvKioKKyAgICAgKiBUaGUgVVRleHQgdGhyb3VnaCB3aGljaCB0aGlzIEJy
ZWFrSXRlcmF0b3IgYWNjZXNzZXMgdGhlIHRleHQKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8K
KyAgICBVVGV4dCAgKmZUZXh0OworCisgICAgLyoqCisgICAgICogICBBIGNoYXJhY3RlciBpdGVy
YXRvciB0aGF0IHJlZmVycyB0byB0aGUgc2FtZSB0ZXh0IGFzIHRoZSBVVGV4dCwgYWJvdmUuCisg
ICAgICogICBPbmx5IGluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIEFQSSwgd2hp
Y2ggd2FzIGJhc2VkIG9uIENoYXJhY3Rlckl0ZXJhdG9ycy4KKyAgICAgKiAgIFZhbHVlIG1heSBi
ZSBhZG9wdGVkIGZyb20gb3V0c2lkZSwgb3Igb25lIG9mIGZTQ2hhckl0ZXIgb3IgZkRDaGFySXRl
ciwgYmVsb3cuCisgICAgICovCisgICAgQ2hhcmFjdGVySXRlcmF0b3IgICpmQ2hhckl0ZXI7CisK
KyAgICAvKioKKyAgICAgKiAgIFdoZW4gdGhlIGlucHV0IHRleHQgaXMgcHJvdmlkZWQgYnkgYSBV
bmljb2RlU3RyaW5nLCB0aGlzIHdpbGwgcG9pbnQgdG8KKyAgICAgKiAgICBhIGNoYXJhY3Rlckl0
ZXJhdG9yIHRoYXQgd3JhcHMgdGhhdCBkYXRhLiAgTmVlZGVkIG9ubHkgZm9yIHRoZQorICAgICAq
ICAgIGltcGxlbWVudGF0aW9uIG9mIGdldFRleHQoKSwgYSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eSBpc3N1ZS4KKyAgICAgKi8KKyAgICBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvciAqZlNDaGFySXRl
cjsKKworICAgIC8qKgorICAgICAqICBXaGVuIHRoZSBpbnB1dCB0ZXh0IGlzIHByb3ZpZGVkIGJ5
IGEgVVRleHQsIHRoaXMKKyAgICAgKiAgICBkdW1teSBDaGFyYWN0ZXJJdGVyYXRvciBvdmVyIGFu
IGVtcHR5IHN0cmluZyB3aWxsCisgICAgICogICAgYmUgcmV0dXJuZWQgZnJvbSBnZXRUZXh0KCkK
KyAgICAgKi8KKyAgICBVQ2hhckNoYXJhY3Rlckl0ZXJhdG9yICpmRENoYXJJdGVyOworCisgICAg
LyoqCisgICAgICogVGhlIHJ1bGUgZGF0YSBmb3IgdGhpcyBCcmVha0l0ZXJhdG9yIGluc3RhbmNl
CisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgUkJCSURhdGFXcmFwcGVyICAgICpmRGF0
YTsKKworICAgIC8qKiBJbmRleCBvZiB0aGUgUnVsZSB7dGFnfSB2YWx1ZXMgZm9yIHRoZSBtb3N0
IHJlY2VudCBtYXRjaC4KKyAgICAgKiAgQGludGVybmFsCisgICAgKi8KKyAgICBpbnQzMl90ICAg
ICAgICAgICAgIGZMYXN0UnVsZVN0YXR1c0luZGV4OworCisgICAgLyoqCisgICAgICogUnVsZSB0
YWcgdmFsdWUgdmFsaWQgZmxhZy4KKyAgICAgKiBTb21lIGl0ZXJhdG9yIG9wZXJhdGlvbnMgZG9u
J3QgaW50cmluc2ljYWxseSBzZXQgdGhlIGNvcnJlY3QgdGFnIHZhbHVlLgorICAgICAqIFRoaXMg
ZmxhZyBsZXRzIHVzIGxhemlseSBjb21wdXRlIHRoZSB2YWx1ZSBpZiB3ZSBhcmUgZXZlciBhc2tl
ZCBmb3IgaXQuCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgVUJvb2wgICAgICAgICAg
ICAgICBmTGFzdFN0YXR1c0luZGV4VmFsaWQ7CisKKyAgICAvKioKKyAgICAgKiBDb3VudGVyIGZv
ciB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZW5jb3VudGVyZWQgd2l0aCB0aGUgImRpY3Rpb25h
cnkiCisgICAgICogICBmbGFnIHNldC4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICB1
aW50MzJfdCAgICAgICAgICAgIGZEaWN0aW9uYXJ5Q2hhckNvdW50OworCisgICAgLyoqCisgICAg
ICogV2hlbiBhIHJhbmdlIG9mIGNoYXJhY3RlcnMgaXMgZGl2aWRlZCB1cCB1c2luZyB0aGUgZGlj
dGlvbmFyeSwgdGhlIGJyZWFrCisgICAgICogcG9zaXRpb25zIHRoYXQgYXJlIGRpc2NvdmVyZWQg
YXJlIHN0b3JlZCBoZXJlLCBwcmV2ZW50aW5nIHVzIGZyb20gaGF2aW5nCisgICAgICogdG8gdXNl
IGVpdGhlciB0aGUgZGljdGlvbmFyeSBvciB0aGUgc3RhdGUgdGFibGUgYWdhaW4gdW50aWwgdGhl
IGl0ZXJhdG9yCisgICAgICogbGVhdmVzIHRoaXMgcmFuZ2Ugb2YgdGV4dC4gSGFzIHRoZSBtb3N0
IGltcGFjdCBmb3IgbGluZSBicmVha2luZy4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAg
ICBpbnQzMl90KiAgICAgICAgICAgIGZDYWNoZWRCcmVha1Bvc2l0aW9uczsKKworICAgIC8qKgor
ICAgICAqIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gZkNhY2hlZEJyZWFrUG9zaXRpb25zCisg
ICAgICogQGludGVybmFsCisgICAgICovCisgICAgaW50MzJfdCAgICAgICAgICAgICBmTnVtQ2Fj
aGVkQnJlYWtQb3NpdGlvbnM7CisKKyAgICAvKioKKyAgICAgKiBpZiBmQ2FjaGVkQnJlYWtQb3Np
dGlvbnMgaXMgbm90IG51bGwsIHRoaXMgaW5kaWNhdGVzIHdoaWNoIGl0ZW0gaW4gdGhlCisgICAg
ICogY2FjaGUgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHBvc2l0aW9uIHJlZmVycyB0bworICAgICAq
IEBpbnRlcm5hbAorICAgICAqLworICAgIGludDMyX3QgICAgICAgICAgICAgZlBvc2l0aW9uSW5D
YWNoZTsKKyAgICAKKyAgICAvKioKKyAgICAgKgorICAgICAqIElmIHByZXNlbnQsIFVTdGFjayBv
ZiBMYW5ndWFnZUJyZWFrRW5naW5lIG9iamVjdHMgdGhhdCBtaWdodCBoYW5kbGUKKyAgICAgKiBk
aWN0aW9uYXJ5IGNoYXJhY3RlcnMuIFNlYXJjaGVkIGZyb20gdG9wIHRvIGJvdHRvbSB0byBmaW5k
IGFuIG9iamVjdCB0bworICAgICAqIGhhbmRsZSBhIGdpdmVuIGNoYXJhY3Rlci4KKyAgICAgKiBA
aW50ZXJuYWwKKyAgICAgKi8KKyAgICBVU3RhY2sgICAgICAgICAgICAgICpmTGFuZ3VhZ2VCcmVh
a0VuZ2luZXM7CisgICAgCisgICAgLyoqCisgICAgICoKKyAgICAgKiBJZiBwcmVzZW50LCB0aGUg
c3BlY2lhbCBMYW5ndWFnZUJyZWFrRW5naW5lIHVzZWQgZm9yIGhhbmRsaW5nCisgICAgICogY2hh
cmFjdGVycyB0aGF0IGFyZSBpbiB0aGUgZGljdGlvbmFyeSBzZXQsIGJ1dCBub3QgaGFuZGxlZCBi
eSBhbnkKKyAgICAgKiBMYW5ndWdhZ2VCcmVha0VuZ2luZS4KKyAgICAgKiBAaW50ZXJuYWwKKyAg
ICAgKi8KKyAgICBVbmhhbmRsZWRFbmdpbmUgICAgICpmVW5oYW5kbGVkQnJlYWtFbmdpbmU7Cisg
ICAgCisgICAgLyoqCisgICAgICoKKyAgICAgKiBUaGUgdHlwZSBvZiB0aGUgYnJlYWsgaXRlcmF0
b3IsIG9yIC0xIGlmIGl0IGhhcyBub3QgYmVlbiBzZXQuCisgICAgICogQGludGVybmFsCisgICAg
ICovCisgICAgaW50MzJfdCAgICAgICAgICAgICBmQnJlYWtUeXBlOworICAgIAorcHJvdGVjdGVk
OgorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBjb25zdHJ1Y3RvcnMKKyAgICAvLz09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisKKyNpZm5kZWYgVV9ISURFX0lOVEVSTkFMX0FQSQorICAgIC8qKgorICAgICAq
IENvbnN0YW50IHRvIGJlIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yCisgICAgICogUnVsZUJhc2Vk
QnJlYWtJdGVyYXRvcihSQkJJRGF0YUhlYWRlciosIEVEb250QWRvcHQsIFVFcnJvckNvZGUgJik7
CisgICAgICogd2hpY2ggZG9lcyBub3QgYWRvcHQgdGhlIG1lbW9yeSBpbmRpY2F0ZWQgYnkgdGhl
IFJCQklEYXRhSGVhZGVyKgorICAgICAqIHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIEBpbnRl
cm5hbAorICAgICAqLworICAgIGVudW0gRURvbnRBZG9wdCB7CisgICAgICAgIGtEb250QWRvcHQK
KyAgICB9OworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgZnJvbSBhIGZsYXR0ZW5lZCBz
ZXQgb2YgUkJCSSBkYXRhIGluIG1hbGxvY2VkIG1lbW9yeS4KKyAgICAgKiAgICAgICAgICAgICBS
dWxlc0Jhc2VkQnJlYWtJdGVyYXRvcnMgYnVpbHQgZnJvbSBhIGN1c3RvbSBzZXQgb2YgcnVsZXMK
KyAgICAgKiAgICAgICAgICAgICBhcmUgY3JlYXRlZCB2aWEgdGhpcyBjb25zdHJ1Y3RvcjsgdGhl
IHJ1bGVzIGFyZSBjb21waWxlZAorICAgICAqICAgICAgICAgICAgIGludG8gbWVtb3J5LCB0aGVu
IHRoZSBicmVhayBpdGVyYXRvciBpcyBjb25zdHJ1Y3RlZCBoZXJlLgorICAgICAqCisgICAgICog
ICAgICAgICAgICAgVGhlIGJyZWFrIGl0ZXJhdG9yIGFkb3B0cyB0aGUgbWVtb3J5LCBhbmQgd2ls
bAorICAgICAqICAgICAgICAgICAgIGZyZWUgaXQgd2hlbiBkb25lLgorICAgICAqIEBpbnRlcm5h
bAorICAgICAqLworICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IoUkJCSURhdGFIZWFkZXIqIGRh
dGEsIFVFcnJvckNvZGUgJnN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBm
cm9tIGEgZmxhdHRlbmVkIHNldCBvZiBSQkJJIGRhdGEgaW4gbWVtb3J5IHdoaWNoIG5lZWQgbm90
CisgICAgICogICAgICAgICAgICAgYmUgbWFsbG9jZWQgKGUuZy4gaXQgbWF5IGJlIGEgbWVtb3J5
LW1hcHBlZCBmaWxlLCBldGMuKS4KKyAgICAgKgorICAgICAqICAgICAgICAgICAgIFRoaXMgdmVy
c2lvbiBkb2VzIG5vdCBhZG9wdCB0aGUgbWVtb3J5LCBhbmQgZG9lcyBub3QKKyAgICAgKiAgICAg
ICAgICAgICBmcmVlIGl0IHdoZW4gZG9uZS4KKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAg
ICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yKGNvbnN0IFJCQklEYXRhSGVhZGVyKiBkYXRhLCBlbnVt
IEVEb250QWRvcHQgZG9udEFkb3B0LCBVRXJyb3JDb2RlICZzdGF0dXMpOworI2VuZGlmICAvKiBV
X0hJREVfSU5URVJOQUxfQVBJICovCisKKworICAgIGZyaWVuZCBjbGFzcyBSQkJJUnVsZUJ1aWxk
ZXI7CisgICAgLyoqIEBpbnRlcm5hbCAqLworICAgIGZyaWVuZCBjbGFzcyBCcmVha0l0ZXJhdG9y
OworCisKKworcHVibGljOgorCisgICAgLyoqIERlZmF1bHQgY29uc3RydWN0b3IuICBDcmVhdGVz
IGFuIGVtcHR5IHNoZWxsIG9mIGFuIGl0ZXJhdG9yLCB3aXRoIG5vCisgICAgICogIHJ1bGVzIG9y
IHRleHQgdG8gaXRlcmF0ZSBvdmVyLiAgIE9iamVjdCBjYW4gc3Vic2VxdWVudGx5IGJlIGFzc2ln
bmVkIHRvLgorICAgICAqICBAc3RhYmxlIElDVSAyLjIKKyAgICAgKi8KKyAgICBSdWxlQmFzZWRC
cmVha0l0ZXJhdG9yKCk7CisKKyAgICAvKioKKyAgICAgKiBDb3B5IGNvbnN0cnVjdG9yLiAgV2ls
bCBwcm9kdWNlIGEgYnJlYWsgaXRlcmF0b3Igd2l0aCB0aGUgc2FtZSBiZWhhdmlvciwKKyAgICAg
KiBhbmQgd2hpY2ggaXRlcmF0ZXMgb3ZlciB0aGUgc2FtZSB0ZXh0LCBhcyB0aGUgb25lIHBhc3Nl
ZCBpbi4KKyAgICAgKiBAcGFyYW0gdGhhdCBUaGUgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciBwYXNz
ZWQgdG8gYmUgY29waWVkCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgUnVs
ZUJhc2VkQnJlYWtJdGVyYXRvcihjb25zdCBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yJiB0aGF0KTsK
KworICAgIC8qKgorICAgICAqIENvbnN0cnVjdCBhIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IgZnJv
bSBhIHNldCBvZiBydWxlcyBzdXBwbGllZCBhcyBhIHN0cmluZy4KKyAgICAgKiBAcGFyYW0gcnVs
ZXMgVGhlIGJyZWFrIHJ1bGVzIHRvIGJlIHVzZWQuCisgICAgICogQHBhcmFtIHBhcnNlRXJyb3Ig
IEluIHRoZSBldmVudCBvZiBhIHN5bnRheCBlcnJvciBpbiB0aGUgcnVsZXMsIHByb3ZpZGVzIHRo
ZSBsb2NhdGlvbgorICAgICAqICAgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhlIHJ1bGVzIG9m
IHRoZSBwcm9ibGVtLgorICAgICAqIEBwYXJhbSBzdGF0dXMgSW5mb3JtYXRpb24gb24gYW55IGVy
cm9ycyBlbmNvdW50ZXJlZC4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjIKKyAgICAgKi8KKyAgICBS
dWxlQmFzZWRCcmVha0l0ZXJhdG9yKCBjb25zdCBVbmljb2RlU3RyaW5nICAgICZydWxlcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBhcnNlRXJyb3IgICAgICAgICAgICZwYXJzZUVy
cm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICAgICAgICAgICAg
JnN0YXR1cyk7CisKKyAgICAvKioKKyAgICAgKiBDb250cnVjdCBhIFJ1bGVCYXNlZEJyZWFrSXRl
cmF0b3IgZnJvbSBhIHNldCBvZiBwcmVjb21waWxlZCBiaW5hcnkgcnVsZXMuCisgICAgICogQmlu
YXJ5IHJ1bGVzIGFyZSBvYnRhaW5lZCBmcm9tIFJ1bGVzQmFzZWRCcmVha0l0ZXJhdG9yOjpnZXRC
aW5hcnlSdWxlcygpLgorICAgICAqIENvbnN0cnVjdGlvbiBvZiBhIGJyZWFrIGl0ZXJhdG9yIGlu
IHRoaXMgd2F5IGlzIHN1YnN0YW50aWFsbHkgZmFzdGVyIHRoYW4KKyAgICAgKiBjb25zdHVjdGlv
biBmcm9tIHNvdXJjZSBydWxlcy4KKyAgICAgKgorICAgICAqIE93bmVyc2hpcCBvZiB0aGUgc3Rv
cmFnZSBjb250YWluaW5nIHRoZSBjb21waWxlZCBydWxlcyByZW1haW5zIHdpdGggdGhlCisgICAg
ICogY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24uICBUaGUgY29tcGlsZWQgcnVsZXMgbXVzdCBub3Qg
YmUgIG1vZGlmaWVkIG9yIAorICAgICAqIGRlbGV0ZWQgZHVyaW5nIHRoZSBsaWZlIG9mIHRoZSBi
cmVhayBpdGVyYXRvci4KKyAgICAgKgorICAgICAqIFRoZSBjb21waWxlZCBydWxlcyBhcmUgbm90
IGNvbXBhdGlibGUgYWNyb3NzIGRpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBvZiBJQ1UuCisgICAg
ICogVGhlIGNvbXBpbGVkIHJ1bGVzIGFyZSBjb21hcHRpYmxlIG9ubHkgYmV0d2VlbiBtYWNoaW5l
cyB3aXRoIHRoZSBzYW1lCisgICAgICogYnl0ZSBvcmRlcmluZyAobGl0dGxlIG9yIGJpZyBlbmRp
YW4pIGFuZCB0aGUgc2FtZSBiYXNlIGNoYXJhY3RlciBzZXQgZmFtaWx5CisgICAgICogKEFTQ0lJ
IG9yIEVCQ0RJQykuCisgICAgICoKKyAgICAgKiBAc2VlICNnZXRCaW5hcnlSdWxlcworICAgICAq
IEBwYXJhbSBjb21waWxlZFJ1bGVzIEEgcG9pbnRlciB0byB0aGUgY29tcGlsZWQgYnJlYWsgcnVs
ZXMgdG8gYmUgdXNlZC4KKyAgICAgKiBAcGFyYW0gcnVsZUxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRo
ZSBjb21waWxlZCBicmVhayBydWxlcywgaW4gYnl0ZXMuICBUaGlzCisgICAgICogICBjb3JyZXNw
b25kcyB0byB0aGUgbGVuZ3RoIHZhbHVlIHByb2R1Y2VkIGJ5IGdldEJpbmFyeVJ1bGVzKCkuCisg
ICAgICogQHBhcmFtIHN0YXR1cyBJbmZvcm1hdGlvbiBvbiBhbnkgZXJyb3JzIGVuY291bnRlcmVk
LCBpbmNsdWRpbmcgaW52YWxpZAorICAgICAqICAgYmluYXJ5IHJ1bGVzLgorICAgICAqIEBzdGFi
bGUgSUNVIDQuOAorICAgICAqLworICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IoY29uc3QgdWlu
dDhfdCAqY29tcGlsZWRSdWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
ICAgICAgIHJ1bGVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl
ICAgICZzdGF0dXMpOworCisgICAgLyoqCisgICAgICogVGhpcyBjb25zdHJ1Y3RvciB1c2VzIHRo
ZSB1ZGF0YSBpbnRlcmZhY2UgdG8gY3JlYXRlIGEgQnJlYWtJdGVyYXRvcgorICAgICAqIHdob3Nl
IGludGVybmFsIHRhYmxlcyBsaXZlIGluIGEgbWVtb3J5LW1hcHBlZCBmaWxlLiAgImltYWdlIiBp
cyBhbgorICAgICAqIElDVSBVRGF0YU1lbW9yeSBoYW5kbGUgZm9yIHRoZSBwcmUtY29tcGlsZWQg
YnJlYWsgaXRlcmF0b3IgdGFibGVzLgorICAgICAqIEBwYXJhbSBpbWFnZSBoYW5kbGUgdG8gdGhl
IG1lbW9yeSBpbWFnZSBmb3IgdGhlIGJyZWFrIGl0ZXJhdG9yIGRhdGEuCisgICAgICogICAgICAg
IE93bmVyc2hpcCBvZiB0aGUgVURhdGFNZW1vcnkgaGFuZGxlIHBhc3NlcyB0byB0aGUgQnJlYWsg
SXRlcmF0b3IsCisgICAgICogICAgICAgIHdoaWNoIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNs
b3NpbmcgaXQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAqIEBwYXJhbSBzdGF0
dXMgSW5mb3JtYXRpb24gb24gYW55IGVycm9ycyBlbmNvdW50ZXJlZC4KKyAgICAgKiBAc2VlIHVk
YXRhX29wZW4KKyAgICAgKiBAc2VlICNnZXRCaW5hcnlSdWxlcworICAgICAqIEBzdGFibGUgSUNV
IDIuOAorICAgICAqLworICAgIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IoVURhdGFNZW1vcnkqIGlt
YWdlLCBVRXJyb3JDb2RlICZzdGF0dXMpOworCisgICAgLyoqCisgICAgICogRGVzdHJ1Y3Rvcgor
ICAgICAqICBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIH5SdWxlQmFzZWRC
cmVha0l0ZXJhdG9yKCk7CisKKyAgICAvKioKKyAgICAgKiBBc3NpZ25tZW50IG9wZXJhdG9yLiAg
U2V0cyB0aGlzIGl0ZXJhdG9yIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsCisgICAgICogYW5k
IGl0ZXJhdGUgb3ZlciB0aGUgc2FtZSB0ZXh0LCBhcyB0aGUgb25lIHBhc3NlZCBpbi4KKyAgICAg
KiBAcGFyYW0gdGhhdCBUaGUgUnVsZUJhc2VkQnJlYWtJdGVydG9yIHBhc3NlZCBpbgorICAgICAq
IEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgUnVsZUJhc2VkQnJlYWtJdGVyYXRvcgorICAgICAq
ICBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yJiBv
cGVyYXRvcj0oY29uc3QgUnVsZUJhc2VkQnJlYWtJdGVyYXRvciYgdGhhdCk7CisKKyAgICAvKioK
KyAgICAgKiBFcXVhbGl0eSBvcGVyYXRvci4gIFJldHVybnMgVFJVRSBpZiBib3RoIEJyZWFrSXRl
cmF0b3JzIGFyZSBvZiB0aGUKKyAgICAgKiBzYW1lIGNsYXNzLCBoYXZlIHRoZSBzYW1lIGJlaGF2
aW9yLCBhbmQgaXRlcmF0ZSBvdmVyIHRoZSBzYW1lIHRleHQuCisgICAgICogQHBhcmFtIHRoYXQg
VGhlIEJyZWFrSXRlcmF0b3IgdG8gYmUgY29tcGFyZWQgZm9yIGVxdWFsaXR5CisgICAgICogQHJl
dHVybiBUUlVFIGlmIGJvdGggQnJlYWtJdGVyYXRvcnMgYXJlIG9mIHRoZQorICAgICAqIHNhbWUg
Y2xhc3MsIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IsIGFuZCBpdGVyYXRlIG92ZXIgdGhlIHNhbWUg
dGV4dC4KKyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBVQm9v
bCBvcGVyYXRvcj09KGNvbnN0IEJyZWFrSXRlcmF0b3ImIHRoYXQpIGNvbnN0OworCisgICAgLyoq
CisgICAgICogTm90LWVxdWFsIG9wZXJhdG9yLiAgSWYgb3BlcmF0b3I9PSByZXR1cm5zIFRSVUUs
IHRoaXMgcmV0dXJucyBGQUxTRSwKKyAgICAgKiBhbmQgdmljZSB2ZXJzYS4KKyAgICAgKiBAcGFy
YW0gdGhhdCBUaGUgQnJlYWtJdGVyYXRvciB0byBiZSBjb21wYXJlZCBmb3IgaW5lcXVhbGl0eQor
ICAgICAqIEByZXR1cm4gVFJVRSBpZiBib3RoIEJyZWFrSXRlcmF0b3JzIGFyZSBub3Qgc2FtZS4K
KyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgVUJvb2wgb3BlcmF0b3IhPShj
b25zdCBCcmVha0l0ZXJhdG9yJiB0aGF0KSBjb25zdDsKKworICAgIC8qKgorICAgICAqIFJldHVy
bnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBSdWxlQmFzZWRCcmVha0l0ZXJhdG9yIHdpdGggdGhlIHNh
bWUKKyAgICAgKiBiZWhhdmlvciwgYW5kIGl0ZXJhdGluZyBvdmVyIHRoZSBzYW1lIHRleHQsIGFz
IHRoaXMgb25lLgorICAgICAqIERpZmZlcnMgZnJvbSB0aGUgY29weSBjb25zdHJ1Y3RvciBpbiB0
aGF0IGl0IGlzIHBvbHltb3JwaGljLCBhbmQKKyAgICAgKiB3aWxsIGNvcnJlY3RseSBjbG9uZSAo
Y29weSkgYSBkZXJpdmVkIGNsYXNzLgorICAgICAqIGNsb25lKCkgaXMgdGhyZWFkIHNhZmUuICBN
dWx0aXBsZSB0aHJlYWRzIG1heSBzaW11bHRhZW5lb3VzbHkKKyAgICAgKiBjbG9uZSB0aGUgc2Ft
ZSBzb3VyY2UgYnJlYWsgaXRlcmF0b3IuCisgICAgICogQHJldHVybiBhIG5ld2x5LWNvbnN0cnVj
dGVkIFJ1bGVCYXNlZEJyZWFrSXRlcmF0b3IKKyAgICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICAg
Ki8KKyAgICB2aXJ0dWFsIEJyZWFrSXRlcmF0b3IqIGNsb25lKCkgY29uc3Q7CisKKyAgICAvKioK
KyAgICAgKiBDb21wdXRlIGEgaGFzaCBjb2RlIGZvciB0aGlzIEJyZWFrSXRlcmF0b3IKKyAgICAg
KiBAcmV0dXJuIEEgaGFzaCBjb2RlCisgICAgICogIEBzdGFibGUgSUNVIDIuMAorICAgICAqLwor
ICAgIHZpcnR1YWwgaW50MzJfdCBoYXNoQ29kZSh2b2lkKSBjb25zdDsKKworICAgIC8qKgorICAg
ICAqIFJldHVybnMgdGhlIGRlc2NyaXB0aW9uIHVzZWQgdG8gY3JlYXRlIHRoaXMgaXRlcmF0b3IK
KyAgICAgKiBAcmV0dXJuIHRoZSBkZXNjcmlwdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGlzIGl0ZXJh
dG9yCisgICAgICogIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgY29uc3Qg
VW5pY29kZVN0cmluZyYgZ2V0UnVsZXModm9pZCkgY29uc3Q7CisKKyAgICAvLz09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisgICAgLy8gQnJlYWtJdGVyYXRvciBvdmVycmlkZXMKKyAgICAvLz09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CisKKyAgICAvKioKKyAgICAgKiA8cD4KKyAgICAgKiBSZXR1cm4gYSBDaGFyYWN0ZXJJdGVyYXRv
ciBvdmVyIHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkLgorICAgICAqIFRoZSByZXR1cm5lZCBjaGFy
YWN0ZXIgaXRlcmF0b3IgaXMgb3duZWQgYnkgdGhlIGJyZWFrIGl0ZXJhdG9yLCBhbmQgbXVzdAor
ICAgICAqIG5vdCBiZSBkZWxldGVkIGJ5IHRoZSBjYWxsZXIuICBSZXBlYXRlZCBjYWxscyB0byB0
aGlzIGZ1bmN0aW9uIG1heQorICAgICAqIHJldHVybiB0aGUgc2FtZSBDaGFyYWN0ZXJJdGVyYXRv
ci4KKyAgICAgKiA8L3A+CisgICAgICogPHA+CisgICAgICogVGhlIHJldHVybmVkIGNoYXJhY3Rl
ciBpdGVyYXRvciBtdXN0IG5vdCBiZSB1c2VkIGNvbmN1cnJlbnRseSB3aXRoCisgICAgICogdGhl
IGJyZWFrIGl0ZXJhdG9yLiAgSWYgY29uY3VycmVudCBvcGVyYXRpb24gaXMgbmVlZGVkLCBjbG9u
ZSB0aGUKKyAgICAgKiByZXR1cm5lZCBjaGFyYWN0ZXIgaXRlcmF0b3IgZmlyc3QgYW5kIG9wZXJh
dGUgb24gdGhlIGNsb25lLgorICAgICAqIDwvcD4KKyAgICAgKiA8cD4KKyAgICAgKiBXaGVuIHRo
ZSBicmVhayBpdGVyYXRvciBpcyBvcGVyYXRpbmcgb24gdGV4dCBzdXBwbGllZCB2aWEgYSBVVGV4
dCwKKyAgICAgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgZmFpbC4gIExhY2tpbmcgYW55IHdheSB0byBz
aWduYWwgZmFpbHVyZXMsIGl0CisgICAgICogcmV0dXJucyBhbiBDaGFyYWN0ZXJJdGVyYXRvciBj
b250YWluaW5nIG5vIHRleHQuCisgICAgICogVGhlIGZ1bmN0aW9uIGdldFVUZXh0KCkgcHJvdmlk
ZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5LAorICAgICAqIGlzIHJlbGlhYmxlLCBhbmQgaXMgbW9y
ZSBlZmZpY2llbnQuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogVE9ETzogIGRlcHJlY2F0
ZSB0aGlzIGZ1bmN0aW9uPworICAgICAqCisgICAgICogQHJldHVybiBBbiBpdGVyYXRvciBvdmVy
IHRoZSB0ZXh0IGJlaW5nIGFuYWx5emVkLgorICAgICAqIEBzdGFibGUgSUNVIDIuMAorICAgICAq
LworICAgIHZpcnR1YWwgIENoYXJhY3Rlckl0ZXJhdG9yJiBnZXRUZXh0KHZvaWQpIGNvbnN0Owor
CisKKyAgICAvKioKKyAgICAgICogIEdldCBhIFVUZXh0IGZvciB0aGUgdGV4dCBiZWluZyBhbmFs
eXplZC4KKyAgICAgICogIFRoZSByZXR1cm5lZCBVVGV4dCBpcyBhIHNoYWxsb3cgY2xvbmUgb2Yg
dGhlIFVUZXh0IHVzZWQgaW50ZXJuYWxseQorICAgICAgKiAgYnkgdGhlIGJyZWFrIGl0ZXJhdG9y
IGltcGxlbWVudGF0aW9uLiAgSXQgY2FuIHNhZmVseSBiZSB1c2VkIHRvCisgICAgICAqICBhY2Nl
c3MgdGhlIHRleHQgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyZWFrIGl0ZXJhdG9yIG9wZXJhdGlv
bnMsCisgICAgICAqICBidXQgdGhlIHVuZGVybHlpbmcgdGV4dCBpdHNlbGYgbXVzdCBub3QgYmUg
YWx0ZXJlZC4KKyAgICAgICoKKyAgICAgICogQHBhcmFtIGZpbGxJbiBBIFVUZXh0IHRvIGJlIGZp
bGxlZCBpbi4gIElmIE5VTEwsIGEgbmV3IFVUZXh0IHdpbGwgYmUKKyAgICAgICogICAgICAgICAg
IGFsbG9jYXRlZCB0byBob2xkIHRoZSByZXN1bHQuCisgICAgICAqIEBwYXJhbSBzdGF0dXMgcmVj
ZWl2ZXMgYW55IGVycm9yIGNvZGVzLgorICAgICAgKiBAcmV0dXJuICAgVGhlIGN1cnJlbnQgVVRl
eHQgZm9yIHRoaXMgYnJlYWsgaXRlcmF0b3IuICBJZiBhbiBpbnB1dAorICAgICAgKiAgICAgICAg
ICAgVVRleHQgd2FzIHByb3ZpZGVkLCBpdCB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZC4KKyAgICAg
ICogQHN0YWJsZSBJQ1UgMy40CisgICAgICAqLworICAgICB2aXJ0dWFsIFVUZXh0ICpnZXRVVGV4
dChVVGV4dCAqZmlsbEluLCBVRXJyb3JDb2RlICZzdGF0dXMpIGNvbnN0OworCisgICAgLyoqCisg
ICAgICogU2V0IHRoZSBpdGVyYXRvciB0byBhbmFseXplIGEgbmV3IHBpZWNlIG9mIHRleHQuICBU
aGlzIGZ1bmN0aW9uIHJlc2V0cworICAgICAqIHRoZSBjdXJyZW50IGl0ZXJhdGlvbiBwb3NpdGlv
biB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LgorICAgICAqIEBwYXJhbSBuZXdUZXh0IEFu
IGl0ZXJhdG9yIG92ZXIgdGhlIHRleHQgdG8gYW5hbHl6ZS4gIFRoZSBCcmVha0l0ZXJhdG9yCisg
ICAgICogdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IuICBUaGUgY2Fs
bGVyIE1VU1QgTk9UIGRlbGV0ZSBpdCEKKyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wCisgICAgICov
CisgICAgdmlydHVhbCB2b2lkIGFkb3B0VGV4dChDaGFyYWN0ZXJJdGVyYXRvciogbmV3VGV4dCk7
CisKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGl0ZXJhdG9yIHRvIGFuYWx5emUgYSBuZXcgcGll
Y2Ugb2YgdGV4dC4gIFRoaXMgZnVuY3Rpb24gcmVzZXRzCisgICAgICogdGhlIGN1cnJlbnQgaXRl
cmF0aW9uIHBvc2l0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQuCisgICAgICogQHBh
cmFtIG5ld1RleHQgVGhlIHRleHQgdG8gYW5hbHl6ZS4KKyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4w
CisgICAgICovCisgICAgdmlydHVhbCB2b2lkIHNldFRleHQoY29uc3QgVW5pY29kZVN0cmluZyYg
bmV3VGV4dCk7CisKKyAgICAvKioKKyAgICAgKiBSZXNldCB0aGUgYnJlYWsgaXRlcmF0b3IgdG8g
b3BlcmF0ZSBvdmVyIHRoZSB0ZXh0IHJlcHJlc2VudGVkIGJ5CisgICAgICogdGhlIFVUZXh0LiAg
VGhlIGl0ZXJhdG9yIHBvc2l0aW9uIGlzIHJlc2V0IHRvIHRoZSBzdGFydC4KKyAgICAgKgorICAg
ICAqIFRoaXMgZnVuY3Rpb24gbWFrZXMgYSBzaGFsbG93IGNsb25lIG9mIHRoZSBzdXBwbGllZCBV
VGV4dC4gIFRoaXMgbWVhbnMKKyAgICAgKiB0aGF0IHRoZSBjYWxsZXIgaXMgZnJlZSB0byBpbW1l
ZGlhdGVseSBjbG9zZSBvciBvdGhlcndpc2UgcmV1c2UgdGhlCisgICAgICogVXRleHQgdGhhdCB3
YXMgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLCBidXQgdGhhdCB0aGUgdW5kZXJseWluZyB0ZXh0IGl0
c2VsZgorICAgICAqIG11c3Qgbm90IGJlIGFsdGVyZWQgd2hpbGUgYmVpbmcgcmVmZXJlbmNlZCBi
eSB0aGUgYnJlYWsgaXRlcmF0b3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGV4dCAgICBUaGUg
VVRleHQgdXNlZCB0byBjaGFuZ2UgdGhlIHRleHQuCisgICAgICogQHBhcmFtIHN0YXR1cyAgUmVj
ZWl2ZXMgYW55IGVycm9yIGNvZGVzLgorICAgICAqIEBzdGFibGUgSUNVIDMuNAorICAgICAqLwor
ICAgIHZpcnR1YWwgdm9pZCAgc2V0VGV4dChVVGV4dCAqdGV4dCwgVUVycm9yQ29kZSAmc3RhdHVz
KTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHBvc2l0aW9u
IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQsIHBvc2l0aW9uIHplcm8uCisgICAgICogQHJl
dHVybiBUaGUgb2Zmc2V0IG9mIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQsIHplcm8uCisgICAg
ICogIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgaW50MzJfdCBmaXJzdCh2
b2lkKTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgaXRlcmF0aW9uIHBvc2l0
aW9uIHRvIHRoZSBlbmQgb2YgdGhlIHRleHQuCisgICAgICogQHJldHVybiBUaGUgdGV4dCdzIHBh
c3QtdGhlLWVuZCBvZmZzZXQuCisgICAgICogIEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAg
IHZpcnR1YWwgaW50MzJfdCBsYXN0KHZvaWQpOworCisgICAgLyoqCisgICAgICogQWR2YW5jZXMg
dGhlIGl0ZXJhdG9yIGVpdGhlciBmb3J3YXJkIG9yIGJhY2t3YXJkIHRoZSBzcGVjaWZpZWQgbnVt
YmVyIG9mIHN0ZXBzLgorICAgICAqIE5lZ2F0aXZlIHZhbHVlcyBtb3ZlIGJhY2t3YXJkLCBhbmQg
cG9zaXRpdmUgdmFsdWVzIG1vdmUgZm9yd2FyZC4gIFRoaXMgaXMKKyAgICAgKiBlcXVpdmFsZW50
IHRvIHJlcGVhdGVkbHkgY2FsbGluZyBuZXh0KCkgb3IgcHJldmlvdXMoKS4KKyAgICAgKiBAcGFy
YW0gbiBUaGUgbnVtYmVyIG9mIHN0ZXBzIHRvIG1vdmUuICBUaGUgc2lnbiBpbmRpY2F0ZXMgdGhl
IGRpcmVjdGlvbgorICAgICAqIChuZWdhdGl2ZSBpcyBiYWNrd2FyZHMsIGFuZCBwb3NpdGl2ZSBp
cyBmb3J3YXJkcykuCisgICAgICogQHJldHVybiBUaGUgY2hhcmFjdGVyIG9mZnNldCBvZiB0aGUg
Ym91bmRhcnkgcG9zaXRpb24gbiBib3VuZGFyaWVzIGF3YXkgZnJvbQorICAgICAqIHRoZSBjdXJy
ZW50IG9uZS4KKyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBp
bnQzMl90IG5leHQoaW50MzJfdCBuKTsKKworICAgIC8qKgorICAgICAqIEFkdmFuY2VzIHRoZSBp
dGVyYXRvciB0byB0aGUgbmV4dCBib3VuZGFyeSBwb3NpdGlvbi4KKyAgICAgKiBAcmV0dXJuIFRo
ZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYm91bmRhcnkgYWZ0ZXIgdGhpcyBvbmUuCisgICAgICog
IEBzdGFibGUgSUNVIDIuMAorICAgICAqLworICAgIHZpcnR1YWwgaW50MzJfdCBuZXh0KHZvaWQp
OworCisgICAgLyoqCisgICAgICogTW92ZXMgdGhlIGl0ZXJhdG9yIGJhY2t3YXJkcywgdG8gdGhl
IGxhc3QgYm91bmRhcnkgcHJlY2VkaW5nIHRoaXMgb25lLgorICAgICAqIEByZXR1cm4gVGhlIHBv
c2l0aW9uIG9mIHRoZSBsYXN0IGJvdW5kYXJ5IHBvc2l0aW9uIHByZWNlZGluZyB0aGlzIG9uZS4K
KyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmlydHVhbCBpbnQzMl90IHBy
ZXZpb3VzKHZvaWQpOworCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gcmVm
ZXIgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5IHBvc2l0aW9uIGZvbGxvd2luZworICAgICAqIHRoZSBz
cGVjaWZpZWQgcG9zaXRpb24uCisgICAgICogQHBhcmFtIG9mZnNldCBUaGUgcG9zaXRpb24gZnJv
bSB3aGljaCB0byBiZWdpbiBzZWFyY2hpbmcgZm9yIGEgYnJlYWsgcG9zaXRpb24uCisgICAgICog
QHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJyZWFrIGFmdGVyIHRoZSBjdXJyZW50
IHBvc2l0aW9uLgorICAgICAqICBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFs
IGludDMyX3QgZm9sbG93aW5nKGludDMyX3Qgb2Zmc2V0KTsKKworICAgIC8qKgorICAgICAqIFNl
dHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBsYXN0IGJvdW5kYXJ5IHBvc2l0aW9uIGJl
Zm9yZSB0aGUKKyAgICAgKiBzcGVjaWZpZWQgcG9zaXRpb24uCisgICAgICogQHBhcmFtIG9mZnNl
dCBUaGUgcG9zaXRpb24gdG8gYmVnaW4gc2VhcmNoaW5nIGZvciBhIGJyZWFrIGZyb20uCisgICAg
ICogQHJldHVybiBUaGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgYm91bmRhcnkgYmVmb3JlIHRoZSBz
dGFydGluZyBwb3NpdGlvbi4KKyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAg
dmlydHVhbCBpbnQzMl90IHByZWNlZGluZyhpbnQzMl90IG9mZnNldCk7CisKKyAgICAvKioKKyAg
ICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNmaWVkIHBvc2l0aW9uIGlzIGEgYm91bmRhcnkg
cG9zaXRpb24uICBBcyBhIHNpZGUKKyAgICAgKiBlZmZlY3QsIGxlYXZlcyB0aGUgaXRlcmF0b3Ig
cG9pbnRpbmcgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5IHBvc2l0aW9uIGF0CisgICAgICogb3IgYWZ0
ZXIgIm9mZnNldCIuCisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IHRvIGNoZWNrLgor
ICAgICAqIEByZXR1cm4gVHJ1ZSBpZiAib2Zmc2V0IiBpcyBhIGJvdW5kYXJ5IHBvc2l0aW9uLgor
ICAgICAqICBAc3RhYmxlIElDVSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIFVCb29sIGlzQm91
bmRhcnkoaW50MzJfdCBvZmZzZXQpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY3Vy
cmVudCBpdGVyYXRpb24gcG9zaXRpb24uCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBpdGVy
YXRpb24gcG9zaXRpb24uCisgICAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAgICovCisgICAgdmly
dHVhbCBpbnQzMl90IGN1cnJlbnQodm9pZCkgY29uc3Q7CisKKworICAgIC8qKgorICAgICAqIFJl
dHVybiB0aGUgc3RhdHVzIHRhZyBmcm9tIHRoZSBicmVhayBydWxlIHRoYXQgZGV0ZXJtaW5lZCB0
aGUgbW9zdCByZWNlbnRseQorICAgICAqIHJldHVybmVkIGJyZWFrIHBvc2l0aW9uLiAgRm9yIGJy
ZWFrIHJ1bGVzIHRoYXQgZG8gbm90IHNwZWNpZnkgYQorICAgICAqIHN0YXR1cywgYSBkZWZhdWx0
IHZhbHVlIG9mIDAgaXMgcmV0dXJuZWQuICBJZiBtb3JlIHRoYW4gb25lIGJyZWFrIHJ1bGUKKyAg
ICAgKiB3b3VsZCBjYXVzZSBhIGJvdW5kYXJ5IHRvIGJlIGxvY2F0ZWQgYXQgc29tZSBwb3NpdGlv
biBpbiB0aGUgdGV4dCwKKyAgICAgKiB0aGUgbnVtZXJpY2FsbHkgbGFyZ2VzdCBvZiB0aGUgYXBw
bGljYWJsZSBzdGF0dXMgdmFsdWVzIGlzIHJldHVybmVkLgorICAgICAqIDxwPgorICAgICAqIE9m
IHRoZSBzdGFuZGFyZCB0eXBlcyBvZiBJQ1UgYnJlYWsgaXRlcmF0b3JzLCBvbmx5IHdvcmQgYnJl
YWsgYW5kCisgICAgICogbGluZSBicmVhayBwcm92aWRlIHN0YXR1cyB2YWx1ZXMuICBUaGUgdmFs
dWVzIGFyZSBkZWZpbmVkIGluCisgICAgICogdGhlIGhlYWRlciBmaWxlIHVicmsuaC4gIEZvciBX
b3JkIGJyZWFrcywgdGhlIHN0YXR1cyBhbGxvd3MgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiB3b3Jk
cworICAgICAqIHRoYXQgY29udGFpbiBhbHBoYWJldGljIGxldHRlcnMsICJ3b3JkcyIgdGhhdCBh
cHBlYXIgdG8gYmUgbnVtYmVycywKKyAgICAgKiBwdW5jdHVhdGlvbiBhbmQgc3BhY2VzLCB3b3Jk
cyBjb250YWluaW5nIGlkZW9ncmFwaGljIGNoYXJhY3RlcnMsIGFuZAorICAgICAqIG1vcmUuICBG
b3IgTGluZSBCcmVhaywgdGhlIHN0YXR1cyBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaGFyZCAobWFu
ZGF0b3J5KSBicmVha3MKKyAgICAgKiBhbmQgc29mdCAocG90ZW50aWFsKSBicmVhayBwb3NpdGlv
bnMuCisgICAgICogPHA+CisgICAgICogPGNvZGU+Z2V0UnVsZVN0YXR1cygpPC9jb2RlPiBjYW4g
YmUgY2FsbGVkIGFmdGVyIG9idGFpbmluZyBhIGJvdW5kYXJ5CisgICAgICogcG9zaXRpb24gZnJv
bSA8Y29kZT5uZXh0KCk8L2NvZGU+LCA8Y29kZT5wcmV2aW91cygpPC9jb2RlPiwgb3IKKyAgICAg
KiBhbnkgb3RoZXIgYnJlYWsgaXRlcmF0b3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJucyBhIGJvdW5k
YXJ5IHBvc2l0aW9uLgorICAgICAqIDxwPgorICAgICAqIFdoZW4gY3JlYXRpbmcgY3VzdG9tIGJy
ZWFrIHJ1bGVzLCBvbmUgaXMgZnJlZSB0byBkZWZpbmUgd2hhdGV2ZXIKKyAgICAgKiBzdGF0dXMg
dmFsdWVzIG1heSBiZSBjb252ZW5pZW50IGZvciB0aGUgYXBwbGljYXRpb24uCisgICAgICogPHA+
CisgICAgICogTm90ZTogdGhpcyBmdW5jdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUuICBJdCBzaG91
bGQgbm90IGhhdmUgYmVlbgorICAgICAqICAgICAgIGRlY2xhcmVkIGNvbnN0LCBhbmQgdGhlIGNv
bnN0IHJlbWFpbnMgb25seSBmb3IgY29tcGF0aWJpbGl0eQorICAgICAqICAgICAgIHJlYXNvbnMu
ICAoVGhlIGZ1bmN0aW9uIGlzIGxvZ2ljYWxseSBjb25zdCwgYnV0IG5vdCBiaXQtd2lzZSBjb25z
dCkuCisgICAgICogPHA+CisgICAgICogQHJldHVybiB0aGUgc3RhdHVzIGZyb20gdGhlIGJyZWFr
IHJ1bGUgdGhhdCBkZXRlcm1pbmVkIHRoZSBtb3N0IHJlY2VudGx5CisgICAgICogcmV0dXJuZWQg
YnJlYWsgcG9zaXRpb24uCisgICAgICoKKyAgICAgKiBAc2VlIFVXb3JkQnJlYWsKKyAgICAgKiBA
c3RhYmxlIElDVSAyLjIKKyAgICAgKi8KKyAgICB2aXJ0dWFsIGludDMyX3QgZ2V0UnVsZVN0YXR1
cygpIGNvbnN0OworCisgICAvKioKKyAgICAqIEdldCB0aGUgc3RhdHVzICh0YWcpIHZhbHVlcyBm
cm9tIHRoZSBicmVhayBydWxlKHMpIHRoYXQgZGV0ZXJtaW5lZCB0aGUgbW9zdAorICAgICogcmVj
ZW50bHkgcmV0dXJuZWQgYnJlYWsgcG9zaXRpb24uCisgICAgKiA8cD4KKyAgICAqIFRoZSByZXR1
cm5lZCBzdGF0dXMgdmFsdWUocykgYXJlIHN0b3JlZCBpbnRvIGFuIGFycmF5IHByb3ZpZGVkIGJ5
IHRoZSBjYWxsZXIuCisgICAgKiBUaGUgdmFsdWVzIGFyZSBzdG9yZWQgaW4gc29ydGVkIChhc2Nl
bmRpbmcpIG9yZGVyLgorICAgICogSWYgdGhlIGNhcGFjaXR5IG9mIHRoZSBvdXRwdXQgYXJyYXkg
aXMgaW5zdWZmaWNpZW50IHRvIGhvbGQgdGhlIGRhdGEsCisgICAgKiAgdGhlIG91dHB1dCB3aWxs
IGJlIHRydW5jYXRlZCB0byB0aGUgYXZhaWxhYmxlIGxlbmd0aCwgYW5kIGEKKyAgICAqICBVX0JV
RkZFUl9PVkVSRkxPV19FUlJPUiB3aWxsIGJlIHNpZ25hbGVkLgorICAgICoKKyAgICAqIEBwYXJh
bSBmaWxsSW5WZWMgYW4gYXJyYXkgdG8gYmUgZmlsbGVkIGluIHdpdGggdGhlIHN0YXR1cyB2YWx1
ZXMuCisgICAgKiBAcGFyYW0gY2FwYWNpdHkgIHRoZSBsZW5ndGggb2YgdGhlIHN1cHBsaWVkIHZl
Y3Rvci4gIEEgbGVuZ3RoIG9mIHplcm8gY2F1c2VzCisgICAgKiAgICAgICAgICAgICAgICAgIHRo
ZSBmdW5jdGlvbiB0byByZXR1cm4gdGhlIG51bWJlciBvZiBzdGF0dXMgdmFsdWVzLCBpbiB0aGUK
KyAgICAqICAgICAgICAgICAgICAgICAgbm9ybWFsIHdheSwgd2l0aG91dCBhdHRlbXRwaW5nIHRv
IHN0b3JlIGFueSB2YWx1ZXMuCisgICAgKiBAcGFyYW0gc3RhdHVzICAgIHJlY2VpdmVzIGVycm9y
IGNvZGVzLgorICAgICogQHJldHVybiAgICAgICAgICBUaGUgbnVtYmVyIG9mIHJ1bGUgc3RhdHVz
IHZhbHVlcyBmcm9tIHJ1bGVzIHRoYXQgZGV0ZXJtaW5lZAorICAgICogICAgICAgICAgICAgICAg
ICB0aGUgbW9zdCByZWNlbnQgYm91bmRhcnkgcmV0dXJuZWQgYnkgdGhlIGJyZWFrIGl0ZXJhdG9y
LgorICAgICogICAgICAgICAgICAgICAgICBJbiB0aGUgZXZlbnQgb2YgYSBVX0JVRkZFUl9PVkVS
RkxPV19FUlJPUiwgdGhlIHJldHVybiB2YWx1ZQorICAgICogICAgICAgICAgICAgICAgICBpcyB0
aGUgdG90YWwgbnVtYmVyIG9mIHN0YXR1cyB2YWx1ZXMgdGhhdCB3ZXJlIGF2YWlsYWJsZSwKKyAg
ICAqICAgICAgICAgICAgICAgICAgbm90IHRoZSByZWR1Y2VkIG51bWJlciB0aGF0IHdlcmUgYWN0
dWFsbHkgcmV0dXJuZWQuCisgICAgKiBAc2VlIGdldFJ1bGVTdGF0dXMKKyAgICAqIEBzdGFibGUg
SUNVIDMuMAorICAgICovCisgICAgdmlydHVhbCBpbnQzMl90IGdldFJ1bGVTdGF0dXNWZWMoaW50
MzJfdCAqZmlsbEluVmVjLCBpbnQzMl90IGNhcGFjaXR5LCBVRXJyb3JDb2RlICZzdGF0dXMpOwor
CisgICAgLyoqCisgICAgICogUmV0dXJucyBhIHVuaXF1ZSBjbGFzcyBJRCBQT0xZTU9SUEhJQ0FM
TFkuICBQdXJlIHZpcnR1YWwgb3ZlcnJpZGUuCisgICAgICogVGhpcyBtZXRob2QgaXMgdG8gaW1w
bGVtZW50IGEgc2ltcGxlIHZlcnNpb24gb2YgUlRUSSwgc2luY2Ugbm90IGFsbAorICAgICAqIEMr
KyBjb21waWxlcnMgc3VwcG9ydCBnZW51aW5lIFJUVEkuICBQb2x5bW9ycGhpYyBvcGVyYXRvcj09
KCkgYW5kCisgICAgICogY2xvbmUoKSBtZXRob2RzIGNhbGwgdGhpcyBtZXRob2QuCisgICAgICoK
KyAgICAgKiBAcmV0dXJuICAgICAgICAgIFRoZSBjbGFzcyBJRCBmb3IgdGhpcyBvYmplY3QuIEFs
bCBvYmplY3RzIG9mIGEKKyAgICAgKiAgICAgICAgICAgICAgICAgIGdpdmVuIGNsYXNzIGhhdmUg
dGhlIHNhbWUgY2xhc3MgSUQuICBPYmplY3RzIG9mCisgICAgICogICAgICAgICAgICAgICAgICBv
dGhlciBjbGFzc2VzIGhhdmUgZGlmZmVyZW50IGNsYXNzIElEcy4KKyAgICAgKiBAc3RhYmxlIElD
VSAyLjAKKyAgICAgKi8KKyAgICB2aXJ0dWFsIFVDbGFzc0lEIGdldER5bmFtaWNDbGFzc0lEKHZv
aWQpIGNvbnN0OworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2xhc3MgSUQgZm9yIHRo
aXMgY2xhc3MuICBUaGlzIGlzIHVzZWZ1bCBvbmx5IGZvcgorICAgICAqIGNvbXBhcmluZyB0byBh
IHJldHVybiB2YWx1ZSBmcm9tIGdldER5bmFtaWNDbGFzc0lEKCkuICBGb3IgZXhhbXBsZToKKyAg
ICAgKgorICAgICAqICAgICAgQmFzZSogcG9seW1vcnBoaWNfcG9pbnRlciA9IGNyZWF0ZVBvbHlt
b3JwaGljT2JqZWN0KCk7CisgICAgICogICAgICBpZiAocG9seW1vcnBoaWNfcG9pbnRlci0+Z2V0
RHluYW1pY0NsYXNzSUQoKSA9PQorICAgICAqICAgICAgICAgIERlcml2ZWQ6OmdldFN0YXRpY0Ns
YXNzSUQoKSkgLi4uCisgICAgICoKKyAgICAgKiBAcmV0dXJuICAgICAgICAgIFRoZSBjbGFzcyBJ
RCBmb3IgYWxsIG9iamVjdHMgb2YgdGhpcyBjbGFzcy4KKyAgICAgKiBAc3RhYmxlIElDVSAyLjAK
KyAgICAgKi8KKyAgICBzdGF0aWMgVUNsYXNzSUQgVV9FWFBPUlQyIGdldFN0YXRpY0NsYXNzSUQo
dm9pZCk7CisKKyAgICAvKioKKyAgICAgKiBEZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkuIFVzZSBj
bG9uZSgpIGluc3RlYWQuCisgICAgICoKKyAgICAgKiBDcmVhdGUgYSBjbG9uZSAoY29weSkgb2Yg
dGhpcyBicmVhayBpdGVyYXRvciBpbiBtZW1vcnkgcHJvdmlkZWQKKyAgICAgKiAgYnkgdGhlIGNh
bGxlci4gIFRoZSBpZGVhIGlzIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlIGJ5IGF2b2lkaW5nCisg
ICAgICogIGEgc3RvcmFnZSBhbGxvY2F0aW9uLiAgVXNlIG9mIHRoaXMgZnVuY3RvaW4gaXMgTk9U
IFJFQ09NTUVOREVELgorICAgICAqICBQZXJmb3JtYW5jZSBnYWlucyBhcmUgbWluaW1hbCwgYW5k
IGNvcnJlY3QgYnVmZmVyIG1hbmFnZW1lbnQgaXMKKyAgICAgKiAgdHJpY2t5LiAgVXNlIGNsb25l
KCkgaW5zdGVhZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGFja0J1ZmZlciAgVGhlIHBvaW50
ZXIgdG8gdGhlIG1lbW9yeSBpbnRvIHdoaWNoIHRoZSBjbG9uZWQgb2JqZWN0CisgICAgICogICAg
ICAgICAgICAgICAgICAgICBzaG91bGQgYmUgcGxhY2VkLiAgSWYgTlVMTCwgIGFsbG9jYXRlIGhl
YXAgbWVtb3J5CisgICAgICogICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIGNsb25lZCBvYmpl
Y3QuCisgICAgICogQHBhcmFtIEJ1ZmZlclNpemUgICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLiAg
SWYgemVybywgcmV0dXJuIHRoZSByZXF1aXJlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAg
YnVmZmVyIHNpemUsIGJ1dCBkbyBub3QgY2xvbmUgdGhlIG9iamVjdC4gIElmIHRoZQorICAgICAq
ICAgICAgICAgICAgICAgICAgICAgc2l6ZSB3YXMgdG9vIHNtYWxsIChidXQgbm90IHplcm8pLCBh
bGxvY2F0ZSBoZWFwCisgICAgICogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlIGZvciB0aGUg
Y2xvbmVkIG9iamVjdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGF0dXMgICAgICAgRXJyb3Ig
c3RhdHVzLiAgVV9TQUZFQ0xPTkVfQUxMT0NBVEVEX1dBUk5JTkcgd2lsbCBiZQorICAgICAqICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgaWYgdGhlIHRoZSBwcm92aWRlZCBidWZmZXIgd2Fz
IHRvbyBzbWFsbCwgYW5kCisgICAgICogICAgICAgICAgICAgICAgICAgICB0aGUgY2xvbmUgd2Fz
IHRoZXJlZm9yZSBwdXQgb24gdGhlIGhlYXAuCisgICAgICoKKyAgICAgKiBAcmV0dXJuICBQb2lu
dGVyIHRvIHRoZSBjbG9uZSBvYmplY3QuICBUaGlzIG1heSBkaWZmZXIgZnJvbSB0aGUgc3RhY2tC
dWZmZXIKKyAgICAgKiAgICAgICAgICBhZGRyZXNzIGlmIHRoZSBieXRlIGFsaWdubWVudCBvZiB0
aGUgc3RhY2sgYnVmZmVyIHdhcyBub3Qgc3VpdGFibGUKKyAgICAgKiAgICAgICAgICBvciBpZiB0
aGUgc3RhY2tCdWZmZXIgd2FzIHRvbyBzbWFsbCB0byBob2xkIHRoZSBjbG9uZS4KKyAgICAgKiBA
ZGVwcmVjYXRlZCBJQ1UgNTIuIFVzZSBjbG9uZSgpIGluc3RlYWQuCisgICAgICovCisgICAgdmly
dHVhbCBCcmVha0l0ZXJhdG9yICogIGNyZWF0ZUJ1ZmZlckNsb25lKHZvaWQgKnN0YWNrQnVmZmVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90
ICZCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVRXJyb3JDb2RlICZzdGF0dXMpOworCisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhl
IGJpbmFyeSBmb3JtIG9mIGNvbXBpbGVkIGJyZWFrIHJ1bGVzLAorICAgICAqIHdoaWNoIGNhbiB0
aGVuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3IGJyZWFrIGl0ZXJhdG9yIGF0IHNvbWUKKyAgICAg
KiB0aW1lIGluIHRoZSBmdXR1cmUuICBDcmVhdGluZyBhIGJyZWFrIGl0ZXJhdG9yIGZyb20gcHJl
LWNvbXBpbGVkIHJ1bGVzCisgICAgICogaXMgbXVjaCBmYXN0ZXIgdGhhbiBidWlsZGluZyBvbmUg
ZnJvbSB0aGUgc291cmNlIGZvcm0gb2YgdGhlCisgICAgICogYnJlYWsgcnVsZXMuCisgICAgICoK
KyAgICAgKiBUaGUgYmluYXJ5IGRhdGEgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBzYW1lIHZl
cnNpb24gb2YgSUNVCisgICAgICogIGFuZCBvbiB0aGUgc2FtZSBwbGF0Zm9ybSB0eXBlIChwcm9j
ZXNzb3IgZW5kaWFuLW5lc3MpCisgICAgICoKKyAgICAgKiBAcGFyYW0gbGVuZ3RoIFJldHVybnMg
dGhlIGxlbmd0aCBvZiB0aGUgYmluYXJ5IGRhdGEuICAoT3V0IHBhcmFtdGVyLikKKyAgICAgKgor
ICAgICAqIEByZXR1cm4gICBBIHBvaW50ZXIgdG8gdGhlIGJpbmFyeSAoY29tcGlsZWQpIHJ1bGUg
ZGF0YS4gIFRoZSBzdG9yYWdlCisgICAgICogICAgICAgICAgIGJlbG9uZ3MgdG8gdGhlIFJ1bGVz
QmFzZWRCcmVha0l0ZXJhdG9yIG9iamVjdCwgbm90IHRoZQorICAgICAqICAgICAgICAgICBjYWxs
ZXIsIGFuZCBtdXN0IG5vdCBiZSBtb2RpZmllZCBvciBkZWxldGVkLgorICAgICAqIEBzdGFibGUg
SUNVIDQuOAorICAgICAqLworICAgIHZpcnR1YWwgY29uc3QgdWludDhfdCAqZ2V0QmluYXJ5UnVs
ZXModWludDMyX3QgJmxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiAgU2V0IHRoZSBzdWJqZWN0
IHRleHQgc3RyaW5nIHVwb24gd2hpY2ggdGhlIGJyZWFrIGl0ZXJhdG9yIGlzIG9wZXJhdGluZwor
ICAgICAqICB3aXRob3V0IGNoYW5naW5nIGFueSBvdGhlciBhc3BlY3Qgb2YgdGhlIG1hdGNoaW5n
IHN0YXRlLgorICAgICAqICBUaGUgbmV3IGFuZCBwcmV2aW91cyB0ZXh0IHN0cmluZ3MgbXVzdCBo
YXZlIHRoZSBzYW1lIGNvbnRlbnQuCisgICAgICoKKyAgICAgKiAgVGhpcyBmdW5jdGlvbiBpcyBp
bnRlbmRlZCBmb3IgdXNlIGluIGVudmlyb25tZW50cyB3aGVyZSBJQ1UgaXMgb3BlcmF0aW5nIG9u
CisgICAgICogIHN0cmluZ3MgdGhhdCBtYXkgbW92ZSBhcm91bmQgaW4gbWVtb3J5LiAgSXQgcHJv
dmlkZXMgYSBtZWNoYW5pc20gZm9yIG5vdGlmeWluZworICAgICAqICBJQ1UgdGhhdCB0aGUgc3Ry
aW5nIGhhcyBiZWVuIHJlbG9jYXRlZCwgYW5kIHByb3ZpZGluZyBhIG5ldyBVVGV4dCB0byBhY2Nl
c3MgdGhlCisgICAgICogIHN0cmluZyBpbiBpdHMgbmV3IHBvc2l0aW9uLgorICAgICAqCisgICAg
ICogIE5vdGUgdGhhdCB0aGUgYnJlYWsgaXRlcmF0b3IgaW1wbGVtZW50YXRpb24gbmV2ZXIgY29w
aWVzIHRoZSB1bmRlcmx5aW5nIHRleHQKKyAgICAgKiAgb2YgYSBzdHJpbmcgYmVpbmcgcHJvY2Vz
c2VkLCBidXQgYWx3YXlzIG9wZXJhdGVzIGRpcmVjdGx5IG9uIHRoZSBvcmlnaW5hbCB0ZXh0Cisg
ICAgICogIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLiBSZWZyZXNoaW5nIHNpbXBseSBkcm9wcyB0aGUg
cmVmZXJlbmNlcyB0byB0aGUgb2xkIHRleHQKKyAgICAgKiAgYW5kIHJlcGxhY2VzIHRoZW0gd2l0
aCByZWZlcmVuY2VzIHRvIHRoZSBuZXcuCisgICAgICoKKyAgICAgKiAgQ2F1dGlvbjogIHRoaXMg
ZnVuY3Rpb24gaXMgbm9ybWFsbHkgdXNlZCBvbmx5IGJ5IHZlcnkgc3BlY2lhbGl6ZWQsCisgICAg
ICogIHN5c3RlbS1sZXZlbCBjb2RlLiAgT25lIGV4YW1wbGUgdXNlIGNhc2UgaXMgd2l0aCBnYXJi
YWdlIGNvbGxlY3Rpb24gdGhhdCBtb3ZlcworICAgICAqICB0aGUgdGV4dCBpbiBtZW1vcnkuCisg
ICAgICoKKyAgICAgKiBAcGFyYW0gaW5wdXQgICAgICBUaGUgbmV3IChtb3ZlZCkgdGV4dCBzdHJp
bmcuCisgICAgICogQHBhcmFtIHN0YXR1cyAgICAgUmVjZWl2ZXMgZXJyb3JzIGRldGVjdGVkIGJ5
IHRoaXMgZnVuY3Rpb24uCisgICAgICogQHJldHVybiAgICAgICAgICAgKnRoaXMKKyAgICAgKgor
ICAgICAqIEBzdGFibGUgSUNVIDQ5CisgICAgICovCisgICAgdmlydHVhbCBSdWxlQmFzZWRCcmVh
a0l0ZXJhdG9yICZyZWZyZXNoSW5wdXRUZXh0KFVUZXh0ICppbnB1dCwgVUVycm9yQ29kZSAmc3Rh
dHVzKTsKKworCitwcm90ZWN0ZWQ6CisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIGltcGxl
bWVudGF0aW9uCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8qKgorICAgICAqIER1bXBzIGNh
Y2hlcyBhbmQgcGVyZm9ybXMgb3RoZXIgYWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBjb21wbGV0
ZSBjaGFuZ2UKKyAgICAgKiBpbiB0ZXh0IG9yIGl0ZXJhdGlvbiBwb3NpdGlvbi4KKyAgICAgKiBA
aW50ZXJuYWwKKyAgICAgKi8KKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQodm9pZCk7CisKKyNpZiAw
CisgICAgLyoqCisgICAgICAqIFJldHVybiB0cnVlIGlmIHRoZSBjYXRlZ29yeSBsb29rdXAgZm9y
IHRoaXMgY2hhcgorICAgICAgKiBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBpbiB0aGUgc2V0IG9mIGRp
Y3Rpb25hcnkgbG9va3VwIGNoYXJzLgorICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVk
IGZvciB1c2UgYnkgZGljdGlvbmFyeSBiYXNlZCBicmVhayBpdGVyYXRvcnMuCisgICAgICAqIEBy
ZXR1cm4gdHJ1ZSBpZiB0aGUgY2F0ZWdvcnkgbG9va3VwIGZvciB0aGlzIGNoYXIKKyAgICAgICog
aW5kaWNhdGVzIHRoYXQgaXQgaXMgaW4gdGhlIHNldCBvZiBkaWN0aW9uYXJ5IGxvb2t1cCBjaGFy
cy4KKyAgICAgICogQGludGVybmFsCisgICAgICAqLworICAgIHZpcnR1YWwgVUJvb2wgaXNEaWN0
aW9uYXJ5Q2hhcihVQ2hhcjMyKTsKKworICAgIC8qKgorICAgICAgKiBHZXQgdGhlIHR5cGUgb2Yg
dGhlIGJyZWFrIGl0ZXJhdG9yLgorICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICovCisgICAgdmly
dHVhbCBpbnQzMl90IGdldEJyZWFrVHlwZSgpIGNvbnN0OworI2VuZGlmCisKKyAgICAvKioKKyAg
ICAgICogU2V0IHRoZSB0eXBlIG9mIHRoZSBicmVhayBpdGVyYXRvci4KKyAgICAgICogQGludGVy
bmFsCisgICAgICAqLworICAgIHZpcnR1YWwgdm9pZCBzZXRCcmVha1R5cGUoaW50MzJfdCB0eXBl
KTsKKworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisgICAgLyoqCisgICAgICAqIENvbW1v
biBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgdXNlZCBieSBjb25zdHJ1Y3RvcnMgYW5kIGJ1ZmZl
ckNsb25lLgorICAgICAgKiBAaW50ZXJuYWwKKyAgICAgICovCisgICAgdm9pZCBpbml0KCk7Cisj
ZW5kaWYgIC8qIFVfSElERV9JTlRFUk5BTF9BUEkgKi8KKworcHJpdmF0ZToKKworICAgIC8qKgor
ICAgICAqIFRoaXMgbWV0aG9kIGJhY2tzIHRoZSBpdGVyYXRvciBiYWNrIHVwIHRvIGEgInNhZmUg
cG9zaXRpb24iIGluIHRoZSB0ZXh0LgorICAgICAqIFRoaXMgaXMgYSBwb3NpdGlvbiB0aGF0IHdl
IGtub3csIHdpdGhvdXQgYW55IGNvbnRleHQsIG11c3QgYmUgYSBicmVhayBwb3NpdGlvbi4KKyAg
ICAgKiBUaGUgdmFyaW91cyBjYWxsaW5nIG1ldGhvZHMgdGhlbiBpdGVyYXRlIGZvcndhcmQgZnJv
bSB0aGlzIHNhZmUgcG9zaXRpb24gdG8KKyAgICAgKiB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24g
dG8gcmV0dXJuLiAgKEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRlc2NyaXB0aW9uCisg
ICAgICogb2YgYnVpbGRCYWNrd2FyZHNTdGF0ZVRhYmxlKCkgaW4gUnVsZUJhc2VkQnJlYWtJdGVy
YXRvci5CdWlsZGVyLikKKyAgICAgKiBAcGFyYW0gc3RhdGV0YWJsZSBzdGF0ZSB0YWJsZSB1c2Vk
IG9mIG1vdmluZyBiYWNrd2FyZHMKKyAgICAgKiBAaW50ZXJuYWwKKyAgICAgKi8KKyAgICBpbnQz
Ml90IGhhbmRsZVByZXZpb3VzKGNvbnN0IFJCQklTdGF0ZVRhYmxlICpzdGF0ZXRhYmxlKTsKKwor
ICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24g
b2YgdGhlIG5leHQoKSBtZXRob2QuICBBbGwgaXRlcmF0aW9uCisgICAgICogdmVjdG9ycyB0aHJv
dWdoIGhlcmUuICBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgc3RhdGUgbWFjaGluZSB0byBz
dGF0ZSAxCisgICAgICogYW5kIGFkdmFuY2VzIHRocm91Z2ggdGhlIHRleHQgY2hhcmFjdGVyIGJ5
IGNoYXJhY3RlciB1bnRpbCB3ZSByZWFjaCB0aGUgZW5kCisgICAgICogb2YgdGhlIHRleHQgb3Ig
dGhlIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnMgdG8gc3RhdGUgMC4gIFdlIHVwZGF0ZSBvdXIg
cmV0dXJuCisgICAgICogdmFsdWUgZXZlcnkgdGltZSB0aGUgc3RhdGUgbWFjaGluZSBwYXNzZXMg
dGhyb3VnaCBhIHBvc3NpYmxlIGVuZCBzdGF0ZS4KKyAgICAgKiBAcGFyYW0gc3RhdGV0YWJsZSBz
dGF0ZSB0YWJsZSB1c2VkIG9mIG1vdmluZyBmb3J3YXJkcworICAgICAqIEBpbnRlcm5hbAorICAg
ICAqLworICAgIGludDMyX3QgaGFuZGxlTmV4dChjb25zdCBSQkJJU3RhdGVUYWJsZSAqc3RhdGV0
YWJsZSk7CisKK3Byb3RlY3RlZDoKKworI2lmbmRlZiBVX0hJREVfSU5URVJOQUxfQVBJCisgICAg
LyoqCisgICAgICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBpbXBsZW1lbnRz
IGRpY3Rpb25hcnktYmFzZWQKKyAgICAgKiBicmVha2luZy4gIENvdmVyaW5nIGF0IGxlYXN0IHRo
ZSByYW5nZSBmcm9tIHN0YXJ0UG9zIHRvIGVuZFBvcywKKyAgICAgKiBpdCBjaGVja3MgZm9yIGRp
Y3Rpb25hcnkgY2hhcmFjdGVycywgYW5kIGlmIGl0IGZpbmRzIHRoZW0gZGV0ZXJtaW5lcworICAg
ICAqIHRoZSBhcHByb3ByaWF0ZSBvYmplY3QgdG8gZGVhbCB3aXRoIHRoZW0uIEl0IG1heSBjYWNo
ZSBmb3VuZCBicmVha3MgaW4KKyAgICAgKiBmQ2FjaGVkQnJlYWtQb3NpdGlvbnMgYXMgaXQgZ29l
cy4gSXQgbWF5IHdlbGwgYWxzbyBsb29rIGF0IHRleHQgb3V0c2lkZQorICAgICAqIHRoZSByYW5n
ZSBzdGFydFBvcyB0byBlbmRQb3MuCisgICAgICogSWYgZ29pbmcgZm9yd2FyZCwgZW5kUG9zIGlz
IHRoZSBub3JtYWwgVW5pY29kZSBicmVhayByZXN1bHQsIGFuZAorICAgICAqIGlmIGdvaW5kIGlu
IHJldmVyc2UsIHN0YXJ0UG9zIGlzIHRoZSBub3JtYWwgVW5pY29kZSBicmVhayByZXN1bHQKKyAg
ICAgKiBAcGFyYW0gc3RhcnRQb3MgIFRoZSBzdGFydCBwb3NpdGlvbiBvZiBhIHJhbmdlIG9mIHRl
eHQKKyAgICAgKiBAcGFyYW0gZW5kUG9zICAgIFRoZSBlbmQgcG9zaXRpb24gb2YgYSByYW5nZSBv
ZiB0ZXh0CisgICAgICogQHBhcmFtIHJldmVyc2UgICBUaGUgY2FsbCBpcyBmb3IgdGhlIHJldmVy
c2UgZGlyZWN0aW9uCisgICAgICogQGludGVybmFsCisgICAgICovCisgICAgaW50MzJfdCBjaGVj
a0RpY3Rpb25hcnkoaW50MzJfdCBzdGFydFBvcywgaW50MzJfdCBlbmRQb3MsIFVCb29sIHJldmVy
c2UpOworI2VuZGlmICAvKiBVX0hJREVfSU5URVJOQUxfQVBJICovCisKK3ByaXZhdGU6CisKKyAg
ICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFwcHJvcHJpYXRlIExhbmd1
YWdlQnJlYWtFbmdpbmUgZm9yIGEKKyAgICAgKiBnaXZlbiBjaGFyYWN0ZXIgYy4KKyAgICAgKiBA
cGFyYW0gYyAgICAgICAgIEEgY2hhcmFjdGVyIGluIHRoZSBkaWN0aW9uYXJ5IHNldAorICAgICAq
IEBpbnRlcm5hbAorICAgICAqLworICAgIGNvbnN0IExhbmd1YWdlQnJlYWtFbmdpbmUgKmdldExh
bmd1YWdlQnJlYWtFbmdpbmUoVUNoYXIzMiBjKTsKKworICAgIC8qKgorICAgICAqICBAaW50ZXJu
YWwKKyAgICAgKi8KKyAgICB2b2lkIG1ha2VSdWxlU3RhdHVzVmFsaWQoKTsKKworfTsKKworLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyAgIElubGluZSBGdW5jdGlvbnMgRGVmaW5pdGlv
bnMgLi4uCisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5saW5lIFVCb29sIFJ1bGVC
YXNlZEJyZWFrSXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgQnJlYWtJdGVyYXRvciYgdGhhdCkg
Y29uc3QgeworICAgIHJldHVybiAhb3BlcmF0b3I9PSh0aGF0KTsKK30KKworVV9OQU1FU1BBQ0Vf
RU5ECisKKyNlbmRpZiAvKiAjaWYgIVVDT05GSUdfTk9fQlJFQUtfSVRFUkFUSU9OICovCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9pY3UvdW5pY29kZS9zY2hyaXRlci5oIGIvU291
cmNlL1dURi9pY3UvdW5pY29kZS9zY2hyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwYjVlMjI1MDNjZmYy
NjFkMmNkMjQwZmYxMjAwN2Y5MzdmNzgzYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L2ljdS91bmljb2RlL3NjaHJpdGVyLmgKQEAgLTAsMCArMSwxODcgQEAKKy8qCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNSwgSW50ZXJuYXRpb25h
bCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmln
aHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZpbGUgc2Nocml0
ZXIuaAorKgorKiBNb2RpZmljYXRpb24gSGlzdG9yeToKKyoKKyogICBEYXRlICAgICAgICBOYW1l
ICAgICAgICBEZXNjcmlwdGlvbgorKiAgMDUvMDUvOTkgICAgIHN0ZXBoZW4gICAgIENsZWFuZWQg
dXAuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpZm5kZWYgU0NIUklURVJfSAorI2Rl
ZmluZSBTQ0hSSVRFUl9ICisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUg
InVuaWNvZGUvY2hhcml0ZXIuaCIKKyNpbmNsdWRlICJ1bmljb2RlL3VjaHJpdGVyLmgiCisKKy8q
KgorICogXGZpbGUgCisgKiBcYnJpZWYgQysrIEFQSTogU3RyaW5nIENoYXJhY3RlciBJdGVyYXRv
cgorICovCisgCitVX05BTUVTUEFDRV9CRUdJTgorLyoqCisgKiBBIGNvbmNyZXRlIHN1YmNsYXNz
IG9mIENoYXJhY3Rlckl0ZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUKKyAqIGNoYXJhY3Rl
cnMgKGNvZGUgdW5pdHMgb3IgY29kZSBwb2ludHMpIGluIGEgVW5pY29kZVN0cmluZy4KKyAqIEl0
J3MgcG9zc2libGUgbm90IG9ubHkgdG8gY3JlYXRlIGFuCisgKiBpdGVyYXRvciB0aGF0IGl0ZXJh
dGVzIG92ZXIgYW4gZW50aXJlIFVuaWNvZGVTdHJpbmcsIGJ1dCBhbHNvIHRvCisgKiBjcmVhdGUg
b25lIHRoYXQgaXRlcmF0ZXMgb3ZlciBvbmx5IGEgc3VicmFuZ2Ugb2YgYSBVbmljb2RlU3RyaW5n
CisgKiAoaXRlcmF0b3JzIG92ZXIgZGlmZmVyZW50IHN1YnJhbmdlcyBvZiB0aGUgc2FtZSBVbmlj
b2RlU3RyaW5nIGRvbid0CisgKiBjb21wYXJlIGVxdWFsKS4KKyAqIEBzZWUgQ2hhcmFjdGVySXRl
cmF0b3IKKyAqIEBzZWUgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yCisgKiBAc3RhYmxlIElDVSAy
LjAKKyAqLworY2xhc3MgVV9DT01NT05fQVBJIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIDogcHVi
bGljIFVDaGFyQ2hhcmFjdGVySXRlcmF0b3IgeworcHVibGljOgorICAvKioKKyAgICogQ3JlYXRl
IGFuIGl0ZXJhdG9yIG92ZXIgdGhlIFVuaWNvZGVTdHJpbmcgcmVmZXJyZWQgdG8gYnkgInRleHRT
dHIiLgorICAgKiBUaGUgVW5pY29kZVN0cmluZyBvYmplY3QgaXMgY29waWVkLgorICAgKiBUaGUg
aXRlcmF0aW9uIHJhbmdlIGlzIHRoZSB3aG9sZSBzdHJpbmcsIGFuZCB0aGUgc3RhcnRpbmcgcG9z
aXRpb24gaXMgMC4KKyAgICogQHBhcmFtIHRleHRTdHIgVGhlIHVuaWNvZGUgc3RyaW5nIHVzZWQg
dG8gY3JlYXRlIGFuIGl0ZXJhdG9yCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgU3Ry
aW5nQ2hhcmFjdGVySXRlcmF0b3IoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dFN0cik7CisKKyAg
LyoqCisgICAqIENyZWF0ZSBhbiBpdGVyYXRvciBvdmVyIHRoZSBVbmljb2RlU3RyaW5nIHJlZmVy
cmVkIHRvIGJ5ICJ0ZXh0U3RyIi4KKyAgICogVGhlIGl0ZXJhdGlvbiByYW5nZSBpcyB0aGUgd2hv
bGUgc3RyaW5nLCBhbmQgdGhlIHN0YXJ0aW5nCisgICAqIHBvc2l0aW9uIGlzIHNwZWNpZmllZCBi
eSAidGV4dFBvcyIuICBJZiAidGV4dFBvcyIgaXMgb3V0c2lkZSB0aGUgdmFsaWQKKyAgICogaXRl
cmF0aW9uIHJhbmdlLCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBvYmplY3QgaXMgdW5kZWZpbmVkLgor
ICAgKiBAcGFyYW0gdGV4dFN0ciBUaGUgdW5pY29kZSBzdHJpbmcgdXNlZCB0byBjcmVhdGUgYW4g
aXRlcmF0b3IKKyAgICogQHBhcmFtIHRleHRQb3MgVGhlIHN0YXJ0aW5nIHBvc2l0aW9uIG9mIHRo
ZSBpdGVyYXRpb24KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBTdHJpbmdDaGFyYWN0
ZXJJdGVyYXRvcihjb25zdCBVbmljb2RlU3RyaW5nJiAgICB0ZXh0U3RyLAorICAgICAgICAgICAg
ICBpbnQzMl90ICAgICAgICAgICAgICB0ZXh0UG9zKTsKKworICAvKioKKyAgICogQ3JlYXRlIGFu
IGl0ZXJhdG9yIG92ZXIgdGhlIFVuaWNvZGVTdHJpbmcgcmVmZXJyZWQgdG8gYnkgInRleHRTdHIi
LgorICAgKiBUaGUgVW5pY29kZVN0cmluZyBvYmplY3QgaXMgY29waWVkLgorICAgKiBUaGUgaXRl
cmF0aW9uIHJhbmdlIGJlZ2lucyB3aXRoIHRoZSBjb2RlIHVuaXQgc3BlY2lmaWVkIGJ5CisgICAq
ICJ0ZXh0QmVnaW4iIGFuZCBlbmRzIHdpdGggdGhlIGNvZGUgdW5pdCBCRUZPUkUgdGhlIGNvZGUg
dW5pdCBzcGVjZmllZAorICAgKiBieSAidGV4dEVuZCIuICBUaGUgc3RhcnRpbmcgcG9zaXRpb24g
aXMgc3BlY2lmaWVkIGJ5ICJ0ZXh0UG9zIi4gIElmCisgICAqICJ0ZXh0QmVnaW4iIGFuZCAidGV4
dEVuZCIgZG9uJ3QgZm9ybSBhIHZhbGlkIHJhbmdlIG9uICJ0ZXh0IiAoaS5lLiwKKyAgICogdGV4
dEJlZ2luID49IHRleHRFbmQgb3IgZWl0aGVyIGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiB0
ZXh0LnNpemUoKSksCisgICAqIG9yICJ0ZXh0UG9zIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBkZWZp
bmVkIGJ5ICJ0ZXh0QmVnaW4iIGFuZCAidGV4dEVuZCIsCisgICAqIHRoZSBiZWhhdmlvciBvZiB0
aGlzIGl0ZXJhdG9yIGlzIHVuZGVmaW5lZC4KKyAgICogQHBhcmFtIHRleHRTdHIgICAgVGhlIHVu
aWNvZGUgc3RyaW5nIHVzZWQgdG8gY3JlYXRlIHRoZSBTdHJpbmdDaGFyYWN0ZXJJdGVyYXRvcgor
ICAgKiBAcGFyYW0gdGV4dEJlZ2luICBUaGUgYmVnaW4gcG9zaXRpb24gb2YgdGhlIGl0ZXJhdGlv
biByYW5nZQorICAgKiBAcGFyYW0gdGV4dEVuZCAgICBUaGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBp
dGVyYXRpb24gcmFuZ2UKKyAgICogQHBhcmFtIHRleHRQb3MgICAgVGhlIHN0YXJ0aW5nIHBvc2l0
aW9uIG9mIHRoZSBpdGVyYXRpb24KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBTdHJp
bmdDaGFyYWN0ZXJJdGVyYXRvcihjb25zdCBVbmljb2RlU3RyaW5nJiAgICB0ZXh0U3RyLAorICAg
ICAgICAgICAgICBpbnQzMl90ICAgICAgICAgICAgICB0ZXh0QmVnaW4sCisgICAgICAgICAgICAg
IGludDMyX3QgICAgICAgICAgICAgIHRleHRFbmQsCisgICAgICAgICAgICAgIGludDMyX3QgICAg
ICAgICAgICAgIHRleHRQb3MpOworCisgIC8qKgorICAgKiBDb3B5IGNvbnN0cnVjdG9yLiAgVGhl
IG5ldyBpdGVyYXRvciBpdGVyYXRlcyBvdmVyIHRoZSBzYW1lIHJhbmdlCisgICAqIG9mIHRoZSBz
YW1lIHN0cmluZyBhcyAidGhhdCIsIGFuZCBpdHMgaW5pdGlhbCBwb3NpdGlvbiBpcyB0aGUKKyAg
ICogc2FtZSBhcyAidGhhdCIncyBjdXJyZW50IHBvc2l0aW9uLgorICAgKiBUaGUgVW5pY29kZVN0
cmluZyBvYmplY3QgaW4gInRoYXQiIGlzIGNvcGllZC4KKyAgICogQHBhcmFtIHRoYXQgVGhlIFN0
cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIHRvIGJlIGNvcGllZAorICAgKiBAc3RhYmxlIElDVSAyLjAK
KyAgICovCisgIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGNvbnN0IFN0cmluZ0NoYXJhY3Rlckl0
ZXJhdG9yJiAgdGhhdCk7CisKKyAgLyoqCisgICAqIERlc3RydWN0b3IuCisgICAqIEBzdGFibGUg
SUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCB+U3RyaW5nQ2hhcmFjdGVySXRlcmF0b3IoKTsKKwor
ICAvKioKKyAgICogQXNzaWdubWVudCBvcGVyYXRvci4gICp0aGlzIGlzIGFsdGVyZWQgdG8gaXRl
cmF0ZSBvdmVyIHRoZSBzYW1lCisgICAqIHJhbmdlIG9mIHRoZSBzYW1lIHN0cmluZyBhcyAidGhh
dCIsIGFuZCByZWZlcnMgdG8gdGhlIHNhbWUKKyAgICogY2hhcmFjdGVyIHdpdGhpbiB0aGF0IHN0
cmluZyBhcyAidGhhdCIgZG9lcy4KKyAgICogQHBhcmFtIHRoYXQgVGhlIG9iamVjdCB0byBiZSBj
b3BpZWQuCisgICAqIEByZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LgorICAgKiBAc3Rh
YmxlIElDVSAyLjAKKyAgICovCisgIFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yJgorICBvcGVyYXRv
cj0oY29uc3QgU3RyaW5nQ2hhcmFjdGVySXRlcmF0b3ImICAgIHRoYXQpOworCisgIC8qKgorICAg
KiBSZXR1cm5zIHRydWUgaWYgdGhlIGl0ZXJhdG9ycyBpdGVyYXRlIG92ZXIgdGhlIHNhbWUgcmFu
Z2Ugb2YgdGhlCisgICAqIHNhbWUgc3RyaW5nIGFuZCBhcmUgcG9pbnRpbmcgYXQgdGhlIHNhbWUg
Y2hhcmFjdGVyLgorICAgKiBAcGFyYW0gdGhhdCBUaGUgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9y
IHRvIGJlIGNvbXBhcmVkIGZvciBlcXVhbGl0eQorICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGl0
ZXJhdG9ycyBpdGVyYXRlIG92ZXIgdGhlIHNhbWUgcmFuZ2Ugb2YgdGhlCisgICAqIHNhbWUgc3Ry
aW5nIGFuZCBhcmUgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY2hhcmFjdGVyLgorICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgVUJvb2wgICAgICAgICAgb3BlcmF0b3I9PShjb25z
dCBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3ImIHRoYXQpIGNvbnN0OworCisgIC8qKgorICAgKiBS
ZXR1cm5zIGEgbmV3IFN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yIHJlZmVycmluZyB0byB0aGUgc2Ft
ZQorICAgKiBjaGFyYWN0ZXIgaW4gdGhlIHNhbWUgcmFuZ2Ugb2YgdGhlIHNhbWUgc3RyaW5nIGFz
IHRoaXMgb25lLiAgVGhlCisgICAqIGNhbGxlciBtdXN0IGRlbGV0ZSB0aGUgbmV3IGl0ZXJhdG9y
LgorICAgKiBAcmV0dXJuIHRoZSBuZXdseSBjbG9uZWQgb2JqZWN0LgorICAgKiBAc3RhYmxlIElD
VSAyLjAKKyAgICovCisgIHZpcnR1YWwgQ2hhcmFjdGVySXRlcmF0b3IqIGNsb25lKHZvaWQpIGNv
bnN0OworCisgIC8qKgorICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byBpdGVyYXRlIG92ZXIgdGhl
IHByb3ZpZGVkIHN0cmluZy4KKyAgICogQHBhcmFtIG5ld1RleHQgVGhlIHN0cmluZyB0byBiZSBp
dGVyYXRlZCBvdmVyCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgdm9pZCBzZXRUZXh0
KGNvbnN0IFVuaWNvZGVTdHJpbmcmIG5ld1RleHQpOworCisgIC8qKgorICAgKiBDb3BpZXMgdGhl
IFVuaWNvZGVTdHJpbmcgdW5kZXIgaXRlcmF0aW9uIGludG8gdGhlIFVuaWNvZGVTdHJpbmcKKyAg
ICogcmVmZXJyZWQgdG8gYnkgInJlc3VsdCIuICBFdmVuIGlmIHRoaXMgaXRlcmF0b3IgaXRlcmF0
ZXMgYWNyb3NzCisgICAqIG9ubHkgYSBwYXJ0IG9mIHRoaXMgc3RyaW5nLCB0aGUgd2hvbGUgc3Ry
aW5nIGlzIGNvcGllZC4KKyAgICogQHBhcmFtIHJlc3VsdCBSZWNlaXZlcyBhIGNvcHkgb2YgdGhl
IHRleHQgdW5kZXIgaXRlcmF0aW9uLgorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZp
cnR1YWwgdm9pZCAgICAgICAgICAgIGdldFRleHQoVW5pY29kZVN0cmluZyYgcmVzdWx0KTsKKwor
ICAvKioKKyAgICogUmV0dXJuIGEgY2xhc3MgSUQgZm9yIHRoaXMgb2JqZWN0IChub3QgcmVhbGx5
IHB1YmxpYykKKyAgICogQHJldHVybiBhIGNsYXNzIElEIGZvciB0aGlzIG9iamVjdC4KKyAgICog
QHN0YWJsZSBJQ1UgMi4wCisgICAqLworICB2aXJ0dWFsIFVDbGFzc0lEICAgICAgICAgZ2V0RHlu
YW1pY0NsYXNzSUQodm9pZCkgY29uc3Q7CisKKyAgLyoqCisgICAqIFJldHVybiBhIGNsYXNzIElE
IGZvciB0aGlzIGNsYXNzIChub3QgcmVhbGx5IHB1YmxpYykKKyAgICogQHJldHVybiBhIGNsYXNz
IElEIGZvciB0aGlzIGNsYXNzCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgc3RhdGlj
IFVDbGFzc0lEICAgVV9FWFBPUlQyIGdldFN0YXRpY0NsYXNzSUQodm9pZCk7CisKK3Byb3RlY3Rl
ZDoKKyAgLyoqCisgICAqIERlZmF1bHQgY29uc3RydWN0b3IsIGl0ZXJhdGlvbiBvdmVyIGVtcHR5
IHN0cmluZy4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBTdHJpbmdDaGFyYWN0ZXJJ
dGVyYXRvcigpOworCisgIC8qKgorICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byBpdGVyYXRlIG92
ZXIgdGhlIHByb3ZpZGVkIHN0cmluZy4KKyAgICogQHBhcmFtIG5ld1RleHQgVGhlIHN0cmluZyB0
byBiZSBpdGVyYXRlZCBvdmVyCisgICAqIEBwYXJhbSBuZXdUZXh0TGVuZ3RoIFRoZSBsZW5ndGgg
b2YgdGhlIFN0cmluZworICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZvaWQgc2V0VGV4
dChjb25zdCBVQ2hhciogbmV3VGV4dCwgaW50MzJfdCBuZXdUZXh0TGVuZ3RoKTsKKworICAvKioK
KyAgICogQ29weSBvZiB0aGUgaXRlcmF0ZWQgc3RyaW5nIG9iamVjdC4KKyAgICogQHN0YWJsZSBJ
Q1UgMi4wCisgICAqLworICBVbmljb2RlU3RyaW5nICAgICAgICAgICAgdGV4dDsKKworfTsKKwor
VV9OQU1FU1BBQ0VfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNv
ZGUvdWNhc2VtYXAuaCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNhc2VtYXAuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iMzdlMTY1ODg2OTdmMWE5MzAxOTFlZTNkZjgxNmM2M2I3YmQzOGMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91Y2FzZW1hcC5oCkBAIC0wLDAgKzEsNDIz
IEBACisvKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiAgIENvcHlyaWdodCAoQykgMjAw
NS0yMDEyLCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisqICAgQ29ycG9yYXRpb24g
YW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCisqICAgZmlsZSBuYW1lOiAgdWNhc2VtYXAuaAorKiAgIGVuY29kaW5nOiAgIFVTLUFTQ0lJ
CisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgorKiAg
IGNyZWF0ZWQgb246IDIwMDVtYXkwNgorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hlcmVy
CisqCisqICAgQ2FzZSBtYXBwaW5nIHNlcnZpY2Ugb2JqZWN0IGFuZCBmdW5jdGlvbnMgdXNpbmcg
aXQuCisqLworCisjaWZuZGVmIF9fVUNBU0VNQVBfSF9fCisjZGVmaW5lIF9fVUNBU0VNQVBfSF9f
CisKKyNpbmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvdXN0cmlu
Zy5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVyLmgiCisKKy8qKgorICogXGZpbGUK
KyAqIFxicmllZiBDIEFQSTogVW5pY29kZSBjYXNlIG1hcHBpbmcgZnVuY3Rpb25zIHVzaW5nIGEg
VUNhc2VNYXAgc2VydmljZSBvYmplY3QuCisgKgorICogVGhlIHNlcnZpY2Ugb2JqZWN0IHRha2Vz
IGNhcmUgb2YgbWVtb3J5IGFsbG9jYXRpb25zLCBkYXRhIGxvYWRpbmcsIGFuZCBzZXR1cAorICog
Zm9yIHRoZSBhdHRyaWJ1dGVzLCBhcyB1c3VhbC4KKyAqCisgKiBDdXJyZW50bHksIHRoZSBmdW5j
dGlvbmFsaXR5IHByb3ZpZGVkIGhlcmUgZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIHVjaGFyLmgKKyAq
IGFuZCB1c3RyaW5nLmgsIGV4Y2VwdCBmb3IgdWNhc2VtYXBfdG9UaXRsZSgpLgorICoKKyAqIHVj
YXNlbWFwX3V0ZjhYWVooKSBmdW5jdGlvbnMgb3BlcmF0ZSBkaXJlY3RseSBvbiBVVEYtOCBzdHJp
bmdzLgorICovCisKKy8qKgorICogVUNhc2VNYXAgaXMgYW4gb3BhcXVlIHNlcnZpY2Ugb2JqZWN0
IGZvciBuZXdlciBJQ1UgY2FzZSBtYXBwaW5nIGZ1bmN0aW9ucy4KKyAqIE9sZGVyIGZ1bmN0aW9u
cyBkaWQgbm90IHVzZSBhIHNlcnZpY2Ugb2JqZWN0LgorICogQHN0YWJsZSBJQ1UgMy40CisgKi8K
K3N0cnVjdCBVQ2FzZU1hcDsKK3R5cGVkZWYgc3RydWN0IFVDYXNlTWFwIFVDYXNlTWFwOyAvKio8
IEMgdHlwZWRlZiBmb3Igc3RydWN0IFVDYXNlTWFwLiBAc3RhYmxlIElDVSAzLjQgKi8KKworLyoq
CisgKiBPcGVuIGEgVUNhc2VNYXAgc2VydmljZSBvYmplY3QgZm9yIGEgbG9jYWxlIGFuZCBhIHNl
dCBvZiBvcHRpb25zLgorICogVGhlIGxvY2FsZSBJRCBhbmQgb3B0aW9ucyBhcmUgcHJlcHJvY2Vz
c2VkIHNvIHRoYXQgZnVuY3Rpb25zIHVzaW5nIHRoZQorICogc2VydmljZSBvYmplY3QgbmVlZCBu
b3QgcHJvY2VzcyB0aGVtIGluIGVhY2ggY2FsbC4KKyAqCisgKiBAcGFyYW0gbG9jYWxlIElDVSBs
b2NhbGUgSUQsIHVzZWQgZm9yIGxhbmd1YWdlLWRlcGVuZGVudAorICogICAgICAgICAgICAgICB1
cHBlci0vbG93ZXItL3RpdGxlLWNhc2luZyBhY2NvcmRpbmcgdG8gdGhlIFVuaWNvZGUgc3RhbmRh
cmQuCisgKiAgICAgICAgICAgICAgIFVzdWFsIHNlbWFudGljczogIiI9cm9vdCwgTlVMTD1kZWZh
dWx0IGxvY2FsZSwgZXRjLgorICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBiaXQgc2V0LCB1c2Vk
IGZvciBjYXNlIGZvbGRpbmcgYW5kIHN0cmluZyBjb21wYXJpc29ucy4KKyAqICAgICAgICAgICAg
ICAgIFNhbWUgZmxhZ3MgYXMgZm9yIHVfZm9sZENhc2UoKSwgdV9zdHJGb2xkQ2FzZSgpLAorICog
ICAgICAgICAgICAgICAgdV9zdHJDYXNlQ29tcGFyZSgpLCBldGMuCisgKiAgICAgICAgICAgICAg
ICBVc2UgMCBvciBVX0ZPTERfQ0FTRV9ERUZBVUxUIGZvciBkZWZhdWx0IGJlaGF2aW9yLgorICog
QHBhcmFtIHBFcnJvckNvZGUgTXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29k
ZSB2YWx1ZSwKKyAqICAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEg
ZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8g
YSBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdCwgaWYgc3VjY2Vzc2Z1bC4KKyAqCisgKiBAc2VlIFVf
Rk9MRF9DQVNFX0RFRkFVTFQKKyAqIEBzZWUgVV9GT0xEX0NBU0VfRVhDTFVERV9TUEVDSUFMX0kK
KyAqIEBzZWUgVV9USVRMRUNBU0VfTk9fTE9XRVJDQVNFCisgKiBAc2VlIFVfVElUTEVDQVNFX05P
X0JSRUFLX0FESlVTVE1FTlQKKyAqIEBzdGFibGUgSUNVIDMuNAorICovCitVX1NUQUJMRSBVQ2Fz
ZU1hcCAqIFVfRVhQT1JUMgordWNhc2VtYXBfb3Blbihjb25zdCBjaGFyICpsb2NhbGUsIHVpbnQz
Ml90IG9wdGlvbnMsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAqIENsb3NlIGEg
VUNhc2VNYXAgc2VydmljZSBvYmplY3QuCisgKiBAcGFyYW0gY3NtIE9iamVjdCB0byBiZSBjbG9z
ZWQuCisgKiBAc3RhYmxlIElDVSAzLjQKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3Vj
YXNlbWFwX2Nsb3NlKFVDYXNlTWFwICpjc20pOworCisjaWYgVV9TSE9XX0NQTFVTUExVU19BUEkK
KworVV9OQU1FU1BBQ0VfQkVHSU4KKworLyoqCisgKiBcY2xhc3MgTG9jYWxVQ2FzZU1hcFBvaW50
ZXIKKyAqICJTbWFydCBwb2ludGVyIiBjbGFzcywgY2xvc2VzIGEgVUNhc2VNYXAgdmlhIHVjYXNl
bWFwX2Nsb3NlKCkuCisgKiBGb3IgbW9zdCBtZXRob2RzIHNlZSB0aGUgTG9jYWxQb2ludGVyQmFz
ZSBiYXNlIGNsYXNzLgorICoKKyAqIEBzZWUgTG9jYWxQb2ludGVyQmFzZQorICogQHNlZSBMb2Nh
bFBvaW50ZXIKKyAqIEBzdGFibGUgSUNVIDQuNAorICovCitVX0RFRklORV9MT0NBTF9PUEVOX1BP
SU5URVIoTG9jYWxVQ2FzZU1hcFBvaW50ZXIsIFVDYXNlTWFwLCB1Y2FzZW1hcF9jbG9zZSk7CisK
K1VfTkFNRVNQQUNFX0VORAorCisjZW5kaWYKKworLyoqCisgKiBHZXQgdGhlIGxvY2FsZSBJRCB0
aGF0IGlzIHVzZWQgZm9yIGxhbmd1YWdlLWRlcGVuZGVudCBjYXNlIG1hcHBpbmdzLgorICogQHBh
cmFtIGNzbSBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdC4KKyAqIEByZXR1cm4gbG9jYWxlIElECisg
KiBAc3RhYmxlIElDVSAzLjQKKyAqLworVV9TVEFCTEUgY29uc3QgY2hhciAqIFVfRVhQT1JUMgor
dWNhc2VtYXBfZ2V0TG9jYWxlKGNvbnN0IFVDYXNlTWFwICpjc20pOworCisvKioKKyAqIEdldCB0
aGUgb3B0aW9ucyBiaXQgc2V0IHRoYXQgaXMgdXNlZCBmb3IgY2FzZSBmb2xkaW5nIGFuZCBzdHJp
bmcgY29tcGFyaXNvbnMuCisgKiBAcGFyYW0gY3NtIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0Lgor
ICogQHJldHVybiBvcHRpb25zIGJpdCBzZXQKKyAqIEBzdGFibGUgSUNVIDMuNAorICovCitVX1NU
QUJMRSB1aW50MzJfdCBVX0VYUE9SVDIKK3VjYXNlbWFwX2dldE9wdGlvbnMoY29uc3QgVUNhc2VN
YXAgKmNzbSk7CisKKy8qKgorICogU2V0IHRoZSBsb2NhbGUgSUQgdGhhdCBpcyB1c2VkIGZvciBs
YW5ndWFnZS1kZXBlbmRlbnQgY2FzZSBtYXBwaW5ncy4KKyAqCisgKiBAcGFyYW0gY3NtIFVDYXNl
TWFwIHNlcnZpY2Ugb2JqZWN0LgorICogQHBhcmFtIGxvY2FsZSBMb2NhbGUgSUQsIHNlZSB1Y2Fz
ZW1hcF9vcGVuKCkuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRl
ciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAorICogICAgICAgICAgICAgICAgICAgd2hpY2ggbXVz
dCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAqCisg
KiBAc2VlIHVjYXNlbWFwX29wZW4KKyAqIEBzdGFibGUgSUNVIDMuNAorICovCitVX1NUQUJMRSB2
b2lkIFVfRVhQT1JUMgordWNhc2VtYXBfc2V0TG9jYWxlKFVDYXNlTWFwICpjc20sIGNvbnN0IGNo
YXIgKmxvY2FsZSwgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogU2V0IHRoZSBv
cHRpb25zIGJpdCBzZXQgdGhhdCBpcyB1c2VkIGZvciBjYXNlIGZvbGRpbmcgYW5kIHN0cmluZyBj
b21wYXJpc29ucy4KKyAqCisgKiBAcGFyYW0gY3NtIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0Lgor
ICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBiaXQgc2V0LCBzZWUgdWNhc2VtYXBfb3BlbigpLgor
ICogQHBhcmFtIHBFcnJvckNvZGUgTXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3Ig
Y29kZSB2YWx1ZSwKKyAqICAgICAgICAgICAgICAgICAgIHdoaWNoIG11c3Qgbm90IGluZGljYXRl
IGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNhbGwuCisgKgorICogQHNlZSB1Y2FzZW1h
cF9vcGVuCisgKiBAc3RhYmxlIElDVSAzLjQKKyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIK
K3VjYXNlbWFwX3NldE9wdGlvbnMoVUNhc2VNYXAgKmNzbSwgdWludDMyX3Qgb3B0aW9ucywgVUVy
cm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogRG8gbm90IGxvd2VyY2FzZSBub24taW5p
dGlhbCBwYXJ0cyBvZiB3b3JkcyB3aGVuIHRpdGxlY2FzaW5nLgorICogT3B0aW9uIGJpdCBmb3Ig
dGl0bGVjYXNpbmcgQVBJcyB0aGF0IHRha2UgYW4gb3B0aW9ucyBiaXQgc2V0LgorICoKKyAqIEJ5
IGRlZmF1bHQsIHRpdGxlY2FzaW5nIHdpbGwgdGl0bGVjYXNlIHRoZSBmaXJzdCBjYXNlZCBjaGFy
YWN0ZXIKKyAqIG9mIGEgd29yZCBhbmQgbG93ZXJjYXNlIGFsbCBvdGhlciBjaGFyYWN0ZXJzLgor
ICogV2l0aCB0aGlzIG9wdGlvbiwgdGhlIG90aGVyIGNoYXJhY3RlcnMgd2lsbCBub3QgYmUgbW9k
aWZpZWQuCisgKgorICogQHNlZSB1Y2FzZW1hcF9zZXRPcHRpb25zCisgKiBAc2VlIHVjYXNlbWFw
X3RvVGl0bGUKKyAqIEBzZWUgdWNhc2VtYXBfdXRmOFRvVGl0bGUKKyAqIEBzZWUgVW5pY29kZVN0
cmluZzo6dG9UaXRsZQorICogQHN0YWJsZSBJQ1UgMy44CisgKi8KKyNkZWZpbmUgVV9USVRMRUNB
U0VfTk9fTE9XRVJDQVNFIDB4MTAwCisKKy8qKgorICogRG8gbm90IGFkanVzdCB0aGUgdGl0bGVj
YXNpbmcgaW5kZXhlcyBmcm9tIEJyZWFrSXRlcmF0b3I6Om5leHQoKSBpbmRleGVzOworICogdGl0
bGVjYXNlIGV4YWN0bHkgdGhlIGNoYXJhY3RlcnMgYXQgYnJlYWtzIGZyb20gdGhlIGl0ZXJhdG9y
LgorICogT3B0aW9uIGJpdCBmb3IgdGl0bGVjYXNpbmcgQVBJcyB0aGF0IHRha2UgYW4gb3B0aW9u
cyBiaXQgc2V0LgorICoKKyAqIEJ5IGRlZmF1bHQsIHRpdGxlY2FzaW5nIHdpbGwgdGFrZSBlYWNo
IGJyZWFrIGl0ZXJhdG9yIGluZGV4LAorICogYWRqdXN0IGl0IGJ5IGxvb2tpbmcgZm9yIHRoZSBu
ZXh0IGNhc2VkIGNoYXJhY3RlciwgYW5kIHRpdGxlY2FzZSB0aGF0IG9uZS4KKyAqIE90aGVyIGNo
YXJhY3RlcnMgYXJlIGxvd2VyY2FzZWQuCisgKgorICogVGhpcyBmb2xsb3dzIFVuaWNvZGUgNCAm
IDUgc2VjdGlvbiAzLjEzIERlZmF1bHQgQ2FzZSBPcGVyYXRpb25zOgorICoKKyAqIFIzICB0b1Rp
dGxlY2FzZShYKTogRmluZCB0aGUgd29yZCBib3VuZGFyaWVzIGJhc2VkIG9uIFVuaWNvZGUgU3Rh
bmRhcmQgQW5uZXgKKyAqICMyOSwgIlRleHQgQm91bmRhcmllcy4iIEJldHdlZW4gZWFjaCBwYWly
IG9mIHdvcmQgYm91bmRhcmllcywgZmluZCB0aGUgZmlyc3QKKyAqIGNhc2VkIGNoYXJhY3RlciBG
LiBJZiBGIGV4aXN0cywgbWFwIEYgdG8gZGVmYXVsdF90aXRsZShGKTsgdGhlbiBtYXAgZWFjaAor
ICogc3Vic2VxdWVudCBjaGFyYWN0ZXIgQyB0byBkZWZhdWx0X2xvd2VyKEMpLgorICoKKyAqIEBz
ZWUgdWNhc2VtYXBfc2V0T3B0aW9ucworICogQHNlZSB1Y2FzZW1hcF90b1RpdGxlCisgKiBAc2Vl
IHVjYXNlbWFwX3V0ZjhUb1RpdGxlCisgKiBAc2VlIFVuaWNvZGVTdHJpbmc6OnRvVGl0bGUKKyAq
IEBzZWUgVV9USVRMRUNBU0VfTk9fTE9XRVJDQVNFCisgKiBAc3RhYmxlIElDVSAzLjgKKyAqLwor
I2RlZmluZSBVX1RJVExFQ0FTRV9OT19CUkVBS19BREpVU1RNRU5UIDB4MjAwCisKKyNpZiAhVUNP
TkZJR19OT19CUkVBS19JVEVSQVRJT04KKworLyoqCisgKiBHZXQgdGhlIGJyZWFrIGl0ZXJhdG9y
IHRoYXQgaXMgdXNlZCBmb3IgdGl0bGVjYXNpbmcuCisgKiBEbyBub3QgbW9kaWZ5IHRoZSByZXR1
cm5lZCBicmVhayBpdGVyYXRvci4KKyAqIEBwYXJhbSBjc20gVUNhc2VNYXAgc2VydmljZSBvYmpl
Y3QuCisgKiBAcmV0dXJuIHRpdGxlY2FzaW5nIGJyZWFrIGl0ZXJhdG9yCisgKiBAc3RhYmxlIElD
VSAzLjgKKyAqLworVV9TVEFCTEUgY29uc3QgVUJyZWFrSXRlcmF0b3IgKiBVX0VYUE9SVDIKK3Vj
YXNlbWFwX2dldEJyZWFrSXRlcmF0b3IoY29uc3QgVUNhc2VNYXAgKmNzbSk7CisKKy8qKgorICog
U2V0IHRoZSBicmVhayBpdGVyYXRvciB0aGF0IGlzIHVzZWQgZm9yIHRpdGxlY2FzaW5nLgorICog
VGhlIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0IHJlbGVhc2VzIGEgcHJldmlvdXNseSBzZXQgYnJl
YWsgaXRlcmF0b3IKKyAqIGFuZCAiYWRvcHRzIiB0aGlzIG5ldyBvbmUsIHRha2luZyBvd25lcnNo
aXAgb2YgaXQuCisgKiBJdCB3aWxsIGJlIHJlbGVhc2VkIGluIGEgc3Vic2VxdWVudCBjYWxsIHRv
IHVjYXNlbWFwX3NldEJyZWFrSXRlcmF0b3IoKQorICogb3IgdWNhc2VtYXBfY2xvc2UoKS4KKyAq
CisgKiBCcmVhayBpdGVyYXRvciBvcGVyYXRpb25zIGFyZSBub3QgdGhyZWFkLXNhZmUuIFRoZXJl
Zm9yZSwgdGl0bGVjYXNpbmcKKyAqIGZ1bmN0aW9ucyB1c2Ugbm9uLWNvbnN0IFVDYXNlTWFwIG9i
amVjdHMuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byB0aXRsZWNhc2UKKyAqIHN0cmluZ3MgY29uY3Vy
cmVudGx5IHVzaW5nIHRoZSBzYW1lIFVDYXNlTWFwLgorICoKKyAqIEBwYXJhbSBjc20gVUNhc2VN
YXAgc2VydmljZSBvYmplY3QuCisgKiBAcGFyYW0gaXRlclRvQWRvcHQgQnJlYWsgaXRlcmF0b3Ig
dG8gYmUgYWRvcHRlZCBmb3IgdGl0bGVjYXNpbmcuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBNdXN0
IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAorICogICAgICAgICAg
ICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUgZnVu
Y3Rpb24gY2FsbC4KKyAqCisgKiBAc2VlIHVjYXNlbWFwX3RvVGl0bGUKKyAqIEBzZWUgdWNhc2Vt
YXBfdXRmOFRvVGl0bGUKKyAqIEBzdGFibGUgSUNVIDMuOAorICovCitVX1NUQUJMRSB2b2lkIFVf
RVhQT1JUMgordWNhc2VtYXBfc2V0QnJlYWtJdGVyYXRvcihVQ2FzZU1hcCAqY3NtLCBVQnJlYWtJ
dGVyYXRvciAqaXRlclRvQWRvcHQsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisvKioKKyAq
IFRpdGxlY2FzZSBhIFVURi0xNiBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gaXMgYWxtb3N0IGEgZHVw
bGljYXRlIG9mIHVfc3RyVG9UaXRsZSgpLAorICogZXhjZXB0IHRoYXQgaXQgdGFrZXMgdWNhc2Vt
YXBfc2V0T3B0aW9ucygpIGludG8gYWNjb3VudCBhbmQgaGFzIHBlcmZvcm1hbmNlCisgKiBhZHZh
bnRhZ2VzIGZyb20gYmVpbmcgYWJsZSB0byB1c2UgYSBVQ2FzZU1hcCBvYmplY3QgZm9yIG11bHRp
cGxlIGNhc2UgbWFwcGluZworICogb3BlcmF0aW9ucywgc2F2aW5nIHNldHVwIHRpbWUuCisgKgor
ICogQ2FzaW5nIGlzIGxvY2FsZS1kZXBlbmRlbnQgYW5kIGNvbnRleHQtc2Vuc2l0aXZlLgorICog
VGl0bGVjYXNpbmcgdXNlcyBhIGJyZWFrIGl0ZXJhdG9yIHRvIGZpbmQgdGhlIGZpcnN0IGNoYXJh
Y3RlcnMgb2Ygd29yZHMKKyAqIHRoYXQgYXJlIHRvIGJlIHRpdGxlY2FzZWQuIEl0IHRpdGxlY2Fz
ZXMgdGhvc2UgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlcworICogYWxsIG90aGVycy4gKFRoaXMg
Y2FuIGJlIG1vZGlmaWVkIHdpdGggdWNhc2VtYXBfc2V0T3B0aW9ucygpLikKKyAqCisgKiBOb3Rl
OiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgbm9uLWNvbnN0IFVDYXNlTWFwIHBvaW50ZXIgYmVjYXVz
ZSBpdCB3aWxsCisgKiBvcGVuIGEgZGVmYXVsdCBicmVhayBpdGVyYXRvciBpZiBubyBicmVhayBp
dGVyYXRvciB3YXMgc2V0IHlldCwKKyAqIGFuZCBlZmZlY3RpdmVseSBjYWxsIHVjYXNlbWFwX3Nl
dEJyZWFrSXRlcmF0b3IoKTsKKyAqIGFsc28gYmVjYXVzZSB0aGUgYnJlYWsgaXRlcmF0b3IgaXMg
c3RhdGVmdWwgYW5kIHdpbGwgYmUgbW9kaWZpZWQgZHVyaW5nCisgKiB0aGUgaXRlcmF0aW9uLgor
ICoKKyAqIFRoZSB0aXRsZWNhc2UgYnJlYWsgaXRlcmF0b3IgY2FuIGJlIHByb3ZpZGVkIHRvIGN1
c3RvbWl6ZSBmb3IgYXJiaXRyYXJ5CisgKiBzdHlsZXMsIHVzaW5nIHJ1bGVzIGFuZCBkaWN0aW9u
YXJpZXMgYmV5b25kIHRoZSBzdGFuZGFyZCBpdGVyYXRvcnMuCisgKiBUaGUgc3RhbmRhcmQgdGl0
bGVjYXNlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBsb2NhbGUgaW1wbGVtZW50cyB0aGUKKyAqIGFs
Z29yaXRobSBvZiBVbmljb2RlIFRSIDIxLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBvbmx5
IHRoZSBzZXRVVGV4dCgpLCBmaXJzdCgpLCBuZXh0KCkgYW5kIGNsb3NlKCkgbWV0aG9kcyBvZiB0
aGUKKyAqIHByb3ZpZGVkIGJyZWFrIGl0ZXJhdG9yLgorICoKKyAqIFRoZSByZXN1bHQgbWF5IGJl
IGxvbmdlciBvciBzaG9ydGVyIHRoYW4gdGhlIG9yaWdpbmFsLgorICogVGhlIHNvdXJjZSBzdHJp
bmcgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBub3Qgb3ZlcmxhcC4KKyAqCisgKiBA
cGFyYW0gY3NtICAgICAgIFVDYXNlTWFwIHNlcnZpY2Ugb2JqZWN0LiBUaGlzIHBvaW50ZXIgaXMg
bm9uLWNvbnN0IQorICogICAgICAgICAgICAgICAgICBTZWUgdGhlIG5vdGUgYWJvdmUgZm9yIGRl
dGFpbHMuCisgKiBAcGFyYW0gZGVzdCAgICAgIEEgYnVmZmVyIGZvciB0aGUgcmVzdWx0IHN0cmlu
Zy4gVGhlIHJlc3VsdCB3aWxsIGJlIE5VTC10ZXJtaW5hdGVkIGlmCisgKiAgICAgICAgICAgICAg
ICAgIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgorICogICAgICAgICAgICAgICAgICBUaGUg
Y29udGVudHMgaXMgdW5kZWZpbmVkIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqIEBwYXJhbSBkZXN0
Q2FwYWNpdHkgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAobnVtYmVyIG9mIGJ5dGVzKS4gSWYgaXQg
aXMgMCwgdGhlbgorICogICAgICAgICAgICAgICAgICBkZXN0IG1heSBiZSBOVUxMIGFuZCB0aGUg
ZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQKKyAqICAg
ICAgICAgICAgICAgICAgd2l0aG91dCB3cml0aW5nIGFueSBvZiB0aGUgcmVzdWx0IHN0cmluZy4K
KyAqIEBwYXJhbSBzcmMgICAgICAgVGhlIG9yaWdpbmFsIHN0cmluZy4KKyAqIEBwYXJhbSBzcmNM
ZW5ndGggVGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nLiBJZiAtMSwgdGhlbiBzcmMg
bXVzdCBiZSBOVUwtdGVybWluYXRlZC4KKyAqIEBwYXJhbSBwRXJyb3JDb2RlIE11c3QgYmUgYSB2
YWxpZCBwb2ludGVyIHRvIGFuIGVycm9yIGNvZGUgdmFsdWUsCisgKiAgICAgICAgICAgICAgICAg
IHdoaWNoIG11c3Qgbm90IGluZGljYXRlIGEgZmFpbHVyZSBiZWZvcmUgdGhlIGZ1bmN0aW9uIGNh
bGwuCisgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2YgdGhlIHJlc3VsdCBzdHJpbmcsIGlmIHN1Y2Nl
c3NmdWwgLSBvciBpbiBjYXNlIG9mIGEgYnVmZmVyIG92ZXJmbG93LAorICogICAgICAgICBpbiB3
aGljaCBjYXNlIGl0IHdpbGwgYmUgZ3JlYXRlciB0aGFuIGRlc3RDYXBhY2l0eS4KKyAqCisgKiBA
c2VlIHVfc3RyVG9UaXRsZQorICogQHN0YWJsZSBJQ1UgMy44CisgKi8KK1VfU1RBQkxFIGludDMy
X3QgVV9FWFBPUlQyCit1Y2FzZW1hcF90b1RpdGxlKFVDYXNlTWFwICpjc20sCisgICAgICAgICAg
ICAgICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKyAgICAgICAgICAgICAg
ICAgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisgICAgICAgICAgICAgICAg
IFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisjZW5kaWYKKworLyoqCisgKiBMb3dlcmNhc2Ug
dGhlIGNoYXJhY3RlcnMgaW4gYSBVVEYtOCBzdHJpbmcuCisgKiBDYXNpbmcgaXMgbG9jYWxlLWRl
cGVuZGVudCBhbmQgY29udGV4dC1zZW5zaXRpdmUuCisgKiBUaGUgcmVzdWx0IG1heSBiZSBsb25n
ZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KKyAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFu
ZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuCisgKgorICogQHBhcmFt
IGNzbSAgICAgICBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdC4KKyAqIEBwYXJhbSBkZXN0ICAgICAg
QSBidWZmZXIgZm9yIHRoZSByZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgTlVMLXRl
cm1pbmF0ZWQgaWYKKyAqICAgICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91
Z2guCisgKiAgICAgICAgICAgICAgICAgIFRoZSBjb250ZW50cyBpcyB1bmRlZmluZWQgaW4gY2Fz
ZSBvZiBmYWlsdXJlLgorICogQHBhcmFtIGRlc3RDYXBhY2l0eSBUaGUgc2l6ZSBvZiB0aGUgYnVm
ZmVyIChudW1iZXIgb2YgYnl0ZXMpLiBJZiBpdCBpcyAwLCB0aGVuCisgKiAgICAgICAgICAgICAg
ICAgIGRlc3QgbWF5IGJlIE5VTEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRo
ZSBsZW5ndGggb2YgdGhlIHJlc3VsdAorICogICAgICAgICAgICAgICAgICB3aXRob3V0IHdyaXRp
bmcgYW55IG9mIHRoZSByZXN1bHQgc3RyaW5nLgorICogQHBhcmFtIHNyYyAgICAgICBUaGUgb3Jp
Z2luYWwgc3RyaW5nLgorICogQHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmln
aW5hbCBzdHJpbmcuIElmIC0xLCB0aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLgorICog
QHBhcmFtIHBFcnJvckNvZGUgTXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29k
ZSB2YWx1ZSwKKyAqICAgICAgICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBm
YWlsdXJlIGJlZm9yZSB0aGUgZnVuY3Rpb24gY2FsbC4KKyAqIEByZXR1cm4gVGhlIGxlbmd0aCBv
ZiB0aGUgcmVzdWx0IHN0cmluZywgaWYgc3VjY2Vzc2Z1bCAtIG9yIGluIGNhc2Ugb2YgYSBidWZm
ZXIgb3ZlcmZsb3csCisgKiAgICAgICAgIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBncmVhdGVy
IHRoYW4gZGVzdENhcGFjaXR5LgorICoKKyAqIEBzZWUgdV9zdHJUb0xvd2VyCisgKiBAc3RhYmxl
IElDVSAzLjQKKyAqLworVV9TVEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYXNlbWFwX3V0ZjhU
b0xvd2VyKGNvbnN0IFVDYXNlTWFwICpjc20sCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpk
ZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JD
b2RlICpwRXJyb3JDb2RlKTsKKworLyoqCisgKiBVcHBlcmNhc2UgdGhlIGNoYXJhY3RlcnMgaW4g
YSBVVEYtOCBzdHJpbmcuCisgKiBDYXNpbmcgaXMgbG9jYWxlLWRlcGVuZGVudCBhbmQgY29udGV4
dC1zZW5zaXRpdmUuCisgKiBUaGUgcmVzdWx0IG1heSBiZSBsb25nZXIgb3Igc2hvcnRlciB0aGFu
IHRoZSBvcmlnaW5hbC4KKyAqIFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVzdGluYXRpb24g
YnVmZmVyIG11c3Qgbm90IG92ZXJsYXAuCisgKgorICogQHBhcmFtIGNzbSAgICAgICBVQ2FzZU1h
cCBzZXJ2aWNlIG9iamVjdC4KKyAqIEBwYXJhbSBkZXN0ICAgICAgQSBidWZmZXIgZm9yIHRoZSBy
ZXN1bHQgc3RyaW5nLiBUaGUgcmVzdWx0IHdpbGwgYmUgTlVMLXRlcm1pbmF0ZWQgaWYKKyAqICAg
ICAgICAgICAgICAgICAgdGhlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgKiAgICAgICAgICAg
ICAgICAgIFRoZSBjb250ZW50cyBpcyB1bmRlZmluZWQgaW4gY2FzZSBvZiBmYWlsdXJlLgorICog
QHBhcmFtIGRlc3RDYXBhY2l0eSBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChudW1iZXIgb2YgYnl0
ZXMpLiBJZiBpdCBpcyAwLCB0aGVuCisgKiAgICAgICAgICAgICAgICAgIGRlc3QgbWF5IGJlIE5V
TEwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIHJl
c3VsdAorICogICAgICAgICAgICAgICAgICB3aXRob3V0IHdyaXRpbmcgYW55IG9mIHRoZSByZXN1
bHQgc3RyaW5nLgorICogQHBhcmFtIHNyYyAgICAgICBUaGUgb3JpZ2luYWwgc3RyaW5nLgorICog
QHBhcmFtIHNyY0xlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcuIElmIC0x
LCB0aGVuIHNyYyBtdXN0IGJlIE5VTC10ZXJtaW5hdGVkLgorICogQHBhcmFtIHBFcnJvckNvZGUg
TXVzdCBiZSBhIHZhbGlkIHBvaW50ZXIgdG8gYW4gZXJyb3IgY29kZSB2YWx1ZSwKKyAqICAgICAg
ICAgICAgICAgICAgd2hpY2ggbXVzdCBub3QgaW5kaWNhdGUgYSBmYWlsdXJlIGJlZm9yZSB0aGUg
ZnVuY3Rpb24gY2FsbC4KKyAqIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgcmVzdWx0IHN0cmlu
ZywgaWYgc3VjY2Vzc2Z1bCAtIG9yIGluIGNhc2Ugb2YgYSBidWZmZXIgb3ZlcmZsb3csCisgKiAg
ICAgICAgIGluIHdoaWNoIGNhc2UgaXQgd2lsbCBiZSBncmVhdGVyIHRoYW4gZGVzdENhcGFjaXR5
LgorICoKKyAqIEBzZWUgdV9zdHJUb1VwcGVyCisgKiBAc3RhYmxlIElDVSAzLjQKKyAqLworVV9T
VEFCTEUgaW50MzJfdCBVX0VYUE9SVDIKK3VjYXNlbWFwX3V0ZjhUb1VwcGVyKGNvbnN0IFVDYXNl
TWFwICpjc20sCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpkZXN0LCBpbnQzMl90IGRlc3RD
YXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYywgaW50MzJfdCBz
cmNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsK
KworI2lmICFVQ09ORklHX05PX0JSRUFLX0lURVJBVElPTgorCisvKioKKyAqIFRpdGxlY2FzZSBh
IFVURi04IHN0cmluZy4KKyAqIENhc2luZyBpcyBsb2NhbGUtZGVwZW5kZW50IGFuZCBjb250ZXh0
LXNlbnNpdGl2ZS4KKyAqIFRpdGxlY2FzaW5nIHVzZXMgYSBicmVhayBpdGVyYXRvciB0byBmaW5k
IHRoZSBmaXJzdCBjaGFyYWN0ZXJzIG9mIHdvcmRzCisgKiB0aGF0IGFyZSB0byBiZSB0aXRsZWNh
c2VkLiBJdCB0aXRsZWNhc2VzIHRob3NlIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZXMKKyAqIGFs
bCBvdGhlcnMuIChUaGlzIGNhbiBiZSBtb2RpZmllZCB3aXRoIHVjYXNlbWFwX3NldE9wdGlvbnMo
KS4pCisgKgorICogTm90ZTogVGhpcyBmdW5jdGlvbiB0YWtlcyBhIG5vbi1jb25zdCBVQ2FzZU1h
cCBwb2ludGVyIGJlY2F1c2UgaXQgd2lsbAorICogb3BlbiBhIGRlZmF1bHQgYnJlYWsgaXRlcmF0
b3IgaWYgbm8gYnJlYWsgaXRlcmF0b3Igd2FzIHNldCB5ZXQsCisgKiBhbmQgZWZmZWN0aXZlbHkg
Y2FsbCB1Y2FzZW1hcF9zZXRCcmVha0l0ZXJhdG9yKCk7CisgKiBhbHNvIGJlY2F1c2UgdGhlIGJy
ZWFrIGl0ZXJhdG9yIGlzIHN0YXRlZnVsIGFuZCB3aWxsIGJlIG1vZGlmaWVkIGR1cmluZworICog
dGhlIGl0ZXJhdGlvbi4KKyAqCisgKiBUaGUgdGl0bGVjYXNlIGJyZWFrIGl0ZXJhdG9yIGNhbiBi
ZSBwcm92aWRlZCB0byBjdXN0b21pemUgZm9yIGFyYml0cmFyeQorICogc3R5bGVzLCB1c2luZyBy
dWxlcyBhbmQgZGljdGlvbmFyaWVzIGJleW9uZCB0aGUgc3RhbmRhcmQgaXRlcmF0b3JzLgorICog
VGhlIHN0YW5kYXJkIHRpdGxlY2FzZSBpdGVyYXRvciBmb3IgdGhlIHJvb3QgbG9jYWxlIGltcGxl
bWVudHMgdGhlCisgKiBhbGdvcml0aG0gb2YgVW5pY29kZSBUUiAyMS4KKyAqCisgKiBUaGlzIGZ1
bmN0aW9uIHVzZXMgb25seSB0aGUgc2V0VVRleHQoKSwgZmlyc3QoKSwgbmV4dCgpIGFuZCBjbG9z
ZSgpIG1ldGhvZHMgb2YgdGhlCisgKiBwcm92aWRlZCBicmVhayBpdGVyYXRvci4KKyAqCisgKiBU
aGUgcmVzdWx0IG1heSBiZSBsb25nZXIgb3Igc2hvcnRlciB0aGFuIHRoZSBvcmlnaW5hbC4KKyAq
IFRoZSBzb3VyY2Ugc3RyaW5nIGFuZCB0aGUgZGVzdGluYXRpb24gYnVmZmVyIG11c3Qgbm90IG92
ZXJsYXAuCisgKgorICogQHBhcmFtIGNzbSAgICAgICBVQ2FzZU1hcCBzZXJ2aWNlIG9iamVjdC4g
VGhpcyBwb2ludGVyIGlzIG5vbi1jb25zdCEKKyAqICAgICAgICAgICAgICAgICAgU2VlIHRoZSBu
b3RlIGFib3ZlIGZvciBkZXRhaWxzLgorICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3Ig
dGhlIHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwtdGVybWluYXRlZCBpZgor
ICogICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAqICAgICAg
ICAgICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhaWx1cmUu
CisgKiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBv
ZiBieXRlcykuIElmIGl0IGlzIDAsIHRoZW4KKyAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkg
YmUgTlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0
aGUgcmVzdWx0CisgKiAgICAgICAgICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhl
IHJlc3VsdCBzdHJpbmcuCisgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcu
CisgKiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4g
SWYgLTEsIHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gcEVycm9y
Q29kZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAorICog
ICAgICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3Jl
IHRoZSBmdW5jdGlvbiBjYWxsLgorICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQg
c3RyaW5nLCBpZiBzdWNjZXNzZnVsIC0gb3IgaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdywK
KyAqICAgICAgICAgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBkZXN0Q2Fw
YWNpdHkuCisgKgorICogQHNlZSB1X3N0clRvVGl0bGUKKyAqIEBzZWUgVV9USVRMRUNBU0VfTk9f
TE9XRVJDQVNFCisgKiBAc2VlIFVfVElUTEVDQVNFX05PX0JSRUFLX0FESlVTVE1FTlQKKyAqIEBz
dGFibGUgSUNVIDMuOAorICovCitVX1NUQUJMRSBpbnQzMl90IFVfRVhQT1JUMgordWNhc2VtYXBf
dXRmOFRvVGl0bGUoVUNhc2VNYXAgKmNzbSwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqZGVz
dCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUg
KnBFcnJvckNvZGUpOworCisjZW5kaWYKKworLyoqCisgKiBDYXNlLWZvbGRzIHRoZSBjaGFyYWN0
ZXJzIGluIGEgVVRGLTggc3RyaW5nLgorICoKKyAqIENhc2UtZm9sZGluZyBpcyBsb2NhbGUtaW5k
ZXBlbmRlbnQgYW5kIG5vdCBjb250ZXh0LXNlbnNpdGl2ZSwKKyAqIGJ1dCB0aGVyZSBpcyBhbiBv
cHRpb24gZm9yIHdoZXRoZXIgdG8gaW5jbHVkZSBvciBleGNsdWRlIG1hcHBpbmdzIGZvciBkb3R0
ZWQgSQorICogYW5kIGRvdGxlc3MgaSB0aGF0IGFyZSBtYXJrZWQgd2l0aCAnVCcgaW4gQ2FzZUZv
bGRpbmcudHh0LgorICoKKyAqIFRoZSByZXN1bHQgbWF5IGJlIGxvbmdlciBvciBzaG9ydGVyIHRo
YW4gdGhlIG9yaWdpbmFsLgorICogVGhlIHNvdXJjZSBzdHJpbmcgYW5kIHRoZSBkZXN0aW5hdGlv
biBidWZmZXIgbXVzdCBub3Qgb3ZlcmxhcC4KKyAqCisgKiBAcGFyYW0gY3NtICAgICAgIFVDYXNl
TWFwIHNlcnZpY2Ugb2JqZWN0LgorICogQHBhcmFtIGRlc3QgICAgICBBIGJ1ZmZlciBmb3IgdGhl
IHJlc3VsdCBzdHJpbmcuIFRoZSByZXN1bHQgd2lsbCBiZSBOVUwtdGVybWluYXRlZCBpZgorICog
ICAgICAgICAgICAgICAgICB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaC4KKyAqICAgICAgICAg
ICAgICAgICAgVGhlIGNvbnRlbnRzIGlzIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGZhaWx1cmUuCisg
KiBAcGFyYW0gZGVzdENhcGFjaXR5IFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG51bWJlciBvZiBi
eXRlcykuIElmIGl0IGlzIDAsIHRoZW4KKyAqICAgICAgICAgICAgICAgICAgZGVzdCBtYXkgYmUg
TlVMTCBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUg
cmVzdWx0CisgKiAgICAgICAgICAgICAgICAgIHdpdGhvdXQgd3JpdGluZyBhbnkgb2YgdGhlIHJl
c3VsdCBzdHJpbmcuCisgKiBAcGFyYW0gc3JjICAgICAgIFRoZSBvcmlnaW5hbCBzdHJpbmcuCisg
KiBAcGFyYW0gc3JjTGVuZ3RoIFRoZSBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHN0cmluZy4gSWYg
LTEsIHRoZW4gc3JjIG11c3QgYmUgTlVMLXRlcm1pbmF0ZWQuCisgKiBAcGFyYW0gcEVycm9yQ29k
ZSBNdXN0IGJlIGEgdmFsaWQgcG9pbnRlciB0byBhbiBlcnJvciBjb2RlIHZhbHVlLAorICogICAg
ICAgICAgICAgICAgICB3aGljaCBtdXN0IG5vdCBpbmRpY2F0ZSBhIGZhaWx1cmUgYmVmb3JlIHRo
ZSBmdW5jdGlvbiBjYWxsLgorICogQHJldHVybiBUaGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgc3Ry
aW5nLCBpZiBzdWNjZXNzZnVsIC0gb3IgaW4gY2FzZSBvZiBhIGJ1ZmZlciBvdmVyZmxvdywKKyAq
ICAgICAgICAgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBkZXN0Q2FwYWNp
dHkuCisgKgorICogQHNlZSB1X3N0ckZvbGRDYXNlCisgKiBAc2VlIHVjYXNlbWFwX3NldE9wdGlv
bnMKKyAqIEBzZWUgVV9GT0xEX0NBU0VfREVGQVVMVAorICogQHNlZSBVX0ZPTERfQ0FTRV9FWENM
VURFX1NQRUNJQUxfSQorICogQHN0YWJsZSBJQ1UgMy44CisgKi8KK1VfU1RBQkxFIGludDMyX3Qg
VV9FWFBPUlQyCit1Y2FzZW1hcF91dGY4Rm9sZENhc2UoY29uc3QgVUNhc2VNYXAgKmNzbSwKKyAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKyAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLAor
ICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdWNocml0ZXIuaCBiL1NvdXJjZS9X
VEYvaWN1L3VuaWNvZGUvdWNocml0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDVhOTkwZjdiN2VkM2Q1YmFj
ZjJkYTg0NzFlZjhmZjk0MjJmOTljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi9pY3Uv
dW5pY29kZS91Y2hyaXRlci5oCkBAIC0wLDAgKzEsMzgxIEBACisvKgorKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor
KiAgIENvcHlyaWdodCAoQykgMTk5OC0yMDA1LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hp
bmVzCisqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisqLworCisjaWZuZGVmIFVDSFJJVEVSX0gKKyNkZWZpbmUgVUNIUklURVJf
SAorCisjaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKKyNpbmNsdWRlICJ1bmljb2RlL2NoYXJp
dGVyLmgiCisKKy8qKgorICogXGZpbGUgCisgKiBcYnJpZWYgQysrIEFQSTogVUNoYXIgQ2hhcmFj
dGVyIEl0ZXJhdG9yCisgKi8KKyAKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogQSBjb25j
cmV0ZSBzdWJjbGFzcyBvZiBDaGFyYWN0ZXJJdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhl
CisgKiBjaGFyYWN0ZXJzIChjb2RlIHVuaXRzIG9yIGNvZGUgcG9pbnRzKSBpbiBhIFVDaGFyIGFy
cmF5LgorICogSXQncyBwb3NzaWJsZSBub3Qgb25seSB0byBjcmVhdGUgYW4KKyAqIGl0ZXJhdG9y
IHRoYXQgaXRlcmF0ZXMgb3ZlciBhbiBlbnRpcmUgVUNoYXIgYXJyYXksIGJ1dCBhbHNvIHRvCisg
KiBjcmVhdGUgb25lIHRoYXQgaXRlcmF0ZXMgb3ZlciBvbmx5IGEgc3VicmFuZ2Ugb2YgYSBVQ2hh
ciBhcnJheQorICogKGl0ZXJhdG9ycyBvdmVyIGRpZmZlcmVudCBzdWJyYW5nZXMgb2YgdGhlIHNh
bWUgVUNoYXIgYXJyYXkgZG9uJ3QKKyAqIGNvbXBhcmUgZXF1YWwpLgorICogQHNlZSBDaGFyYWN0
ZXJJdGVyYXRvcgorICogQHNlZSBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IKKyAqIEBzdGFibGUg
SUNVIDIuMAorICovCitjbGFzcyBVX0NPTU1PTl9BUEkgVUNoYXJDaGFyYWN0ZXJJdGVyYXRvciA6
IHB1YmxpYyBDaGFyYWN0ZXJJdGVyYXRvciB7CitwdWJsaWM6CisgIC8qKgorICAgKiBDcmVhdGUg
YW4gaXRlcmF0b3Igb3ZlciB0aGUgVUNoYXIgYXJyYXkgcmVmZXJyZWQgdG8gYnkgInRleHRQdHIi
LgorICAgKiBUaGUgaXRlcmF0aW9uIHJhbmdlIGlzIDAgdG8gPGNvZGU+bGVuZ3RoLTE8L2NvZGU+
LgorICAgKiB0ZXh0IGlzIG9ubHkgYWxpYXNlZCwgbm90IGFkb3B0ZWQgKHRoZQorICAgKiBkZXN0
cnVjdG9yIHdpbGwgbm90IGRlbGV0ZSBpdCkuCisgICAqIEBwYXJhbSB0ZXh0UHRyIFRoZSBVQ2hh
ciBhcnJheSB0byBiZSBpdGVyYXRlZCBvdmVyCisgICAqIEBwYXJhbSBsZW5ndGggVGhlIGxlbmd0
aCBvZiB0aGUgVUNoYXIgYXJyYXkKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBVQ2hh
ckNoYXJhY3Rlckl0ZXJhdG9yKGNvbnN0IFVDaGFyKiB0ZXh0UHRyLCBpbnQzMl90IGxlbmd0aCk7
CisKKyAgLyoqCisgICAqIENyZWF0ZSBhbiBpdGVyYXRvciBvdmVyIHRoZSBVQ2hhciBhcnJheSBy
ZWZlcnJlZCB0byBieSAidGV4dFB0ciIuCisgICAqIFRoZSBpdGVyYXRpb24gcmFuZ2UgaXMgMCB0
byA8Y29kZT5sZW5ndGgtMTwvY29kZT4uCisgICAqIHRleHQgaXMgb25seSBhbGlhc2VkLCBub3Qg
YWRvcHRlZCAodGhlCisgICAqIGRlc3RydWN0b3Igd2lsbCBub3QgZGVsZXRlIGl0KS4KKyAgICog
VGhlIHN0YXJ0aW5nCisgICAqIHBvc2l0aW9uIGlzIHNwZWNpZmllZCBieSAicG9zaXRpb24iLiBJ
ZiAicG9zaXRpb24iIGlzIG91dHNpZGUgdGhlIHZhbGlkCisgICAqIGl0ZXJhdGlvbiByYW5nZSwg
dGhlIGJlaGF2aW9yIG9mIHRoaXMgb2JqZWN0IGlzIHVuZGVmaW5lZC4KKyAgICogQHBhcmFtIHRl
eHRQdHIgVGhlIFVDaGFyIGFycmF5IHRvIGJlIGl0ZXJhdGQgb3ZlcgorICAgKiBAcGFyYW0gbGVu
Z3RoIFRoZSBsZW5ndGggb2YgdGhlIFVDaGFyIGFycmF5CisgICAqIEBwYXJhbSBwb3NpdGlvbiBU
aGUgc3RhcnRpbmcgcG9zaXRpb24gb2YgdGhlIGl0ZXJhdGlvbgorICAgKiBAc3RhYmxlIElDVSAy
LjAKKyAgICovCisgIFVDaGFyQ2hhcmFjdGVySXRlcmF0b3IoY29uc3QgVUNoYXIqIHRleHRQdHIs
IGludDMyX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcG9zaXRp
b24pOworCisgIC8qKgorICAgKiBDcmVhdGUgYW4gaXRlcmF0b3Igb3ZlciB0aGUgVUNoYXIgYXJy
YXkgcmVmZXJyZWQgdG8gYnkgInRleHRQdHIiLgorICAgKiBUaGUgaXRlcmF0aW9uIHJhbmdlIGlz
IDAgdG8gPGNvZGU+ZW5kLTE8L2NvZGU+LgorICAgKiB0ZXh0IGlzIG9ubHkgYWxpYXNlZCwgbm90
IGFkb3B0ZWQgKHRoZQorICAgKiBkZXN0cnVjdG9yIHdpbGwgbm90IGRlbGV0ZSBpdCkuCisgICAq
IFRoZSBzdGFydGluZworICAgKiBwb3NpdGlvbiBpcyBzcGVjaWZpZWQgYnkgInBvc2l0aW9uIi4g
SWYgYmVnaW4gYW5kIGVuZCBkbyBub3QKKyAgICogZm9ybSBhIHZhbGlkIGl0ZXJhdGlvbiByYW5n
ZSBvciAicG9zaXRpb24iIGlzIG91dHNpZGUgdGhlIHZhbGlkCisgICAqIGl0ZXJhdGlvbiByYW5n
ZSwgdGhlIGJlaGF2aW9yIG9mIHRoaXMgb2JqZWN0IGlzIHVuZGVmaW5lZC4KKyAgICogQHBhcmFt
IHRleHRQdHIgVGhlIFVDaGFyIGFycmF5IHRvIGJlIGl0ZXJhdGVkIG92ZXIKKyAgICogQHBhcmFt
IGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBVQ2hhciBhcnJheQorICAgKiBAcGFyYW0gdGV4dEJl
Z2luICBUaGUgYmVnaW4gcG9zaXRpb24gb2YgdGhlIGl0ZXJhdGlvbiByYW5nZQorICAgKiBAcGFy
YW0gdGV4dEVuZCAgICBUaGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBpdGVyYXRpb24gcmFuZ2UKKyAg
ICogQHBhcmFtIHBvc2l0aW9uICAgIFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgaXRlcmF0
aW9uCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgVUNoYXJDaGFyYWN0ZXJJdGVyYXRv
cihjb25zdCBVQ2hhciogdGV4dFB0ciwgaW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCB0ZXh0QmVnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCB0ZXh0RW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgcG9zaXRpb24p
OworCisgIC8qKgorICAgKiBDb3B5IGNvbnN0cnVjdG9yLiAgVGhlIG5ldyBpdGVyYXRvciBpdGVy
YXRlcyBvdmVyIHRoZSBzYW1lIHJhbmdlCisgICAqIG9mIHRoZSBzYW1lIHN0cmluZyBhcyAidGhh
dCIsIGFuZCBpdHMgaW5pdGlhbCBwb3NpdGlvbiBpcyB0aGUKKyAgICogc2FtZSBhcyAidGhhdCIn
cyBjdXJyZW50IHBvc2l0aW9uLgorICAgKiBAcGFyYW0gdGhhdCBUaGUgVUNoYXJDaGFyYWN0ZXJJ
dGVyYXRvciB0byBiZSBjb3BpZWQKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBVQ2hh
ckNoYXJhY3Rlckl0ZXJhdG9yKGNvbnN0IFVDaGFyQ2hhcmFjdGVySXRlcmF0b3ImICB0aGF0KTsK
KworICAvKioKKyAgICogRGVzdHJ1Y3Rvci4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLwor
ICB2aXJ0dWFsIH5VQ2hhckNoYXJhY3Rlckl0ZXJhdG9yKCk7CisKKyAgLyoqCisgICAqIEFzc2ln
bm1lbnQgb3BlcmF0b3IuICAqdGhpcyBpcyBhbHRlcmVkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgc2Fu
ZQorICAgKiByYW5nZSBvZiB0aGUgc2FtZSBzdHJpbmcgYXMgInRoYXQiLCBhbmQgcmVmZXJzIHRv
IHRoZSBzYW1lCisgICAqIGNoYXJhY3RlciB3aXRoaW4gdGhhdCBzdHJpbmcgYXMgInRoYXQiIGRv
ZXMuCisgICAqIEBwYXJhbSB0aGF0IFRoZSBvYmplY3QgdG8gYmUgY29waWVkCisgICAqIEByZXR1
cm4gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0CisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8K
KyAgVUNoYXJDaGFyYWN0ZXJJdGVyYXRvciYKKyAgb3BlcmF0b3I9KGNvbnN0IFVDaGFyQ2hhcmFj
dGVySXRlcmF0b3ImICAgIHRoYXQpOworCisgIC8qKgorICAgKiBSZXR1cm5zIHRydWUgaWYgdGhl
IGl0ZXJhdG9ycyBpdGVyYXRlIG92ZXIgdGhlIHNhbWUgcmFuZ2Ugb2YgdGhlCisgICAqIHNhbWUg
c3RyaW5nIGFuZCBhcmUgcG9pbnRpbmcgYXQgdGhlIHNhbWUgY2hhcmFjdGVyLgorICAgKiBAcGFy
YW0gdGhhdCBUaGUgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9yIHVzZWQgdG8gYmUgY29tcGFyZWQg
Zm9yIGVxdWFsaXR5CisgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgaXRlcmF0b3JzIGl0ZXJhdGUg
b3ZlciB0aGUgc2FtZSByYW5nZSBvZiB0aGUKKyAgICogc2FtZSBzdHJpbmcgYW5kIGFyZSBwb2lu
dGluZyBhdCB0aGUgc2FtZSBjaGFyYWN0ZXIuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8K
KyAgdmlydHVhbCBVQm9vbCAgICAgICAgICBvcGVyYXRvcj09KGNvbnN0IEZvcndhcmRDaGFyYWN0
ZXJJdGVyYXRvciYgdGhhdCkgY29uc3Q7CisKKyAgLyoqCisgICAqIEdlbmVyYXRlcyBhIGhhc2gg
Y29kZSBmb3IgdGhpcyBpdGVyYXRvci4KKyAgICogQHJldHVybiB0aGUgaGFzaCBjb2RlLgorICAg
KiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgaW50MzJfdCAgICAgICAgIGhhc2hD
b2RlKHZvaWQpIGNvbnN0OworCisgIC8qKgorICAgKiBSZXR1cm5zIGEgbmV3IFVDaGFyQ2hhcmFj
dGVySXRlcmF0b3IgcmVmZXJyaW5nIHRvIHRoZSBzYW1lCisgICAqIGNoYXJhY3RlciBpbiB0aGUg
c2FtZSByYW5nZSBvZiB0aGUgc2FtZSBzdHJpbmcgYXMgdGhpcyBvbmUuICBUaGUKKyAgICogY2Fs
bGVyIG11c3QgZGVsZXRlIHRoZSBuZXcgaXRlcmF0b3IuCisgICAqIEByZXR1cm4gdGhlIENoYXJh
Y3Rlckl0ZXJhdG9yIG5ld2x5IGNyZWF0ZWQKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLwor
ICB2aXJ0dWFsIENoYXJhY3Rlckl0ZXJhdG9yKiBjbG9uZSh2b2lkKSBjb25zdDsKKworICAvKioK
KyAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gcmVmZXIgdG8gdGhlIGZpcnN0IGNvZGUgdW5pdCBp
biBpdHMKKyAgICogaXRlcmF0aW9uIHJhbmdlLCBhbmQgcmV0dXJucyB0aGF0IGNvZGUgdW5pdC4K
KyAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBiZWdpbiBhbiBpdGVyYXRpb24gd2l0aCBuZXh0KCku
CisgICAqIEByZXR1cm4gdGhlIGZpcnN0IGNvZGUgdW5pdCBpbiBpdHMgaXRlcmF0aW9uIHJhbmdl
LgorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgVUNoYXIgICAgICAgICBm
aXJzdCh2b2lkKTsKKworICAvKioKKyAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gcmVmZXIgdG8g
dGhlIGZpcnN0IGNvZGUgdW5pdCBpbiBpdHMKKyAgICogaXRlcmF0aW9uIHJhbmdlLCByZXR1cm5z
IHRoYXQgY29kZSB1bml0LCBhbmQgbW92ZXMgdGhlIHBvc2l0aW9uCisgICAqIHRvIHRoZSBzZWNv
bmQgY29kZSB1bml0LiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvIHNldFRvU3RhcnQoKQorICAg
KiBmb3IgZm9yd2FyZCBpdGVyYXRpb24gd2l0aCBuZXh0UG9zdEluYygpLgorICAgKiBAcmV0dXJu
IHRoZSBmaXJzdCBjb2RlIHVuaXQgaW4gaXRzIGl0ZXJhdGlvbiByYW5nZQorICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgVUNoYXIgICAgICAgICBmaXJzdFBvc3RJbmModm9p
ZCk7CisKKyAgLyoqCisgICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBmaXJz
dCBjb2RlIHBvaW50IGluIGl0cworICAgKiBpdGVyYXRpb24gcmFuZ2UsIGFuZCByZXR1cm5zIHRo
YXQgY29kZSB1bml0LAorICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGJlZ2luIGFuIGl0ZXJhdGlv
biB3aXRoIG5leHQzMigpLgorICAgKiBOb3RlIHRoYXQgYW4gaXRlcmF0aW9uIHdpdGggbmV4dDMy
UG9zdEluYygpLCBiZWdpbm5pbmcgd2l0aCwKKyAgICogZS5nLiwgc2V0VG9TdGFydCgpIG9yIGZp
cnN0UG9zdEluYygpLCBpcyBtb3JlIGVmZmljaWVudC4KKyAgICogQHJldHVybiB0aGUgZmlyc3Qg
Y29kZSBwb2ludCBpbiBpdHMgaXRlcmF0aW9uIHJhbmdlCisgICAqIEBzdGFibGUgSUNVIDIuMAor
ICAgKi8KKyAgdmlydHVhbCBVQ2hhcjMyICAgICAgIGZpcnN0MzIodm9pZCk7CisKKyAgLyoqCisg
ICAqIFNldHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSBmaXJzdCBjb2RlIHBvaW50IGlu
IGl0cworICAgKiBpdGVyYXRpb24gcmFuZ2UsIHJldHVybnMgdGhhdCBjb2RlIHBvaW50LCBhbmQg
bW92ZXMgdGhlIHBvc2l0aW9uCisgICAqIHRvIHRoZSBzZWNvbmQgY29kZSBwb2ludC4gVGhpcyBp
cyBhbiBhbHRlcm5hdGl2ZSB0byBzZXRUb1N0YXJ0KCkKKyAgICogZm9yIGZvcndhcmQgaXRlcmF0
aW9uIHdpdGggbmV4dDMyUG9zdEluYygpLgorICAgKiBAcmV0dXJuIHRoZSBmaXJzdCBjb2RlIHBv
aW50IGluIGl0cyBpdGVyYXRpb24gcmFuZ2UuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8K
KyAgdmlydHVhbCBVQ2hhcjMyICAgICAgIGZpcnN0MzJQb3N0SW5jKHZvaWQpOworCisgIC8qKgor
ICAgKiBTZXRzIHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgbGFzdCBjb2RlIHVuaXQgaW4g
aXRzCisgICAqIGl0ZXJhdGlvbiByYW5nZSwgYW5kIHJldHVybnMgdGhhdCBjb2RlIHVuaXQuCisg
ICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYmVnaW4gYW4gaXRlcmF0aW9uIHdpdGggcHJldmlvdXMo
KS4KKyAgICogQHJldHVybiB0aGUgbGFzdCBjb2RlIHVuaXQgaW4gaXRzIGl0ZXJhdGlvbiByYW5n
ZS4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICB2aXJ0dWFsIFVDaGFyICAgICAgICAg
bGFzdCh2b2lkKTsKKworICAvKioKKyAgICogU2V0cyB0aGUgaXRlcmF0b3IgdG8gcmVmZXIgdG8g
dGhlIGxhc3QgY29kZSBwb2ludCBpbiBpdHMKKyAgICogaXRlcmF0aW9uIHJhbmdlLCBhbmQgcmV0
dXJucyB0aGF0IGNvZGUgdW5pdC4KKyAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBiZWdpbiBhbiBp
dGVyYXRpb24gd2l0aCBwcmV2aW91czMyKCkuCisgICAqIEByZXR1cm4gdGhlIGxhc3QgY29kZSBw
b2ludCBpbiBpdHMgaXRlcmF0aW9uIHJhbmdlLgorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICov
CisgIHZpcnR1YWwgVUNoYXIzMiAgICAgICBsYXN0MzIodm9pZCk7CisKKyAgLyoqCisgICAqIFNl
dHMgdGhlIGl0ZXJhdG9yIHRvIHJlZmVyIHRvIHRoZSAicG9zaXRpb24iLXRoIGNvZGUgdW5pdAor
ICAgKiBpbiB0aGUgdGV4dC1zdG9yYWdlIG9iamVjdCB0aGUgaXRlcmF0b3IgcmVmZXJzIHRvLCBh
bmQKKyAgICogcmV0dXJucyB0aGF0IGNvZGUgdW5pdC4KKyAgICogQHBhcmFtIHBvc2l0aW9uIHRo
ZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHRleHQtc3RvcmFnZSBvYmplY3QKKyAgICogQHJldHVybiB0
aGUgY29kZSB1bml0CisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCBVQ2hh
ciAgICAgICAgIHNldEluZGV4KGludDMyX3QgcG9zaXRpb24pOworCisgIC8qKgorICAgKiBTZXRz
IHRoZSBpdGVyYXRvciB0byByZWZlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2RlIHBvaW50
CisgICAqIHRoYXQgY29udGFpbnMgdGhlICJwb3NpdGlvbiItdGggY29kZSB1bml0CisgICAqIGlu
IHRoZSB0ZXh0LXN0b3JhZ2Ugb2JqZWN0IHRoZSBpdGVyYXRvciByZWZlcnMgdG8sIGFuZAorICAg
KiByZXR1cm5zIHRoYXQgY29kZSBwb2ludC4KKyAgICogVGhlIGN1cnJlbnQgcG9zaXRpb24gaXMg
YWRqdXN0ZWQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29kZSBwb2ludAorICAgKiAoaXRzIGZp
cnN0IGNvZGUgdW5pdCkuCisgICAqIEBwYXJhbSBwb3NpdGlvbiB0aGUgcG9zaXRpb24gd2l0aGlu
IHRoZSB0ZXh0LXN0b3JhZ2Ugb2JqZWN0CisgICAqIEByZXR1cm4gdGhlIGNvZGUgdW5pdAorICAg
KiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgVUNoYXIzMiAgICAgICBzZXRJbmRl
eDMyKGludDMyX3QgcG9zaXRpb24pOworCisgIC8qKgorICAgKiBSZXR1cm5zIHRoZSBjb2RlIHVu
aXQgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSByZWZlcnMgdG8uCisgICAqIEByZXR1cm4gdGhlIGNv
ZGUgdW5pdCB0aGUgaXRlcmF0b3IgY3VycmVudGx5IHJlZmVycyB0by4KKyAgICogQHN0YWJsZSBJ
Q1UgMi4wCisgICAqLworICB2aXJ0dWFsIFVDaGFyICAgICAgICAgY3VycmVudCh2b2lkKSBjb25z
dDsKKworICAvKioKKyAgICogUmV0dXJucyB0aGUgY29kZSBwb2ludCB0aGUgaXRlcmF0b3IgY3Vy
cmVudGx5IHJlZmVycyB0by4KKyAgICogQHJldHVybiB0aGUgY29kZSBwb2ludCB0aGUgaXRlcmF0
b3IgY3VycmVudGx5IHJlZmVycyB0by4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICB2
aXJ0dWFsIFVDaGFyMzIgICAgICAgY3VycmVudDMyKHZvaWQpIGNvbnN0OworCisgIC8qKgorICAg
KiBBZHZhbmNlcyB0byB0aGUgbmV4dCBjb2RlIHVuaXQgaW4gdGhlIGl0ZXJhdGlvbiByYW5nZSAo
dG93YXJkCisgICAqIGVuZEluZGV4KCkpLCBhbmQgcmV0dXJucyB0aGF0IGNvZGUgdW5pdC4gIElm
IHRoZXJlIGFyZSBubyBtb3JlCisgICAqIGNvZGUgdW5pdHMgdG8gcmV0dXJuLCByZXR1cm5zIERP
TkUuCisgICAqIEByZXR1cm4gdGhlIG5leHQgY29kZSB1bml0IGluIHRoZSBpdGVyYXRpb24gcmFu
Z2UuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCBVQ2hhciAgICAgICAg
IG5leHQodm9pZCk7CisKKyAgLyoqCisgICAqIEdldHMgdGhlIGN1cnJlbnQgY29kZSB1bml0IGZv
ciByZXR1cm5pbmcgYW5kIGFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgdW5pdAorICAgKiBpbiB0
aGUgaXRlcmF0aW9uIHJhbmdlCisgICAqICh0b3dhcmQgZW5kSW5kZXgoKSkuICBJZiB0aGVyZSBh
cmUKKyAgICogbm8gbW9yZSBjb2RlIHVuaXRzIHRvIHJldHVybiwgcmV0dXJucyBET05FLgorICAg
KiBAcmV0dXJuIHRoZSBjdXJyZW50IGNvZGUgdW5pdC4KKyAgICogQHN0YWJsZSBJQ1UgMi4wCisg
ICAqLworICB2aXJ0dWFsIFVDaGFyICAgICAgICAgbmV4dFBvc3RJbmModm9pZCk7CisKKyAgLyoq
CisgICAqIEFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgcG9pbnQgaW4gdGhlIGl0ZXJhdGlvbiBy
YW5nZSAodG93YXJkCisgICAqIGVuZEluZGV4KCkpLCBhbmQgcmV0dXJucyB0aGF0IGNvZGUgcG9p
bnQuICBJZiB0aGVyZSBhcmUgbm8gbW9yZQorICAgKiBjb2RlIHBvaW50cyB0byByZXR1cm4sIHJl
dHVybnMgRE9ORS4KKyAgICogTm90ZSB0aGF0IGl0ZXJhdGlvbiB3aXRoICJwcmUtaW5jcmVtZW50
IiBzZW1hbnRpY3MgaXMgbGVzcworICAgKiBlZmZpY2llbnQgdGhhbiBpdGVyYXRpb24gd2l0aCAi
cG9zdC1pbmNyZW1lbnQiIHNlbWFudGljcworICAgKiB0aGF0IGlzIHByb3ZpZGVkIGJ5IG5leHQz
MlBvc3RJbmMoKS4KKyAgICogQHJldHVybiB0aGUgbmV4dCBjb2RlIHBvaW50IGluIHRoZSBpdGVy
YXRpb24gcmFuZ2UuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCBVQ2hh
cjMyICAgICAgIG5leHQzMih2b2lkKTsKKworICAvKioKKyAgICogR2V0cyB0aGUgY3VycmVudCBj
b2RlIHBvaW50IGZvciByZXR1cm5pbmcgYW5kIGFkdmFuY2VzIHRvIHRoZSBuZXh0IGNvZGUgcG9p
bnQKKyAgICogaW4gdGhlIGl0ZXJhdGlvbiByYW5nZQorICAgKiAodG93YXJkIGVuZEluZGV4KCkp
LiAgSWYgdGhlcmUgYXJlCisgICAqIG5vIG1vcmUgY29kZSBwb2ludHMgdG8gcmV0dXJuLCByZXR1
cm5zIERPTkUuCisgICAqIEByZXR1cm4gdGhlIGN1cnJlbnQgcG9pbnQuCisgICAqIEBzdGFibGUg
SUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCBVQ2hhcjMyICAgICAgIG5leHQzMlBvc3RJbmModm9p
ZCk7CisKKyAgLyoqCisgICAqIFJldHVybnMgRkFMU0UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29k
ZSB1bml0cyBvciBjb2RlIHBvaW50cworICAgKiBhdCBvciBhZnRlciB0aGUgY3VycmVudCBwb3Np
dGlvbiBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLgorICAgKiBUaGlzIGlzIHVzZWQgd2l0aCBuZXh0
UG9zdEluYygpIG9yIG5leHQzMlBvc3RJbmMoKSBpbiBmb3J3YXJkCisgICAqIGl0ZXJhdGlvbi4K
KyAgICogQHJldHVybiBGQUxTRSBpZiB0aGVyZSBhcmUgbm8gbW9yZSBjb2RlIHVuaXRzIG9yIGNv
ZGUgcG9pbnRzCisgICAqIGF0IG9yIGFmdGVyIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBp
dGVyYXRpb24gcmFuZ2UuCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCBV
Qm9vbCAgICAgICAgaGFzTmV4dCgpOworCisgIC8qKgorICAgKiBBZHZhbmNlcyB0byB0aGUgcHJl
dmlvdXMgY29kZSB1bml0IGluIHRoZSBpdGVyYXRpb24gcmFuZ2UgKHRvd2FyZAorICAgKiBzdGFy
dEluZGV4KCkpLCBhbmQgcmV0dXJucyB0aGF0IGNvZGUgdW5pdC4gIElmIHRoZXJlIGFyZSBubyBt
b3JlCisgICAqIGNvZGUgdW5pdHMgdG8gcmV0dXJuLCByZXR1cm5zIERPTkUuCisgICAqIEByZXR1
cm4gdGhlIHByZXZpb3VzIGNvZGUgdW5pdCBpbiB0aGUgaXRlcmF0aW9uIHJhbmdlLgorICAgKiBA
c3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgVUNoYXIgICAgICAgICBwcmV2aW91cyh2
b2lkKTsKKworICAvKioKKyAgICogQWR2YW5jZXMgdG8gdGhlIHByZXZpb3VzIGNvZGUgcG9pbnQg
aW4gdGhlIGl0ZXJhdGlvbiByYW5nZSAodG93YXJkCisgICAqIHN0YXJ0SW5kZXgoKSksIGFuZCBy
ZXR1cm5zIHRoYXQgY29kZSBwb2ludC4gIElmIHRoZXJlIGFyZSBubyBtb3JlCisgICAqIGNvZGUg
cG9pbnRzIHRvIHJldHVybiwgcmV0dXJucyBET05FLgorICAgKiBAcmV0dXJuIHRoZSBwcmV2aW91
cyBjb2RlIHBvaW50IGluIHRoZSBpdGVyYXRpb24gcmFuZ2UuCisgICAqIEBzdGFibGUgSUNVIDIu
MAorICAgKi8KKyAgdmlydHVhbCBVQ2hhcjMyICAgICAgIHByZXZpb3VzMzIodm9pZCk7CisKKyAg
LyoqCisgICAqIFJldHVybnMgRkFMU0UgaWYgdGhlcmUgYXJlIG5vIG1vcmUgY29kZSB1bml0cyBv
ciBjb2RlIHBvaW50cworICAgKiBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGl0
ZXJhdGlvbiByYW5nZS4KKyAgICogVGhpcyBpcyB1c2VkIHdpdGggcHJldmlvdXMoKSBvciBwcmV2
aW91czMyKCkgaW4gYmFja3dhcmQKKyAgICogaXRlcmF0aW9uLgorICAgKiBAcmV0dXJuIEZBTFNF
IGlmIHRoZXJlIGFyZSBubyBtb3JlIGNvZGUgdW5pdHMgb3IgY29kZSBwb2ludHMKKyAgICogYmVm
b3JlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBpdGVyYXRpb24gcmFuZ2UuCisgICAqIEBz
dGFibGUgSUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCBVQm9vbCAgICAgICAgaGFzUHJldmlvdXMo
KTsKKworICAvKioKKyAgICogTW92ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24gcmVsYXRpdmUgdG8g
dGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUKKyAgICogaXRlcmF0aW9uIHJhbmdlLCBvciByZWxhdGl2
ZSB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBpdHNlbGYuCisgICAqIFRoZSBtb3ZlbWVudCBpcyBl
eHByZXNzZWQgaW4gbnVtYmVycyBvZiBjb2RlIHVuaXRzIGZvcndhcmQKKyAgICogb3IgYmFja3dh
cmQgYnkgc3BlY2lmeWluZyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGRlbHRhLgorICAgKiBAcGFy
YW0gZGVsdGEgdGhlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIG9yaWdpbi4gQSBwb3NpdGl2ZSBkZWx0
YSBtZWFucyBmb3J3YXJkOworICAgKiBhIG5lZ2F0aXZlIGRlbHRhIG1lYW5zIGJhY2t3YXJkLgor
ICAgKiBAcGFyYW0gb3JpZ2luIE9yaWdpbiBlbnVtZXJhdGlvbiB7a1N0YXJ0LCBrQ3VycmVudCwg
a0VuZH0KKyAgICogQHJldHVybiB0aGUgbmV3IHBvc2l0aW9uCisgICAqIEBzdGFibGUgSUNVIDIu
MAorICAgKi8KKyAgdmlydHVhbCBpbnQzMl90ICAgICAgbW92ZShpbnQzMl90IGRlbHRhLCBFT3Jp
Z2luIG9yaWdpbik7CisKKyAgLyoqCisgICAqIE1vdmVzIHRoZSBjdXJyZW50IHBvc2l0aW9uIHJl
bGF0aXZlIHRvIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlCisgICAqIGl0ZXJhdGlvbiByYW5nZSwg
b3IgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gaXRzZWxmLgorICAgKiBUaGUgbW92
ZW1lbnQgaXMgZXhwcmVzc2VkIGluIG51bWJlcnMgb2YgY29kZSBwb2ludHMgZm9yd2FyZAorICAg
KiBvciBiYWNrd2FyZCBieSBzcGVjaWZ5aW5nIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgZGVsdGEu
CisgICAqIEBwYXJhbSBkZWx0YSB0aGUgcG9zaXRpb24gcmVsYXRpdmUgdG8gb3JpZ2luLiBBIHBv
c2l0aXZlIGRlbHRhIG1lYW5zIGZvcndhcmQ7CisgICAqIGEgbmVnYXRpdmUgZGVsdGEgbWVhbnMg
YmFja3dhcmQuCisgICAqIEBwYXJhbSBvcmlnaW4gT3JpZ2luIGVudW1lcmF0aW9uIHtrU3RhcnQs
IGtDdXJyZW50LCBrRW5kfQorICAgKiBAcmV0dXJuIHRoZSBuZXcgcG9zaXRpb24KKyAgICogQHN0
YWJsZSBJQ1UgMi4wCisgICAqLworICB2aXJ0dWFsIGludDMyX3QgICAgICBtb3ZlMzIoaW50MzJf
dCBkZWx0YSwgRU9yaWdpbiBvcmlnaW4pOworCisgIC8qKgorICAgKiBTZXRzIHRoZSBpdGVyYXRv
ciB0byBpdGVyYXRlIG92ZXIgYSBuZXcgcmFuZ2Ugb2YgdGV4dAorICAgKiBAc3RhYmxlIElDVSAy
LjAKKyAgICovCisgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogbmV3VGV4dCwgaW50MzJfdCBu
ZXdUZXh0TGVuZ3RoKTsKKworICAvKioKKyAgICogQ29waWVzIHRoZSBVQ2hhciBhcnJheSB1bmRl
ciBpdGVyYXRpb24gaW50byB0aGUgVW5pY29kZVN0cmluZworICAgKiByZWZlcnJlZCB0byBieSAi
cmVzdWx0Ii4gIEV2ZW4gaWYgdGhpcyBpdGVyYXRvciBpdGVyYXRlcyBhY3Jvc3MKKyAgICogb25s
eSBhIHBhcnQgb2YgdGhpcyBzdHJpbmcsIHRoZSB3aG9sZSBzdHJpbmcgaXMgY29waWVkLgorICAg
KiBAcGFyYW0gcmVzdWx0IFJlY2VpdmVzIGEgY29weSBvZiB0aGUgdGV4dCB1bmRlciBpdGVyYXRp
b24uCisgICAqIEBzdGFibGUgSUNVIDIuMAorICAgKi8KKyAgdmlydHVhbCB2b2lkICAgICAgICAg
ICAgZ2V0VGV4dChVbmljb2RlU3RyaW5nJiByZXN1bHQpOworCisgIC8qKgorICAgKiBSZXR1cm4g
YSBjbGFzcyBJRCBmb3IgdGhpcyBjbGFzcyAobm90IHJlYWxseSBwdWJsaWMpCisgICAqIEByZXR1
cm4gYSBjbGFzcyBJRCBmb3IgdGhpcyBjbGFzcworICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICov
CisgIHN0YXRpYyBVQ2xhc3NJRCAgICAgICAgIFVfRVhQT1JUMiBnZXRTdGF0aWNDbGFzc0lEKHZv
aWQpOworCisgIC8qKgorICAgKiBSZXR1cm4gYSBjbGFzcyBJRCBmb3IgdGhpcyBvYmplY3QgKG5v
dCByZWFsbHkgcHVibGljKQorICAgKiBAcmV0dXJuIGEgY2xhc3MgSUQgZm9yIHRoaXMgb2JqZWN0
LgorICAgKiBAc3RhYmxlIElDVSAyLjAKKyAgICovCisgIHZpcnR1YWwgVUNsYXNzSUQgICAgICAg
IGdldER5bmFtaWNDbGFzc0lEKHZvaWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgIC8qKgorICAg
KiBQcm90ZWN0ZWQgY29uc3RydWN0b3IKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBV
Q2hhckNoYXJhY3Rlckl0ZXJhdG9yKCk7CisgIC8qKgorICAgKiBQcm90ZWN0ZWQgbWVtYmVyIHRl
eHQKKyAgICogQHN0YWJsZSBJQ1UgMi4wCisgICAqLworICBjb25zdCBVQ2hhciogICAgICAgICAg
ICB0ZXh0OworCit9OworCitVX05BTUVTUEFDRV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9pY3UvdW5pY29kZS91ZGF0YS5oIGIvU291cmNlL1dURi9pY3UvdW5pY29kZS91ZGF0
YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI5ZTQ2NjMwZDUzOThkODI3MzhkMWQ2MWZmYzRkMmM5MTRlOGM2OGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL2ljdS91bmljb2RlL3VkYXRhLmgKQEAgLTAs
MCArMSw0MzAgQEAKKy8qCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAxNCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworKiAgIENvcnBv
cmF0aW9uIGFuZCBvdGhlcnMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCisqICAgZmlsZSBuYW1lOiAgdWRhdGEuaAorKiAgIGVuY29kaW5nOiAgIFVTLUFT
Q0lJCisqICAgdGFiIHNpemU6ICAgOCAobm90IHVzZWQpCisqICAgaW5kZW50YXRpb246NAorKgor
KiAgIGNyZWF0ZWQgb246IDE5OTlvY3QyNQorKiAgIGNyZWF0ZWQgYnk6IE1hcmt1cyBXLiBTY2hl
cmVyCisqLworCisjaWZuZGVmIF9fVURBVEFfSF9fCisjZGVmaW5lIF9fVURBVEFfSF9fCisKKyNp
bmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorI2luY2x1ZGUgInVuaWNvZGUvbG9jYWxwb2ludGVy
LmgiCisKK1VfQ0RFQ0xfQkVHSU4KKworLyoqCisgKiBcZmlsZQorICogXGJyaWVmIEMgQVBJOiBE
YXRhIGxvYWRpbmcgaW50ZXJmYWNlCisgKgorICogPGgyPkluZm9ybWF0aW9uIGFib3V0IGRhdGEg
bG9hZGluZyBpbnRlcmZhY2U8L2gyPgorICoKKyAqIFRoaXMgQVBJIGlzIHVzZWQgdG8gZmluZCBh
bmQgZWZmaWNpZW50bHkgbG9hZCBkYXRhIGZvciBJQ1UgYW5kIGFwcGxpY2F0aW9ucworICogdXNp
bmcgSUNVLiBJdCBwcm92aWRlcyBhbiBhYnN0cmFjdCBpbnRlcmZhY2UgdGhhdCBzcGVjaWZpZXMg
YSBkYXRhIHR5cGUgYW5kCisgKiBuYW1lIHRvIGZpbmQgYW5kIGxvYWQgdGhlIGRhdGEuIE5vcm1h
bGx5IHRoaXMgQVBJIGlzIHVzZWQgYnkgb3RoZXIgSUNVIEFQSXMKKyAqIHRvIGxvYWQgcmVxdWly
ZWQgZGF0YSBvdXQgb2YgdGhlIElDVSBkYXRhIGxpYnJhcnksIGJ1dCBpdCBjYW4gYmUgdXNlZCB0
bworICogbG9hZCBkYXRhIG91dCBvZiBvdGhlciBwbGFjZXMuCisgKgorICogU2VlIHRoZSBVc2Vy
IEd1aWRlIERhdGEgTWFuYWdlbWVudCBjaGFwdGVyLgorICovCisgCisjaWZuZGVmIFVfSElERV9J
TlRFUk5BTF9BUEkKKy8qKgorICogQ2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgcGFja2FnZSBu
YW1lcyBmcm9tIHRyZWUgbmFtZXMgCisgKiBAaW50ZXJuYWwgSUNVIDMuMAorICovCisjZGVmaW5l
IFVfVFJFRV9TRVBBUkFUT1IgJy0nCisKKy8qKgorICogU3RyaW5nIHVzZWQgdG8gc2VwYXJhdGUg
cGFja2FnZSBuYW1lcyBmcm9tIHRyZWUgbmFtZXMgCisgKiBAaW50ZXJuYWwgSUNVIDMuMAorICov
CisjZGVmaW5lIFVfVFJFRV9TRVBBUkFUT1JfU1RSSU5HICItIgorCisvKioKKyAqIENoYXJhY3Rl
ciB1c2VkIHRvIHNlcGFyYXRlIHBhcnRzIG9mIGVudHJ5IG5hbWVzCisgKiBAaW50ZXJuYWwgSUNV
IDMuMAorICovCisjZGVmaW5lIFVfVFJFRV9FTlRSWV9TRVBfQ0hBUiAnLycKKworLyoqCisgKiBT
dHJpbmcgdXNlZCB0byBzZXBhcmF0ZSBwYXJ0cyBvZiBlbnRyeSBuYW1lcworICogQGludGVybmFs
IElDVSAzLjAKKyAqLworI2RlZmluZSBVX1RSRUVfRU5UUllfU0VQX1NUUklORyAiLyIKKworLyoq
CisgKiBBbGlhcyBmb3Igc3RhbmRhcmQgSUNVIGRhdGEgCisgKiBAaW50ZXJuYWwgSUNVIDMuMAor
ICovCisjZGVmaW5lIFVfSUNVREFUQV9BTElBUyAiSUNVREFUQSIKKworI2VuZGlmIC8qIFVfSElE
RV9JTlRFUk5BTF9BUEkgKi8KKworLyoqCisgKiBVRGF0YUluZm8gY29udGFpbnMgdGhlIHByb3Bl
cnRpZXMgYWJvdXQgdGhlIHJlcXVlc3RlZCBkYXRhLgorICogVGhpcyBpcyBtZXRhIGRhdGEuCisg
KgorICogPHA+VGhpcyBzdHJ1Y3R1cmUgbWF5IGdyb3cgaW4gdGhlIGZ1dHVyZSwgaW5kaWNhdGVk
IGJ5IHRoZQorICogPGNvZGU+c2l6ZTwvY29kZT4gZmllbGQuPC9wPgorICoKKyAqIDxwPklDVSBk
YXRhIG11c3QgYmUgYXQgbGVhc3QgOC1hbGlnbmVkLCBhbmQgc2hvdWxkIGJlIDE2LWFsaWduZWQu
CisgKiBUaGUgVURhdGFJbmZvIHN0cnVjdCBiZWdpbnMgNCBieXRlcyBhZnRlciB0aGUgc3RhcnQg
b2YgdGhlIGRhdGEgaXRlbSwKKyAqIHNvIGl0IGlzIDQtYWxpZ25lZC4KKyAqCisgKiA8cD5UaGUg
cGxhdGZvcm0gZGF0YSBwcm9wZXJ0eSBmaWVsZHMgaGVscCBkZXRlcm1pbmUgaWYgYSBkYXRhCisg
KiBmaWxlIGNhbiBiZSBlZmZpY2llbnRseSB1c2VkIG9uIGEgZ2l2ZW4gbWFjaGluZS4KKyAqIFRo
ZSBwYXJ0aWN1bGFyIGZpZWxkcyBhcmUgb2YgaW1wb3J0YW5jZSBvbmx5IGlmIHRoZSBkYXRhCisg
KiBpcyBhZmZlY3RlZCBieSB0aGUgcHJvcGVydGllcyAtIGlmIHRoZXJlIGlzIGludGVnZXIgZGF0
YQorICogd2l0aCB3b3JkIHNpemVzID4gMSBieXRlLCBjaGFyKiB0ZXh0LCBvciBVQ2hhciogdGV4
dC48L3A+CisgKgorICogPHA+VGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgPGNvZGU+dWRhdGFf
b3BlbltDaG9pY2VdKCk8L2NvZGU+CisgKiBmdW5jdGlvbnMgbWF5IHJlamVjdCBkYXRhIGJhc2Vk
IG9uIHRoZSB2YWx1ZSBpbiA8Y29kZT5pc0JpZ0VuZGlhbjwvY29kZT4uCisgKiBObyBvdGhlciBm
aWVsZCBpcyB1c2VkIGJ5IHRoZSA8Y29kZT51ZGF0YTwvY29kZT4gQVBJIGltcGxlbWVudGF0aW9u
LjwvcD4KKyAqCisgKiA8cD5UaGUgPGNvZGU+ZGF0YUZvcm1hdDwvY29kZT4gbWF5IGJlIHVzZWQg
dG8gaWRlbnRpZnkKKyAqIHRoZSBraW5kIG9mIGRhdGEsIGUuZy4gYSBjb252ZXJ0ZXIgdGFibGUu
PC9wPgorICoKKyAqIDxwPlRoZSA8Y29kZT5mb3JtYXRWZXJzaW9uPC9jb2RlPiBmaWVsZCBzaG91
bGQgYmUgdXNlZCB0bworICogbWFrZSBzdXJlIHRoYXQgdGhlIGZvcm1hdCBjYW4gYmUgaW50ZXJw
cmV0ZWQuCisgKiBJdCBtYXkgYmUgYSBnb29kIGlkZWEgdG8gY2hlY2sgb25seSBmb3IgdGhlIG9u
ZSBvciB0d28gaGlnaGVzdAorICogb2YgdGhlIHZlcnNpb24gZWxlbWVudHMgdG8gYWxsb3cgdGhl
IGRhdGEgbWVtb3J5IHRvCisgKiBnZXQgbW9yZSBvciBzb21ld2hhdCByZWFycmFuZ2VkIGNvbnRl
bnRzLCBmb3IgYXMgbG9uZworICogYXMgdGhlIHVzaW5nIGNvZGUgY2FuIHN0aWxsIGludGVycHJl
dCB0aGUgb2xkZXIgY29udGVudHMuPC9wPgorICoKKyAqIDxwPlRoZSA8Y29kZT5kYXRhVmVyc2lv
bjwvY29kZT4gZmllbGQgaXMgaW50ZW5kZWQgdG8gYmUgYQorICogY29tbW9uIHBsYWNlIHRvIHN0
b3JlIHRoZSBzb3VyY2UgdmVyc2lvbiBvZiB0aGUgZGF0YTsKKyAqIGZvciBkYXRhIGZyb20gdGhl
IFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlLCB0aGlzIGNvdWxkCisgKiByZWZsZWN0IHRoZSBV
bmljb2RlIHZlcnNpb24uPC9wPgorICoKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVm
IHN0cnVjdCB7CisgICAgLyoqIHNpemVvZihVRGF0YUluZm8pCisgICAgICogIEBzdGFibGUgSUNV
IDIuMCAqLworICAgIHVpbnQxNl90IHNpemU7CisKKyAgICAvKiogdW51c2VkLCBzZXQgdG8gMCAK
KyAgICAgKiAgQHN0YWJsZSBJQ1UgMi4wKi8KKyAgICB1aW50MTZfdCByZXNlcnZlZFdvcmQ7CisK
KyAgICAvKiBwbGF0Zm9ybSBkYXRhIHByb3BlcnRpZXMgKi8KKyAgICAvKiogMCBmb3IgbGl0dGxl
LWVuZGlhbiBtYWNoaW5lLCAxIGZvciBiaWctZW5kaWFuCisgICAgICogIEBzdGFibGUgSUNVIDIu
MCAqLworICAgIHVpbnQ4X3QgaXNCaWdFbmRpYW47CisKKyAgICAvKiogc2VlIFVfQ0hBUlNFVF9G
QU1JTFkgdmFsdWVzIGluIHV0eXBlcy5oIAorICAgICAqICBAc3RhYmxlIElDVSAyLjAqLworICAg
IHVpbnQ4X3QgY2hhcnNldEZhbWlseTsKKworICAgIC8qKiBzaXplb2YoVUNoYXIpLCBvbmUgb2Yg
eyAxLCAyLCA0IH0gCisgICAgICogIEBzdGFibGUgSUNVIDIuMCovCisgICAgdWludDhfdCBzaXpl
b2ZVQ2hhcjsKKworICAgIC8qKiB1bnVzZWQsIHNldCB0byAwIAorICAgICAqICBAc3RhYmxlIElD
VSAyLjAqLworICAgIHVpbnQ4X3QgcmVzZXJ2ZWRCeXRlOworCisgICAgLyoqIGRhdGEgZm9ybWF0
IGlkZW50aWZpZXIgCisgICAgICogIEBzdGFibGUgSUNVIDIuMCovCisgICAgdWludDhfdCBkYXRh
Rm9ybWF0WzRdOworCisgICAgLyoqIHZlcnNpb25zOiBbMF0gbWFqb3IgWzFdIG1pbm9yIFsyXSBt
aWxsaSBbM10gbWljcm8gCisgICAgICogIEBzdGFibGUgSUNVIDIuMCovCisgICAgdWludDhfdCBm
b3JtYXRWZXJzaW9uWzRdOworCisgICAgLyoqIHZlcnNpb25zOiBbMF0gbWFqb3IgWzFdIG1pbm9y
IFsyXSBtaWxsaSBbM10gbWljcm8gCisgICAgICogIEBzdGFibGUgSUNVIDIuMCovCisgICAgdWlu
dDhfdCBkYXRhVmVyc2lvbls0XTsKK30gVURhdGFJbmZvOworCisvKiBBUEkgZm9yIHJlYWRpbmcg
ZGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKy8qKgorICogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgZGF0YSBtZW1vcnkgdHlw
ZS4KKyAqIEBzdGFibGUgSUNVIDIuMAorICovCit0eXBlZGVmIHN0cnVjdCBVRGF0YU1lbW9yeSBV
RGF0YU1lbW9yeTsKKworLyoqCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgdWRhdGFfb3BlbkNo
b2ljZSgpLgorICogQHBhcmFtIGNvbnRleHQgcGFyYW1ldGVyIHBhc3NlZCBpbnRvIDxjb2RlPnVk
YXRhX29wZW5DaG9pY2UoKTwvY29kZT4uCisgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUg
ZGF0YSBhcyBwYXNzZWQgaW50byA8Y29kZT51ZGF0YV9vcGVuQ2hvaWNlKCk8L2NvZGU+LgorICog
ICAgICAgICAgICAgSXQgbWF5IGJlIDxjb2RlPk5VTEw8L2NvZGU+LgorICogQHBhcmFtIG5hbWUg
VGhlIG5hbWUgb2YgdGhlIGRhdGEgYXMgcGFzc2VkIGludG8gPGNvZGU+dWRhdGFfb3BlbkNob2lj
ZSgpPC9jb2RlPi4KKyAqIEBwYXJhbSBwSW5mbyBBIHBvaW50ZXIgdG8gdGhlIDxjb2RlPlVEYXRh
SW5mbzwvY29kZT4gc3RydWN0dXJlCisgKiAgICAgICAgICAgICAgb2YgZGF0YSB0aGF0IGhhcyBi
ZWVuIGxvYWRlZCBhbmQgd2lsbCBiZSByZXR1cm5lZAorICogICAgICAgICAgICAgIGJ5IDxjb2Rl
PnVkYXRhX29wZW5DaG9pY2UoKTwvY29kZT4gaWYgdGhpcyBmdW5jdGlvbgorICogICAgICAgICAg
ICAgIHJldHVybnMgPGNvZGU+VFJVRTwvY29kZT4uCisgKiBAcmV0dXJuIFRSVUUgaWYgdGhlIGN1
cnJlbnQgZGF0YSBtZW1vcnkgaXMgYWNjZXB0YWJsZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8K
K3R5cGVkZWYgVUJvb2wgVV9DQUxMQ09OVgorVURhdGFNZW1vcnlJc0FjY2VwdGFibGUodm9pZCAq
Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0
IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVRGF0YUluZm8gKnBJ
bmZvKTsKKworCisvKioKKyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uLgorICogVGhpcyBmdW5jdGlv
biB3b3JrcyB0aGUgc2FtZSBhcyA8Y29kZT51ZGF0YV9vcGVuQ2hvaWNlPC9jb2RlPgorICogZXhj
ZXB0IHRoYXQgYW55IGRhdGEgdGhhdCBtYXRjaGVzIHRoZSB0eXBlIGFuZCBuYW1lCisgKiBpcyBh
c3N1bWVkIHRvIGJlIGFjY2VwdGFibGUuCisgKiBAcGFyYW0gcGF0aCBTcGVjaWZpZXMgYW4gYWJz
b2x1dGUgcGF0aCBhbmQvb3IgYSBiYXNlbmFtZSBmb3IgdGhlCisgKiAgICAgICAgICAgICBmaW5k
aW5nIG9mIHRoZSBkYXRhIGluIHRoZSBmaWxlIHN5c3RlbS4KKyAqICAgICAgICAgICAgIDxjb2Rl
Pk5VTEw8L2NvZGU+IGZvciBJQ1UgZGF0YS4KKyAqIEBwYXJhbSB0eXBlIEEgc3RyaW5nIHRoYXQg
c3BlY2lmaWVzIHRoZSB0eXBlIG9mIGRhdGEgdG8gYmUgbG9hZGVkLgorICogICAgICAgICAgICAg
Rm9yIGV4YW1wbGUsIHJlc291cmNlIGJ1bmRsZXMgYXJlIGxvYWRlZCB3aXRoIHR5cGUgInJlcyIs
CisgKiAgICAgICAgICAgICBjb252ZXJzaW9uIHRhYmxlcyB3aXRoIHR5cGUgImNudiIuCisgKiAg
ICAgICAgICAgICBUaGlzIG1heSBiZSA8Y29kZT5OVUxMPC9jb2RlPiBvciBlbXB0eS4KKyAqIEBw
YXJhbSBuYW1lIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBkYXRhLgor
ICogQHBhcmFtIHBFcnJvckNvZGUgQW4gSUNVIFVFcnJvckNvZGUgcGFyYW1ldGVyLiBJdCBtdXN0
IG5vdCBiZSA8Y29kZT5OVUxMPC9jb2RlPi4KKyAqIEByZXR1cm4gQSBwb2ludGVyIChoYW5kbGUp
IHRvIGEgZGF0YSBtZW1vcnkgb2JqZWN0LCBvciA8Y29kZT5OVUxMPC9jb2RlPgorICogICAgICAg
ICBpZiBhbiBlcnJvciBvY2N1cnMuIENhbGwgPGNvZGU+dWRhdGFfZ2V0TWVtb3J5KCk8L2NvZGU+
CisgKiAgICAgICAgIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIGFjdHVhbCBkYXRhLgorICoKKyAq
IEBzZWUgdWRhdGFfb3BlbkNob2ljZQorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1VfU1RBQkxF
IFVEYXRhTWVtb3J5ICogVV9FWFBPUlQyCit1ZGF0YV9vcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNv
bnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgIFVFcnJvckNvZGUg
KnBFcnJvckNvZGUpOworCisvKioKKyAqIERhdGEgbG9hZGluZyBmdW5jdGlvbi4KKyAqIFRoaXMg
ZnVuY3Rpb24gaXMgdXNlZCB0byBmaW5kIGFuZCBsb2FkIGVmZmljaWVudGx5IGRhdGEgZm9yCisg
KiBJQ1UgYW5kIGFwcGxpY2F0aW9ucyB1c2luZyBJQ1UuCisgKiBJdCBwcm92aWRlcyBhbiBhYnN0
cmFjdCBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgdG8gc3BlY2lmeSBhIGRhdGEKKyAqIHR5cGUgYW5k
IG5hbWUgdG8gZmluZCBhbmQgbG9hZCB0aGUgZGF0YS4KKyAqCisgKiA8cD5UaGUgaW1wbGVtZW50
YXRpb24gZGVwZW5kcyBvbiBwbGF0Zm9ybSBwcm9wZXJ0aWVzIGFuZCB1c2VyIHByZWZlcmVuY2Vz
CisgKiBhbmQgbWF5IGludm9sdmUgbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzIChETExzKSwgbWFw
cGluZworICogZmlsZXMgaW50byBtZW1vcnksIG9yIGZvcGVuKCkvZnJlYWQoKSBmaWxlcy4KKyAq
IEl0IG1heSBhbHNvIGludm9sdmUgdXNpbmcgc3RhdGljIG1lbW9yeSBvciBkYXRhYmFzZSBxdWVy
aWVzIGV0Yy4KKyAqIFNldmVyYWwgb3IgYWxsIGRhdGEgaXRlbXMgbWF5IGJlIGNvbWJpbmVkIGlu
dG8gb25lIGVudGl0eQorICogKERMTCwgbWVtb3J5LW1hcHBhYmxlIGZpbGUpLjwvcD4KKyAqCisg
KiA8cD5UaGUgZGF0YSBpcyBhbHdheXMgcHJlY2VkZWQgYnkgYSBoZWFkZXIgdGhhdCBpbmNsdWRl
cworICogYSA8Y29kZT5VRGF0YUluZm88L2NvZGU+IHN0cnVjdHVyZS4KKyAqIFRoZSBjYWxsZXIn
cyA8Y29kZT5pc0FjY2VwdGFibGUoKTwvY29kZT4gZnVuY3Rpb24gaXMgY2FsbGVkIHRvIG1ha2UK
KyAqIHN1cmUgdGhhdCB0aGUgZGF0YSBpcyB1c2VmdWwuIEl0IG1heSBiZSBjYWxsZWQgc2V2ZXJh
bCB0aW1lcyBpZiBpdAorICogcmVqZWN0cyB0aGUgZGF0YSBhbmQgdGhlcmUgaXMgbW9yZSB0aGFu
IG9uZSBsb2NhdGlvbiB3aXRoIGRhdGEKKyAqIG1hdGNoaW5nIHRoZSB0eXBlIGFuZCBuYW1lLjwv
cD4KKyAqCisgKiA8cD5JZiA8Y29kZT5wYXRoPT1OVUxMPC9jb2RlPiwgdGhlbiBJQ1UgZGF0YSBp
cyBsb2FkZWQuCisgKiBPdGhlcndpc2UsIGl0IGlzIHNlcGFyYXRlZCBpbnRvIGEgYmFzZW5hbWUg
YW5kIGEgYmFzZW5hbWUtbGVzcyBkaXJlY3Rvcnkgc3RyaW5nLgorICogVGhlIGJhc2VuYW1lIGlz
IHVzZWQgYXMgdGhlIGRhdGEgcGFja2FnZSBuYW1lLCBhbmQgdGhlIGRpcmVjdG9yeSBpcworICog
bG9naWNhbGx5IHByZXBlbmRlZCB0byB0aGUgSUNVIGRhdGEgZGlyZWN0b3J5IHN0cmluZy48L3A+
CisgKgorICogPHA+Rm9yIGRldGFpbHMgYWJvdXQgSUNVIGRhdGEgbG9hZGluZyBzZWUgdGhlIFVz
ZXIgR3VpZGUKKyAqIERhdGEgTWFuYWdlbWVudCBjaGFwdGVyLiAoaHR0cDovL2ljdS1wcm9qZWN0
Lm9yZy91c2VyZ3VpZGUvaWN1ZGF0YS5odG1sKTwvcD4KKyAqCisgKiBAcGFyYW0gcGF0aCBTcGVj
aWZpZXMgYW4gYWJzb2x1dGUgcGF0aCBhbmQvb3IgYSBiYXNlbmFtZSBmb3IgdGhlCisgKiAgICAg
ICAgICAgICBmaW5kaW5nIG9mIHRoZSBkYXRhIGluIHRoZSBmaWxlIHN5c3RlbS4KKyAqICAgICAg
ICAgICAgIDxjb2RlPk5VTEw8L2NvZGU+IGZvciBJQ1UgZGF0YS4KKyAqIEBwYXJhbSB0eXBlIEEg
c3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGRhdGEgdG8gYmUgbG9hZGVkLgorICog
ICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHJlc291cmNlIGJ1bmRsZXMgYXJlIGxvYWRlZCB3aXRo
IHR5cGUgInJlcyIsCisgKiAgICAgICAgICAgICBjb252ZXJzaW9uIHRhYmxlcyB3aXRoIHR5cGUg
ImNudiIuCisgKiAgICAgICAgICAgICBUaGlzIG1heSBiZSA8Y29kZT5OVUxMPC9jb2RlPiBvciBl
bXB0eS4KKyAqIEBwYXJhbSBuYW1lIEEgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIHRoZSBuYW1lIG9m
IHRoZSBkYXRhLgorICogQHBhcmFtIGlzQWNjZXB0YWJsZSBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCB0byB2ZXJpZnkgdGhhdCBsb2FkZWQgZGF0YQorICogICAgICAgICAgICAgICAgICAgICBpcyB1
c2VmdWwgZm9yIHRoZSBjbGllbnQgY29kZS4gSWYgaXQgcmV0dXJucyBGQUxTRQorICogICAgICAg
ICAgICAgICAgICAgICBmb3IgYWxsIGRhdGEgaXRlbXMsIHRoZW4gPGNvZGU+dWRhdGFfb3BlbkNo
b2ljZSgpPC9jb2RlPgorICogICAgICAgICAgICAgICAgICAgICB3aWxsIHJldHVybiB3aXRoIGFu
IGVycm9yLgorICogQHBhcmFtIGNvbnRleHQgQXJiaXRyYXJ5IHBhcmFtZXRlciB0byBiZSBwYXNz
ZWQgaW50byBpc0FjY2VwdGFibGUuCisgKiBAcGFyYW0gcEVycm9yQ29kZSBBbiBJQ1UgVUVycm9y
Q29kZSBwYXJhbWV0ZXIuIEl0IG11c3Qgbm90IGJlIDxjb2RlPk5VTEw8L2NvZGU+LgorICogQHJl
dHVybiBBIHBvaW50ZXIgKGhhbmRsZSkgdG8gYSBkYXRhIG1lbW9yeSBvYmplY3QsIG9yIDxjb2Rl
Pk5VTEw8L2NvZGU+CisgKiAgICAgICAgIGlmIGFuIGVycm9yIG9jY3Vycy4gQ2FsbCA8Y29kZT51
ZGF0YV9nZXRNZW1vcnkoKTwvY29kZT4KKyAqICAgICAgICAgdG8gZ2V0IGEgcG9pbnRlciB0byB0
aGUgYWN0dWFsIGRhdGEuCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLworVV9TVEFCTEUgVURhdGFN
ZW1vcnkgKiBVX0VYUE9SVDIKK3VkYXRhX29wZW5DaG9pY2UoY29uc3QgY2hhciAqcGF0aCwgY29u
c3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgVURhdGFN
ZW1vcnlJc0FjY2VwdGFibGUgKmlzQWNjZXB0YWJsZSwgdm9pZCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisKKy8qKgorICogQ2xvc2UgdGhlIGRh
dGEgbWVtb3J5LgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byBhbGxvdyB0aGUg
c3lzdGVtIHRvCisgKiByZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRh
IG1lbW9yeS4KKyAqIEBwYXJhbSBwRGF0YSBUaGUgcG9pbnRlciB0byBkYXRhIG1lbW9yeSBvYmpl
Y3QKKyAqIEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWRh
dGFfY2xvc2UoVURhdGFNZW1vcnkgKnBEYXRhKTsKKworI2lmIFVfU0hPV19DUExVU1BMVVNfQVBJ
CisKK1VfTkFNRVNQQUNFX0JFR0lOCisKKy8qKgorICogXGNsYXNzIExvY2FsVURhdGFNZW1vcnlQ
b2ludGVyCisgKiAiU21hcnQgcG9pbnRlciIgY2xhc3MsIGNsb3NlcyBhIFVEYXRhTWVtb3J5IHZp
YSB1ZGF0YV9jbG9zZSgpLgorICogRm9yIG1vc3QgbWV0aG9kcyBzZWUgdGhlIExvY2FsUG9pbnRl
ckJhc2UgYmFzZSBjbGFzcy4KKyAqCisgKiBAc2VlIExvY2FsUG9pbnRlckJhc2UKKyAqIEBzZWUg
TG9jYWxQb2ludGVyCisgKiBAc3RhYmxlIElDVSA0LjQKKyAqLworVV9ERUZJTkVfTE9DQUxfT1BF
Tl9QT0lOVEVSKExvY2FsVURhdGFNZW1vcnlQb2ludGVyLCBVRGF0YU1lbW9yeSwgdWRhdGFfY2xv
c2UpOworCitVX05BTUVTUEFDRV9FTkQKKworI2VuZGlmCisKKy8qKgorICogR2V0IHRoZSBwb2lu
dGVyIHRvIHRoZSBhY3R1YWwgZGF0YSBpbnNpZGUgdGhlIGRhdGEgbWVtb3J5LgorICogVGhlIGRh
dGEgaXMgcmVhZC1vbmx5LgorICoKKyAqIElDVSBkYXRhIG11c3QgYmUgYXQgbGVhc3QgOC1hbGln
bmVkLCBhbmQgc2hvdWxkIGJlIDE2LWFsaWduZWQuCisgKgorICogQHBhcmFtIHBEYXRhIFRoZSBw
b2ludGVyIHRvIGRhdGEgbWVtb3J5IG9iamVjdAorICogQHN0YWJsZSBJQ1UgMi4wCisgKi8KK1Vf
U1RBQkxFIGNvbnN0IHZvaWQgKiBVX0VYUE9SVDIKK3VkYXRhX2dldE1lbW9yeShVRGF0YU1lbW9y
eSAqcERhdGEpOworCisvKioKKyAqIEdldCB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGF0YSBt
ZW1vcnkgaGVhZGVyLgorICogVGhpcyBhbGxvd3MgdG8gZ2V0IGFjY2VzcyB0byB0aGUgaGVhZGVy
IGNvbnRhaW5pbmcKKyAqIHBsYXRmb3JtIGRhdGEgcHJvcGVydGllcyBldGMuIHdoaWNoIGlzIG5v
dCBwYXJ0IG9mCisgKiB0aGUgZGF0YSBpdHNlbGYgYW5kIGNhbiB0aGVyZWZvcmUgbm90IGJlIGFj
Y2Vzc2VkCisgKiB2aWEgdGhlIHBvaW50ZXIgdGhhdCA8Y29kZT51ZGF0YV9nZXRNZW1vcnkoKTwv
Y29kZT4gcmV0dXJucy4KKyAqCisgKiBAcGFyYW0gcERhdGEgcG9pbnRlciB0byB0aGUgZGF0YSBt
ZW1vcnkgb2JqZWN0CisgKiBAcGFyYW0gcEluZm8gcG9pbnRlciB0byBhIFVEYXRhSW5mbyBvYmpl
Y3Q7CisgKiAgICAgICAgICAgICAgaXRzIDxjb2RlPnNpemU8L2NvZGU+IGZpZWxkIG11c3QgYmUg
c2V0IGNvcnJlY3RseSwKKyAqICAgICAgICAgICAgICB0eXBpY2FsbHkgdG8gPGNvZGU+c2l6ZW9m
KFVEYXRhSW5mbyk8L2NvZGU+LgorICoKKyAqIDxjb2RlPipwSW5mbzwvY29kZT4gd2lsbCBiZSBm
aWxsZWQgd2l0aCB0aGUgVURhdGFJbmZvIHN0cnVjdHVyZQorICogaW4gdGhlIGRhdGEgbWVtb3J5
IG9iamVjdC4gSWYgdGhpcyBzdHJ1Y3R1cmUgaXMgc21hbGxlciB0aGFuCisgKiA8Y29kZT5wSW5m
by0+c2l6ZTwvY29kZT4sIHRoZW4gdGhlIDxjb2RlPnNpemU8L2NvZGU+IHdpbGwgYmUKKyAqIGFk
anVzdGVkIGFuZCBvbmx5IHBhcnQgb2YgdGhlIHN0cnVjdHVyZSB3aWxsIGJlIGZpbGxlZC4KKyAq
IEBzdGFibGUgSUNVIDIuMAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWRhdGFfZ2V0
SW5mbyhVRGF0YU1lbW9yeSAqcERhdGEsIFVEYXRhSW5mbyAqcEluZm8pOworCisvKioKKyAqIFRo
aXMgZnVuY3Rpb24gYnlwYXNzZXMgdGhlIG5vcm1hbCBJQ1UgZGF0YSBsb2FkaW5nIHByb2Nlc3Mg
YW5kCisgKiBhbGxvd3MgeW91IHRvIGZvcmNlIElDVSdzIHN5c3RlbSBkYXRhIHRvIGNvbWUgb3V0
IG9mIGEgdXNlci1zcGVjaWZpZWQKKyAqIGFyZWEgaW4gbWVtb3J5LgorICoKKyAqIElDVSBkYXRh
IG11c3QgYmUgYXQgbGVhc3QgOC1hbGlnbmVkLCBhbmQgc2hvdWxkIGJlIDE2LWFsaWduZWQuCisg
KiBTZWUgaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvaWN1ZGF0YQorICoKKyAqIFRo
ZSBmb3JtYXQgb2YgdGhpcyBkYXRhIGlzIHRoYXQgb2YgdGhlIGljdSBjb21tb24gZGF0YSBmaWxl
LCBhcyBpcworICogZ2VuZXJhdGVkIGJ5IHRoZSBwa2dkYXRhIHRvb2wgd2l0aCBtb2RlPWNvbW1v
biBvciBtb2RlPWRsbC4KKyAqIFlvdSBjYW4gcmVhZCBpbiBhIHdob2xlIGNvbW1vbiBtb2RlIGZp
bGUgYW5kIHBhc3MgdGhlIGFkZHJlc3MgdG8gdGhlIHN0YXJ0IG9mIHRoZQorICogZGF0YSwgb3Ig
KHdpdGggdGhlIGFwcHJvcHJpYXRlIGxpbmsgb3B0aW9ucykgcGFzcyBpbiB0aGUgcG9pbnRlciB0
bworICogdGhlIGRhdGEgdGhhdCBoYXMgYmVlbiBsb2FkZWQgZnJvbSBhIGRsbCBieSB0aGUgb3Bl
cmF0aW5nIHN5c3RlbSwKKyAqIGFzIHNob3duIGluIHRoaXMgY29kZToKKyAqCisgKiAgICAgICBl
eHRlcm4gY29uc3QgY2hhciBVX0lNUE9SVCBVX0lDVURBVEFfRU5UUllfUE9JTlQgW107CisgKiAg
ICAgICAgLy8gVV9JQ1VEQVRBX0VOVFJZX1BPSU5UIGlzIHNhbWUgYXMgZW50cnkgcG9pbnQgc3Bl
Y2lmaWVkIHRvIHBrZ2RhdGEgdG9vbAorICogICAgICAgVUVycm9yQ29kZSAgc3RhdHVzID0gVV9a
RVJPX0VSUk9SOworICoKKyAqICAgICAgIHVkYXRhX3NldENvbW1vbkRhdGEoJlVfSUNVREFUQV9F
TlRSWV9QT0lOVCwgJnN0YXR1cyk7CisgKgorICogSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGRl
Y2xhcmF0aW9uIGJlIGFzIGFib3ZlLiBUaGUgZW50cnkgcG9pbnQKKyAqIG11c3Qgbm90IGJlIGRl
Y2xhcmVkIGFzIGFuIGV4dGVybiB2b2lkKi4KKyAqCisgKiBTdGFydGluZyB3aXRoIElDVSA0LjQs
IGl0IGlzIHBvc3NpYmxlIHRvIHNldCBzZXZlcmFsIGRhdGEgcGFja2FnZXMsCisgKiBvbmUgcGVy
IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KKyAqIHVkYXRhX29wZW4oKSB3aWxsIGxvb2sgZm9yIGRh
dGEgaW4gdGhlIG11bHRpcGxlIGRhdGEgcGFja2FnZXMgaW4gdGhlIG9yZGVyCisgKiBpbiB3aGlj
aCB0aGV5IHdlcmUgc2V0LgorICogVGhlIHBvc2l0aW9uIG9mIHRoZSBsaW5rZWQtaW4gb3IgZGVm
YXVsdC1uYW1lIElDVSAuZGF0YSBwYWNrYWdlIGluIHRoZQorICogc2VhcmNoIGxpc3QgZGVwZW5k
cyBvbiB3aGVuIHRoZSBmaXJzdCBkYXRhIGl0ZW0gaXMgbG9hZGVkIHRoYXQgaXMgbm90IGNvbnRh
aW5lZAorICogaW4gdGhlIGFscmVhZHkgZXhwbGljaXRseSBzZXQgcGFja2FnZXMuCisgKiBJZiBk
YXRhIHdhcyBsb2FkZWQgaW1wbGljaXRseSBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBm
dW5jdGlvbgorICogKGZvciBleGFtcGxlLCB2aWEgb3BlbmluZyBhIGNvbnZlcnRlciwgY29uc3Ry
dWN0aW5nIGEgVW5pY29kZVN0cmluZworICogZnJvbSBkZWZhdWx0LWNvZGVwYWdlIGRhdGEsIHVz
aW5nIGZvcm1hdHRpbmcgb3IgY29sbGF0aW9uIEFQSXMsIGV0Yy4pLAorICogdGhlbiB0aGUgZGVm
YXVsdCBkYXRhIHdpbGwgYmUgZmlyc3QgaW4gdGhlIGxpc3QuCisgKgorICogVGhpcyBmdW5jdGlv
biBoYXMgbm8gZWZmZWN0IG9uIGFwcGxpY2F0aW9uIChub24gSUNVKSBkYXRhLiAgU2VlIHVkYXRh
X3NldEFwcERhdGEoKQorICogZm9yIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBmb3IgYXBwbGljYXRp
b24gZGF0YS4KKyAqCisgKiBAcGFyYW0gZGF0YSBwb2ludGVyIHRvIElDVSBjb21tb24gZGF0YQor
ICogQHBhcmFtIGVyciBvdXRnb2luZyBlcnJvciBzdGF0dXMgPGNvZGU+VV9VU0lOR19ERUZBVUxU
X1dBUk5JTkcsIFVfVU5TVVBQT1JURURfRVJST1I8L2NvZGU+CisgKiBAc3RhYmxlIElDVSAyLjAK
KyAqLworVV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VkYXRhX3NldENvbW1vbkRhdGEoY29uc3Qg
dm9pZCAqZGF0YSwgVUVycm9yQ29kZSAqZXJyKTsKKworCisvKioKKyAqIFRoaXMgZnVuY3Rpb24g
YnlwYXNzZXMgdGhlIG5vcm1hbCBJQ1UgZGF0YSBsb2FkaW5nIHByb2Nlc3MgZm9yIGFwcGxpY2F0
aW9uLXNwZWNpZmljCisgKiBkYXRhIGFuZCBhbGxvd3MgeW91IHRvIGZvcmNlIHRoZSBpdCB0byBj
b21lIG91dCBvZiBhIHVzZXItc3BlY2lmaWVkCisgKiBwb2ludGVyLgorICoKKyAqIElDVSBkYXRh
IG11c3QgYmUgYXQgbGVhc3QgOC1hbGlnbmVkLCBhbmQgc2hvdWxkIGJlIDE2LWFsaWduZWQuCisg
KiBTZWUgaHR0cDovL3VzZXJndWlkZS5pY3UtcHJvamVjdC5vcmcvaWN1ZGF0YQorICoKKyAqIFRo
ZSBmb3JtYXQgb2YgdGhpcyBkYXRhIGlzIHRoYXQgb2YgdGhlIGljdSBjb21tb24gZGF0YSBmaWxl
LCBsaWtlICdpY3VkdDI2bC5kYXQnCisgKiBvciB0aGUgY29ycmVzcG9uZGluZyBzaGFyZWQgbGli
cmFyeSAoRExMKSBmaWxlLgorICogVGhlIGFwcGxpY2F0aW9uIG11c3QgcmVhZCBpbiBvciBvdGhl
cndpc2UgY29uc3RydWN0IGFuIGltYWdlIG9mIHRoZSBkYXRhIGFuZCB0aGVuCisgKiBwYXNzIHRo
ZSBhZGRyZXNzIG9mIGl0IHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICoKKyAqIFdhcm5pbmc6ICBz
ZXRBcHBEYXRhIHdpbGwgc2V0IGEgVV9VU0lOR19ERUZBVUxUX1dBUk5JTkcgY29kZSBpZgorICog
ICAgICAgICAgIGRhdGEgd2l0aCB0aGUgc3BlY2lmZWQgcGF0aCB0aGF0IGhhcyBhbHJlYWR5IGJl
ZW4gb3BlbmVkLCBvcgorICogICAgICAgICAgIGlmIHNldEFwcERhdGEgd2l0aCB0aGUgc2FtZSBw
YXRoIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLgorICogICAgICAgICAgIEFueSBzdWNoIGNhbGxz
IHRvIHNldEFwcERhdGEgd2lsbCBoYXZlIG5vIGVmZmVjdC4KKyAqCisgKgorICogQHBhcmFtIHBh
Y2thZ2VOYW1lIHRoZSBwYWNrYWdlIG5hbWUgYnkgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIHdpbGwg
cmVmZXIKKyAqICAgICAgICAgICAgIHRvIChvcGVuKSB0aGlzIGRhdGEKKyAqIEBwYXJhbSBkYXRh
IHBvaW50ZXIgdG8gdGhlIGRhdGEKKyAqIEBwYXJhbSBlcnIgb3V0Z29pbmcgZXJyb3Igc3RhdHVz
IDxjb2RlPlVfVVNJTkdfREVGQVVMVF9XQVJOSU5HLCBVX1VOU1VQUE9SVEVEX0VSUk9SPC9jb2Rl
PgorICogQHNlZSB1ZGF0YV9zZXRDb21tb25EYXRhCisgKiBAc3RhYmxlIElDVSAyLjAKKyAqLwor
VV9TVEFCTEUgdm9pZCBVX0VYUE9SVDIKK3VkYXRhX3NldEFwcERhdGEoY29uc3QgY2hhciAqcGFj
a2FnZU5hbWUsIGNvbnN0IHZvaWQgKmRhdGEsIFVFcnJvckNvZGUgKmVycik7CisKKy8qKgorICog
UG9zc2libGUgc2V0dGluZ3MgZm9yIHVkYXRhX3NldEZpbGVBY2Nlc3MoKQorICogQHNlZSB1ZGF0
YV9zZXRGaWxlQWNjZXNzCisgKiBAc3RhYmxlIElDVSAzLjQKKyAqLwordHlwZWRlZiBlbnVtIFVE
YXRhRmlsZUFjY2VzcyB7CisgICAgLyoqIElDVSBsb29rcyBmb3IgZGF0YSBpbiBzaW5nbGUgZmls
ZXMgZmlyc3QsIHRoZW4gaW4gcGFja2FnZXMuIChkZWZhdWx0KSBAc3RhYmxlIElDVSAzLjQgKi8K
KyAgICBVREFUQV9GSUxFU19GSVJTVCwKKyAgICAvKiogQW4gYWxpYXMgZm9yIHRoZSBkZWZhdWx0
IGFjY2VzcyBtb2RlLiBAc3RhYmxlIElDVSAzLjQgKi8KKyAgICBVREFUQV9ERUZBVUxUX0FDQ0VT
UyA9IFVEQVRBX0ZJTEVTX0ZJUlNULAorICAgIC8qKiBJQ1Ugb25seSBsb2FkcyBkYXRhIGZyb20g
cGFja2FnZXMsIG5vdCBmcm9tIHNpbmdsZSBmaWxlcy4gQHN0YWJsZSBJQ1UgMy40ICovCisgICAg
VURBVEFfT05MWV9QQUNLQUdFUywKKyAgICAvKiogSUNVIGxvYWRzIGRhdGEgZnJvbSBwYWNrYWdl
cyBmaXJzdCwgYW5kIG9ubHkgZnJvbSBzaW5nbGUgZmlsZXMKKyAgICAgICAgaWYgdGhlIGRhdGEg
Y2Fubm90IGJlIGZvdW5kIGluIGEgcGFja2FnZS4gQHN0YWJsZSBJQ1UgMy40ICovCisgICAgVURB
VEFfUEFDS0FHRVNfRklSU1QsCisgICAgLyoqIElDVSBkb2VzIG5vdCBhY2Nlc3MgdGhlIGZpbGUg
c3lzdGVtIGZvciBkYXRhIGxvYWRpbmcuIEBzdGFibGUgSUNVIDMuNCAqLworICAgIFVEQVRBX05P
X0ZJTEVTLAorICAgIC8qKiBOdW1iZXIgb2YgcmVhbCBVRGF0YUZpbGVBY2Nlc3MgdmFsdWVzLiBA
c3RhYmxlIElDVSAzLjQgKi8KKyAgICBVREFUQV9GSUxFX0FDQ0VTU19DT1VOVAorfSBVRGF0YUZp
bGVBY2Nlc3M7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHRvIGNvbnRy
b2wgaG93IElDVSBsb2FkcyBkYXRhLiBJdCBtdXN0IGJlIGNhbGxlZAorICogYmVmb3JlIGFueSBJ
Q1UgZGF0YSBpcyBsb2FkZWQsIGluY2x1ZGluZyBhcHBsaWNhdGlvbiBkYXRhIGxvYWRlZCB3aXRo
IAorICogdXJlcy9SZXNvdXJjZUJ1bmRsZSBvciB1ZGF0YSBBUElzLiBUaGlzIGZ1bmN0aW9uIGlz
IG5vdCBtdWx0aXRocmVhZCBzYWZlLiAgCisgKiBUaGUgcmVzdWx0cyBvZiBjYWxsaW5nIGl0IHdo
aWxlIG90aGVyIHRocmVhZHMgYXJlIGxvYWRpbmcgZGF0YSBhcmUgdW5kZWZpbmVkLgorICogQHBh
cmFtIGFjY2VzcyBUaGUgdHlwZSBvZiBmaWxlIGFjY2VzcyB0byBiZSB1c2VkCisgKiBAcGFyYW0g
c3RhdHVzIEVycm9yIGNvZGUuCisgKiBAc2VlIFVEYXRhRmlsZUFjY2VzcworICogQHN0YWJsZSBJ
Q1UgMy40IAorICovCitVX1NUQUJMRSB2b2lkIFVfRVhQT1JUMgordWRhdGFfc2V0RmlsZUFjY2Vz
cyhVRGF0YUZpbGVBY2Nlc3MgYWNjZXNzLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCitVX0NERUNM
X0VORAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdW1pc2Mu
aCBiL1NvdXJjZS9XVEYvaWN1L3VuaWNvZGUvdW1pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kODU0NTFmYzc2
N2MwNTgzNWY2YzE1ZjU2NmYzNTYyZTJkNGFmODM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dURi9pY3UvdW5pY29kZS91bWlzYy5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCisqICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIEludGVybmF0aW9uYWwgQnVzaW5lc3Mg
TWFjaGluZXMKKyogICBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiAgQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKKyogICBmaWxlIG5hbWU6ICB1bWlzYy5oCisqICAgZW5jb2Rpbmc6
ICAgVVMtQVNDSUkKKyogICB0YWIgc2l6ZTogICA4IChub3QgdXNlZCkKKyogICBpbmRlbnRhdGlv
bjo0CisqCisqICAgY3JlYXRlZCBvbjogMTk5OW9jdDE1CisqICAgY3JlYXRlZCBieTogTWFya3Vz
IFcuIFNjaGVyZXIKKyovCisKKyNpZm5kZWYgVU1JU0NfSAorI2RlZmluZSBVTUlTQ19ICisKKyNp
bmNsdWRlICJ1bmljb2RlL3V0eXBlcy5oIgorCisvKioKKyAqIFxmaWxlCisgKiBcYnJpZWYgIEMg
QVBJOm1pc2MgZGVmaW5pdGlvbnMgCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyBtaXNjZWxs
YW5lb3VzIGRlZmluaXRpb25zIGZvciB0aGUgQyBBUElzLiAKKyAqLworCitVX0NERUNMX0JFR0lO
CisKKy8qKiBBIHN0cnVjdCByZXByZXNlbnRpbmcgYSByYW5nZSBvZiB0ZXh0IGNvbnRhaW5pbmcg
YSBzcGVjaWZpYyBmaWVsZCAKKyAqICBAc3RhYmxlIElDVSAyLjAKKyAqLwordHlwZWRlZiBzdHJ1
Y3QgVUZpZWxkUG9zaXRpb24geworICAvKioKKyAgICogVGhlIGZpZWxkIAorICAgKiBAc3RhYmxl
IElDVSAyLjAKKyAgICovCisgIGludDMyX3QgZmllbGQ7CisgIC8qKgorICAgKiBUaGUgc3RhcnQg
b2YgdGhlIHRleHQgcmFuZ2UgY29udGFpbmluZyBmaWVsZCAKKyAgICogQHN0YWJsZSBJQ1UgMi4w
CisgICAqLworICBpbnQzMl90IGJlZ2luSW5kZXg7CisgIC8qKiAKKyAgICogVGhlIGxpbWl0IG9m
IHRoZSB0ZXh0IHJhbmdlIGNvbnRhaW5pbmcgZmllbGQgCisgICAqIEBzdGFibGUgSUNVIDIuMAor
ICAgKi8KKyAgaW50MzJfdCBlbmRJbmRleDsKK30gVUZpZWxkUG9zaXRpb247CisKKyNpZiAhVUNP
TkZJR19OT19TRVJWSUNFCisvKioKKyAqIE9wYXF1ZSB0eXBlIHJldHVybmVkIGJ5IHJlZ2lzdGVy
SW5zdGFuY2UsIHJlZ2lzdGVyRmFjdG9yeSBhbmQgdW5yZWdpc3RlciBmb3Igc2VydmljZSByZWdp
c3RyYXRpb24uCisgKiBAc3RhYmxlIElDVSAyLjYKKyAqLwordHlwZWRlZiBjb25zdCB2b2lkKiBV
UmVnaXN0cnlLZXk7CisjZW5kaWYKKworVV9DREVDTF9FTkQKKworI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>