<?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>154976</bug_id>
          
          <creation_ts>2016-03-03 10:58:28 -0800</creation_ts>
          <short_desc>AX: Implement bounds/position and index related text marker functions using TextIterator</short_desc>
          <delta_ts>2016-03-10 21:02:26 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155346</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>bshafiei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>n_wang</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170285</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-03 10:58:28 -0800</bug_when>
    <thetext>Improve accessibility text navigation
Change the bounds/position and index related text marker calls to use TextIterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170286</commentid>
    <comment_count>1</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-03 10:58:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/24269521&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170531</commentid>
    <comment_count>2</comment_count>
      <attachid>272834</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-03 22:46:34 -0800</bug_when>
    <thetext>Created attachment 272834
patch

Initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171823</commentid>
    <comment_count>3</comment_count>
      <attachid>272834</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-03-07 16:04:02 -0800</bug_when>
    <thetext>Comment on attachment 272834
patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        VoiceOver navigation issue.

issues.

what are those issues?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2329
&gt; +    InlineBox* inlineBox;

initialize to nullptr just in case the getInlineBox doesn&apos;t do it

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1967
&gt; +    LayoutRect ourrect = rect1;

ourRect

&gt; LayoutTests/ChangeLog:8
&gt; +        * accessibility/mac/text-marker-for-index-expected.txt: Added.

do you have test for textMarkerForPosition, line navigation and text marker bounds?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171830</commentid>
    <comment_count>4</comment_count>
      <attachid>272834</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-07 16:14:41 -0800</bug_when>
    <thetext>Comment on attachment 272834
patch

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

&gt;&gt; Source/WebCore/ChangeLog:9
&gt;&gt; +        VoiceOver navigation issue.
&gt; 
&gt; issues.
&gt; 
&gt; what are those issues?

Like word boundary for multilanguage, left/right word should consider the space at node boundary, nextCharacterOffset should match VisiblePosition behavior. These are all covered in modified tests.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2329
&gt;&gt; +    InlineBox* inlineBox;
&gt; 
&gt; initialize to nullptr just in case the getInlineBox doesn&apos;t do it

Ok.

&gt;&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1967
&gt;&gt; +    LayoutRect ourrect = rect1;
&gt; 
&gt; ourRect

Ok

&gt;&gt; LayoutTests/ChangeLog:8
&gt;&gt; +        * accessibility/mac/text-marker-for-index-expected.txt: Added.
&gt; 
&gt; do you have test for textMarkerForPosition, line navigation and text marker bounds?

Position and bounds are covered by existing tests. Line navigation has not been implemented yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171884</commentid>
    <comment_count>5</comment_count>
      <attachid>273256</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-07 18:31:23 -0800</bug_when>
    <thetext>Created attachment 273256
patch

review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172787</commentid>
    <comment_count>6</comment_count>
      <attachid>273256</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-03-09 14:45:49 -0800</bug_when>
    <thetext>Comment on attachment 273256
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2352
&gt; +    RenderObject* renderer;

i would initialize this to nullptr just to be safe

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2374
&gt; +

extra line not necessary

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3983
&gt; +            IntRect webCoreRect = [self screenToContents:enclosingIntRect(rect)];

this is the same exact code for StartText and EndText... is that correct? if so can we combine

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:4064
&gt; +        if (!cache)

it feels like we should put

AXObjectCache* cache = m_object-&gt;axObjectCache();
 4064        if (!cache)

near the top of this accessibilityAttributeValue: method so that we don&apos;t have to do all these checks

if an object does not have a cache it seems OK to return nil values for it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172790</commentid>
    <comment_count>7</comment_count>
      <attachid>273256</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-09 14:50:46 -0800</bug_when>
    <thetext>Comment on attachment 273256
patch

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

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:3983
&gt;&gt; +            IntRect webCoreRect = [self screenToContents:enclosingIntRect(rect)];
&gt; 
&gt; this is the same exact code for StartText and EndText... is that correct? if so can we combine

cache-&gt;characterOffsetForBounds(webCoreRect, true) has a boolean parameter to check if it&apos;s start or end.

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:4064
&gt;&gt; +        if (!cache)
&gt; 
&gt; it feels like we should put
&gt; 
&gt; AXObjectCache* cache = m_object-&gt;axObjectCache();
&gt;  4064        if (!cache)
&gt; 
&gt; near the top of this accessibilityAttributeValue: method so that we don&apos;t have to do all these checks
&gt; 
&gt; if an object does not have a cache it seems OK to return nil values for it

Ok, I&apos;ll double check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173491</commentid>
    <comment_count>8</comment_count>
      <attachid>273659</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-10 17:33:36 -0800</bug_when>
    <thetext>Created attachment 273659
patch

Moved axObjectCache() check to the top of accessibilityAttributeValue: method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173511</commentid>
    <comment_count>9</comment_count>
      <attachid>273659</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-10 18:37:35 -0800</bug_when>
    <thetext>Comment on attachment 273659
patch

Clearing flags on attachment: 273659

Committed r197982: &lt;http://trac.webkit.org/changeset/197982&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173553</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-03-10 20:14:10 -0800</bug_when>
    <thetext>This broke Windows build, please fix ASAP. 

In the future, please always wait for EWS to finish before landing WebKit patches.

C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/PassRefPtr.h(42): error C2027: use of undefined type &apos;WebCore::Range&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp) [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
  C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\dom\Position.h(43): note: see declaration of &apos;WebCore::Range&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp)
  C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/RefPtr.h(59): note: see reference to function template instantiation &apos;void WTF::derefIfNotNull&lt;T&gt;(T *)&apos; being compiled
          with
          [
              T=WebCore::Range
          ] (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp)
  C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/RefPtr.h(59): note: while compiling class template member function &apos;WTF::RefPtr&lt;WebCore::Range&gt;::~RefPtr(void)&apos; (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp)
  C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\AccessibilityObject.h(844): note: see reference to function template instantiation &apos;WTF::RefPtr&lt;WebCore::Range&gt;::~RefPtr(void)&apos; being compiled (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp)
  C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\AccessibilityObject.h(844): note: see reference to class template instantiation &apos;WTF::RefPtr&lt;WebCore::Range&gt;&apos; being compiled (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp)
C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\wtf/PassRefPtr.h(42): error C2227: left of &apos;-&gt;deref&apos; must point to class/struct/union/generic type (compiling source file C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\accessibility\win\AccessibilityObjectWin.cpp) [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173576</commentid>
    <comment_count>11</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-03-10 21:02:26 -0800</bug_when>
    <thetext>I was planning to rollout the patch. Seems this has been fixed in https://trac.webkit.org/changeset/197991

Thanks, will pay attention of this kind of build issues in the future.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272834</attachid>
            <date>2016-03-03 22:46:34 -0800</date>
            <delta_ts>2016-03-07 18:31:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>48513</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzU0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDE2LTAzLTAzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBib3VuZHMvcG9z
aXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHVzaW5nIFRleHRJ
dGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50ZWQgcG9zaXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgY2FsbHMg
d2l0aCBUZXh0SXRlcmF0b3IuIEFsc28gZml4ZWQgc29tZSAKKyAgICAgICAgVm9pY2VPdmVyIG5h
dmlnYXRpb24gaXNzdWUuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1t
YXJrZXItZm9yLWluZGV4Lmh0bWwKKyAgICAgICAgQm91bmRzIGNoYW5nZXMgYXJlIGNvdmVyZWQg
aW4gZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUb09mZnNl
dEluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuZENo
YXJhY3Rlck9mZnNldEZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
OnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnNob3VsZFNraXBCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvck5leHRDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bmV4dEJvdW5kYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6cHJldmlvdXNTZW50ZW5jZVN0YXJ0Q2hhcmFjdGVyT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hh
cmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFic29sdXRl
Q2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9mZnNldE9mTGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mTGluZSk6CisgICAgICAg
IChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjppbmRleEZvckNoYXJhY3Rlck9mZnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQpOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6bGluZVJhbmdlRm9yUG9zaXRp
b24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0
aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6Ym91bmRz
Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0U2Vs
ZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpkb0FYU3RyaW5nRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bm9kZUlzVGV4
dENvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Ym91bmRzRm9yUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRp
b25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpk
b0FYQm91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdl
TWFwSGl0VGVzdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyIHBvc2l0aW9uRm9yVGV4dE1hcmtlcjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbl0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyRm9yUG9zaXRpb246
XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF9zdHJpbmdGb3JS
YW5nZTphdHRyaWJ1dGVkOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBmcmFtZUZvclRleHRNYXJrZXJzOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyRm9yUG9pbnQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIG5leHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRvQVhBdHRy
aWJ1dGVkU3RyaW5nRm9yUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyIF9jb252ZXJ0VG9OU1JhbmdlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfdGV4dE1hcmtlckZvckluZGV4Ol0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bG9jYWxDYXJldFJlY3RJblJlbmRlcmVyRm9yQ2FyZXRQYWlu
dGluZyk6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JSZWN0
KToKKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmg6CisKIDIwMTYtMDMtMDMgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIxOTY3NzAp
OiBVbmFibGUgdG8gdXNlIEhpcENoYXQgTWFjIGFwcApJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiAxOTc0NjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAxLDggKzE1MDEsOSBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6
dHJhdmVyc2VUCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGNoaWxkTm9k
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlcGxhY2VkTm9kZU9yQlIgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2RlICE9IHByZXZpb3VzTm9k
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHNldCB0aGUgY3VycmVu
dE5vZGUgdG8gcHJldmlvdXMgb25lIGluIGNhc2UgdGhpcyBpcyB0aGUgbGFzdCBpdGVyYXRpb24u
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHByZXZpb3VzTm9kZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBzZXQgdGhlIHN0YXJ0IG9mZnNldCBh
bmQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBub2RlIGluIGNhc2UgdGhpcyBpcyB0aGUgbGFzdCBp
dGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSAxOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KQEAgLTE2OTAsNiArMTY5MSwxMCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6
c3RhcnRPckVuCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNl
dCgpOwogICAgIAorICAgIC8vIFdoZW4gZ2V0dGluZyB0aGUgZW5kIENoYXJhY3Rlck9mZnNldCBh
dCBub2RlIGJvdW5kYXJ5LCB3ZSBkb24ndCB3YW50IHRvIGNvbGxhcHNlIHRvIHRoZSBwcmV2aW91
cyBub2RlLgorICAgIGlmICghaXNTdGFydCAmJiAhcmFuZ2UtPmVuZE9mZnNldCgpKQorICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChyYW5nZS0+ZW5kQ29udGFp
bmVyKCksIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAKICAgICAvLyBJZiBp
dCdzIGVuZCB0ZXh0IG1hcmtlciwgd2Ugd2FudCB0byBnbyB0byB0aGUgZW5kIG9mIHRoZSByYW5n
ZSwgYW5kIHN0YXkgd2l0aGluIHRoZSByYW5nZS4KICAgICBib29sIHN0YXlXaXRoaW5SYW5nZSA9
ICFpc1N0YXJ0OwogICAgIApAQCAtMTc3MCwxMiArMTc3NSwzNSBAQCB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhCiAgICAgc2V0VGV4dE1hcmtlckRhdGFXaXRoQ2hhcmFj
dGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOwogfQogCitib29sIEFY
T2JqZWN0Q2FjaGU6OnNob3VsZFNraXBCb3VuZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIHBy
ZXZpb3VzLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIG5leHQpCit7CisgICAgLy8gTWF0Y2ggdGhl
IGJlaGF2aW9yIG9mIFZpc2libGVQb3NpdGlvbiwgd2Ugc2hvdWxkIHNraXAgdGhlIG5vZGUgYm91
bmRhcnkgd2hlbiB0aGVyZSdzIG5vIHZpc3VhbCBzcGFjZSBvciBuZXcgbGluZSBjaGFyYWN0ZXIu
CisgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IG5leHQuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocHJldmlvdXMubm9kZSA9PSBuZXh0Lm5vZGUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobmV4dC5zdGFydEluZGV4ID4gMCB8
fCBuZXh0Lm9mZnNldCA+IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBDaGFy
YWN0ZXJPZmZzZXQgbmV3TGluZSA9IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKG5leHQpOwor
ICAgIGlmIChuZXh0LmlzRXF1YWwobmV3TGluZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKIHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1h
cmtlckRhdGFGb3JOZXh0Q2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2Vy
RGF0YSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAgICAgQ2hh
cmFjdGVyT2Zmc2V0IG5leHQgPSBjaGFyYWN0ZXJPZmZzZXQ7CisgICAgQ2hhcmFjdGVyT2Zmc2V0
IHByZXZpb3VzID0gY2hhcmFjdGVyT2Zmc2V0OwogICAgIGRvIHsKICAgICAgICAgbmV4dCA9IG5l
eHRDaGFyYWN0ZXJPZmZzZXQobmV4dCwgZmFsc2UpOworICAgICAgICBpZiAoc2hvdWxkU2tpcEJv
dW5kYXJ5KHByZXZpb3VzLCBuZXh0KSkKKyAgICAgICAgICAgIG5leHQgPSBuZXh0Q2hhcmFjdGVy
T2Zmc2V0KG5leHQsIGZhbHNlKTsKICAgICAgICAgdGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJP
ZmZzZXQodGV4dE1hcmtlckRhdGEsIG5leHQpOworICAgICAgICBwcmV2aW91cyA9IG5leHQ7CiAg
ICAgfSB3aGlsZSAodGV4dE1hcmtlckRhdGEuaWdub3JlZCk7CiB9CiAKQEAgLTE5NTMsNyArMTk4
MSwxMCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyCiAgICAgICAg
IGlmIChjLmlzRXF1YWwoZW5kT2ZQYXJhZ3JhcGgpKQogICAgICAgICAgICAgcmV0dXJuIGM7CiAg
ICAgICAgIAotICAgICAgICBjID0gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQp
OworICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUgYm91bmRhcnkgdGhhdCBz
cGxpdHMgd29yZHMuIE90aGVyd2lzZSBWb2ljZU92ZXIgd29uJ3Qgc2VlIGl0IGFzIHNwYWNlLgor
ICAgICAgICBjID0gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZhbHNlKTsK
KyAgICAgICAgaWYgKHNob3VsZFNraXBCb3VuZGFyeShjaGFyYWN0ZXJPZmZzZXQsIGMpKQorICAg
ICAgICAgICAgYyA9IG5leHRDaGFyYWN0ZXJPZmZzZXQoYywgZmFsc2UpOwogICAgICAgICBpZiAo
Yy5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXQ7CiAgICAgfQpA
QCAtMjEwMSw2ICsyMTMyLDEwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0
Qm91bmQKICAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCiAgICAg
ICAgIHJldHVybiBlbmQ7CiAgICAgCisgICAgLy8gV2Ugc2hvdWxkIGNvbnNpZGVyIHRoZSBub2Rl
IGJvdW5kYXJ5IHRoYXQgc3BsaXRzIHdvcmRzLgorICAgIGlmIChzZWFyY2hGdW5jdGlvbiA9PSBl
bmRXb3JkQm91bmRhcnkgJiYgbmV4dCAtIHByZWZpeExlbmd0aCA9PSAxKQorICAgICAgICByZXR1
cm4gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZhbHNlKTsKKyAgICAKICAg
ICAvLyBUaGUgZW5kU2VudGVuY2VCb3VuZGFyeSBmdW5jdGlvbiB3aWxsIGluY2x1ZGUgYSBsaW5l
IGJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIHNlbnRlbmNlLgogICAgIGlmIChzZWFyY2hGdW5jdGlv
biA9PSBlbmRTZW50ZW5jZUJvdW5kYXJ5ICYmIHN0cmluZ1tuZXh0IC0gMV0gPT0gJ1xuJykKICAg
ICAgICAgbmV4dC0tOwpAQCAtMjE1NSw3ICsyMTkwLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2Jq
ZWN0Q2FjaGU6OnByZXZpb3VzQgogICAgIAogICAgIGludCBjaGFyYWN0ZXJDb3VudCA9IGNoYXJh
Y3Rlck9mZnNldC5vZmZzZXQgLSAoc3RyaW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCAtIG5leHQp
OwogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZ28gdG8gdGhlIHByZXZpb3VzIG5vZGUgaWYgdGhl
IG5vZGUgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGxpbmUuCi0gICAgaWYgKGNoYXJhY3RlckNv
dW50IDwgMCAmJiAoY2hhcmFjdGVyT2Zmc2V0Tm9kZUlzQlIoY2hhcmFjdGVyT2Zmc2V0KSB8fCBz
dHJpbmdbc3RyaW5nLnNpemUoKSAtIDFdID09ICdcbicpKQorICAgIGlmIChjaGFyYWN0ZXJDb3Vu
dCA8IDAgJiYgKGNoYXJhY3Rlck9mZnNldE5vZGVJc0JSKGNoYXJhY3Rlck9mZnNldCkgfHwgc3Ry
aW5nW3N0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSAxXSA9PSAnXG4nKSkKICAgICAgICAg
Y2hhcmFjdGVyQ291bnQgPSAwOwogICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5k
T2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyQ291bnQsIFRyYXZlcnNlT3B0
aW9uSW5jbHVkZVN0YXJ0KTsKIH0KQEAgLTIyNzgsNiArMjMxMywxMzQgQEAgQ2hhcmFjdGVyT2Zm
c2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzUwogICAgIHJldHVybiBzdGFydENoYXJhY3Rlck9m
ZnNldE9mU2VudGVuY2UocHJldmlvdXMpOwogfQogCitMYXlvdXRSZWN0IEFYT2JqZWN0Q2FjaGU6
OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFJlbmRlck9iamVjdComIHJlbmRlcmVy
LCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKK3sKKyAgICBpZiAoY2hh
cmFjdGVyT2Zmc2V0LmlzTnVsbCgpKSB7CisgICAgICAgIHJlbmRlcmVyID0gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogbm9kZSA9IGNo
YXJhY3Rlck9mZnNldC5ub2RlOworICAgIAorICAgIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOworICAg
IAorICAgIElubGluZUJveCogaW5saW5lQm94OworICAgIGludCBjYXJldE9mZnNldDsKKyAgICAv
LyBVc2UgYSBjb2xsYXBzZWQgcmFuZ2UgdG8gZ2V0IHRoZSBwb3NpdGlvbi4KKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rl
ck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0g
cmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBzdGFydFBvc2l0aW9uLmdldElubGluZUJveEFu
ZE9mZnNldChET1dOU1RSRUFNLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICAKKyAgICBp
ZiAoaW5saW5lQm94KQorICAgICAgICByZW5kZXJlciA9ICZpbmxpbmVCb3gtPnJlbmRlcmVyKCk7
CisgICAgCisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gsIGNh
cmV0T2Zmc2V0KTsKK30KKworSW50UmVjdCBBWE9iamVjdENhY2hlOjphYnNvbHV0ZUNhcmV0Qm91
bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zm
c2V0KQoreworICAgIFJlbmRlckJsb2NrKiBjYXJldFBhaW50ZXIgPSBudWxscHRyOworICAgIAor
ICAgIC8vIEZpcnN0IGNvbXB1dGUgYSByZWN0IGxvY2FsIHRvIHRoZSByZW5kZXJlciBhdCB0aGUg
c2VsZWN0aW9uIHN0YXJ0LgorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7CisgICAgTGF5b3V0
UmVjdCBsb2NhbFJlY3QgPSBsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChyZW5kZXJl
ciwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICAKKyAgICBsb2NhbFJlY3QgPSBsb2NhbENhcmV0UmVj
dEluUmVuZGVyZXJGb3JSZWN0KGxvY2FsUmVjdCwgY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIHJlbmRl
cmVyLCBjYXJldFBhaW50ZXIpOworICAgIHJldHVybiBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2Fy
ZXRSZWN0KGNhcmV0UGFpbnRlciwgbG9jYWxSZWN0KTsKK30KKworQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50ICZwb2lu
dCwgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQoreworICAgIGlmICghb2JqKQorICAgICAgICBy
ZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIHZwID0g
b2JqLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7CisgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IG1ha2VSYW5nZSh2cCwgdnApOworICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIHRydWUpOworfQorCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQgJnBvaW50KQor
eworICAgIFJlZlB0cjxSYW5nZT4gY2FyZXRSYW5nZSA9IG1fZG9jdW1lbnQuY2FyZXRSYW5nZUZy
b21Qb2ludChMYXlvdXRQb2ludChwb2ludCkpOworICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFj
dGVyT2Zmc2V0Rm9yUmFuZ2UoY2FyZXRSYW5nZSwgdHJ1ZSk7Cit9CisKKworQ2hhcmFjdGVyT2Zm
c2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckJvdW5kcyhjb25zdCBJbnRSZWN0
JiByZWN0LCBib29sIGZpcnN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAgIEludFBvaW50IGNvcm5lciA9IGZp
cnN0ID8gcmVjdC5taW5YTWluWUNvcm5lcigpIDogcmVjdC5tYXhYTWF4WUNvcm5lcigpOworICAg
IENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JQb2lu
dChjb3JuZXIpOworICAgIAorICAgIGlmIChyZWN0LmNvbnRhaW5zKGFic29sdXRlQ2FyZXRCb3Vu
ZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KS5jZW50ZXIoKSkpCisgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJPZmZzZXQ7CisgICAgCisgICAgLy8gSWYgdGhlIGluaXRpYWwgcG9z
aXRpb24gaXMgbG9jYXRlZCBvdXRzaWRlIHRoZSBib3VuZHMgYWRqdXN0IGl0IGluY3JlbWVudGFs
bHkgYXMgbmVlZGVkLgorICAgIENoYXJhY3Rlck9mZnNldCBuZXh0Q2hhck9mZnNldCA9IG5leHRD
aGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSk7CisgICAgQ2hhcmFjdGVyT2Zm
c2V0IHByZXZpb3VzQ2hhck9mZnNldCA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rl
ck9mZnNldCwgZmFsc2UpOworICAgIHdoaWxlICghbmV4dENoYXJPZmZzZXQuaXNOdWxsKCkgfHwg
IXByZXZpb3VzQ2hhck9mZnNldC5pc051bGwoKSkgeworICAgICAgICBpZiAocmVjdC5jb250YWlu
cyhhYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KG5leHRDaGFyT2Zmc2V0KS5j
ZW50ZXIoKSkpCisgICAgICAgICAgICByZXR1cm4gbmV4dENoYXJPZmZzZXQ7CisgICAgICAgIGlm
IChyZWN0LmNvbnRhaW5zKGFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQocHJl
dmlvdXNDaGFyT2Zmc2V0KS5jZW50ZXIoKSkpCisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXND
aGFyT2Zmc2V0OworICAgICAgICAKKyAgICAgICAgbmV4dENoYXJPZmZzZXQgPSBuZXh0Q2hhcmFj
dGVyT2Zmc2V0KG5leHRDaGFyT2Zmc2V0LCBmYWxzZSk7CisgICAgICAgIHByZXZpb3VzQ2hhck9m
ZnNldCA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KHByZXZpb3VzQ2hhck9mZnNldCwgZmFsc2Up
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7Cit9CisKKy8vIEZJ
WE1FOiBSZW1vdmUgVmlzaWJsZVBvc2l0aW9uIGNvZGUgYWZ0ZXIgaW1wbGVtZW50aW5nIHRoaXMg
dXNpbmcgQ2hhcmFjdGVyT2Zmc2V0LgorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmVu
ZENoYXJhY3Rlck9mZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9m
ZnNldCkKK3sKKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0LmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIHZwID0gdmlz
aWJsZVBvc2l0aW9uRnJvbUNoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgIFZp
c2libGVQb3NpdGlvbiBlbmRMaW5lID0gZW5kT2ZMaW5lKHZwKTsKKyAgICAKKyAgICByZXR1cm4g
Y2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbihlbmRMaW5lKTsKK30KKworQ2hhcmFj
dGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKGNvbnN0
IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQoreworICAgIGlmIChjaGFyYWN0ZXJP
ZmZzZXQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAgICAK
KyAgICBWaXNpYmxlUG9zaXRpb24gdnAgPSB2aXNpYmxlUG9zaXRpb25Gcm9tQ2hhcmFjdGVyT2Zm
c2V0KGNoYXJhY3Rlck9mZnNldCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0TGluZSA9IHN0
YXJ0T2ZMaW5lKHZwKTsKKyAgICAKKyAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2li
bGVQb3NpdGlvbihzdGFydExpbmUpOworfQorCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNo
ZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50IGluZGV4LCBjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmopCit7CisgICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJP
ZmZzZXQoKTsKKyAgICAKKyAgICAvLyBTaW5jZSB0aGlzIHdvdWxkIG9ubHkgd29yayBvbiByZW5k
ZXJlZCBub2RlcywgdXNpbmcgVmlzaWJsZVBvc2l0aW9uIHRvIGNyZWF0ZSBhIGNvbGxhcHNlZAor
ICAgIC8vIHJhbmdlIHNob3VsZCBiZSBmaW5lLgorICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IG9i
ai0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW5kZXgpOworICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtYWtlUmFuZ2UodnAsIHZwKTsKKyAgICAKKyAgICByZXR1cm4gc3RhcnRPckVuZENoYXJh
Y3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKK30KKworaW50IEFYT2JqZWN0Q2FjaGU6
OmluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0LCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmopCit7CisgICAgLy8gQ3JlYXRlIGEgY29s
bGFwc2VkIHJhbmdlIHNvIHRoYXQgd2UgY2FuIGdldCB0aGUgVmlzaWJsZVBvc2l0aW9uIGZyb20g
aXQuCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVy
T2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgaWYgKCFyYW5n
ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZwID0gcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKTsKKyAgICByZXR1cm4gb2JqLT5pbmRleEZvclZpc2libGVQb3NpdGlvbih2
cCk7Cit9CisKIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxl
bWVudChjb25zdCBOb2RlKiBub2RlKQogewogICAgIGNvbnN0IEVsZW1lbnQqIHJlc3VsdCA9IG5v
ZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiAxOTc0NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAw
LDYgKzIwMCw3IEBAIHB1YmxpYzoKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dENoYXJhY3Rlck9m
ZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBib29sIGlnbm9yZU5leHROb2RlU3RhcnQgPSB0
cnVlKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiwgYm9vbCBpZ25vcmVQcmV2aW91c05vZGVFbmQgPSB0cnVlKTsKICAg
ICB2b2lkIHN0YXJ0T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdlKFRleHRNYXJrZXJEYXRhJiwg
UmVmUHRyPFJhbmdlPiwgYm9vbCk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0T3JFbmRDaGFy
YWN0ZXJPZmZzZXRGb3JSYW5nZShSZWZQdHI8UmFuZ2U+LCBib29sKTsKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlckRhdGEoVGV4dE1hcmtl
ckRhdGEmKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0cyhjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAg
ICBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUZvck5vZGVDb250ZW50cyhOb2RlKik7CkBAIC0y
MjAsNiArMjIxLDE5IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlRm9yQ2hh
cmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNl
dCBuZXh0U2VudGVuY2VFbmRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7
CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzU2VudGVuY2VTdGFydENoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAgICAKKyAgICAvLyBCb3VuZHMKKyAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmLCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Kik7CisgICAgSW50UmVjdCBhYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hh
cmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIENoYXJhY3Rlck9mZnNl
dCBjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMoY29uc3QgSW50UmVjdCYsIGJvb2wpOworICAgIAor
ICAgIC8vIExpbmVzCisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldE9mTGlu
ZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFy
YWN0ZXJPZmZzZXRPZkxpbmUoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgCisgICAgLy8g
SW5kZXgKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgoaW50LCBj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kik7CisgICAgaW50IGluZGV4Rm9yQ2hhcmFjdGVyT2Zm
c2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKIAogICAg
IGVudW0gQVhOb3RpZmljYXRpb24gewogICAgICAgICBBWEFjdGl2ZURlc2NlbmRhbnRDaGFuZ2Vk
LApAQCAtMzIxLDcgKzMzNSw2IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFRleHRNYXJrZXJE
YXRhV2l0aENoYXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYpOwogICAgIFVDaGFyMzIgY2hhcmFjdGVyQWZ0ZXIoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
Jik7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXJCZWZvcmUoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7
Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShS
ZWZQdHI8UmFuZ2U+LCBib29sKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0
Rm9yTm9kZUFuZE9mZnNldChOb2RlJiwgaW50LCBUcmF2ZXJzZU9wdGlvbiA9IFRyYXZlcnNlT3B0
aW9uRGVmYXVsdCk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzQm91bmRhcnkoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CiAgICAgQ2hhcmFjdGVy
T2Zmc2V0IG5leHRCb3VuZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBCb3VuZGFyeVNlYXJj
aEZ1bmN0aW9uKTsKQEAgLTMzMSw2ICszNDQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ2hhcmFjdGVy
T2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5k
YXJ5KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlNlbnRlbmNl
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBlbmRDaGFyYWN0
ZXJPZmZzZXRPZlNlbnRlbmNlKGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIENoYXJhY3Rl
ck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQb2ludCYpOworICAgIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYs
IGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIGJvb2wgc2hvdWxkU2tpcEJvdW5kYXJ5KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogCiBwcml2YXRl
OgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJvb3RXZWJBcmVhKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJ
KHJldmlzaW9uIDE5NzQ2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTgsNiArMTE5OCwyMCBAQCBW
aXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0CiAgICAgcmV0dXJuIFZpc2li
bGVQb3NpdGlvblJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIH0KIAorUmVmUHRy
PFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZUZvclBsYWluVGV4dFJhbmdlKGNvbnN0
IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3Ro
ID0gZ2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCk7CisgICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2Uu
bGVuZ3RoID4gdGV4dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKSB7CisgICAgICAgIENo
YXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5n
ZS5zdGFydCwgdGhpcyk7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hh
cmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGgsIHRoaXMpOwor
ICAgICAgICByZXR1cm4gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhz
dGFydCwgZW5kKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFZpc2libGVQb3Np
dGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmxpbmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKSBjb25zdAogewogICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc3RhcnRPZkxpbmUodmlzaWJsZVBvc2l0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCShyZXZpc2lvbiAxOTc0NjkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODMxLDEwICs4MzEsMTMg
QEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHN0eWxlUmFuZ2VGb3JQb3NpdGlv
bihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29u
c3Q7CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgbGluZVJhbmdlRm9yUG9zaXRpb24oY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZUZv
clBsYWluVGV4dFJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Q7CiAKICAgICBTdHJp
bmcgc3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmKSBjb25zdDsKICAgICBTdHJpbmcgc3RyaW5nRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPikgY29u
c3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9Cisg
ICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNv
bnN0IHsgcmV0dXJuIEludFJlY3QoKTsgfQogICAgIGludCBsZW5ndGhGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
blJhbmdlJikgY29uc3QgeyB9CiAKQEAgLTg2OCw2ICs4NzEsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBj
b25zdCB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHZpcnR1YWwgSW50UmVjdCBkb0FYQm91bmRz
Rm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7
IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJP
ZmZzZXQoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0K
ICAgICBTdHJpbmcgbGlzdE1hcmtlclRleHRGb3JOb2RlQW5kUG9zaXRpb24oTm9kZSosIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgZG9BWExpbmVGb3JJbmRl
eCh1bnNpZ25lZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE5NzQ2OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjIsNiArMTk2MiwyNiBAQCBib29sIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6Om5vZGVJc1RlCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitJbnRS
ZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJlY3RzKExheW91dFJlY3Qm
IHJlY3QxLCBMYXlvdXRSZWN0JiByZWN0MiwgUmVmUHRyPFJhbmdlPiBkYXRhUmFuZ2UpIGNvbnN0
Cit7CisgICAgTGF5b3V0UmVjdCBvdXJyZWN0ID0gcmVjdDE7CisgICAgb3VycmVjdC51bml0ZShy
ZWN0Mik7CisgICAgCisgICAgLy8gaWYgdGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29u
dGFpbnMgbXVsdGlwbGUgdGV4dCBjaGFycywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBp
bnRlYWQKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3QyLm1heFkoKSkgeworICAgICAgICBM
YXlvdXRSZWN0IGJvdW5kaW5nQm94ID0gZGF0YVJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCk7
CisgICAgICAgIFN0cmluZyByYW5nZVN0cmluZyA9IHBsYWluVGV4dChkYXRhUmFuZ2UuZ2V0KCkp
OworICAgICAgICBpZiAocmFuZ2VTdHJpbmcubGVuZ3RoKCkgPiAxICYmICFib3VuZGluZ0JveC5p
c0VtcHR5KCkpCisgICAgICAgICAgICBvdXJyZWN0ID0gYm91bmRpbmdCb3g7CisgICAgfQorICAg
IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gbV9yZW5kZXJlci0+dmlldygpLmZyYW1l
VmlldygpLmNvbnRlbnRzVG9TY3JlZW4oc25hcHBlZEludFJlY3Qob3VycmVjdCkpOworI2Vsc2UK
KyAgICByZXR1cm4gc25hcHBlZEludFJlY3Qob3VycmVjdCk7CisjZW5kaWYKK30KKwogSW50UmVj
dCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5n
ZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYgdmlzaWJsZVBvc2l0aW9uUmFuZ2UpIGNvbnN0
CiB7CiAgICAgaWYgKHZpc2libGVQb3NpdGlvblJhbmdlLmlzTnVsbCgpKQpAQCAtMTk4NSwyMyAr
MjAwNSwzOSBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kCiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgTGF5b3V0UmVjdCBvdXJyZWN0ID0gcmVjdDE7Ci0gICAg
b3VycmVjdC51bml0ZShyZWN0Mik7CisgICAgUmVmUHRyPFJhbmdlPiBkYXRhUmFuZ2UgPSBtYWtl
UmFuZ2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7CisgICAgcmV0dXJuIGJvdW5kc0ZvclJlY3Rz
KHJlY3QxLCByZWN0MiwgZGF0YVJhbmdlKTsKK30KKworSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+IHJhbmdlKSBjb25z
dAoreworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgCi0g
ICAgLy8gaWYgdGhlIHJlY3RhbmdsZSBzcGFucyBsaW5lcyBhbmQgY29udGFpbnMgbXVsdGlwbGUg
dGV4dCBjaGFycywgdXNlIHRoZSByYW5nZSdzIGJvdW5kaW5nIGJveCBpbnRlYWQKLSAgICBpZiAo
cmVjdDEubWF4WSgpICE9IHJlY3QyLm1heFkoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IGRh
dGFSYW5nZSA9IG1ha2VSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKLSAgICAgICAgTGF5
b3V0UmVjdCBib3VuZGluZ0JveCA9IGRhdGFSYW5nZS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOwot
ICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBwbGFpblRleHQoZGF0YVJhbmdlLmdldCgpKTsK
LSAgICAgICAgaWYgKHJhbmdlU3RyaW5nLmxlbmd0aCgpID4gMSAmJiAhYm91bmRpbmdCb3guaXNF
bXB0eSgpKQotICAgICAgICAgICAgb3VycmVjdCA9IGJvdW5kaW5nQm94OworICAgIEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gdGhpcy0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisg
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgCisgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgdHJ1ZSk7
CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zm
c2V0Rm9yUmFuZ2UocmFuZ2UsIGZhbHNlKTsKKyAgICAKKyAgICBMYXlvdXRSZWN0IHJlY3QxID0g
Y2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoc3RhcnQpOworICAg
IExheW91dFJlY3QgcmVjdDIgPSBjYWNoZS0+YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rl
ck9mZnNldChlbmQpOworICAgIAorICAgIC8vIHJlYWRqdXN0IGZvciBwb3NpdGlvbiBhdCB0aGUg
ZWRnZSBvZiBhIGxpbmUuIFRoaXMgaXMgdG8gZXhjbHVkZSBsaW5lIHJlY3QgdGhhdCBkb2Vzbid0
IG5lZWQgdG8gYmUgYWNjb3VudGVkIGluIHRoZSByYW5nZSBib3VuZHMuCisgICAgaWYgKHJlY3Qy
LnkoKSAhPSByZWN0MS55KCkpIHsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZE9mRmlyc3RM
aW5lID0gY2FjaGUtPmVuZENoYXJhY3Rlck9mZnNldE9mTGluZShzdGFydCk7CisgICAgICAgIGlm
IChzdGFydC5pc0VxdWFsKGVuZE9mRmlyc3RMaW5lKSkgeworICAgICAgICAgICAgc3RhcnQgPSBj
YWNoZS0+bmV4dENoYXJhY3Rlck9mZnNldChzdGFydCwgZmFsc2UpOworICAgICAgICAgICAgcmVj
dDEgPSBjYWNoZS0+YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChzdGFydCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVuZC5pc0VxdWFsKGVuZE9mRmlyc3RMaW5lKSkgewor
ICAgICAgICAgICAgZW5kID0gY2FjaGUtPnByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGVuZCwgZmFs
c2UpOworICAgICAgICAgICAgcmVjdDIgPSBjYWNoZS0+YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNo
YXJhY3Rlck9mZnNldChlbmQpOworICAgICAgICB9CiAgICAgfQogICAgIAotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICByZXR1cm4gbV9yZW5kZXJlci0+dmlldygpLmZyYW1lVmlldygpLmNvbnRlbnRz
VG9TY3JlZW4oc25hcHBlZEludFJlY3Qob3VycmVjdCkpOwotI2Vsc2UKLSAgICByZXR1cm4gc25h
cHBlZEludFJlY3Qob3VycmVjdCk7Ci0jZW5kaWYKKyAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMo
cmVjdDEsIHJlY3QyLCByYW5nZSk7CiB9CiAgICAgCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0
aW9uUmFuZ2UmIHJhbmdlKSBjb25zdApAQCAtMjE5Niw2ICsyMjMyLDEzIEBAIEludFJlY3QgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEIKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQog
CitJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZVVz
aW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKK3sK
KyAgICBpZiAoYWxsb3dzVGV4dFJhbmdlcygpKQorICAgICAgICByZXR1cm4gYm91bmRzRm9yUmFu
Z2UocmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSkpOworICAgIHJldHVybiBJbnRSZWN0KCk7
Cit9CisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlJbWFnZU1hcEhpdFRlc3QoSFRNTEFyZWFFbGVtZW50KiBhcmVhLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFhcmVhKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDE5NzQ2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTcz
LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBv
c2l0aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlv
blJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBJbnRSZWN0IGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBJ
bnRSZWN0IGJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRl
OworICAgIEludFJlY3QgYm91bmRzRm9yUmVjdHMoTGF5b3V0UmVjdCYsIExheW91dFJlY3QmLCBS
ZWZQdHI8UmFuZ2U+KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxl
UG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FSSUFGbG93VG8oKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgYXJpYUZsb3dUb0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjAwLDYgKzIwMiw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2aXJ0dWFsIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIEludFJlY3QgZG9BWEJvdW5kc0Zv
clJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBJbnRSZWN0IGRvQVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBs
YWluVGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiAgICAgdmlydHVhbCBTdHJpbmcg
c3RyaW5nVmFsdWVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBTdHJpbmcg
c3RyaW5nUm9sZUZvck1TQUEoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAxOTc0NjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjE0NSwxMCArMjE0NSwxNCBAQCAtIChOU0ludGVnZXIpcG9z
aXRpb25Gb3JUZXh0TWFya2VyOihXZWJBCiAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgIHJldHVy
biBOU05vdEZvdW5kOyAgICAKIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKFttYXJr
ZXIgdmlzaWJsZVBvc2l0aW9uXSk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIE5TUmFuZ2UgbnNSYW5nZSA9IFtzZWxmIF9jb252
ZXJ0VG9OU1JhbmdlOnJhbmdlLmdldCgpXTsKLSAgICByZXR1cm4gbnNSYW5nZS5sb2NhdGlvbjsK
KyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgp
KSB7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbbWFya2VyIGNo
YXJhY3Rlck9mZnNldF07CisgICAgICAgIC8vIENyZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9t
IHRoZSBDaGFyYWN0ZXJPZmZzZXQgb2JqZWN0LgorICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZz
ZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgICAgIE5TUmFuZ2UgbnNSYW5nZSA9IFtzZWxmIF9j
b252ZXJ0VG9OU1JhbmdlOnJhbmdlLmdldCgpXTsKKyAgICAgICAgcmV0dXJuIG5zUmFuZ2UubG9j
YXRpb247CisgICAgfQorICAgIHJldHVybiBOU05vdEZvdW5kOwogfQogCiAtIChOU0FycmF5ICop
dGV4dE1hcmtlclJhbmdlCkBAIC0yMjAyLDExICsyMjA2LDE3IEBAIC0gKE5TQXJyYXkgKil0ZXh0
TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb24KICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IG1fb2JqZWN0LT5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gbmlsOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9
IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CisgICAgCisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5zdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIHRydWUpOworICAgIENoYXJhY3Rl
ck9mZnNldCBlbmQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJh
bmdlLCBmYWxzZSk7CiAKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJr
ZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9z
aXRpb246c3RhcnRQb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKLSAg
ICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gW1dlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOmVuZFBvc2l0aW9uIGNh
Y2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKiBzdGFydE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFy
a2VyV2l0aENoYXJhY3Rlck9mZnNldDpzdGFydCBjYWNoZTpjYWNoZV07CisgICAgV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciB0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDplbmQgY2FjaGU6Y2FjaGVdOwogICAgIGlm
ICghc3RhcnRNYXJrZXIgfHwgIWVuZE1hcmtlcikKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAK
QEAgLTIyMjEsMTEgKzIyMzEsMTMgQEAgLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0
ZXh0TWFyawogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFu
Z2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIDApXTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJs
ZVNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZp
c2libGVQb3NpdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKLSAgICByZXR1cm4gW1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnZp
c2libGVQb3NpdGlvbiBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICBBWE9i
amVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFj
YWNoZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hh
cmFjdGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShy
YW5nZSwgdHJ1ZSk7CisgICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0
TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXQgY2FjaGU6Y2FjaGVdOwog
fQogCiAtIChpZClfc3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgYXR0cmlidXRlZDooQk9P
TClhdHRyaWJ1dGVkCkBAIC0yNDAyLDE1ICsyNDE0LDE0IEBAIC0gKENHUmVjdClmcmFtZUZvclRl
eHRNYXJrZXJzOihOU0FycmF5ICoKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKIAotICAgIGlmIChbYXJyYXkgY291
bnRdICE9IDIpCisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RD
YWNoZSgpOworICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotICAg
IAotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFthcnJheSBv
YmplY3RBdEluZGV4OjBdOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJr
ZXIgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDoxXTsKLSAgICBpZiAoIVtzdGFydE1hcmtlciBpc0tp
bmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dIHx8ICFbZW5kTWFy
a2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0pCisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6YXJyYXld
OworICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotCi0gICAgSW50
UmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2li
bGVQb3NpdGlvblJhbmdlKFtzdGFydE1hcmtlciB2aXNpYmxlUG9zaXRpb25dLCBbZW5kTWFya2Vy
IHZpc2libGVQb3NpdGlvbl0pKTsKKyAgICAKKyAgICBJbnRSZWN0IHJlY3QgPSBtX29iamVjdC0+
Ym91bmRzRm9yUmFuZ2UocmFuZ2UpOwogICAgIHJldHVybiBbc2VsZiBjb252ZXJ0UmVjdFRvU2Ny
ZWVuU3BhY2U6cmVjdF07CiB9CiAKQEAgLTI0MTksOCArMjQzMCwxMSBAQCAtIChXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vz
c2liaWxpdHlDYWxsXSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBWaXNpYmxlUG9z
aXRpb24gcG9zID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KEludFBvaW50KHBv
aW50KSk7Ci0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aFZpc2libGVQb3NpdGlvbjpwb3MgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07
CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOwor
ICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgQ2hhcmFjdGVyT2Zmc2V0
IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChJbnRQb2lu
dChwb2ludCksIG1fb2JqZWN0KTsKKyAgICByZXR1cm4gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldCBjYWNoZTpj
YWNoZV07CiB9CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbmV4dE1hcmtlckZv
ckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxOTc0Njkp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzc3Myw4ICszNzczLDggQEAgLSAo
TlNTdHJpbmcqKWFjY2Vzc2liaWxpdHlBY3Rpb25EZXNjcmlwdAogLSAoTlNBdHRyaWJ1dGVkU3Ry
aW5nKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJhbmdlCiB7CiAgICAg
UGxhaW5UZXh0UmFuZ2UgdGV4dFJhbmdlID0gUGxhaW5UZXh0UmFuZ2UocmFuZ2UubG9jYXRpb24s
IHJhbmdlLmxlbmd0aCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc1Jhbmdl
ID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UodGV4dFJhbmdlKTsKLSAg
ICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3Nl
bGYgdGV4dE1hcmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dmlzaWJsZVBvc1JhbmdlLnN0
YXJ0IGVuZFBvc2l0aW9uOnZpc2libGVQb3NSYW5nZS5lbmRdXTsKKyAgICBSZWZQdHI8UmFuZ2U+
IHdlYlJhbmdlID0gbV9vYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UodGV4dFJhbmdlKTsK
KyAgICByZXR1cm4gW3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6
W3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOndlYlJhbmdlXV07CiB9CiAKIC0gKE5TUmFu
Z2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlKilyYW5nZQpAQCAtMzgwMSw4ICszODAxLDEzIEBA
IC0gKE5TSW50ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXIKICAgICBpZiAoIW1hcmtl
cikKICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiAgICAgCi0gICAgVmlzaWJsZVNlbGVjdGlv
biBzZWxlY3Rpb24oW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjptYXJrZXJdKTsK
LSAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6c2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCldLmxvY2F0aW9uOworICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9
IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNo
YXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6bWFya2Vy
XTsKKyAgICAgICAgLy8gQ3JlYXRlIGEgY29sbGFwc2VkIHJhbmdlIGZyb20gdGhlIENoYXJhY3Rl
ck9mZnNldCBvYmplY3QuCisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFu
Z2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVy
T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOnJhbmdlLmdl
dCgpXS5sb2NhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiB9CiAKIC0gKGlk
KV90ZXh0TWFya2VyRm9ySW5kZXg6KE5TSW50ZWdlcil0ZXh0SW5kZXgKQEAgLTM4MTUsOCArMzgy
MCwxMSBAQCAtIChpZClfdGV4dE1hcmtlckZvckluZGV4OihOU0ludGVnZXIpdGV4CiAgICAgaWYg
KCF0ZXh0UmFuZ2UgfHwgIXRleHRSYW5nZS0+Ym91bmRhcnlQb2ludHNWYWxpZCgpKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbih0ZXh0UmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNp
YmxlUG9zaXRpb246cG9zaXRpb25dOworICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1f
b2JqZWN0LT5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UodGV4
dFJhbmdlLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0
ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKKyAgICB9CisgICAgcmV0dXJuIG5pbDsKIH0KIAog
Ly8gVGhlIFJURiByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhp
cyBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0aGF0IGlzCkBAIC0zOTYwLDEyICszOTY4LDIwIEBAIC0g
KGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICB9CiAgICAgCiAgICAg
aWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUVuZFRleHRNYXJr
ZXJGb3JCb3VuZHNQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBJbnRSZWN0IHdl
YkNvcmVSZWN0ID0gW3NlbGYgc2NyZWVuVG9Db250ZW50czplbmNsb3NpbmdJbnRSZWN0KHJlY3Qp
XTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9v
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckJvdW5kcyh3ZWJDb3JlUmVjdCwgTGFzdFZpc2libGVQ
b3NpdGlvbkZvckJvdW5kcyldOworICAgICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBt
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpKSB7CisgICAgICAgICAgICBJbnRSZWN0IHdlYkNvcmVS
ZWN0ID0gW3NlbGYgc2NyZWVuVG9Db250ZW50czplbmNsb3NpbmdJbnRSZWN0KHJlY3QpXTsKKyAg
ICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFj
dGVyT2Zmc2V0Rm9yQm91bmRzKHdlYkNvcmVSZWN0LCBmYWxzZSk7CisgICAgICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlTdGFydFRleHRNYXJrZXJGb3JCb3VuZHNQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBJbnRSZWN0IHdlYkNvcmVSZWN0ID0g
W3NlbGYgc2NyZWVuVG9Db250ZW50czplbmNsb3NpbmdJbnRSZWN0KHJlY3QpXTsKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnZpc2li
bGVQb3NpdGlvbkZvckJvdW5kcyh3ZWJDb3JlUmVjdCwgRmlyc3RWaXNpYmxlUG9zaXRpb25Gb3JC
b3VuZHMpXTsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKSkgeworICAgICAgICAgICAgSW50UmVjdCB3ZWJDb3JlUmVjdCA9IFtzZWxm
IHNjcmVlblRvQ29udGVudHM6ZW5jbG9zaW5nSW50UmVjdChyZWN0KV07CisgICAgICAgICAgICBD
aGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZv
ckJvdW5kcyh3ZWJDb3JlUmVjdCwgdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlMaW5lVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
clBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7CkBAIC00MDE0LDMwICs0MDMwLDQyIEBAIC0gKGlk
KWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAKICAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJGb3JQb3NpdGlvbiJdKSB7CiAgICAg
ICAgIEludFBvaW50IHdlYkNvcmVQb2ludCA9IEludFBvaW50KHBvaW50KTsKLSAgICAgICAgcmV0
dXJuIHBvaW50U2V0ID8gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQod2ViQ29yZVBvaW50KV0gOiBuaWw7CisgICAgICAg
IEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAg
ICAgaWYgKCFwb2ludFNldCB8fCAhY2FjaGUpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9m
ZnNldEZvclBvaW50KHdlYkNvcmVQb2ludCwgbV9vYmplY3QpOworICAgICAgICByZXR1cm4gW3Nl
bGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgIH0K
ICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEJvdW5kc0ZvclRl
eHRNYXJrZXJSYW5nZSJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQ
b3NSYW5nZSA9IFtzZWxmIHZpc2libGVQb3NpdGlvblJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0Zv
clZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NSYW5nZSk7CisgICAgICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFu
Z2VdOworICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5n
ZSk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOwogICAgIH0K
ICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5
Qm91bmRzRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAgICAgICBWaXNpYmxl
UG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uu
bG9jYXRpb24pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbV9vYmplY3QtPnZpc2li
bGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCk7CisgICAgICAg
IEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICAg
ICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2Nh
dGlvbiwgbV9vYmplY3QpOworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNo
YXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0aCwgbV9vYmpl
Y3QpOwogICAgICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgTlNSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91bmRz
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkp
OworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKKyAgICAgICAgTlNSZWN0IHJlY3QgPSBtX29i
amVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpOwogICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFs
dWVXaXRoUmVjdDpyZWN0XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVh
bFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eVN0cmluZ0ZvclJhbmdlUGFyYW1ldGVyaXplZEF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gbV9vYmplY3QtPnZpc2li
bGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZCA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlv
bityYW5nZS5sZW5ndGgpOworICAgICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hhcmFjdGVy
T2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24sIG1fb2JqZWN0KTsKKyAgICAgICAgQ2hhcmFj
dGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5sb2Nh
dGlvbiArIHJhbmdlLmxlbmd0aCwgbV9vYmplY3QpOwogICAgICAgICBpZiAoc3RhcnQuaXNOdWxs
KCkgfHwgZW5kLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgcmV0
dXJuIG1fb2JqZWN0LT5zdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRp
b25SYW5nZShzdGFydCwgZW5kKSk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNo
ZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOworICAgICAg
ICByZXR1cm4gbV9vYmplY3QtPnN0cmluZ0ZvclJhbmdlKHJhbmdlKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhBdHRyaWJ1dGVkU3RyaW5nRm9y
VGV4dE1hcmtlclJhbmdlIl0pCkBAIC00MjczLDcgKzQzMDEsNyBAQCAtIChpZClhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICBpZiAoIXJhbmdlU2V0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgICAgICBQbGFpblRleHRSYW5nZSBwbGFp
blRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgp
OwotICAgICAgICAgICAgTlNSZWN0IHJlY3QgPSBtX29iamVjdC0+ZG9BWEJvdW5kc0ZvclJhbmdl
KHBsYWluVGV4dFJhbmdlKTsKKyAgICAgICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmRv
QVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KHBsYWluVGV4dFJhbmdlKTsKICAg
ICAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RdOwogICAgICAgICB9
CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJl
dmlzaW9uIDE5NzQ2OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzI5LDkgKzEzMjksMTQgQEAgTGF5b3V0UmVjdCBsb2NhbENh
cmV0UmVjdEluUmVuZGVyZXJGb3JDYQogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXI7CiAgICAg
TGF5b3V0UmVjdCBsb2NhbFJlY3QgPSBjYXJldFBvc2l0aW9uLmxvY2FsQ2FyZXRSZWN0KHJlbmRl
cmVyKTsKIAorICAgIHJldHVybiBsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JSZWN0KGxvY2Fs
UmVjdCwgY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCksIHJl
bmRlcmVyLCBjYXJldFBhaW50ZXIpOworfQorCitMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0SW5S
ZW5kZXJlckZvclJlY3QoTGF5b3V0UmVjdCYgbG9jYWxSZWN0LCBOb2RlKiBub2RlLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXJCbG9jayomIGNhcmV0UGFpbnRlcikKK3sKICAgICAvLyBH
ZXQgdGhlIHJlbmRlcmVyIHRoYXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhl
IGNhcmV0CiAgICAgLy8gKHdoaWNoIGlzIGVpdGhlciB0aGUgcmVuZGVyZXIgd2UganVzdCBmb3Vu
ZCwgb3Igb25lIG9mIGl0cyBjb250YWluZXJzKS4KLSAgICBjYXJldFBhaW50ZXIgPSByZW5kZXJl
ckZvckNhcmV0UGFpbnRpbmcoY2FyZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCkpOworICAgIGNhcmV0UGFpbnRlciA9IHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhu
b2RlKTsKIAogICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhlIHJlbmRlcmVyIGFu
ZCB0aGUgY2FyZXRQYWludGVyLgogICAgIHdoaWxlIChyZW5kZXJlciAhPSBjYXJldFBhaW50ZXIp
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHJldmlzaW9uIDE5NzQ2
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcwLDYgKzI3MCw3IEBAIGNvbnN0IFN0cmluZyYgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpOwogCiBSZW5kZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKE5vZGUqKTsKIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3RJblJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhjb25zdCBW
aXNpYmxlUG9zaXRpb24mLCBSZW5kZXJCbG9jayomKTsKK0xheW91dFJlY3QgbG9jYWxDYXJldFJl
Y3RJblJlbmRlcmVyRm9yUmVjdChMYXlvdXRSZWN0JiwgTm9kZSosIFJlbmRlck9iamVjdCosIFJl
bmRlckJsb2NrKiYpOwogSW50UmVjdCBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KFJl
bmRlckJsb2NrKiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmcsIGNvbnN0IExheW91dFJlY3QmKTsK
IAogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3NDY5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDMtMDMgIE5hbiBXYW5nICA8
bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogSW1wbGVtZW50IGJvdW5kcy9wb3NpdGlv
biBhbmQgaW5kZXggcmVsYXRlZCB0ZXh0IG1hcmtlciBmdW5jdGlvbnMgdXNpbmcgVGV4dEl0ZXJh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLWZvci1pbmRleC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLWZvci1pbmRleC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5h
di1leHBlY3RlZC50eHQ6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXIt
d29yZC1uYXYuaHRtbDoKKwogMjAxNi0wMy0wMiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBBZGQgYSBjdXN0b20gZWxlbWVudCB0ZXN0IGZvciBzeW5jaHJvbm91
cyBlbGVtZW50IGNvbnN0cnVjdGlvbiBpbiBIVE1MIHBhcnNlcgpJbmRleDogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1mb3It
aW5kZXgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI1IEBACit0ZXh0CisKK3RleHQKK2F1ZGlvIGZpbGUuCitUaGlzIHZlcmlm
aWVzIHRoYXQgdGV4dE1hcmtlckZvckluZGV4IGFuZCBpbmRleEZvclRleHRNYXJrZXIgYXJlIHdv
cmtpbmcgY29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworT3JpZ2lu
YWwgbWFya2VyIHN0cmluZzogeAorSW5kZXggaXM6IDMKK05ldyBtYXJrZXIgc3RyaW5nOiB4CisK
K09yaWdpbmFsIG1hcmtlciBzdHJpbmc6ICdsaW5lIGJyZWFrJworSW5kZXggaXM6IDYKK05ldyBt
YXJrZXIgc3RyaW5nOiAnbGluZSBicmVhaycKKworT3JpZ2luYWwgbWFya2VyIHN0cmluZzogZgor
SW5kZXggaXM6IDE4CitOZXcgbWFya2VyIHN0cmluZzogZgorCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1m
b3ItaW5kZXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJvZHkgaWQ9ImJv
ZHkiIHRhYmluZGV4PSIwIj4KKworPGRpdiB0YWJpbmRleD0iMCIgaWQ9InRleHQxIj50ZXh0PC9k
aXY+Cis8YnI+Cit0ZXh0CisKKzxkaXYgaWQ9InRleHQyIj4KK2F1ZGlvIDxhdWRpbyBjb250cm9s
cz48c291cmNlIHNyYz0idGVzdC5tcDMiIHR5cGU9ImF1ZGlvL21wZWciPjwvYXVkaW8+ZmlsZS4K
KzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdmVyaWZpZXMgdGhhdCB0
ZXh0TWFya2VyRm9ySW5kZXggYW5kIGluZGV4Rm9yVGV4dE1hcmtlciBhcmUgd29ya2luZyBjb3Jy
ZWN0bHkuIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJ0ZXh0MSIpOworICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCB0ZXh0IG5vZGUuCisg
ICAgICAgIHRleHQgPSB0ZXh0LmNoaWxkQXRJbmRleCgwKTsKKyAgICAgICAgCisgICAgICAgIHZh
ciBwcmV2aW91cywgY3VycmVudDsKKyAgICAgICAgdmFyIHRleHRNYXJrZXJSYW5nZSA9IHRleHQu
dGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgdmFyIHN0YXJ0TWFya2Vy
ID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdl
KTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvcndhcmQoMywgcHJldmlvdXMsIHN0YXJ0TWFya2Vy
LCB0ZXh0KTsKKyAgICAgICAgcHJldmlvdXMgPSByZXN1bHQucHJldmlvdXM7CisgICAgICAgIGN1
cnJlbnQgPSByZXN1bHQuY3VycmVudDsKKyAgICAgICAgdmVyaWZ5TWFya2VySW5kZXgocHJldmlv
dXMsIGN1cnJlbnQsIHRleHQpOyAKKyAgICAgICAgCisgICAgICAgIC8vIEJSCisgICAgICAgIHJl
c3VsdCA9IGZvcndhcmQoMiwgcHJldmlvdXMsIGN1cnJlbnQsIHRleHQpOworICAgICAgICBwcmV2
aW91cyA9IHJlc3VsdC5wcmV2aW91czsKKyAgICAgICAgY3VycmVudCA9IHJlc3VsdC5jdXJyZW50
OworICAgICAgICB2ZXJpZnlNYXJrZXJJbmRleChwcmV2aW91cywgY3VycmVudCwgdGV4dCk7IAor
ICAgICAgICAKKyAgICAgICAgLy8gQXR0YWNobWVudAorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOworICAgICAgICB0
ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7Cisg
ICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFu
Z2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgcmVzdWx0ID0gZm9yd2FyZCg4LCBwcmV2aW91
cywgc3RhcnRNYXJrZXIsIHRleHQpOworICAgICAgICBwcmV2aW91cyA9IHJlc3VsdC5wcmV2aW91
czsKKyAgICAgICAgY3VycmVudCA9IHJlc3VsdC5jdXJyZW50OworICAgICAgICB2ZXJpZnlNYXJr
ZXJJbmRleChwcmV2aW91cywgY3VycmVudCwgdGV4dCk7CisgICAgfQorICAgIAorICAgIAorICAg
IGZ1bmN0aW9uIGZvcndhcmQoY291bnQsIHByZXZpb3VzTWFya2VyLCBjdXJyZW50TWFya2VyLCBv
YmopIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAg
ICAgICBwcmV2aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CisgICAgICAgICAgICBjdXJyZW50
TWFya2VyID0gb2JqLm5leHRUZXh0TWFya2VyKGN1cnJlbnRNYXJrZXIpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBwcmV2aW91czogcHJldmlvdXNNYXJrZXIsCisg
ICAgICAgICAgICBjdXJyZW50OiBjdXJyZW50TWFya2VyCisgICAgICAgIH07CisgICAgfQorICAg
IAorICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5lYnJlYWtJblN0cmluZyhzdHIpIHsKKyAgICAgICAg
dmFyIG5ld2xpbmUgPSAnXG4nOworICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXdsaW5lLCAi
J2xpbmUgYnJlYWsnIik7CisgICAgICAgIHJldHVybiBzdHI7CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIHZlcmlmeU1hcmtlckluZGV4KHByZXZpb3VzTWFya2VyLCB0ZXh0TWFya2VyLCBvYmop
IHsKKyAgICAgICAgdmFyIG1hcmtlclJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZvck1hcmtl
cnMocHJldmlvdXNNYXJrZXIsIHRleHRNYXJrZXIpOworICAgICAgICB2YXIgb3JpZ2luYWxTdHJp
bmcgPSByZXBsYWNlTGluZWJyZWFrSW5TdHJpbmcob2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZShtYXJrZXJSYW5nZSkpOworICAgICAgICBkZWJ1ZygiT3JpZ2luYWwgbWFya2VyIHN0cmluZzog
IiArIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIHZhciBpbmRleCA9IG9iai5p
bmRleEZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIHZhciBuZXdNYXJrZXIgPSBv
YmoudGV4dE1hcmtlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAgbWFya2VyUmFuZ2UgPSBvYmou
dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhwcmV2aW91c01hcmtlciwgbmV3TWFya2VyKTsKKyAg
ICAgICAgdmFyIG5ld1N0cmluZyA9IHJlcGxhY2VMaW5lYnJlYWtJblN0cmluZyhvYmouc3RyaW5n
Rm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSk7CisgICAgICAgIGRlYnVnKCJJbmRleCBp
czogIiArIGluZGV4ICsgIlxuTmV3IG1hcmtlciBzdHJpbmc6ICIgKyBuZXdTdHJpbmcgKyAiXG4i
KTsKKyAgICB9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0
LW1hcmtlci13b3JkLW5hdi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxOTc0NjkpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtl
ci13b3JkLW5hdi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw4IEBAIGxp
bmUgYnJlYWtzCiBzb21lCiB0ZXh0CiB0ZXN0IGF1ZGlvIGZpbGUKK0VkaXQgdGV4dAorCiBUaGlz
IHRlc3RzIHRoYXQgd29yZCBuYXZpZ2F0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5LgogCiBPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCkBAIC01OSw2ICs2MSwxMSBAQCBMZWZ0IHdvcmQgaXM6IGNh
bid0CiBSaWdodCB3b3JkIGlzOiBjYW4ndAogUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVu
ZDogY2FuJ3QKIAorQ3VycmVudCBjaGFyYWN0ZXIgaXM6IAorTGVmdCB3b3JkIGlzOiDlt6flhYvl
ipsKK1JpZ2h0IHdvcmQgaXM6IOW3p+WFi+WKmworUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3Jk
IGVuZDogc2VsZWN0J2xpbmUgYnJlYWsn5ben5YWL5YqbCisKIEN1cnJlbnQgY2hhcmFjdGVyIGlz
OiDlhYsKIExlZnQgd29yZCBpczog5ben5YWL5YqbCiBSaWdodCB3b3JkIGlzOiDlt6flhYvlipsK
QEAgLTExOSw2ICsxMjYsMTEgQEAgTGVmdCB3b3JkIGlzOiBmaWxlCiBSaWdodCB3b3JkIGlzOiBm
aWxlCiBQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5kOiBmaWxlCiAKK0N1cnJlbnQgY2hh
cmFjdGVyIGlzOiB0CitMZWZ0IHdvcmQgaXM6IEVkaXQKK1JpZ2h0IHdvcmQgaXM6ICAKK1ByZSB3
b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6IEVkaXQgdGV4dAorCiBUZXN0IGdvaW5nIGZvcndh
cmQuCiBFbmQgd29yZDogZmlsZQogCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LW1hcmtlci13b3JkLW5hdi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWwJKHJldmlzaW9uIDE5NzQ2
OSkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDExIEBAIHNvbWU8YnI+dGV4dAogdGVz
dCBhdWRpbyA8YXVkaW8gY29udHJvbHM+PHNvdXJjZSBzcmM9InRlc3QubXAzIiB0eXBlPSJhdWRp
by9tcGVnIj48L2F1ZGlvPmZpbGUKIDwvZGl2PgogCis8cCBpZD0idGV4dDgiPgorPHN0cm9uZz5F
ZGl0PC9zdHJvbmc+Cit0ZXh0Cis8L3A+CisKIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgogPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CiAKQEAgLTY0LDEzICs2OSwxMyBAQCB0ZXN0IGF1ZGlvIDxh
dWRpbyBjb250cm9scz48c291cmNlIHNyYz0iCiAgICAgICAgIC8vIEF0ICJUIiBpbiAiVGhpc2lz
Iiwgc2hvdWxkIHJldHVybiB0aGUgd29yZCBhcyAiVGhpc2lzbG9uZ3dvcmQiLgogICAgICAgICBj
dXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAyLCB0ZXh0KTsK
ICAgICAgICAgLy8gQXQgIiAiIGJlZm9yZSAiSSIsIHRoZSB3b3JkIHNob3VsZCBiZSAiSSdsbCIu
Ci0gICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIs
IDE1LCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3Vy
cmVudE1hcmtlciwgMTQsIHRleHQpOwogICAgICAgICAvLyBBdCAiICIgYmVmb3JlICJ0cnkiLCB0
aGUgd29yZCBzaG91bGQgZXhjbHVkZXMgIi4iCi0gICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZh
bmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDYsIHRleHQpOworICAgICAgICBjdXJyZW50TWFy
a2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCA1LCB0ZXh0KTsKICAgICAgICAg
CiAgICAgICAgIC8vIENoZWNrIHRoZSBjYXNlIHdpdGggY29udGVudGVkaXRhYmxlCiAgICAgICAg
IC8vIEF0ICJlIiBpbiAiZWRpdGFibGUiLCB0aGUgd29yZCBzaG91bGQgTk9UIGluY2x1ZGUgIkNv
bnRlbnQiIGJlZm9yZSBpdC4KLSAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJp
ZnkoY3VycmVudE1hcmtlciwgMTksIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2
YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAxOCwgdGV4dCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBDaGVjayB0aGUgY2FzZSB3aXRoIHJlcGxhY2VkIG5vZGUsIHRoZSByZXBsYWNlZCBub2Rl
IHNob3VsZCBiZSBjb25zaWRlcmVkIGEgd29yZC4KICAgICAgICAgdmFyIHRleHQyID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOwpAQCAtODks
NiArOTQsOCBAQCB0ZXN0IGF1ZGlvIDxhdWRpbyBjb250cm9scz48c291cmNlIHNyYz0iCiAgICAg
ICAgIHZhciB0ZXh0NCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgidGV4dDQiKTsKICAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4dDQudGV4dE1hcmtl
clJhbmdlRm9yRWxlbWVudCh0ZXh0NCk7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSB0ZXh0NC5z
dGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHdoZW4gd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZSwgaXQg
d29uJ3QgZ28gdG8gcHJldmlvdXMgbm9kZS4KKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFu
Y2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMCwgdGV4dDQpOwogICAgICAgICBjdXJyZW50TWFy
a2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAyLCB0ZXh0NCk7CiAgICAgICAg
IGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRleHQ0
KTsKICAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtl
ciwgMSwgdGV4dDQpOwpAQCAtMTIzLDEyICsxMzAsMTggQEAgdGVzdCBhdWRpbyA8YXVkaW8gY29u
dHJvbHM+PHNvdXJjZSBzcmM9IgogICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZl
cmlmeShjdXJyZW50TWFya2VyLCAxLCB0ZXh0Nyk7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBh
ZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRleHQ3KTsKICAgICAgICAgCisgICAg
ICAgIC8vIEZvciBub2RlIHdpdGggdGV4dCBub2RlIGNoaWxkcmVuLCB3ZSBzaG91bGQgdHJlYXQg
dGhlIHZpc3VhbCBzcGFjZSBhcyB3b3JkIGJvdW5kYXJ5LgorICAgICAgICB2YXIgdGV4dDggPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ4Iik7Cisg
ICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHRleHQ4LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQo
dGV4dDgpOworICAgICAgICBjdXJyZW50TWFya2VyID0gdGV4dDguc3RhcnRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIg
PSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDQsIHRleHQ4KTsKKyAgICAgICAgCiAg
ICAgICAgIC8vIENoZWNrIHRoZSB3b3JkIG1hcmtlciBydW5zIGZyb20gc3RhcnQgdG8gZW5kLCBh
bmQgYmFja3dhcmRzLgogICAgICAgICAvLyBNYWtlIHN1cmUgaXQgd29uJ3QgaGFuZy4KICAgICAg
ICAgdmVyaWZ5RG9jdW1lbnQodGV4dCk7CiAgICAgICAgIAogICAgICAgICBmdW5jdGlvbiBhZHZh
bmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIG9mZnNldCwgb2JqKSB7Ci0gICAgICAgICAgICB2
YXIgcHJldmlvdXNNYXJrZXI7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNNYXJrZXIgPSBjdXJy
ZW50TWFya2VyOwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykg
ewogICAgICAgICAgICAgICAgIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsKICAgICAg
ICAgICAgICAgICBjdXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0TWFya2VyKHByZXZpb3VzTWFy
a2VyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273256</attachid>
            <date>2016-03-07 18:31:23 -0800</date>
            <delta_ts>2016-03-09 14:45:49 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>48378</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzcxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE2LTAzLTA3ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBib3VuZHMvcG9z
aXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHVzaW5nIFRleHRJ
dGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50ZWQgcG9zaXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgY2FsbHMg
d2l0aCBUZXh0SXRlcmF0b3IuIEFsc28gZml4ZWQgc29tZQorICAgICAgICBWb2ljZU92ZXIgbmF2
aWdhdGlvbiBpc3N1ZXMuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1t
YXJrZXItZm9yLWluZGV4Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVRvT2Zm
c2V0SW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFydE9yRW5k
Q2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6c2hvdWxkU2tpcEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpuZXh0Qm91bmRhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2aW91c1NlbnRlbmNlU3RhcnRDaGFyYWN0ZXJPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJldFJlY3RGb3JD
aGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWJzb2x1
dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxlbWVudCk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaW5lUmFuZ2VGb3JQb3Np
dGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpib3Vu
ZHNGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRT
ZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZz
ZXQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlSXNU
ZXh0Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojpib3VuZHNGb3JSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3Np
dGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmRvQVhCb3VuZHNGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1h
Z2VNYXBIaXRUZXN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgcG9zaXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb3NpdGlv
bjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX3N0cmluZ0Zv
clJhbmdlOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGZyYW1lRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb2ludDpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbmV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIF9pbmRleEZvclRleHRNYXJrZXI6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF90ZXh0TWFya2VyRm9ySW5kZXg6XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JDYXJldFBh
aW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvclJl
Y3QpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKwogMjAxNi0wMy0wNyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6OmNvbnRhaW5pbmdCbG9ja0Zvck9iamVjdEluRmxvdwpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lv
biAxOTc3MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTA2LDggKzE1MDYsOSBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50
Tm9kZSA9IGNoaWxkTm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlcGxhY2VkTm9k
ZU9yQlIgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2Rl
ICE9IHByZXZpb3VzTm9kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IHNldCB0aGUgY3VycmVudE5vZGUgdG8gcHJldmlvdXMgb25lIGluIGNhc2UgdGhpcyBpcyB0aGUg
bGFzdCBpdGVyYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHBy
ZXZpb3VzTm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBzZXQgdGhl
IHN0YXJ0IG9mZnNldCBhbmQgbGVuZ3RoIGZvciB0aGUgY3VycmVudCBub2RlIGluIGNhc2UgdGhp
cyBpcyB0aGUgbGFzdCBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3Rh
cnRPZmZzZXQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KQEAgLTE2OTUsNiArMTY5NiwxMCBAQCBDaGFyYWN0ZXJPZmZzZXQg
QVhPYmplY3RDYWNoZTo6c3RhcnRPckVuCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
IENoYXJhY3Rlck9mZnNldCgpOwogICAgIAorICAgIC8vIFdoZW4gZ2V0dGluZyB0aGUgZW5kIENo
YXJhY3Rlck9mZnNldCBhdCBub2RlIGJvdW5kYXJ5LCB3ZSBkb24ndCB3YW50IHRvIGNvbGxhcHNl
IHRvIHRoZSBwcmV2aW91cyBub2RlLgorICAgIGlmICghaXNTdGFydCAmJiAhcmFuZ2UtPmVuZE9m
ZnNldCgpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChy
YW5nZS0+ZW5kQ29udGFpbmVyKCksIDAsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKKyAg
ICAKICAgICAvLyBJZiBpdCdzIGVuZCB0ZXh0IG1hcmtlciwgd2Ugd2FudCB0byBnbyB0byB0aGUg
ZW5kIG9mIHRoZSByYW5nZSwgYW5kIHN0YXkgd2l0aGluIHRoZSByYW5nZS4KICAgICBib29sIHN0
YXlXaXRoaW5SYW5nZSA9ICFpc1N0YXJ0OwogICAgIApAQCAtMTc3NSwxMiArMTc4MCwzNSBAQCB2
b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhCiAgICAgc2V0VGV4dE1hcmtl
ckRhdGFXaXRoQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQp
OwogfQogCitib29sIEFYT2JqZWN0Q2FjaGU6OnNob3VsZFNraXBCb3VuZGFyeShjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmIHByZXZpb3VzLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIG5leHQpCit7Cisg
ICAgLy8gTWF0Y2ggdGhlIGJlaGF2aW9yIG9mIFZpc2libGVQb3NpdGlvbiwgd2Ugc2hvdWxkIHNr
aXAgdGhlIG5vZGUgYm91bmRhcnkgd2hlbiB0aGVyZSdzIG5vIHZpc3VhbCBzcGFjZSBvciBuZXcg
bGluZSBjaGFyYWN0ZXIuCisgICAgaWYgKHByZXZpb3VzLmlzTnVsbCgpIHx8IG5leHQuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAocHJldmlvdXMubm9kZSA9
PSBuZXh0Lm5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobmV4dC5z
dGFydEluZGV4ID4gMCB8fCBuZXh0Lm9mZnNldCA+IDApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBDaGFyYWN0ZXJPZmZzZXQgbmV3TGluZSA9IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0
T2ZMaW5lKG5leHQpOworICAgIGlmIChuZXh0LmlzRXF1YWwobmV3TGluZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JOZXh0Q2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJE
YXRhJiB0ZXh0TWFya2VyRGF0YSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZz
ZXQpCiB7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQgPSBjaGFyYWN0ZXJPZmZzZXQ7CisgICAg
Q2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzID0gY2hhcmFjdGVyT2Zmc2V0OwogICAgIGRvIHsKICAg
ICAgICAgbmV4dCA9IG5leHRDaGFyYWN0ZXJPZmZzZXQobmV4dCwgZmFsc2UpOworICAgICAgICBp
ZiAoc2hvdWxkU2tpcEJvdW5kYXJ5KHByZXZpb3VzLCBuZXh0KSkKKyAgICAgICAgICAgIG5leHQg
PSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KG5leHQsIGZhbHNlKTsKICAgICAgICAgdGV4dE1hcmtlckRh
dGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIG5leHQpOworICAgICAgICBwcmV2
aW91cyA9IG5leHQ7CiAgICAgfSB3aGlsZSAodGV4dE1hcmtlckRhdGEuaWdub3JlZCk7CiB9CiAK
QEAgLTE5NTgsNyArMTk4NiwxMCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3Rh
cnRDaGFyCiAgICAgICAgIGlmIChjLmlzRXF1YWwoZW5kT2ZQYXJhZ3JhcGgpKQogICAgICAgICAg
ICAgcmV0dXJuIGM7CiAgICAgICAgIAotICAgICAgICBjID0gbmV4dENoYXJhY3Rlck9mZnNldChj
aGFyYWN0ZXJPZmZzZXQpOworICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUg
Ym91bmRhcnkgdGhhdCBzcGxpdHMgd29yZHMuIE90aGVyd2lzZSBWb2ljZU92ZXIgd29uJ3Qgc2Vl
IGl0IGFzIHNwYWNlLgorICAgICAgICBjID0gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJP
ZmZzZXQsIGZhbHNlKTsKKyAgICAgICAgaWYgKHNob3VsZFNraXBCb3VuZGFyeShjaGFyYWN0ZXJP
ZmZzZXQsIGMpKQorICAgICAgICAgICAgYyA9IG5leHRDaGFyYWN0ZXJPZmZzZXQoYywgZmFsc2Up
OwogICAgICAgICBpZiAoYy5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJP
ZmZzZXQ7CiAgICAgfQpAQCAtMjEwNiw2ICsyMTM3LDEwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9i
amVjdENhY2hlOjpuZXh0Qm91bmQKICAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmlu
Zy5zaXplKCkpCiAgICAgICAgIHJldHVybiBlbmQ7CiAgICAgCisgICAgLy8gV2Ugc2hvdWxkIGNv
bnNpZGVyIHRoZSBub2RlIGJvdW5kYXJ5IHRoYXQgc3BsaXRzIHdvcmRzLgorICAgIGlmIChzZWFy
Y2hGdW5jdGlvbiA9PSBlbmRXb3JkQm91bmRhcnkgJiYgbmV4dCAtIHByZWZpeExlbmd0aCA9PSAx
KQorICAgICAgICByZXR1cm4gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZh
bHNlKTsKKyAgICAKICAgICAvLyBUaGUgZW5kU2VudGVuY2VCb3VuZGFyeSBmdW5jdGlvbiB3aWxs
IGluY2x1ZGUgYSBsaW5lIGJyZWFrIGF0IHRoZSBlbmQgb2YgdGhlIHNlbnRlbmNlLgogICAgIGlm
IChzZWFyY2hGdW5jdGlvbiA9PSBlbmRTZW50ZW5jZUJvdW5kYXJ5ICYmIHN0cmluZ1tuZXh0IC0g
MV0gPT0gJ1xuJykKICAgICAgICAgbmV4dC0tOwpAQCAtMjE2MCw3ICsyMTk1LDcgQEAgQ2hhcmFj
dGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQgogICAgIAogICAgIGludCBjaGFyYWN0
ZXJDb3VudCA9IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgLSAoc3RyaW5nLnNpemUoKSAtIHN1ZmZp
eExlbmd0aCAtIG5leHQpOwogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZ28gdG8gdGhlIHByZXZp
b3VzIG5vZGUgaWYgdGhlIG5vZGUgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IGxpbmUuCi0gICAg
aWYgKGNoYXJhY3RlckNvdW50IDwgMCAmJiAoY2hhcmFjdGVyT2Zmc2V0Tm9kZUlzQlIoY2hhcmFj
dGVyT2Zmc2V0KSB8fCBzdHJpbmdbc3RyaW5nLnNpemUoKSAtIDFdID09ICdcbicpKQorICAgIGlm
IChjaGFyYWN0ZXJDb3VudCA8IDAgJiYgKGNoYXJhY3Rlck9mZnNldE5vZGVJc0JSKGNoYXJhY3Rl
ck9mZnNldCkgfHwgc3RyaW5nW3N0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSAxXSA9PSAn
XG4nKSkKICAgICAgICAgY2hhcmFjdGVyQ291bnQgPSAwOwogICAgIHJldHVybiBjaGFyYWN0ZXJP
ZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyQ291
bnQsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKIH0KQEAgLTIyODMsNiArMjMxOCwxMzQg
QEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzUwogICAgIHJldHVybiBz
dGFydENoYXJhY3Rlck9mZnNldE9mU2VudGVuY2UocHJldmlvdXMpOwogfQogCitMYXlvdXRSZWN0
IEFYT2JqZWN0Q2FjaGU6OmxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFjdGVyT2Zmc2V0KFJlbmRlck9i
amVjdComIHJlbmRlcmVyLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkK
K3sKKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0LmlzTnVsbCgpKSB7CisgICAgICAgIHJlbmRlcmVy
ID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICB9CisgICAgCisgICAg
Tm9kZSogbm9kZSA9IGNoYXJhY3Rlck9mZnNldC5ub2RlOworICAgIAorICAgIHJlbmRlcmVyID0g
bm9kZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gTGF5
b3V0UmVjdCgpOworICAgIAorICAgIElubGluZUJveCogaW5saW5lQm94ID0gbnVsbHB0cjsKKyAg
ICBpbnQgY2FyZXRPZmZzZXQ7CisgICAgLy8gVXNlIGEgY29sbGFwc2VkIHJhbmdlIHRvIGdldCB0
aGUgcG9zaXRpb24uCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHJhbmdlRm9yVW5vcmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAg
UG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgc3Rh
cnRQb3NpdGlvbi5nZXRJbmxpbmVCb3hBbmRPZmZzZXQoRE9XTlNUUkVBTSwgaW5saW5lQm94LCBj
YXJldE9mZnNldCk7CisgICAgCisgICAgaWYgKGlubGluZUJveCkKKyAgICAgICAgcmVuZGVyZXIg
PSAmaW5saW5lQm94LT5yZW5kZXJlcigpOworICAgIAorICAgIHJldHVybiByZW5kZXJlci0+bG9j
YWxDYXJldFJlY3QoaW5saW5lQm94LCBjYXJldE9mZnNldCk7Cit9CisKK0ludFJlY3QgQVhPYmpl
Y3RDYWNoZTo6YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKK3sKKyAgICBSZW5kZXJCbG9jayogY2FyZXRQ
YWludGVyID0gbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGaXJzdCBjb21wdXRlIGEgcmVjdCBsb2Nh
bCB0byB0aGUgcmVuZGVyZXIgYXQgdGhlIHNlbGVjdGlvbiBzdGFydC4KKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyOworICAgIExheW91dFJlY3QgbG9jYWxSZWN0ID0gbG9jYWxDYXJldFJlY3RG
b3JDaGFyYWN0ZXJPZmZzZXQocmVuZGVyZXIsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgCisgICAg
bG9jYWxSZWN0ID0gbG9jYWxDYXJldFJlY3RJblJlbmRlcmVyRm9yUmVjdChsb2NhbFJlY3QsIGNo
YXJhY3Rlck9mZnNldC5ub2RlLCByZW5kZXJlciwgY2FyZXRQYWludGVyKTsKKyAgICByZXR1cm4g
YWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChjYXJldFBhaW50ZXIsIGxvY2FsUmVjdCk7
Cit9CisKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQ
b2ludChjb25zdCBJbnRQb2ludCAmcG9pbnQsIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKK3sK
KyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAor
ICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IG9iai0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9p
bnQpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2UodnAsIHZwKTsKKyAgICBy
ZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKK30K
KworQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBvaW50
KGNvbnN0IEludFBvaW50ICZwb2ludCkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2Ug
PSBtX2RvY3VtZW50LmNhcmV0UmFuZ2VGcm9tUG9pbnQoTGF5b3V0UG9pbnQocG9pbnQpKTsKKyAg
ICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKGNhcmV0UmFuZ2UsIHRy
dWUpOworfQorCisKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZz
ZXRGb3JCb3VuZHMoY29uc3QgSW50UmVjdCYgcmVjdCwgYm9vbCBmaXJzdCkKK3sKKyAgICBpZiAo
cmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAgICAK
KyAgICBJbnRQb2ludCBjb3JuZXIgPSBmaXJzdCA/IHJlY3QubWluWE1pbllDb3JuZXIoKSA6IHJl
Y3QubWF4WE1heFlDb3JuZXIoKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0
ID0gY2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoY29ybmVyKTsKKyAgICAKKyAgICBpZiAocmVjdC5j
b250YWlucyhhYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9m
ZnNldCkuY2VudGVyKCkpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0OworICAgIAor
ICAgIC8vIElmIHRoZSBpbml0aWFsIHBvc2l0aW9uIGlzIGxvY2F0ZWQgb3V0c2lkZSB0aGUgYm91
bmRzIGFkanVzdCBpdCBpbmNyZW1lbnRhbGx5IGFzIG5lZWRlZC4KKyAgICBDaGFyYWN0ZXJPZmZz
ZXQgbmV4dENoYXJPZmZzZXQgPSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCwg
ZmFsc2UpOworICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c0NoYXJPZmZzZXQgPSBwcmV2aW91
c0NoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZhbHNlKTsKKyAgICB3aGlsZSAoIW5l
eHRDaGFyT2Zmc2V0LmlzTnVsbCgpIHx8ICFwcmV2aW91c0NoYXJPZmZzZXQuaXNOdWxsKCkpIHsK
KyAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoYWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rl
ck9mZnNldChuZXh0Q2hhck9mZnNldCkuY2VudGVyKCkpKQorICAgICAgICAgICAgcmV0dXJuIG5l
eHRDaGFyT2Zmc2V0OworICAgICAgICBpZiAocmVjdC5jb250YWlucyhhYnNvbHV0ZUNhcmV0Qm91
bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KHByZXZpb3VzQ2hhck9mZnNldCkuY2VudGVyKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIHByZXZpb3VzQ2hhck9mZnNldDsKKyAgICAgICAgCisgICAgICAgIG5l
eHRDaGFyT2Zmc2V0ID0gbmV4dENoYXJhY3Rlck9mZnNldChuZXh0Q2hhck9mZnNldCwgZmFsc2Up
OworICAgICAgICBwcmV2aW91c0NoYXJPZmZzZXQgPSBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChw
cmV2aW91c0NoYXJPZmZzZXQsIGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIENoYXJh
Y3Rlck9mZnNldCgpOworfQorCisvLyBGSVhNRTogUmVtb3ZlIFZpc2libGVQb3NpdGlvbiBjb2Rl
IGFmdGVyIGltcGxlbWVudGluZyB0aGlzIHVzaW5nIENoYXJhY3Rlck9mZnNldC4KK0NoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjplbmRDaGFyYWN0ZXJPZmZzZXRPZkxpbmUoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCit7CisgICAgaWYgKGNoYXJhY3Rlck9mZnNl
dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAg
IFZpc2libGVQb3NpdGlvbiB2cCA9IHZpc2libGVQb3NpdGlvbkZyb21DaGFyYWN0ZXJPZmZzZXQo
Y2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gZW5kTGluZSA9IGVuZE9mTGlu
ZSh2cCk7CisgICAgCisgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRp
b24oZW5kTGluZSk7Cit9CisKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydENo
YXJhY3Rlck9mZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNl
dCkKK3sKKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
Q2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgVmlzaWJsZVBvc2l0aW9uIHZwID0gdmlzaWJs
ZVBvc2l0aW9uRnJvbUNoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydExpbmUgPSBzdGFydE9mTGluZSh2cCk7CisgICAgCisgICAgcmV0dXJu
IGNoYXJhY3Rlck9mZnNldEZyb21WaXNpYmxlUG9zaXRpb24oc3RhcnRMaW5lKTsKK30KKworQ2hh
cmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KGludCBp
bmRleCwgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqKQoreworICAgIGlmICghb2JqKQor
ICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgLy8gU2luY2UgdGhp
cyB3b3VsZCBvbmx5IHdvcmsgb24gcmVuZGVyZWQgbm9kZXMsIHVzaW5nIFZpc2libGVQb3NpdGlv
biB0byBjcmVhdGUgYSBjb2xsYXBzZWQKKyAgICAvLyByYW5nZSBzaG91bGQgYmUgZmluZS4KKyAg
ICBWaXNpYmxlUG9zaXRpb24gdnAgPSBvYmotPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGluZGV4
KTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHZwLCB2cCk7CisgICAgCisg
ICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgdHJ1ZSk7
Cit9CisKK2ludCBBWE9iamVjdENhY2hlOjppbmRleEZvckNoYXJhY3Rlck9mZnNldChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCwgQWNjZXNzaWJpbGl0eU9iamVjdCogb2Jq
KQoreworICAgIC8vIENyZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBzbyB0aGF0IHdlIGNhbiBnZXQg
dGhlIFZpc2libGVQb3NpdGlvbiBmcm9tIGl0LgorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBy
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0
ZXJPZmZzZXQpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiAwOworICAgIFZpc2li
bGVQb3NpdGlvbiB2cCA9IHJhbmdlLT5zdGFydFBvc2l0aW9uKCk7CisgICAgcmV0dXJuIG9iai0+
aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odnApOworfQorCiBjb25zdCBFbGVtZW50KiBBWE9iamVj
dENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBj
b25zdCBFbGVtZW50KiByZXN1bHQgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNp
b24gMTk3NzA5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw2ICsyMDAsNyBAQCBwdWJsaWM6CiAgICAgQ2hhcmFj
dGVyT2Zmc2V0IG5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgYm9v
bCBpZ25vcmVOZXh0Tm9kZVN0YXJ0ID0gdHJ1ZSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZp
b3VzQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wgaWdub3JlUHJl
dmlvdXNOb2RlRW5kID0gdHJ1ZSk7CiAgICAgdm9pZCBzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFG
b3JSYW5nZShUZXh0TWFya2VyRGF0YSYsIFJlZlB0cjxSYW5nZT4sIGJvb2wpOworICAgIENoYXJh
Y3Rlck9mZnNldCBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoUmVmUHRyPFJhbmdl
PiwgYm9vbCk7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZv
clRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJEYXRhJik7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgY29u
c3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgc3RhdGljIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JO
b2RlQ29udGVudHMoTm9kZSopOwpAQCAtMjIwLDYgKzIyMSwxOSBAQCBwdWJsaWM6CiAgICAgUmVm
UHRyPFJhbmdlPiBzZW50ZW5jZUZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dFNlbnRlbmNlRW5kQ2hhcmFjdGVyT2Zmc2V0
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1Nl
bnRlbmNlU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAg
CisgICAgLy8gQm91bmRzCisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclBv
aW50KGNvbnN0IEludFBvaW50JiwgQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAgIEludFJlY3Qg
YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yQm91bmRzKGNvbnN0
IEludFJlY3QmLCBib29sKTsKKyAgICAKKyAgICAvLyBMaW5lcworICAgIENoYXJhY3Rlck9mZnNl
dCBlbmRDaGFyYWN0ZXJPZmZzZXRPZkxpbmUoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAg
Q2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYpOworICAgIAorICAgIC8vIEluZGV4CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldEZvckluZGV4KGludCwgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCopOworICAg
IGludCBpbmRleEZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Kik7CiAKICAgICBlbnVtIEFYTm90aWZpY2F0aW9uIHsKICAgICAgICAg
QVhBY3RpdmVEZXNjZW5kYW50Q2hhbmdlZCwKQEAgLTMyMSw3ICszMzUsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBzZXRUZXh0TWFya2VyRGF0YVdpdGhDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtl
ckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBVQ2hhcjMyIGNoYXJhY3RlckFm
dGVyKGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIFVDaGFyMzIgY2hhcmFjdGVyQmVmb3Jl
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwotICAgIENoYXJhY3Rlck9mZnNldCBzdGFydE9yRW5k
Q2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiwgYm9vbCk7CiAgICAgQ2hhcmFj
dGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoTm9kZSYsIGludCwgVHJh
dmVyc2VPcHRpb24gPSBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQpOwogICAgIENoYXJhY3Rlck9mZnNl
dCBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEJvdW5kYXJ5U2VhcmNo
RnVuY3Rpb24pOwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0Qm91bmRhcnkoY29uc3QgQ2hhcmFj
dGVyT2Zmc2V0JiwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CkBAIC0zMzEsNiArMzQ0LDkgQEAg
cHJvdGVjdGVkOgogICAgIENoYXJhY3Rlck9mZnNldCBlbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFn
cmFwaChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
PSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
Q2hhcmFjdGVyT2Zmc2V0T2ZTZW50ZW5jZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBD
aGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZTZW50ZW5jZShjb25zdCBDaGFyYWN0
ZXJPZmZzZXQmKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQo
Y29uc3QgSW50UG9pbnQmKTsKKyAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0Rm9yQ2hhcmFj
dGVyT2Zmc2V0KFJlbmRlck9iamVjdComLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAgICBi
b29sIHNob3VsZFNraXBCb3VuZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKIAogcHJpdmF0ZToKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb290
V2ViQXJlYSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxOTc3MDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTk4LDYgKzExOTgsMjAgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0
eU9iamVjdAogICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydFBvc2l0aW9uLCBl
bmRQb3NpdGlvbik7CiB9CiAKK1JlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFu
Z2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IGdldExlbmd0aEZvclRleHRSYW5nZSgpOworICAg
IGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGF4T2Jq
ZWN0Q2FjaGUoKSkgeworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+Y2hh
cmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2Uuc3RhcnQsIHRoaXMpOworICAgICAgICBDaGFyYWN0
ZXJPZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLnN0YXJ0
ICsgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZvclVu
b3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojps
aW5lUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlv
bikgY29uc3QKIHsKICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2ZM
aW5lKHZpc2libGVQb3NpdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTk3NzA5KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgzNSwxMCArODM1LDEzIEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb25S
YW5nZSBzdHlsZVJhbmdlRm9yUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7
CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShj
b25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvblJhbmdlIGxp
bmVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OworICAgIAor
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQbGFpblRleHRSYW5nZShjb25zdCBQbGFpblRleHRS
YW5nZSYpIGNvbnN0OwogCiAgICAgU3RyaW5nIHN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdl
KGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Q7CiAgICAgU3RyaW5nIHN0cmluZ0Zv
clJhbmdlKFJlZlB0cjxSYW5nZT4pIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHNG
b3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0
IHsgcmV0dXJuIEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgSW50UmVjdCBib3VuZHNGb3JSYW5n
ZShjb25zdCBSZWZQdHI8UmFuZ2U+KSBjb25zdCB7IHJldHVybiBJbnRSZWN0KCk7IH0KICAgICBp
bnQgbGVuZ3RoRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFu
Z2UmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25S
YW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IHsgfQogCkBAIC04NzIsNiAr
ODc1LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBTdHJpbmcgZG9BWFN0cmluZ0ZvclJhbmdl
KGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29uc3QgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICB2
aXJ0dWFsIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJikg
Y29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CisgICAgdmlydHVhbCBJbnRSZWN0IGRvQVhCb3Vu
ZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBsYWluVGV4dFJhbmdlJikgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CiAgICAgU3RyaW5nIGxpc3RNYXJrZXJUZXh0Rm9yTm9k
ZUFuZFBvc2l0aW9uKE5vZGUqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKIAogICAg
IHVuc2lnbmVkIGRvQVhMaW5lRm9ySW5kZXgodW5zaWduZWQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxOTc3MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYyLDYg
KzE5NjIsMjYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlSXNUZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpi
b3VuZHNGb3JSZWN0cyhMYXlvdXRSZWN0JiByZWN0MSwgTGF5b3V0UmVjdCYgcmVjdDIsIFJlZlB0
cjxSYW5nZT4gZGF0YVJhbmdlKSBjb25zdAoreworICAgIExheW91dFJlY3Qgb3VyUmVjdCA9IHJl
Y3QxOworICAgIG91clJlY3QudW5pdGUocmVjdDIpOworICAgIAorICAgIC8vIGlmIHRoZSByZWN0
YW5nbGUgc3BhbnMgbGluZXMgYW5kIGNvbnRhaW5zIG11bHRpcGxlIHRleHQgY2hhcnMsIHVzZSB0
aGUgcmFuZ2UncyBib3VuZGluZyBib3ggaW50ZWFkCisgICAgaWYgKHJlY3QxLm1heFkoKSAhPSBy
ZWN0Mi5tYXhZKCkpIHsKKyAgICAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGRhdGFSYW5n
ZS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOworICAgICAgICBTdHJpbmcgcmFuZ2VTdHJpbmcgPSBw
bGFpblRleHQoZGF0YVJhbmdlLmdldCgpKTsKKyAgICAgICAgaWYgKHJhbmdlU3RyaW5nLmxlbmd0
aCgpID4gMSAmJiAhYm91bmRpbmdCb3guaXNFbXB0eSgpKQorICAgICAgICAgICAgb3VyUmVjdCA9
IGJvdW5kaW5nQm94OworICAgIH0KKyAgICAKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJu
IG1fcmVuZGVyZXItPnZpZXcoKS5mcmFtZVZpZXcoKS5jb250ZW50c1RvU2NyZWVuKHNuYXBwZWRJ
bnRSZWN0KG91clJlY3QpKTsKKyNlbHNlCisgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KG91clJl
Y3QpOworI2VuZGlmCit9CisKIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91
bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmIHZp
c2libGVQb3NpdGlvblJhbmdlKSBjb25zdAogewogICAgIGlmICh2aXNpYmxlUG9zaXRpb25SYW5n
ZS5pc051bGwoKSkKQEAgLTE5ODUsMjMgKzIwMDUsMzkgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojpib3VuZAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIExheW91dFJl
Y3Qgb3VycmVjdCA9IHJlY3QxOwotICAgIG91cnJlY3QudW5pdGUocmVjdDIpOworICAgIFJlZlB0
cjxSYW5nZT4gZGF0YVJhbmdlID0gbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwor
ICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0MSwgcmVjdDIsIGRhdGFSYW5nZSk7Cit9CisK
K0ludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3Qg
UmVmUHRyPFJhbmdlPiByYW5nZSkgY29uc3QKK3sKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOwogICAgIAotICAgIC8vIGlmIHRoZSByZWN0YW5nbGUgc3BhbnMgbGlu
ZXMgYW5kIGNvbnRhaW5zIG11bHRpcGxlIHRleHQgY2hhcnMsIHVzZSB0aGUgcmFuZ2UncyBib3Vu
ZGluZyBib3ggaW50ZWFkCi0gICAgaWYgKHJlY3QxLm1heFkoKSAhPSByZWN0Mi5tYXhZKCkpIHsK
LSAgICAgICAgUmVmUHRyPFJhbmdlPiBkYXRhUmFuZ2UgPSBtYWtlUmFuZ2UocmFuZ2Uuc3RhcnQs
IHJhbmdlLmVuZCk7Ci0gICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBkYXRhUmFuZ2Ut
PmFic29sdXRlQm91bmRpbmdCb3goKTsKLSAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxh
aW5UZXh0KGRhdGFSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGlmIChyYW5nZVN0cmluZy5sZW5ndGgo
KSA+IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG91cnJlY3QgPSBi
b3VuZGluZ0JveDsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHRoaXMtPmF4T2JqZWN0Q2Fj
aGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIAor
ICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zm
c2V0Rm9yUmFuZ2UocmFuZ2UsIHRydWUpOworICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNo
ZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCBmYWxzZSk7CisgICAg
CisgICAgTGF5b3V0UmVjdCByZWN0MSA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hh
cmFjdGVyT2Zmc2V0KHN0YXJ0KTsKKyAgICBMYXlvdXRSZWN0IHJlY3QyID0gY2FjaGUtPmFic29s
dXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoZW5kKTsKKyAgICAKKyAgICAvLyByZWFk
anVzdCBmb3IgcG9zaXRpb24gYXQgdGhlIGVkZ2Ugb2YgYSBsaW5lLiBUaGlzIGlzIHRvIGV4Y2x1
ZGUgbGluZSByZWN0IHRoYXQgZG9lc24ndCBuZWVkIHRvIGJlIGFjY291bnRlZCBpbiB0aGUgcmFu
Z2UgYm91bmRzLgorICAgIGlmIChyZWN0Mi55KCkgIT0gcmVjdDEueSgpKSB7CisgICAgICAgIENo
YXJhY3Rlck9mZnNldCBlbmRPZkZpcnN0TGluZSA9IGNhY2hlLT5lbmRDaGFyYWN0ZXJPZmZzZXRP
ZkxpbmUoc3RhcnQpOworICAgICAgICBpZiAoc3RhcnQuaXNFcXVhbChlbmRPZkZpcnN0TGluZSkp
IHsKKyAgICAgICAgICAgIHN0YXJ0ID0gY2FjaGUtPm5leHRDaGFyYWN0ZXJPZmZzZXQoc3RhcnQs
IGZhbHNlKTsKKyAgICAgICAgICAgIHJlY3QxID0gY2FjaGUtPmFic29sdXRlQ2FyZXRCb3VuZHNG
b3JDaGFyYWN0ZXJPZmZzZXQoc3RhcnQpOworICAgICAgICB9CisgICAgICAgIGlmIChlbmQuaXNF
cXVhbChlbmRPZkZpcnN0TGluZSkpIHsKKyAgICAgICAgICAgIGVuZCA9IGNhY2hlLT5wcmV2aW91
c0NoYXJhY3Rlck9mZnNldChlbmQsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlY3QyID0gY2FjaGUt
PmFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoZW5kKTsKKyAgICAgICAgfQog
ICAgIH0KICAgICAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIG1fcmVuZGVyZXItPnZp
ZXcoKS5mcmFtZVZpZXcoKS5jb250ZW50c1RvU2NyZWVuKHNuYXBwZWRJbnRSZWN0KG91cnJlY3Qp
KTsKLSNlbHNlCi0gICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KG91cnJlY3QpOwotI2VuZGlmCisg
ICAgcmV0dXJuIGJvdW5kc0ZvclJlY3RzKHJlY3QxLCByZWN0MiwgcmFuZ2UpOwogfQogICAgIAog
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3NpdGlv
blJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiByYW5nZSkgY29uc3QKQEAgLTIxOTYs
NiArMjIzMiwxMyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCCiAg
ICAgcmV0dXJuIEludFJlY3QoKTsKIH0KIAorSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRl
eHRSYW5nZSYgcmFuZ2UpIGNvbnN0Cit7CisgICAgaWYgKGFsbG93c1RleHRSYW5nZXMoKSkKKyAg
ICAgICAgcmV0dXJuIGJvdW5kc0ZvclJhbmdlKHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2Up
KTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KEhUTUxB
cmVhRWxlbWVudCogYXJlYSwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIGlm
ICghYXJlYSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxOTc3MDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMTczLDYgKzE3Myw4IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRp
b25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZpc2li
bGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yTGluZSh1bnNpZ25lZCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIEludFJlY3Qg
Ym91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
SW50UmVjdCBib3VuZHNGb3JSZWN0cyhMYXlvdXRSZWN0JiwgTGF5b3V0UmVjdCYsIFJlZlB0cjxS
YW5nZT4pIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShj
b25zdCBWaXNpYmxlUG9zaXRpb25SYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgc3Vw
cG9ydHNBUklBRmxvd1RvKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcmlhRmxvd1RvRWxl
bWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC0y
MDAsNiArMjAyLDcgQEAgcHVibGljOgogICAgIAogICAgIFN0cmluZyBkb0FYU3RyaW5nRm9yUmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICBJbnRSZWN0IGRv
QVhCb3VuZHNGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIEludFJlY3QgZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQoY29uc3Qg
UGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICAKICAgICBTdHJpbmcgc3RyaW5n
VmFsdWVGb3JNU0FBKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIHN0cmluZ1JvbGVGb3JN
U0FBKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTk3NzA5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIxNDgsMTAgKzIxNDgsMTQgQEAgLSAoTlNJbnRlZ2VyKXBvc2l0aW9uRm9yVGV4dE1h
cmtlcjooV2ViQQogICAgIGlmICghbWFya2VyKQogICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsg
ICAgCiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihbbWFya2VyIHZpc2libGVQb3Np
dGlvbl0pOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBOU1JhbmdlIG5zUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpy
YW5nZS5nZXQoKV07Ci0gICAgcmV0dXJuIG5zUmFuZ2UubG9jYXRpb247CisgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgeworICAgICAgICBD
aGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW21hcmtlciBjaGFyYWN0ZXJPZmZzZXRd
OworICAgICAgICAvLyBDcmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFjdGVy
T2Zmc2V0IG9iamVjdC4KKyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJP
ZmZzZXQpOworICAgICAgICBOU1JhbmdlIG5zUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvTlNSYW5n
ZTpyYW5nZS5nZXQoKV07CisgICAgICAgIHJldHVybiBuc1JhbmdlLmxvY2F0aW9uOworICAgIH0K
KyAgICByZXR1cm4gTlNOb3RGb3VuZDsKIH0KIAogLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5n
ZQpAQCAtMjIwNSwxMSArMjIwOSwxNyBAQCAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9y
U2VsZWN0aW9uCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX29iamVjdC0+c2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi52aXNpYmxl
U3RhcnQoKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBzZWxlY3Rpb24udmlz
aWJsZUVuZCgpOworICAgIAorICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IAorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rl
ck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0g
Y2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgZmFsc2UpOwog
Ci0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gW1dlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnN0YXJ0UG9z
aXRpb24gY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Ci0gICAgV2ViQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0
ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjplbmRQb3NpdGlvbiBjYWNoZTptX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRN
YXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFyYWN0
ZXJPZmZzZXQ6c3RhcnQgY2FjaGU6Y2FjaGVdOworICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKiBlbmRNYXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldp
dGhDaGFyYWN0ZXJPZmZzZXQ6ZW5kIGNhY2hlOmNhY2hlXTsKICAgICBpZiAoIXN0YXJ0TWFya2Vy
IHx8ICFlbmRNYXJrZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0yMjI0LDExICsy
MjM0LDEzIEBAIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmsKICAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOk5TTWFrZVJhbmdl
KHBvc2l0aW9uLCAwKV07CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oKnJh
bmdlLCBET1dOU1RSRUFNKTsKIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24g
PSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjp2aXNpYmxlUG9zaXRpb24g
Y2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CisgICAgQVhPYmplY3RDYWNoZSogY2Fj
aGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgCisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9
IGNhY2hlLT5zdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIHRydWUpOwor
ICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFy
YWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0IGNhY2hlOmNhY2hlXTsKIH0KIAogLSAoaWQpX3N0
cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJhbmdlIGF0dHJpYnV0ZWQ6KEJPT0wpYXR0cmlidXRlZApA
QCAtMjQwNSwxNSArMjQxNywxNCBAQCAtIChDR1JlY3QpZnJhbWVGb3JUZXh0TWFya2VyczooTlNB
cnJheSAqCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAgICAg
ICAgcmV0dXJuIENHUmVjdFplcm87CiAKLSAgICBpZiAoW2FycmF5IGNvdW50XSAhPSAyKQorICAg
IEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBp
ZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLSAgICAKLSAgICBXZWJBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciogc3RhcnRNYXJrZXIgPSBbYXJyYXkgb2JqZWN0QXRJbmRleDow
XTsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2VyID0gW2FycmF5IG9i
amVjdEF0SW5kZXg6MV07Ci0gICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNs
YXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQorICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOmFycmF5XTsKKyAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4gQ0dSZWN0WmVybzsKLQotICAgIEludFJlY3QgcmVjdCA9IG1f
b2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb25SYW5n
ZShbc3RhcnRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXSwgW2VuZE1hcmtlciB2aXNpYmxlUG9zaXRp
b25dKSk7CisgICAgCisgICAgSW50UmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclJhbmdl
KHJhbmdlKTsKICAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3RUb1NjcmVlblNwYWNlOnJlY3Rd
OwogfQogCkBAIC0yNDIyLDggKzI0MzMsMTEgQEAgLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgKil0ZXh0TWFyawogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0p
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IG1f
b2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChJbnRQb2ludChwb2ludCkpOwotICAgIHJl
dHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9z
aXRpb246cG9zIGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hl
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZz
ZXQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQoSW50UG9pbnQocG9pbnQpLCBtX29i
amVjdCk7CisgICAgcmV0dXJuIFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aENoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXQgY2FjaGU6Y2FjaGVdOwogfQogCiAt
IChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZz
ZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTk3NzA5KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM3NzYsOCArMzc3Niw4IEBAIC0gKE5TU3RyaW5nKilhY2Nl
c3NpYmlsaXR5QWN0aW9uRGVzY3JpcHQKIC0gKE5TQXR0cmlidXRlZFN0cmluZyopZG9BWEF0dHJp
YnV0ZWRTdHJpbmdGb3JSYW5nZTooTlNSYW5nZSlyYW5nZQogewogICAgIFBsYWluVGV4dFJhbmdl
IHRleHRSYW5nZSA9IFBsYWluVGV4dFJhbmdlKHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgp
OwotICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NSYW5nZSA9IG1fb2JqZWN0LT52
aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKHRleHRSYW5nZSk7Ci0gICAgcmV0dXJuIFtzZWxm
IGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOltzZWxmIHRleHRNYXJrZXJS
YW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZpc2libGVQb3NSYW5nZS5zdGFydCBlbmRQb3NpdGlv
bjp2aXNpYmxlUG9zUmFuZ2UuZW5kXV07CisgICAgUmVmUHRyPFJhbmdlPiB3ZWJSYW5nZSA9IG1f
b2JqZWN0LT5yYW5nZUZvclBsYWluVGV4dFJhbmdlKHRleHRSYW5nZSk7CisgICAgcmV0dXJuIFtz
ZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOltzZWxmIHRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZTp3ZWJSYW5nZV1dOwogfQogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9O
U1JhbmdlOihSYW5nZSopcmFuZ2UKQEAgLTM4MDQsOCArMzgwNCwxMyBAQCAtIChOU0ludGVnZXIp
X2luZGV4Rm9yVGV4dE1hcmtlcjooaWQpbWFyCiAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgIHJl
dHVybiBOU05vdEZvdW5kOwogICAgIAotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKFtz
ZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6bWFya2VyXSk7Ci0gICAgcmV0dXJuIFtz
ZWxmIF9jb252ZXJ0VG9OU1JhbmdlOnNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
XS5sb2NhdGlvbjsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhP
YmplY3RDYWNoZSgpKSB7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQg
PSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOm1hcmtlcl07CisgICAgICAgIC8v
IENyZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9tIHRoZSBDaGFyYWN0ZXJPZmZzZXQgb2JqZWN0
LgorICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7CisgICAg
ICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpyYW5nZS5nZXQoKV0ubG9jYXRpb247
CisgICAgfQorICAgIHJldHVybiBOU05vdEZvdW5kOwogfQogCiAtIChpZClfdGV4dE1hcmtlckZv
ckluZGV4OihOU0ludGVnZXIpdGV4dEluZGV4CkBAIC0zODE4LDggKzM4MjMsMTEgQEAgLSAoaWQp
X3RleHRNYXJrZXJGb3JJbmRleDooTlNJbnRlZ2VyKXRleAogICAgIGlmICghdGV4dFJhbmdlIHx8
ICF0ZXh0UmFuZ2UtPmJvdW5kYXJ5UG9pbnRzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24odGV4dFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpOwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOnBv
c2l0aW9uXTsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpKSB7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBj
YWNoZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHRleHRSYW5nZSwgdHJ1ZSk7
CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJh
Y3Rlck9mZnNldF07CisgICAgfQorICAgIHJldHVybiBuaWw7CiB9CiAKIC8vIFRoZSBSVEYgcmVw
cmVzZW50YXRpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWNjZXNzaWJpbGl0
eSBvYmplY3QgdGhhdCBpcwpAQCAtMzk2MywxMiArMzk3MSwyMCBAQCAtIChpZClhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlFbmRUZXh0TWFya2VyRm9yQm91bmRzUGFy
YW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgSW50UmVjdCB3ZWJDb3JlUmVjdCA9IFtz
ZWxmIHNjcmVlblRvQ29udGVudHM6ZW5jbG9zaW5nSW50UmVjdChyZWN0KV07Ci0gICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT52aXNpYmxl
UG9zaXRpb25Gb3JCb3VuZHMod2ViQ29yZVJlY3QsIExhc3RWaXNpYmxlUG9zaXRpb25Gb3JCb3Vu
ZHMpXTsKKyAgICAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKSkgeworICAgICAgICAgICAgSW50UmVjdCB3ZWJDb3JlUmVjdCA9IFtzZWxmIHNj
cmVlblRvQ29udGVudHM6ZW5jbG9zaW5nSW50UmVjdChyZWN0KV07CisgICAgICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckJv
dW5kcyh3ZWJDb3JlUmVjdCwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbmlsOwogICAgIH0KICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6TlNBY2Nlc3NpYmlsaXR5U3RhcnRUZXh0TWFya2VyRm9yQm91bmRzUGFyYW1ldGVyaXplZEF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgSW50UmVjdCB3ZWJDb3JlUmVjdCA9IFtzZWxmIHNjcmVlblRv
Q29udGVudHM6ZW5jbG9zaW5nSW50UmVjdChyZWN0KV07Ci0gICAgICAgIHJldHVybiBbc2VsZiB0
ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JC
b3VuZHMod2ViQ29yZVJlY3QsIEZpcnN0VmlzaWJsZVBvc2l0aW9uRm9yQm91bmRzKV07CisgICAg
ICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkp
IHsKKyAgICAgICAgICAgIEludFJlY3Qgd2ViQ29yZVJlY3QgPSBbc2VsZiBzY3JlZW5Ub0NvbnRl
bnRzOmVuY2xvc2luZ0ludFJlY3QocmVjdCldOworICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMod2ViQ29y
ZVJlY3QsIHRydWUpOworICAgICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFy
YWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bmlsOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5TGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXJQYXJhbWV0ZXJpemVk
QXR0cmlidXRlXSkgewpAQCAtNDAxNywzMCArNDAzMyw0MiBAQCAtIChpZClhY2Nlc3NpYmlsaXR5
QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRv
U3RyaW5nOkAiQVhUZXh0TWFya2VyRm9yUG9zaXRpb24iXSkgewogICAgICAgICBJbnRQb2ludCB3
ZWJDb3JlUG9pbnQgPSBJbnRQb2ludChwb2ludCk7Ci0gICAgICAgIHJldHVybiBwb2ludFNldCA/
IFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnZpc2libGVQb3Np
dGlvbkZvclBvaW50KHdlYkNvcmVQb2ludCldIDogbmlsOworICAgICAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghcG9pbnRT
ZXQgfHwgIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCh3
ZWJDb3JlUG9pbnQsIG1fb2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJG
b3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKICAgICB9CiAgICAgCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhCb3VuZHNGb3JUZXh0TWFya2VyUmFuZ2Ui
XSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBbc2Vs
ZiB2aXNpYmxlUG9zaXRpb25SYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2Vd
OwotICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9zaXRp
b25SYW5nZSh2aXNpYmxlUG9zUmFuZ2UpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
W3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAg
TlNSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91bmRzRm9yUmFuZ2UocmFuZ2UpOwogICAgICAgICBy
ZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKICAgICB9CiAgICAgCiAgICAgaWYg
KFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUJvdW5kc0ZvclJhbmdl
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
ID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uKTsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJ
bmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgpOworICAgICAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUp
CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQg
PSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24sIG1fb2JqZWN0
KTsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRG
b3JJbmRleChyYW5nZS5sb2NhdGlvbityYW5nZS5sZW5ndGgsIG1fb2JqZWN0KTsKICAgICAgICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclZpc2libGVQb3Np
dGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJhbmdlKHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMoc3RhcnQsIGVuZCk7CisgICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmJvdW5kc0Zv
clJhbmdlKHJhbmdlKTsKICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVj
dF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlTdHJpbmdGb3JSYW5nZVBhcmFtZXRlcml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAg
ICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJ
bmRleChyYW5nZS5sb2NhdGlvbik7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBtX29i
amVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2UubG9jYXRpb24rcmFuZ2UubGVuZ3Ro
KTsKKyAgICAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4
KHJhbmdlLmxvY2F0aW9uLCBtX29iamVjdCk7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQg
PSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24gKyByYW5nZS5s
ZW5ndGgsIG1fb2JqZWN0KTsKICAgICAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051
bGwoKSkKICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIHJldHVybiBtX29iamVjdC0+
c3RyaW5nRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnQs
IGVuZCkpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5v
cmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIG1fb2Jq
ZWN0LT5zdHJpbmdGb3JSYW5nZShyYW5nZSk7CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZSJdKQpAQCAtNDI3Niw3ICs0MzA0LDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOihOU1N0cgogICAgICAgICAgICAgaWYgKCFyYW5nZVNldCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmlsOwogICAgICAgICAgICAgUGxhaW5UZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQ
bGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAg
IE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShwbGFpblRleHRSYW5n
ZSk7CisgICAgICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5kb0FYQm91bmRzRm9yUmFu
Z2VVc2luZ0NoYXJhY3Rlck9mZnNldChwbGFpblRleHRSYW5nZSk7CiAgICAgICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0XTsKICAgICAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCShyZXZpc2lvbiAxOTc3MDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMyOSw5ICsxMzI5LDE0IEBAIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3RJblJlbmRl
cmVyRm9yQ2EKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyOwogICAgIExheW91dFJlY3QgbG9j
YWxSZWN0ID0gY2FyZXRQb3NpdGlvbi5sb2NhbENhcmV0UmVjdChyZW5kZXJlcik7CiAKKyAgICBy
ZXR1cm4gbG9jYWxDYXJldFJlY3RJblJlbmRlcmVyRm9yUmVjdChsb2NhbFJlY3QsIGNhcmV0UG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLCByZW5kZXJlciwgY2FyZXRQ
YWludGVyKTsKK30KKworTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JSZWN0
KExheW91dFJlY3QmIGxvY2FsUmVjdCwgTm9kZSogbm9kZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgUmVuZGVyQmxvY2sqJiBjYXJldFBhaW50ZXIpCit7CiAgICAgLy8gR2V0IHRoZSByZW5kZXJl
ciB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldAogICAgIC8v
ICh3aGljaCBpcyBlaXRoZXIgdGhlIHJlbmRlcmVyIHdlIGp1c3QgZm91bmQsIG9yIG9uZSBvZiBp
dHMgY29udGFpbmVycykuCi0gICAgY2FyZXRQYWludGVyID0gcmVuZGVyZXJGb3JDYXJldFBhaW50
aW5nKGNhcmV0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICBjYXJldFBhaW50ZXIgPSByZW5kZXJlckZvckNhcmV0UGFpbnRpbmcobm9kZSk7CiAKICAgICAv
LyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSByZW5kZXJlciBhbmQgdGhlIGNhcmV0UGFp
bnRlci4KICAgICB3aGlsZSAocmVuZGVyZXIgIT0gY2FyZXRQYWludGVyKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShyZXZpc2lvbiAxOTc3MDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsy
NzAsNyBAQCBjb25zdCBTdHJpbmcmIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKTsKIAogUmVuZGVy
QmxvY2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZyhOb2RlKik7CiBMYXlvdXRSZWN0IGxvY2Fs
Q2FyZXRSZWN0SW5SZW5kZXJlckZvckNhcmV0UGFpbnRpbmcoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgUmVuZGVyQmxvY2sqJik7CitMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZv
clJlY3QoTGF5b3V0UmVjdCYsIE5vZGUqLCBSZW5kZXJPYmplY3QqLCBSZW5kZXJCbG9jayomKTsK
IEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChSZW5kZXJCbG9jayogcmVu
ZGVyZXJGb3JDYXJldFBhaW50aW5nLCBjb25zdCBMYXlvdXRSZWN0Jik7CiAKIH0KSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE5NzcwOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAzLTA3ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBib3VuZHMvcG9zaXRpb24gYW5kIGluZGV4IHJl
bGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHVzaW5nIFRleHRJdGVyYXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0OTc2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LW1hcmtlci1mb3ItaW5kZXgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1mb3ItaW5kZXguaHRtbDogQWRkZWQuCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtZXhwZWN0ZWQudHh0
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWw6
CisKIDIwMTYtMDMtMDcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWFya2luZyBqcy9wcm9taXNlcy10ZXN0cy9wcm9taXNlcy10ZXN0cy0yLTMtMy5odG1s
IGFzIGZsYWt5IG9uIG1hYwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1tYXJrZXItZm9yLWluZGV4LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1mb3ItaW5kZXgtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXIt
Zm9yLWluZGV4LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACit0
ZXh0CisKK3RleHQKK2F1ZGlvIGZpbGUuCitUaGlzIHZlcmlmaWVzIHRoYXQgdGV4dE1hcmtlckZv
ckluZGV4IGFuZCBpbmRleEZvclRleHRNYXJrZXIgYXJlIHdvcmtpbmcgY29ycmVjdGx5LgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworT3JpZ2luYWwgbWFya2VyIHN0cmluZzogeAor
SW5kZXggaXM6IDMKK05ldyBtYXJrZXIgc3RyaW5nOiB4CisKK09yaWdpbmFsIG1hcmtlciBzdHJp
bmc6ICdsaW5lIGJyZWFrJworSW5kZXggaXM6IDYKK05ldyBtYXJrZXIgc3RyaW5nOiAnbGluZSBi
cmVhaycKKworT3JpZ2luYWwgbWFya2VyIHN0cmluZzogZgorSW5kZXggaXM6IDE4CitOZXcgbWFy
a2VyIHN0cmluZzogZgorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJr
ZXItZm9yLWluZGV4Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1mb3ItaW5kZXguaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJvZHkgaWQ9ImJvZHkiIHRhYmluZGV4PSIwIj4KKwor
PGRpdiB0YWJpbmRleD0iMCIgaWQ9InRleHQxIj50ZXh0PC9kaXY+Cis8YnI+Cit0ZXh0CisKKzxk
aXYgaWQ9InRleHQyIj4KK2F1ZGlvIDxhdWRpbyBjb250cm9scz48c291cmNlIHNyYz0idGVzdC5t
cDMiIHR5cGU9ImF1ZGlvL21wZWciPjwvYXVkaW8+ZmlsZS4KKzwvZGl2PgorCis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisg
ICAgZGVzY3JpcHRpb24oIlRoaXMgdmVyaWZpZXMgdGhhdCB0ZXh0TWFya2VyRm9ySW5kZXggYW5k
IGluZGV4Rm9yVGV4dE1hcmtlciBhcmUgd29ya2luZyBjb3JyZWN0bHkuIik7CisKKyAgICBpZiAo
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHZhciB0ZXh0ID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MSIpOworICAg
ICAgICAvLyBHZXQgdGhlIGFjdHVhbCB0ZXh0IG5vZGUuCisgICAgICAgIHRleHQgPSB0ZXh0LmNo
aWxkQXRJbmRleCgwKTsKKyAgICAgICAgCisgICAgICAgIHZhciBwcmV2aW91cywgY3VycmVudDsK
KyAgICAgICAgdmFyIHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxl
bWVudCh0ZXh0KTsKKyAgICAgICAgdmFyIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGZvcndhcmQoMywgcHJldmlvdXMsIHN0YXJ0TWFya2VyLCB0ZXh0KTsKKyAgICAgICAgcHJl
dmlvdXMgPSByZXN1bHQucHJldmlvdXM7CisgICAgICAgIGN1cnJlbnQgPSByZXN1bHQuY3VycmVu
dDsKKyAgICAgICAgdmVyaWZ5TWFya2VySW5kZXgocHJldmlvdXMsIGN1cnJlbnQsIHRleHQpOyAK
KyAgICAgICAgCisgICAgICAgIC8vIEJSCisgICAgICAgIHJlc3VsdCA9IGZvcndhcmQoMiwgcHJl
dmlvdXMsIGN1cnJlbnQsIHRleHQpOworICAgICAgICBwcmV2aW91cyA9IHJlc3VsdC5wcmV2aW91
czsKKyAgICAgICAgY3VycmVudCA9IHJlc3VsdC5jdXJyZW50OworICAgICAgICB2ZXJpZnlNYXJr
ZXJJbmRleChwcmV2aW91cywgY3VycmVudCwgdGV4dCk7IAorICAgICAgICAKKyAgICAgICAgLy8g
QXR0YWNobWVudAorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOworICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0
LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHN0YXJ0TWFya2VyID0g
dGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsK
KyAgICAgICAgcmVzdWx0ID0gZm9yd2FyZCg4LCBwcmV2aW91cywgc3RhcnRNYXJrZXIsIHRleHQp
OworICAgICAgICBwcmV2aW91cyA9IHJlc3VsdC5wcmV2aW91czsKKyAgICAgICAgY3VycmVudCA9
IHJlc3VsdC5jdXJyZW50OworICAgICAgICB2ZXJpZnlNYXJrZXJJbmRleChwcmV2aW91cywgY3Vy
cmVudCwgdGV4dCk7CisgICAgfQorICAgIAorICAgIAorICAgIGZ1bmN0aW9uIGZvcndhcmQoY291
bnQsIHByZXZpb3VzTWFya2VyLCBjdXJyZW50TWFya2VyLCBvYmopIHsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBwcmV2aW91c01hcmtlciA9
IGN1cnJlbnRNYXJrZXI7CisgICAgICAgICAgICBjdXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0
TWFya2VyKGN1cnJlbnRNYXJrZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICBwcmV2aW91czogcHJldmlvdXNNYXJrZXIsCisgICAgICAgICAgICBjdXJyZW50OiBj
dXJyZW50TWFya2VyCisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJlcGxh
Y2VMaW5lYnJlYWtJblN0cmluZyhzdHIpIHsKKyAgICAgICAgdmFyIG5ld2xpbmUgPSAnXG4nOwor
ICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXdsaW5lLCAiJ2xpbmUgYnJlYWsnIik7CisgICAg
ICAgIHJldHVybiBzdHI7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHZlcmlmeU1hcmtlcklu
ZGV4KHByZXZpb3VzTWFya2VyLCB0ZXh0TWFya2VyLCBvYmopIHsKKyAgICAgICAgdmFyIG1hcmtl
clJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocHJldmlvdXNNYXJrZXIsIHRl
eHRNYXJrZXIpOworICAgICAgICB2YXIgb3JpZ2luYWxTdHJpbmcgPSByZXBsYWNlTGluZWJyZWFr
SW5TdHJpbmcob2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkpOworICAg
ICAgICBkZWJ1ZygiT3JpZ2luYWwgbWFya2VyIHN0cmluZzogIiArIG9yaWdpbmFsU3RyaW5nKTsK
KyAgICAgICAgCisgICAgICAgIHZhciBpbmRleCA9IG9iai5pbmRleEZvclRleHRNYXJrZXIodGV4
dE1hcmtlcik7CisgICAgICAgIHZhciBuZXdNYXJrZXIgPSBvYmoudGV4dE1hcmtlckZvckluZGV4
KGluZGV4KTsKKyAgICAgICAgbWFya2VyUmFuZ2UgPSBvYmoudGV4dE1hcmtlclJhbmdlRm9yTWFy
a2VycyhwcmV2aW91c01hcmtlciwgbmV3TWFya2VyKTsKKyAgICAgICAgdmFyIG5ld1N0cmluZyA9
IHJlcGxhY2VMaW5lYnJlYWtJblN0cmluZyhvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1h
cmtlclJhbmdlKSk7CisgICAgICAgIGRlYnVnKCJJbmRleCBpczogIiArIGluZGV4ICsgIlxuTmV3
IG1hcmtlciBzdHJpbmc6ICIgKyBuZXdTdHJpbmcgKyAiXG4iKTsKKyAgICB9CisKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4
dC1tYXJrZXItd29yZC1uYXYtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxOTc3MDkpCisrKyBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw4IEBAIGxpbmUgYnJlYWtzCiBzb21lCiB0ZXh0
CiB0ZXN0IGF1ZGlvIGZpbGUKK0VkaXQgdGV4dAorCiBUaGlzIHRlc3RzIHRoYXQgd29yZCBuYXZp
Z2F0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5LgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CkBAIC01OSw2ICs2MSwxMSBAQCBMZWZ0IHdvcmQgaXM6IGNhbid0CiBSaWdodCB3b3JkIGlzOiBj
YW4ndAogUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVuZDogY2FuJ3QKIAorQ3VycmVudCBj
aGFyYWN0ZXIgaXM6IAorTGVmdCB3b3JkIGlzOiDlt6flhYvlipsKK1JpZ2h0IHdvcmQgaXM6IOW3
p+WFi+WKmworUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVuZDogc2VsZWN0J2xpbmUgYnJl
YWsn5ben5YWL5YqbCisKIEN1cnJlbnQgY2hhcmFjdGVyIGlzOiDlhYsKIExlZnQgd29yZCBpczog
5ben5YWL5YqbCiBSaWdodCB3b3JkIGlzOiDlt6flhYvlipsKQEAgLTExOSw2ICsxMjYsMTEgQEAg
TGVmdCB3b3JkIGlzOiBmaWxlCiBSaWdodCB3b3JkIGlzOiBmaWxlCiBQcmUgd29yZCBzdGFydCB0
byBuZXh0IHdvcmQgZW5kOiBmaWxlCiAKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiB0CitMZWZ0IHdv
cmQgaXM6IEVkaXQKK1JpZ2h0IHdvcmQgaXM6ICAKK1ByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29y
ZCBlbmQ6IEVkaXQgdGV4dAorCiBUZXN0IGdvaW5nIGZvcndhcmQuCiBFbmQgd29yZDogZmlsZQog
CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5h
di5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQt
bWFya2VyLXdvcmQtbmF2Lmh0bWwJKHJldmlzaW9uIDE5NzcwOSkKKysrIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDExIEBAIHNvbWU8YnI+dGV4dAogdGVzdCBhdWRpbyA8YXVkaW8gY29udHJv
bHM+PHNvdXJjZSBzcmM9InRlc3QubXAzIiB0eXBlPSJhdWRpby9tcGVnIj48L2F1ZGlvPmZpbGUK
IDwvZGl2PgogCis8cCBpZD0idGV4dDgiPgorPHN0cm9uZz5FZGl0PC9zdHJvbmc+Cit0ZXh0Cis8
L3A+CisKIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
CiAKQEAgLTY0LDEzICs2OSwxMyBAQCB0ZXN0IGF1ZGlvIDxhdWRpbyBjb250cm9scz48c291cmNl
IHNyYz0iCiAgICAgICAgIC8vIEF0ICJUIiBpbiAiVGhpc2lzIiwgc2hvdWxkIHJldHVybiB0aGUg
d29yZCBhcyAiVGhpc2lzbG9uZ3dvcmQiLgogICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5j
ZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAyLCB0ZXh0KTsKICAgICAgICAgLy8gQXQgIiAiIGJl
Zm9yZSAiSSIsIHRoZSB3b3JkIHNob3VsZCBiZSAiSSdsbCIuCi0gICAgICAgIGN1cnJlbnRNYXJr
ZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDE1LCB0ZXh0KTsKKyAgICAgICAg
Y3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMTQsIHRleHQp
OwogICAgICAgICAvLyBBdCAiICIgYmVmb3JlICJ0cnkiLCB0aGUgd29yZCBzaG91bGQgZXhjbHVk
ZXMgIi4iCi0gICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRN
YXJrZXIsIDYsIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlm
eShjdXJyZW50TWFya2VyLCA1LCB0ZXh0KTsKICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRo
ZSBjYXNlIHdpdGggY29udGVudGVkaXRhYmxlCiAgICAgICAgIC8vIEF0ICJlIiBpbiAiZWRpdGFi
bGUiLCB0aGUgd29yZCBzaG91bGQgTk9UIGluY2x1ZGUgIkNvbnRlbnQiIGJlZm9yZSBpdC4KLSAg
ICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMTks
IHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50
TWFya2VyLCAxOCwgdGV4dCk7CiAgICAgICAgIAogICAgICAgICAvLyBDaGVjayB0aGUgY2FzZSB3
aXRoIHJlcGxhY2VkIG5vZGUsIHRoZSByZXBsYWNlZCBub2RlIHNob3VsZCBiZSBjb25zaWRlcmVk
IGEgd29yZC4KICAgICAgICAgdmFyIHRleHQyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOwpAQCAtODksNiArOTQsOCBAQCB0ZXN0IGF1ZGlv
IDxhdWRpbyBjb250cm9scz48c291cmNlIHNyYz0iCiAgICAgICAgIHZhciB0ZXh0NCA9IGFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dDQiKTsKICAgICAg
ICAgdGV4dE1hcmtlclJhbmdlID0gdGV4dDQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0
NCk7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSB0ZXh0NC5zdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdoZW4g
d2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZSwgaXQgd29uJ3QgZ28gdG8gcHJldmlvdXMg
bm9kZS4KKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1h
cmtlciwgMCwgdGV4dDQpOwogICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlm
eShjdXJyZW50TWFya2VyLCAyLCB0ZXh0NCk7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZh
bmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRleHQ0KTsKICAgICAgICAgY3VycmVudE1h
cmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMSwgdGV4dDQpOwpAQCAtMTIz
LDEyICsxMzAsMTggQEAgdGVzdCBhdWRpbyA8YXVkaW8gY29udHJvbHM+PHNvdXJjZSBzcmM9Igog
ICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAx
LCB0ZXh0Nyk7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJl
bnRNYXJrZXIsIDEsIHRleHQ3KTsKICAgICAgICAgCisgICAgICAgIC8vIEZvciBub2RlIHdpdGgg
dGV4dCBub2RlIGNoaWxkcmVuLCB3ZSBzaG91bGQgdHJlYXQgdGhlIHZpc3VhbCBzcGFjZSBhcyB3
b3JkIGJvdW5kYXJ5LgorICAgICAgICB2YXIgdGV4dDggPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ4Iik7CisgICAgICAgIHRleHRNYXJrZXJSYW5n
ZSA9IHRleHQ4LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dDgpOworICAgICAgICBjdXJy
ZW50TWFya2VyID0gdGV4dDguc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRN
YXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1
cnJlbnRNYXJrZXIsIDQsIHRleHQ4KTsKKyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSB3
b3JkIG1hcmtlciBydW5zIGZyb20gc3RhcnQgdG8gZW5kLCBhbmQgYmFja3dhcmRzLgogICAgICAg
ICAvLyBNYWtlIHN1cmUgaXQgd29uJ3QgaGFuZy4KICAgICAgICAgdmVyaWZ5RG9jdW1lbnQodGV4
dCk7CiAgICAgICAgIAogICAgICAgICBmdW5jdGlvbiBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRN
YXJrZXIsIG9mZnNldCwgb2JqKSB7Ci0gICAgICAgICAgICB2YXIgcHJldmlvdXNNYXJrZXI7Cisg
ICAgICAgICAgICB2YXIgcHJldmlvdXNNYXJrZXIgPSBjdXJyZW50TWFya2VyOwogICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgewogICAgICAgICAgICAgICAgIHBy
ZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsKICAgICAgICAgICAgICAgICBjdXJyZW50TWFy
a2VyID0gb2JqLm5leHRUZXh0TWFya2VyKHByZXZpb3VzTWFya2VyKTsK
</data>
<flag name="review"
          id="297972"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273659</attachid>
            <date>2016-03-10 17:33:36 -0800</date>
            <delta_ts>2016-03-10 18:37:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>53364</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Nzk3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE2LTAzLTEwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBib3VuZHMvcG9z
aXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHVzaW5nIFRleHRJ
dGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU0OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50ZWQgcG9zaXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgY2FsbHMg
d2l0aCBUZXh0SXRlcmF0b3IuIEFsc28gZml4ZWQgc29tZQorICAgICAgICBWb2ljZU92ZXIgbmF2
aWdhdGlvbiBpc3N1ZXMuCisKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1t
YXJrZXItZm9yLWluZGV4Lmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVRvT2Zm
c2V0SW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFydE9yRW5k
Q2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNo
ZTo6dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6c2hvdWxkU2tpcEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpuZXh0Qm91bmRhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cHJldmlvdXNCb3VuZGFyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2aW91c1NlbnRlbmNlU3RhcnRDaGFyYWN0ZXJPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bG9jYWxDYXJldFJlY3RGb3JD
aGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWJzb2x1
dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpB
WE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JCb3VuZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvckluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmluZGV4Rm9yQ2hhcmFjdGVyT2Zmc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxlbWVudCk6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VGb3JQbGFpblRleHRSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpsaW5lUmFuZ2VGb3JQb3Np
dGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpib3Vu
ZHNGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRT
ZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZz
ZXQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpub2RlSXNU
ZXh0Q29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojpib3VuZHNGb3JSZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRTZWxlY3RlZFZpc2libGVQb3Np
dGlvblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmRvQVhCb3VuZHNGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SW1h
Z2VNYXBIaXRUZXN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgcG9zaXRpb25Gb3JUZXh0TWFya2VyOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VdKToKKyAgICAgICAgKC1bV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uXSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb3NpdGlv
bjpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX3N0cmluZ0Zv
clJhbmdlOmF0dHJpYnV0ZWQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIGZyYW1lRm9yVGV4dE1hcmtlcnM6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQb2ludDpdKToKKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbmV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ck1hYy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgZG9BWEF0
dHJpYnV0ZWRTdHJpbmdGb3JSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyIF9pbmRleEZvclRleHRNYXJrZXI6XSk6CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIF90ZXh0TWFya2VyRm9ySW5kZXg6XSk6CisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpsb2NhbENhcmV0UmVjdEluUmVuZGVyZXJGb3JDYXJldFBh
aW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvclJl
Y3QpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuaDoKKwogMjAxNi0wMy0xMCAgRW5y
aWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSBhZGRpdGlv
bmFsIFdLRGF0YURldGVjdG9yVHlwZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDE5NzcwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MDYsOCArMTUwNiw5IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJz
ZVQKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY2hpbGROb2RlOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaGFzUmVwbGFjZWROb2RlT3JCUiA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUgIT0gcHJldmlvdXNOb2RlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgc2V0IHRoZSBjdXJyZW50Tm9kZSB0
byBwcmV2aW91cyBvbmUgaW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IGl0ZXJhdGlvbi4KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlID0gcHJldmlvdXNOb2RlOworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHNldCB0aGUgc3RhcnQgb2Zmc2V0IGFuZCBsZW5n
dGggZm9yIHRoZSBjdXJyZW50IG5vZGUgaW4gY2FzZSB0aGlzIGlzIHRoZSBsYXN0IGl0ZXJhdGlv
bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdGFydE9mZnNldCA9IDE7CisgICAgICAg
ICAgICAgICAgICAgICAgICBsYXN0TGVuZ3RoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTY5NSw2ICsxNjk2LDEwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydE9y
RW4KICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CiAg
ICAgCisgICAgLy8gV2hlbiBnZXR0aW5nIHRoZSBlbmQgQ2hhcmFjdGVyT2Zmc2V0IGF0IG5vZGUg
Ym91bmRhcnksIHdlIGRvbid0IHdhbnQgdG8gY29sbGFwc2UgdG8gdGhlIHByZXZpb3VzIG5vZGUu
CisgICAgaWYgKCFpc1N0YXJ0ICYmICFyYW5nZS0+ZW5kT2Zmc2V0KCkpCisgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KHJhbmdlLT5lbmRDb250YWluZXIoKSwg
MCwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOworICAgIAogICAgIC8vIElmIGl0J3MgZW5k
IHRleHQgbWFya2VyLCB3ZSB3YW50IHRvIGdvIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBhbmQg
c3RheSB3aXRoaW4gdGhlIHJhbmdlLgogICAgIGJvb2wgc3RheVdpdGhpblJhbmdlID0gIWlzU3Rh
cnQ7CiAgICAgCkBAIC0xNzc1LDEyICsxNzgwLDM1IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4
dE1hcmtlckRhdGFGb3JDaGEKICAgICBzZXRUZXh0TWFya2VyRGF0YVdpdGhDaGFyYWN0ZXJPZmZz
ZXQodGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7CiB9CiAKK2Jvb2wgQVhPYmplY3RD
YWNoZTo6c2hvdWxkU2tpcEJvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgcHJldmlvdXMs
IGNvbnN0IENoYXJhY3Rlck9mZnNldCYgbmV4dCkKK3sKKyAgICAvLyBNYXRjaCB0aGUgYmVoYXZp
b3Igb2YgVmlzaWJsZVBvc2l0aW9uLCB3ZSBzaG91bGQgc2tpcCB0aGUgbm9kZSBib3VuZGFyeSB3
aGVuIHRoZXJlJ3Mgbm8gdmlzdWFsIHNwYWNlIG9yIG5ldyBsaW5lIGNoYXJhY3Rlci4KKyAgICBp
ZiAocHJldmlvdXMuaXNOdWxsKCkgfHwgbmV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmIChwcmV2aW91cy5ub2RlID09IG5leHQubm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChuZXh0LnN0YXJ0SW5kZXggPiAwIHx8IG5leHQu
b2Zmc2V0ID4gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIENoYXJhY3Rlck9m
ZnNldCBuZXdMaW5lID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZkxpbmUobmV4dCk7CisgICAgaWYg
KG5leHQuaXNFcXVhbChuZXdMaW5lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IHJldHVybiB0cnVlOworfQorICAgIAogdm9pZCBBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0
YUZvck5leHRDaGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKIHsKICAgICBDaGFyYWN0ZXJP
ZmZzZXQgbmV4dCA9IGNoYXJhY3Rlck9mZnNldDsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlv
dXMgPSBjaGFyYWN0ZXJPZmZzZXQ7CiAgICAgZG8gewogICAgICAgICBuZXh0ID0gbmV4dENoYXJh
Y3Rlck9mZnNldChuZXh0LCBmYWxzZSk7CisgICAgICAgIGlmIChzaG91bGRTa2lwQm91bmRhcnko
cHJldmlvdXMsIG5leHQpKQorICAgICAgICAgICAgbmV4dCA9IG5leHRDaGFyYWN0ZXJPZmZzZXQo
bmV4dCwgZmFsc2UpOwogICAgICAgICB0ZXh0TWFya2VyRGF0YUZvckNoYXJhY3Rlck9mZnNldCh0
ZXh0TWFya2VyRGF0YSwgbmV4dCk7CisgICAgICAgIHByZXZpb3VzID0gbmV4dDsKICAgICB9IHdo
aWxlICh0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKTsKIH0KIApAQCAtMTk1OCw3ICsxOTg2LDEwIEBA
IENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydENoYXIKICAgICAgICAgaWYgKGMu
aXNFcXVhbChlbmRPZlBhcmFncmFwaCkpCiAgICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAg
Ci0gICAgICAgIGMgPSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7CisgICAg
ICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciB0aGUgbm9kZSBib3VuZGFyeSB0aGF0IHNwbGl0cyB3
b3Jkcy4gT3RoZXJ3aXNlIFZvaWNlT3ZlciB3b24ndCBzZWUgaXQgYXMgc3BhY2UuCisgICAgICAg
IGMgPSBuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpOworICAgICAg
ICBpZiAoc2hvdWxkU2tpcEJvdW5kYXJ5KGNoYXJhY3Rlck9mZnNldCwgYykpCisgICAgICAgICAg
ICBjID0gbmV4dENoYXJhY3Rlck9mZnNldChjLCBmYWxzZSk7CiAgICAgICAgIGlmIChjLmlzTnVs
bCgpKQogICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldDsKICAgICB9CkBAIC0yMTA2
LDYgKzIxMzcsMTAgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6Om5leHRCb3VuZAog
ICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5nLnNpemUoKSkKICAgICAgICAgcmV0
dXJuIGVuZDsKICAgICAKKyAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgdGhlIG5vZGUgYm91bmRh
cnkgdGhhdCBzcGxpdHMgd29yZHMuCisgICAgaWYgKHNlYXJjaEZ1bmN0aW9uID09IGVuZFdvcmRC
b3VuZGFyeSAmJiBuZXh0IC0gcHJlZml4TGVuZ3RoID09IDEpCisgICAgICAgIHJldHVybiBuZXh0
Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpOworICAgIAogICAgIC8vIFRo
ZSBlbmRTZW50ZW5jZUJvdW5kYXJ5IGZ1bmN0aW9uIHdpbGwgaW5jbHVkZSBhIGxpbmUgYnJlYWsg
YXQgdGhlIGVuZCBvZiB0aGUgc2VudGVuY2UuCiAgICAgaWYgKHNlYXJjaEZ1bmN0aW9uID09IGVu
ZFNlbnRlbmNlQm91bmRhcnkgJiYgc3RyaW5nW25leHQgLSAxXSA9PSAnXG4nKQogICAgICAgICBu
ZXh0LS07CkBAIC0yMTYwLDcgKzIxOTUsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNo
ZTo6cHJldmlvdXNCCiAgICAgCiAgICAgaW50IGNoYXJhY3RlckNvdW50ID0gY2hhcmFjdGVyT2Zm
c2V0Lm9mZnNldCAtIChzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBnbyB0byB0aGUgcHJldmlvdXMgbm9kZSBpZiB0aGUgbm9kZSBp
cyBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgbGluZS4KLSAgICBpZiAoY2hhcmFjdGVyQ291bnQgPCAw
ICYmIChjaGFyYWN0ZXJPZmZzZXROb2RlSXNCUihjaGFyYWN0ZXJPZmZzZXQpIHx8IHN0cmluZ1tz
dHJpbmcuc2l6ZSgpIC0gMV0gPT0gJ1xuJykpCisgICAgaWYgKGNoYXJhY3RlckNvdW50IDwgMCAm
JiAoY2hhcmFjdGVyT2Zmc2V0Tm9kZUlzQlIoY2hhcmFjdGVyT2Zmc2V0KSB8fCBzdHJpbmdbc3Ry
aW5nLnNpemUoKSAtIHN1ZmZpeExlbmd0aCAtIDFdID09ICdcbicpKQogICAgICAgICBjaGFyYWN0
ZXJDb3VudCA9IDA7CiAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQo
KmNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJDb3VudCwgVHJhdmVyc2VPcHRpb25JbmNs
dWRlU3RhcnQpOwogfQpAQCAtMjI4Myw2ICsyMzE4LDEzMyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhP
YmplY3RDYWNoZTo6cHJldmlvdXNTCiAgICAgcmV0dXJuIHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZT
ZW50ZW5jZShwcmV2aW91cyk7CiB9CiAKK0xheW91dFJlY3QgQVhPYmplY3RDYWNoZTo6bG9jYWxD
YXJldFJlY3RGb3JDaGFyYWN0ZXJPZmZzZXQoUmVuZGVyT2JqZWN0KiYgcmVuZGVyZXIsIGNvbnN0
IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQoreworICAgIGlmIChjaGFyYWN0ZXJP
ZmZzZXQuaXNOdWxsKCkpIHsKKyAgICAgICAgcmVuZGVyZXIgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBub2RlID0gY2hhcmFjdGVy
T2Zmc2V0Lm5vZGU7CisgICAgCisgICAgcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAg
IGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisgICAgCisgICAg
SW5saW5lQm94KiBpbmxpbmVCb3ggPSBudWxscHRyOworICAgIGludCBjYXJldE9mZnNldDsKKyAg
ICAvLyBVc2UgYSBjb2xsYXBzZWQgcmFuZ2UgdG8gZ2V0IHRoZSBwb3NpdGlvbi4KKyAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJh
Y3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9u
ID0gcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKTsKKyAgICBzdGFydFBvc2l0aW9uLmdldElubGluZUJv
eEFuZE9mZnNldChET1dOU1RSRUFNLCBpbmxpbmVCb3gsIGNhcmV0T2Zmc2V0KTsKKyAgICAKKyAg
ICBpZiAoaW5saW5lQm94KQorICAgICAgICByZW5kZXJlciA9ICZpbmxpbmVCb3gtPnJlbmRlcmVy
KCk7CisgICAgCisgICAgcmV0dXJuIHJlbmRlcmVyLT5sb2NhbENhcmV0UmVjdChpbmxpbmVCb3gs
IGNhcmV0T2Zmc2V0KTsKK30KKworSW50UmVjdCBBWE9iamVjdENhY2hlOjphYnNvbHV0ZUNhcmV0
Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVy
T2Zmc2V0KQoreworICAgIFJlbmRlckJsb2NrKiBjYXJldFBhaW50ZXIgPSBudWxscHRyOworICAg
IAorICAgIC8vIEZpcnN0IGNvbXB1dGUgYSByZWN0IGxvY2FsIHRvIHRoZSByZW5kZXJlciBhdCB0
aGUgc2VsZWN0aW9uIHN0YXJ0LgorICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBudWxscHRy
OworICAgIExheW91dFJlY3QgbG9jYWxSZWN0ID0gbG9jYWxDYXJldFJlY3RGb3JDaGFyYWN0ZXJP
ZmZzZXQocmVuZGVyZXIsIGNoYXJhY3Rlck9mZnNldCk7CisgICAgCisgICAgbG9jYWxSZWN0ID0g
bG9jYWxDYXJldFJlY3RJblJlbmRlcmVyRm9yUmVjdChsb2NhbFJlY3QsIGNoYXJhY3Rlck9mZnNl
dC5ub2RlLCByZW5kZXJlciwgY2FyZXRQYWludGVyKTsKKyAgICByZXR1cm4gYWJzb2x1dGVCb3Vu
ZHNGb3JMb2NhbENhcmV0UmVjdChjYXJldFBhaW50ZXIsIGxvY2FsUmVjdCk7Cit9CisKK0NoYXJh
Y3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJ
bnRQb2ludCAmcG9pbnQsIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKK3sKKyAgICBpZiAoIW9i
aikKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAgIFZpc2libGVQ
b3NpdGlvbiB2cCA9IG9iai0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2UodnAsIHZwKTsKKyAgICByZXR1cm4gc3RhcnRP
ckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKK30KKworQ2hhcmFjdGVy
T2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBv
aW50ICZwb2ludCkKK3sKKyAgICBSZWZQdHI8UmFuZ2U+IGNhcmV0UmFuZ2UgPSBtX2RvY3VtZW50
LmNhcmV0UmFuZ2VGcm9tUG9pbnQoTGF5b3V0UG9pbnQocG9pbnQpKTsKKyAgICByZXR1cm4gc3Rh
cnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKGNhcmV0UmFuZ2UsIHRydWUpOworfQorCitD
aGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yQm91bmRzKGNv
bnN0IEludFJlY3QmIHJlY3QsIGJvb2wgZmlyc3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgSW50UG9pbnQg
Y29ybmVyID0gZmlyc3QgPyByZWN0Lm1pblhNaW5ZQ29ybmVyKCkgOiByZWN0Lm1heFhNYXhZQ29y
bmVyKCk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9m
ZnNldEZvclBvaW50KGNvcm5lcik7CisgICAgCisgICAgaWYgKHJlY3QuY29udGFpbnMoYWJzb2x1
dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpLmNlbnRlcigp
KSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldDsKKyAgICAKKyAgICAvLyBJZiB0aGUg
aW5pdGlhbCBwb3NpdGlvbiBpcyBsb2NhdGVkIG91dHNpZGUgdGhlIGJvdW5kcyBhZGp1c3QgaXQg
aW5jcmVtZW50YWxseSBhcyBuZWVkZWQuCisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRDaGFyT2Zm
c2V0ID0gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZhbHNlKTsKKyAgICBD
aGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNDaGFyT2Zmc2V0ID0gcHJldmlvdXNDaGFyYWN0ZXJPZmZz
ZXQoY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSk7CisgICAgd2hpbGUgKCFuZXh0Q2hhck9mZnNldC5p
c051bGwoKSB8fCAhcHJldmlvdXNDaGFyT2Zmc2V0LmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChy
ZWN0LmNvbnRhaW5zKGFic29sdXRlQ2FyZXRCb3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQobmV4dENo
YXJPZmZzZXQpLmNlbnRlcigpKSkKKyAgICAgICAgICAgIHJldHVybiBuZXh0Q2hhck9mZnNldDsK
KyAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoYWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rl
ck9mZnNldChwcmV2aW91c0NoYXJPZmZzZXQpLmNlbnRlcigpKSkKKyAgICAgICAgICAgIHJldHVy
biBwcmV2aW91c0NoYXJPZmZzZXQ7CisgICAgICAgIAorICAgICAgICBuZXh0Q2hhck9mZnNldCA9
IG5leHRDaGFyYWN0ZXJPZmZzZXQobmV4dENoYXJPZmZzZXQsIGZhbHNlKTsKKyAgICAgICAgcHJl
dmlvdXNDaGFyT2Zmc2V0ID0gcHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQocHJldmlvdXNDaGFyT2Zm
c2V0LCBmYWxzZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsK
K30KKworLy8gRklYTUU6IFJlbW92ZSBWaXNpYmxlUG9zaXRpb24gY29kZSBhZnRlciBpbXBsZW1l
bnRpbmcgdGhpcyB1c2luZyBDaGFyYWN0ZXJPZmZzZXQuCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmpl
Y3RDYWNoZTo6ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKGNvbnN0IENoYXJhY3Rlck9mZnNldCYg
Y2hhcmFjdGVyT2Zmc2V0KQoreworICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAgICAKKyAgICBWaXNpYmxlUG9zaXRp
b24gdnAgPSB2aXNpYmxlUG9zaXRpb25Gcm9tQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNl
dCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZExpbmUgPSBlbmRPZkxpbmUodnApOworICAgIAor
ICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKGVuZExpbmUpOwor
fQorCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyYWN0ZXJPZmZzZXRP
ZkxpbmUoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCit7CisgICAgaWYg
KGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNl
dCgpOworICAgIAorICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IHZpc2libGVQb3NpdGlvbkZyb21D
aGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBWaXNpYmxlUG9zaXRpb24gc3Rh
cnRMaW5lID0gc3RhcnRPZkxpbmUodnApOworICAgIAorICAgIHJldHVybiBjaGFyYWN0ZXJPZmZz
ZXRGcm9tVmlzaWJsZVBvc2l0aW9uKHN0YXJ0TGluZSk7Cit9CisKK0NoYXJhY3Rlck9mZnNldCBB
WE9iamVjdENhY2hlOjpjaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChpbnQgaW5kZXgsIGNvbnN0IEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG9iaikKK3sKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJu
IENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAgIC8vIFNpbmNlIHRoaXMgd291bGQgb25seSB3
b3JrIG9uIHJlbmRlcmVkIG5vZGVzLCB1c2luZyBWaXNpYmxlUG9zaXRpb24gdG8gY3JlYXRlIGEg
Y29sbGFwc2VkCisgICAgLy8gcmFuZ2Ugc2hvdWxkIGJlIGZpbmUuCisgICAgVmlzaWJsZVBvc2l0
aW9uIHZwID0gb2JqLT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbmRleCk7CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZSh2cCwgdnApOworICAgIAorICAgIHJldHVybiBzdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIHRydWUpOworfQorCitpbnQgQVhP
YmplY3RDYWNoZTo6aW5kZXhGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
JiBjaGFyYWN0ZXJPZmZzZXQsIEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaikKK3sKKyAgICAvLyBD
cmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2Ugc28gdGhhdCB3ZSBjYW4gZ2V0IHRoZSBWaXNpYmxlUG9z
aXRpb24gZnJvbSBpdC4KKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gcmFuZ2VGb3JVbm9yZGVy
ZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAg
ICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gMDsKKyAgICBWaXNpYmxlUG9zaXRpb24gdnAg
PSByYW5nZS0+c3RhcnRQb3NpdGlvbigpOworICAgIHJldHVybiBvYmotPmluZGV4Rm9yVmlzaWJs
ZVBvc2l0aW9uKHZwKTsKK30KKwogY29uc3QgRWxlbWVudCogQVhPYmplY3RDYWNoZTo6cm9vdEFY
RWRpdGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAgY29uc3QgRWxlbWVudCog
cmVzdWx0ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDE5NzcwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDAsNiArMjAwLDcgQEAgcHVibGljOgogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0
Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wgaWdub3JlTmV4dE5v
ZGVTdGFydCA9IHRydWUpOwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c0NoYXJhY3Rlck9m
ZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBib29sIGlnbm9yZVByZXZpb3VzTm9kZUVuZCA9
IHRydWUpOwogICAgIHZvaWQgc3RhcnRPckVuZFRleHRNYXJrZXJEYXRhRm9yUmFuZ2UoVGV4dE1h
cmtlckRhdGEmLCBSZWZQdHI8UmFuZ2U+LCBib29sKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3Rh
cnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxSYW5nZT4sIGJvb2wpOwogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlPYmplY3RGb3JUZXh0TWFya2VyRGF0
YShUZXh0TWFya2VyRGF0YSYpOwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JVbm9yZGVyZWRD
aGFyYWN0ZXJPZmZzZXRzKGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYpOwogICAgIHN0YXRpYyBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yTm9kZUNvbnRlbnRzKE5v
ZGUqKTsKQEAgLTIyMCw2ICsyMjEsMTkgQEAgcHVibGljOgogICAgIFJlZlB0cjxSYW5nZT4gc2Vu
dGVuY2VGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hh
cmFjdGVyT2Zmc2V0IG5leHRTZW50ZW5jZUVuZENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0
ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNTZW50ZW5jZVN0YXJ0Q2hh
cmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIAorICAgIC8vIEJvdW5k
cworICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JQb2ludChjb25zdCBJbnRQ
b2ludCYsIEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKKyAgICBJbnRSZWN0IGFic29sdXRlQ2FyZXRC
b3VuZHNGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgQ2hh
cmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvckJvdW5kcyhjb25zdCBJbnRSZWN0JiwgYm9v
bCk7CisgICAgCisgICAgLy8gTGluZXMKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVy
T2Zmc2V0T2ZMaW5lKGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOworICAgIENoYXJhY3Rlck9mZnNl
dCBzdGFydENoYXJhY3Rlck9mZnNldE9mTGluZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAg
ICAKKyAgICAvLyBJbmRleAorICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JJ
bmRleChpbnQsIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqKTsKKyAgICBpbnQgaW5kZXhGb3JD
aGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgQWNjZXNzaWJpbGl0eU9iamVj
dCopOwogCiAgICAgZW51bSBBWE5vdGlmaWNhdGlvbiB7CiAgICAgICAgIEFYQWN0aXZlRGVzY2Vu
ZGFudENoYW5nZWQsCkBAIC0zMjEsNyArMzM1LDYgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0
VGV4dE1hcmtlckRhdGFXaXRoQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgVUNoYXIzMiBjaGFyYWN0ZXJBZnRlcihjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKICAgICBVQ2hhcjMyIGNoYXJhY3RlckJlZm9yZShjb25zdCBDaGFyYWN0
ZXJPZmZzZXQmKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRPckVuZENoYXJhY3Rlck9mZnNl
dEZvclJhbmdlKFJlZlB0cjxSYW5nZT4sIGJvb2wpOwogICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KE5vZGUmLCBpbnQsIFRyYXZlcnNlT3B0aW9uID0g
VHJhdmVyc2VPcHRpb25EZWZhdWx0KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNCb3Vu
ZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKTsKICAg
ICBDaGFyYWN0ZXJPZmZzZXQgbmV4dEJvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEJv
dW5kYXJ5U2VhcmNoRnVuY3Rpb24pOwpAQCAtMzMxLDYgKzM0NCw5IEBAIHByb3RlY3RlZDoKICAg
ICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fubm90Q3Jvc3NF
ZGl0aW5nQm91bmRhcnkpOwogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydENoYXJhY3Rlck9mZnNl
dE9mU2VudGVuY2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGVuZENoYXJhY3Rlck9mZnNldE9mU2VudGVuY2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7Cisg
ICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldEZvclBvaW50KGNvbnN0IEludFBvaW50
Jik7CisgICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdEZvckNoYXJhY3Rlck9mZnNldChSZW5k
ZXJPYmplY3QqJiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgYm9vbCBzaG91bGRTa2lw
Qm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7
CiAKIHByaXZhdGU6CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdFdlYkFyZWEoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAkocmV2aXNpb24gMTk3NzA5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCw2ICsx
MTk4LDIwIEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3QKICAgICBy
ZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwog
fQogCitSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlRm9yUGxhaW5UZXh0
UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAoreworICAgIHVuc2lnbmVk
IHRleHRMZW5ndGggPSBnZXRMZW5ndGhGb3JUZXh0UmFuZ2UoKTsKKyAgICBpZiAocmFuZ2Uuc3Rh
cnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0TGVuZ3RoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBheE9iamVjdENhY2hlKCkpIHsK
KyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZv
ckluZGV4KHJhbmdlLnN0YXJ0LCB0aGlzKTsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9
IGNhY2hlLT5jaGFyYWN0ZXJPZmZzZXRGb3JJbmRleChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0
aCwgdGhpcyk7CisgICAgICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0
ZXJPZmZzZXRzKHN0YXJ0LCBlbmQpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwog
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6bGluZVJhbmdlRm9yUG9z
aXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pIGNvbnN0CiB7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mTGluZSh2aXNpYmxlUG9z
aXRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmgJKHJldmlzaW9uIDE5NzcwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MzUs
MTAgKzgzNSwxMyBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugc3R5bGVSYW5n
ZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpIGNvbnN0OwogICAgIFZpc2libGVQ
b3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0
UmFuZ2UmKSBjb25zdDsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSBsaW5lUmFuZ2VGb3JQb3Np
dGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mKSBjb25zdDsKKyAgICAKKyAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdDsK
IAogICAgIFN0cmluZyBzdHJpbmdGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxl
UG9zaXRpb25SYW5nZSYpIGNvbnN0OwogICAgIFN0cmluZyBzdHJpbmdGb3JSYW5nZShSZWZQdHI8
UmFuZ2U+KSBjb25zdDsKICAgICB2aXJ0dWFsIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0
aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCB7IHJldHVybiBJbnRS
ZWN0KCk7IH0KKyAgICB2aXJ0dWFsIEludFJlY3QgYm91bmRzRm9yUmFuZ2UoY29uc3QgUmVmUHRy
PFJhbmdlPikgY29uc3QgeyByZXR1cm4gSW50UmVjdCgpOyB9CiAgICAgaW50IGxlbmd0aEZvclZp
c2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJikgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UmKSBjb25zdCB7IH0KIApAQCAtODcyLDYgKzg3NSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgU3RyaW5nIGRvQVhTdHJpbmdGb3JSYW5nZShjb25zdCBQbGFpblRl
eHRSYW5nZSYpIGNvbnN0IHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgdmlydHVhbCBJbnRSZWN0
IGRvQVhCb3VuZHNGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IHsgcmV0dXJu
IEludFJlY3QoKTsgfQorICAgIHZpcnR1YWwgSW50UmVjdCBkb0FYQm91bmRzRm9yUmFuZ2VVc2lu
Z0NoYXJhY3Rlck9mZnNldChjb25zdCBQbGFpblRleHRSYW5nZSYpIGNvbnN0IHsgcmV0dXJuIElu
dFJlY3QoKTsgfQogICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbihO
b2RlKiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJikgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBkb0FY
TGluZUZvckluZGV4KHVuc2lnbmVkKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNp
b24gMTk3NzA5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2Miw2ICsxOTYyLDI2IEBAIGJv
b2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bm9kZUlzVGUKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmVjdHMo
TGF5b3V0UmVjdCYgcmVjdDEsIExheW91dFJlY3QmIHJlY3QyLCBSZWZQdHI8UmFuZ2U+IGRhdGFS
YW5nZSkgY29uc3QKK3sKKyAgICBMYXlvdXRSZWN0IG91clJlY3QgPSByZWN0MTsKKyAgICBvdXJS
ZWN0LnVuaXRlKHJlY3QyKTsKKyAgICAKKyAgICAvLyBpZiB0aGUgcmVjdGFuZ2xlIHNwYW5zIGxp
bmVzIGFuZCBjb250YWlucyBtdWx0aXBsZSB0ZXh0IGNoYXJzLCB1c2UgdGhlIHJhbmdlJ3MgYm91
bmRpbmcgYm94IGludGVhZAorICAgIGlmIChyZWN0MS5tYXhZKCkgIT0gcmVjdDIubWF4WSgpKSB7
CisgICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBkYXRhUmFuZ2UtPmFic29sdXRlQm91
bmRpbmdCb3goKTsKKyAgICAgICAgU3RyaW5nIHJhbmdlU3RyaW5nID0gcGxhaW5UZXh0KGRhdGFS
YW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChyYW5nZVN0cmluZy5sZW5ndGgoKSA+IDEgJiYgIWJv
dW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG91clJlY3QgPSBib3VuZGluZ0JveDsK
KyAgICB9CisgICAgCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBtX3JlbmRlcmVyLT52
aWV3KCkuZnJhbWVWaWV3KCkuY29udGVudHNUb1NjcmVlbihzbmFwcGVkSW50UmVjdChvdXJSZWN0
KSk7CisjZWxzZQorICAgIHJldHVybiBzbmFwcGVkSW50UmVjdChvdXJSZWN0KTsKKyNlbmRpZgor
fQorCiBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclZpc2libGVQ
b3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJiB2aXNpYmxlUG9zaXRpb25S
YW5nZSkgY29uc3QKIHsKICAgICBpZiAodmlzaWJsZVBvc2l0aW9uUmFuZ2UuaXNOdWxsKCkpCkBA
IC0xOTg1LDIzICsyMDA1LDM5IEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Ym91bmQKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBMYXlvdXRSZWN0IG91cnJlY3QgPSBy
ZWN0MTsKLSAgICBvdXJyZWN0LnVuaXRlKHJlY3QyKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGRhdGFS
YW5nZSA9IG1ha2VSYW5nZShyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTsKKyAgICByZXR1cm4gYm91
bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCBkYXRhUmFuZ2UpOworfQorCitJbnRSZWN0IEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5kc0ZvclJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4g
cmFuZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKICAgICAKLSAgICAvLyBpZiB0aGUgcmVjdGFuZ2xlIHNwYW5zIGxpbmVzIGFuZCBjb250YWlu
cyBtdWx0aXBsZSB0ZXh0IGNoYXJzLCB1c2UgdGhlIHJhbmdlJ3MgYm91bmRpbmcgYm94IGludGVh
ZAotICAgIGlmIChyZWN0MS5tYXhZKCkgIT0gcmVjdDIubWF4WSgpKSB7Ci0gICAgICAgIFJlZlB0
cjxSYW5nZT4gZGF0YVJhbmdlID0gbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpOwot
ICAgICAgICBMYXlvdXRSZWN0IGJvdW5kaW5nQm94ID0gZGF0YVJhbmdlLT5hYnNvbHV0ZUJvdW5k
aW5nQm94KCk7Ci0gICAgICAgIFN0cmluZyByYW5nZVN0cmluZyA9IHBsYWluVGV4dChkYXRhUmFu
Z2UuZ2V0KCkpOwotICAgICAgICBpZiAocmFuZ2VTdHJpbmcubGVuZ3RoKCkgPiAxICYmICFib3Vu
ZGluZ0JveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBvdXJyZWN0ID0gYm91bmRpbmdCb3g7Cisg
ICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSB0aGlzLT5heE9iamVjdENhY2hlKCk7CisgICAgaWYg
KCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICAKKyAgICBDaGFyYWN0ZXJP
ZmZzZXQgc3RhcnQgPSBjYWNoZS0+c3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJh
bmdlLCB0cnVlKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gY2FjaGUtPnN0YXJ0T3JFbmRD
aGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZSwgZmFsc2UpOworICAgIAorICAgIExheW91dFJl
Y3QgcmVjdDEgPSBjYWNoZS0+YWJzb2x1dGVDYXJldEJvdW5kc0ZvckNoYXJhY3Rlck9mZnNldChz
dGFydCk7CisgICAgTGF5b3V0UmVjdCByZWN0MiA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0Qm91bmRz
Rm9yQ2hhcmFjdGVyT2Zmc2V0KGVuZCk7CisgICAgCisgICAgLy8gcmVhZGp1c3QgZm9yIHBvc2l0
aW9uIGF0IHRoZSBlZGdlIG9mIGEgbGluZS4gVGhpcyBpcyB0byBleGNsdWRlIGxpbmUgcmVjdCB0
aGF0IGRvZXNuJ3QgbmVlZCB0byBiZSBhY2NvdW50ZWQgaW4gdGhlIHJhbmdlIGJvdW5kcy4KKyAg
ICBpZiAocmVjdDIueSgpICE9IHJlY3QxLnkoKSkgeworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQg
ZW5kT2ZGaXJzdExpbmUgPSBjYWNoZS0+ZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZMaW5lKHN0YXJ0KTsK
KyAgICAgICAgaWYgKHN0YXJ0LmlzRXF1YWwoZW5kT2ZGaXJzdExpbmUpKSB7CisgICAgICAgICAg
ICBzdGFydCA9IGNhY2hlLT5uZXh0Q2hhcmFjdGVyT2Zmc2V0KHN0YXJ0LCBmYWxzZSk7CisgICAg
ICAgICAgICByZWN0MSA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0Qm91bmRzRm9yQ2hhcmFjdGVyT2Zm
c2V0KHN0YXJ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5kLmlzRXF1YWwoZW5kT2ZGaXJz
dExpbmUpKSB7CisgICAgICAgICAgICBlbmQgPSBjYWNoZS0+cHJldmlvdXNDaGFyYWN0ZXJPZmZz
ZXQoZW5kLCBmYWxzZSk7CisgICAgICAgICAgICByZWN0MiA9IGNhY2hlLT5hYnNvbHV0ZUNhcmV0
Qm91bmRzRm9yQ2hhcmFjdGVyT2Zmc2V0KGVuZCk7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0j
aWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBtX3JlbmRlcmVyLT52aWV3KCkuZnJhbWVWaWV3
KCkuY29udGVudHNUb1NjcmVlbihzbmFwcGVkSW50UmVjdChvdXJyZWN0KSk7Ci0jZWxzZQotICAg
IHJldHVybiBzbmFwcGVkSW50UmVjdChvdXJyZWN0KTsKLSNlbmRpZgorICAgIHJldHVybiBib3Vu
ZHNGb3JSZWN0cyhyZWN0MSwgcmVjdDIsIHJhbmdlKTsKIH0KICAgICAKIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBW
aXNpYmxlUG9zaXRpb25SYW5nZSYgcmFuZ2UpIGNvbnN0CkBAIC0yMTk2LDYgKzIyMzIsMTMgQEAg
SW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQgogICAgIHJldHVybiBJbnRS
ZWN0KCk7CiB9CiAKK0ludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5k
c0ZvclJhbmdlVXNpbmdDaGFyYWN0ZXJPZmZzZXQoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdl
KSBjb25zdAoreworICAgIGlmIChhbGxvd3NUZXh0UmFuZ2VzKCkpCisgICAgICAgIHJldHVybiBi
b3VuZHNGb3JSYW5nZShyYW5nZUZvclBsYWluVGV4dFJhbmdlKHJhbmdlKSk7CisgICAgcmV0dXJu
IEludFJlY3QoKTsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6YWNjZXNzaWJpbGl0eUltYWdlTWFwSGl0VGVzdChIVE1MQXJlYUVsZW1lbnQqIGFy
ZWEsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWFyZWEpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTk3NzA5KQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3Myw2ICsxNzMsOCBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIEludFJlY3QgYm91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRSZWN0IGJvdW5kc0ZvclJhbmdl
KGNvbnN0IFJlZlB0cjxSYW5nZT4pIGNvbnN0IG92ZXJyaWRlOworICAgIEludFJlY3QgYm91bmRz
Rm9yUmVjdHMoTGF5b3V0UmVjdCYsIExheW91dFJlY3QmLCBSZWZQdHI8UmFuZ2U+KSBjb25zdDsK
ICAgICB2b2lkIHNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29uc3QgVmlzaWJsZVBv
c2l0aW9uUmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHN1cHBvcnRzQVJJQUZsb3dU
bygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgYXJpYUZsb3dUb0VsZW1lbnRzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMjAwLDYgKzIwMiw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBTdHJpbmcgZG9BWFN0cmluZ0ZvclJhbmdlKGNvbnN0IFBsYWlu
VGV4dFJhbmdlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgSW50UmVjdCBkb0FYQm91bmRzRm9yUmFu
Z2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmKSBjb25zdCBvdmVycmlkZTsKKyAgICBJbnRSZWN0IGRv
QVhCb3VuZHNGb3JSYW5nZVVzaW5nQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IFBsYWluVGV4dFJhbmdl
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgCiAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yTVNBQSgp
IGNvbnN0IG92ZXJyaWRlOwogICAgIFN0cmluZyBzdHJpbmdSb2xlRm9yTVNBQSgpIGNvbnN0IG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJl
dmlzaW9uIDE5NzcwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ4LDEw
ICsyMTQ4LDE0IEBAIC0gKE5TSW50ZWdlcilwb3NpdGlvbkZvclRleHRNYXJrZXI6KFdlYkEKICAg
ICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7ICAgIAogCi0gICAgVmlz
aWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oW21hcmtlciB2aXNpYmxlUG9zaXRpb25dKTsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
TlNSYW5nZSBuc1JhbmdlID0gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6cmFuZ2UuZ2V0KCldOwot
ICAgIHJldHVybiBuc1JhbmdlLmxvY2F0aW9uOworICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGNoYXJhY3Rlck9mZnNldCA9IFttYXJrZXIgY2hhcmFjdGVyT2Zmc2V0XTsKKyAgICAgICAgLy8g
Q3JlYXRlIGEgY29sbGFwc2VkIHJhbmdlIGZyb20gdGhlIENoYXJhY3Rlck9mZnNldCBvYmplY3Qu
CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRD
aGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICAg
ICAgTlNSYW5nZSBuc1JhbmdlID0gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6cmFuZ2UuZ2V0KCld
OworICAgICAgICByZXR1cm4gbnNSYW5nZS5sb2NhdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIE5T
Tm90Rm91bmQ7CiB9CiAKIC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2UKQEAgLTIyMDUsMTEg
KzIyMDksMTcgQEAgLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbgogICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9vYmplY3QtPnNlbGVjdGlvbigpOwogICAg
IGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKKyAg
ICAKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7
CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgQ2hhcmFj
dGVyT2Zmc2V0IHN0YXJ0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5n
ZShyYW5nZSwgdHJ1ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGNhY2hlLT5zdGFydE9y
RW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2UsIGZhbHNlKTsKIAotICAgIFdlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKiBzdGFydE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciB0ZXh0TWFya2VyV2l0aFZpc2libGVQb3NpdGlvbjpzdGFydFBvc2l0aW9uIGNhY2hlOm1f
b2JqZWN0LT5heE9iamVjdENhY2hlKCldOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
KiBlbmRNYXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhW
aXNpYmxlUG9zaXRpb246ZW5kUG9zaXRpb24gY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KV07CisgICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyID0gW1dlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zmc2V0OnN0YXJ0
IGNhY2hlOmNhY2hlXTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogZW5kTWFya2Vy
ID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zm
c2V0OmVuZCBjYWNoZTpjYWNoZV07CiAgICAgaWYgKCFzdGFydE1hcmtlciB8fCAhZW5kTWFya2Vy
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjIyNCwxMSArMjIzNCwxMyBAQCAtIChX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrCiAgICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgMCld
OwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVB
TSk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uID0gc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwotICAgIHJldHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4
dE1hcmtlcldpdGhWaXNpYmxlUG9zaXRpb246dmlzaWJsZVBvc2l0aW9uIGNhY2hlOm1fb2JqZWN0
LT5heE9iamVjdENhY2hlKCldOworICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3Qt
PmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+c3RhcnRP
ckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlLCB0cnVlKTsKKyAgICByZXR1cm4gW1dl
YkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zmc2V0OmNo
YXJhY3Rlck9mZnNldCBjYWNoZTpjYWNoZV07CiB9CiAKIC0gKGlkKV9zdHJpbmdGb3JSYW5nZToo
TlNSYW5nZSlyYW5nZSBhdHRyaWJ1dGVkOihCT09MKWF0dHJpYnV0ZWQKQEAgLTI0MDUsMTUgKzI0
MTcsMTQgQEAgLSAoQ0dSZWN0KWZyYW1lRm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKgogICAgIGlm
ICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBDR1Jl
Y3RaZXJvOwogCi0gICAgaWYgKFthcnJheSBjb3VudF0gIT0gMikKKyAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgcmV0dXJuIENHUmVjdFplcm87Ci0gICAgCi0gICAgV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqIHN0YXJ0TWFya2VyID0gW2FycmF5IG9iamVjdEF0SW5kZXg6MF07Ci0gICAgV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFthcnJheSBvYmplY3RBdEluZGV4OjFd
OwotICAgIGlmICghW3N0YXJ0TWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyIGNsYXNzXV0gfHwgIVtlbmRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSkKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3Nl
bGYgcmFuZ2VGb3JUZXh0TWFya2VyczphcnJheV07CisgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
cmV0dXJuIENHUmVjdFplcm87Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91bmRz
Rm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2UoVmlzaWJsZVBvc2l0aW9uUmFuZ2UoW3N0YXJ0TWFya2Vy
IHZpc2libGVQb3NpdGlvbl0sIFtlbmRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXSkpOworICAgIAor
ICAgIEludFJlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JSYW5nZShyYW5nZSk7CiAgICAg
cmV0dXJuIFtzZWxmIGNvbnZlcnRSZWN0VG9TY3JlZW5TcGFjZTpyZWN0XTsKIH0KIApAQCAtMjQy
Miw4ICsyNDMzLDExIEBAIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmsK
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gbmlsOwogICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwb3MgPSBtX29iamVjdC0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoSW50UG9pbnQocG9pbnQpKTsKLSAgICByZXR1cm4gW1dlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOnBvcyBjYWNo
ZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9
IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNo
YXJhY3Rlck9mZnNldEZvclBvaW50KEludFBvaW50KHBvaW50KSwgbV9vYmplY3QpOworICAgIHJl
dHVybiBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFyYWN0ZXJP
ZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0IGNhY2hlOmNhY2hlXTsKIH0KIAogLSAoV2ViQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIgKiluZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJP
ZmZzZXQmKWNoYXJhY3Rlck9mZnNldApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHJldmlzaW9uIDE5NzcwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzc2LDggKzM3NzYsOCBAQCAtIChOU1N0cmluZyopYWNjZXNzaWJpbGl0eUFjdGlv
bkRlc2NyaXB0CiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9y
UmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKIHsKICAgICBQbGFpblRleHRSYW5nZSB0ZXh0UmFuZ2UgPSBQ
bGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKLSAgICBWaXNpYmxl
UG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zUmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JSYW5nZSh0ZXh0UmFuZ2UpOwotICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRl
ZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJs
ZVBvc2l0aW9uczp2aXNpYmxlUG9zUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dmlzaWJsZVBvc1Jh
bmdlLmVuZF1dOworICAgIFJlZlB0cjxSYW5nZT4gd2ViUmFuZ2UgPSBtX29iamVjdC0+cmFuZ2VG
b3JQbGFpblRleHRSYW5nZSh0ZXh0UmFuZ2UpOworICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmli
dXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFu
Z2U6d2ViUmFuZ2VdXTsKIH0KIAogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2Uq
KXJhbmdlCkBAIC0zODA0LDggKzM4MDQsMTMgQEAgLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRN
YXJrZXI6KGlkKW1hcgogICAgIGlmICghbWFya2VyKQogICAgICAgICByZXR1cm4gTlNOb3RGb3Vu
ZDsKICAgICAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihbc2VsZiB2aXNpYmxlUG9z
aXRpb25Gb3JUZXh0TWFya2VyOm1hcmtlcl0pOwotICAgIHJldHVybiBbc2VsZiBfY29udmVydFRv
TlNSYW5nZTpzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV0ubG9jYXRpb247Cisg
ICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkg
eworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFj
dGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjptYXJrZXJdOworICAgICAgICAvLyBDcmVhdGUgYSBjb2xs
YXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFjdGVyT2Zmc2V0IG9iamVjdC4KKyAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICByZXR1cm4gW3Nl
bGYgX2NvbnZlcnRUb05TUmFuZ2U6cmFuZ2UuZ2V0KCldLmxvY2F0aW9uOworICAgIH0KKyAgICBy
ZXR1cm4gTlNOb3RGb3VuZDsKIH0KIAogLSAoaWQpX3RleHRNYXJrZXJGb3JJbmRleDooTlNJbnRl
Z2VyKXRleHRJbmRleApAQCAtMzgxOCw4ICszODIzLDExIEBAIC0gKGlkKV90ZXh0TWFya2VyRm9y
SW5kZXg6KE5TSW50ZWdlcil0ZXgKICAgICBpZiAoIXRleHRSYW5nZSB8fCAhdGV4dFJhbmdlLT5i
b3VuZGFyeVBvaW50c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgVmlz
aWJsZVBvc2l0aW9uIHBvc2l0aW9uKHRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBy
ZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjpwb3NpdGlvbl07CisgICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSkgewor
ICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSh0ZXh0UmFuZ2UsIHRydWUpOworICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwor
ICAgIH0KKyAgICByZXR1cm4gbmlsOwogfQogCiAvLyBUaGUgUlRGIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRoYXQg
aXMKQEAgLTM5MDcsNiArMzkxNSwxMCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6KE5TU3RyCiAgICAgaWYgKCFbc2VsZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIAorICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAogICAgIC8vIGNvbW1vbiBwYXJhbWV0ZXIgdHlwZSBjaGVjay9jYXN0aW5nLiAgTmls
IGNoZWNrcyBpbiBoYW5kbGVycyBjYXRjaCB3cm9uZyB0eXBlIGNhc2UuCiAgICAgLy8gTk9URTog
VGhpcyBhc3N1bWVzIG5pbCBpcyBub3QgYSB2YWxpZCBwYXJhbWV0ZXIsIGJlY2F1c2UgaXQgaXMg
aW5kaXN0aW5ndWlzaGFibGUgZnJvbQogICAgIC8vIGEgcGFyYW1ldGVyIG9mIHRoZSB3cm9uZyB0
eXBlLgpAQCAtMzk2NCwxMSArMzk3NiwxMyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRl
VmFsdWU6KE5TU3RyCiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOk5T
QWNjZXNzaWJpbGl0eUVuZFRleHRNYXJrZXJGb3JCb3VuZHNQYXJhbWV0ZXJpemVkQXR0cmlidXRl
XSkgewogICAgICAgICBJbnRSZWN0IHdlYkNvcmVSZWN0ID0gW3NlbGYgc2NyZWVuVG9Db250ZW50
czplbmNsb3NpbmdJbnRSZWN0KHJlY3QpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJr
ZXJGb3JWaXNpYmxlUG9zaXRpb246bV9vYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckJvdW5kcyh3
ZWJDb3JlUmVjdCwgTGFzdFZpc2libGVQb3NpdGlvbkZvckJvdW5kcyldOworICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckJv
dW5kcyh3ZWJDb3JlUmVjdCwgZmFsc2UpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgIH0KICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5U3RhcnRUZXh0TWFya2VyRm9y
Qm91bmRzUGFyYW1ldGVyaXplZEF0dHJpYnV0ZV0pIHsKICAgICAgICAgSW50UmVjdCB3ZWJDb3Jl
UmVjdCA9IFtzZWxmIHNjcmVlblRvQ29udGVudHM6ZW5jbG9zaW5nSW50UmVjdChyZWN0KV07Ci0g
ICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0
LT52aXNpYmxlUG9zaXRpb25Gb3JCb3VuZHMod2ViQ29yZVJlY3QsIEZpcnN0VmlzaWJsZVBvc2l0
aW9uRm9yQm91bmRzKV07CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQg
PSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yQm91bmRzKHdlYkNvcmVSZWN0LCB0cnVlKTsKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVy
T2Zmc2V0XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUxpbmVUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyUGFyYW1ldGVy
aXplZEF0dHJpYnV0ZV0pIHsKQEAgLTQwMTcsMzAgKzQwMzEsMzUgQEAgLSAoaWQpYWNjZXNzaWJp
bGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1
YWxUb1N0cmluZzpAIkFYVGV4dE1hcmtlckZvclBvc2l0aW9uIl0pIHsKICAgICAgICAgSW50UG9p
bnQgd2ViQ29yZVBvaW50ID0gSW50UG9pbnQocG9pbnQpOwotICAgICAgICByZXR1cm4gcG9pbnRT
ZXQgPyBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludCh3ZWJDb3JlUG9pbnQpXSA6IG5pbDsKKyAgICAgICAgaWYgKCFwb2lu
dFNldCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBj
aGFyYWN0ZXJPZmZzZXQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0Rm9yUG9pbnQod2ViQ29yZVBv
aW50LCBtX29iamVjdCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYQm91bmRzRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc1JhbmdlID0gW3NlbGYgdmlzaWJs
ZVBvc2l0aW9uUmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKLSAgICAg
ICAgTlNSZWN0IHJlY3QgPSBtX29iamVjdC0+Ym91bmRzRm9yVmlzaWJsZVBvc2l0aW9uUmFuZ2Uo
dmlzaWJsZVBvc1JhbmdlKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgIE5TUmVjdCBy
ZWN0ID0gbV9vYmplY3QtPmJvdW5kc0ZvclJhbmdlKHJhbmdlKTsKICAgICAgICAgcmV0dXJuIFtO
U1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmli
dXRlIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlCb3VuZHNGb3JSYW5nZVBhcmFtZXRl
cml6ZWRBdHRyaWJ1dGVdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IG1fb2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5sb2NhdGlvbik7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBlbmQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFu
Z2UubG9jYXRpb24rcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
ID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9uLCBtX29iamVj
dCk7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBjYWNoZS0+Y2hhcmFjdGVyT2Zmc2V0
Rm9ySW5kZXgocmFuZ2UubG9jYXRpb24rcmFuZ2UubGVuZ3RoLCBtX29iamVjdCk7CiAgICAgICAg
IGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4g
bmlsOwotICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZShWaXNpYmxlUG9zaXRpb25SYW5nZShzdGFydCwgZW5kKSk7CisgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZz
ZXRzKHN0YXJ0LCBlbmQpOworICAgICAgICBOU1JlY3QgcmVjdCA9IG1fb2JqZWN0LT5ib3VuZHNG
b3JSYW5nZShyYW5nZSk7CiAgICAgICAgIHJldHVybiBbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJl
Y3RdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6TlNB
Y2Nlc3NpYmlsaXR5U3RyaW5nRm9yUmFuZ2VQYXJhbWV0ZXJpemVkQXR0cmlidXRlXSkgewotICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9y
SW5kZXgocmFuZ2UubG9jYXRpb24pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gZW5kID0gbV9v
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KHJhbmdlLmxvY2F0aW9uK3JhbmdlLmxlbmd0
aCk7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IGNhY2hlLT5jaGFyYWN0ZXJPZmZz
ZXRGb3JJbmRleChyYW5nZS5sb2NhdGlvbiwgbV9vYmplY3QpOworICAgICAgICBDaGFyYWN0ZXJP
ZmZzZXQgZW5kID0gY2FjaGUtPmNoYXJhY3Rlck9mZnNldEZvckluZGV4KHJhbmdlLmxvY2F0aW9u
ICsgcmFuZ2UubGVuZ3RoLCBtX29iamVjdCk7CiAgICAgICAgIGlmIChzdGFydC5pc051bGwoKSB8
fCBlbmQuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4g
bV9vYmplY3QtPnN0cmluZ0ZvclZpc2libGVQb3NpdGlvblJhbmdlKFZpc2libGVQb3NpdGlvblJh
bmdlKHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNhY2hlLT5y
YW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CisgICAgICAgIHJl
dHVybiBtX29iamVjdC0+c3RyaW5nRm9yUmFuZ2UocmFuZ2UpOwogICAgIH0KICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0
TWFya2VyUmFuZ2UiXSkKQEAgLTQwNTUsOSArNDA3NCw2IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgaWYgKCFBWE9iamVjdElzVGV4dE1hcmtlcih0
ZXh0TWFya2VyMSkgfHwgIUFYT2JqZWN0SXNUZXh0TWFya2VyKHRleHRNYXJrZXIyKSkKICAgICAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIAotICAgICAgICBBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0gICAgICAgIGlmICghY2FjaGUpCi0gICAg
ICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zm
c2V0MSA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjFdOwog
ICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MiA9IFtzZWxmIGNoYXJhY3Rl
ck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjJdOwogICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhjaGFyYWN0
ZXJPZmZzZXQxLCBjaGFyYWN0ZXJPZmZzZXQyKTsKQEAgLTQwNzUsMTggKzQwOTEsMTIgQEAgLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgIH0KICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRXb3JkVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmpl
Y3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgICAgIHJl
dHVybiBuaWw7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2Vs
ZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPmxlZnRXb3JkUmFuZ2UoY2hhcmFjdGVyT2Zmc2V0KTsK
ICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5nZV07CiAg
ICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUmlnaHRX
b3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNo
ZSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJr
ZXJdOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnJpZ2h0V29yZFJhbmdl
KGNoYXJhY3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VG
cm9tUmFuZ2U6cmFuZ2VdOwpAQCAtNDEwNSwzNiArNDExNSwyNCBAQCAtIChpZClhY2Nlc3NpYmls
aXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYU2VudGVuY2VUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
Il0pIHsKLSAgICAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RD
YWNoZSgpOwotICAgICAgICBpZiAoIWNhY2hlKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9m
ZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBjYWNoZS0+c2VudGVuY2VGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsK
ICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5nZV07CiAg
ICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUGFyYWdy
YXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNo
ZSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFy
YWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJr
ZXJdOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY2FjaGUtPnBhcmFncmFwaEZvckNo
YXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOwogICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyIl0pIHsKLSAgICAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOwotICAgICAgICBpZiAoIWNhY2hlKQotICAgICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rl
ck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CiAgICAgICAgIENoYXJhY3Rlck9mZnNl
dCBuZXh0RW5kID0gY2FjaGUtPm5leHRXb3JkRW5kQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9m
ZnNldCk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0
Om5leHRFbmRdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWFByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAg
ICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7Ci0g
ICAgICAgIGlmICghY2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4
dE1hcmtlcjp0ZXh0TWFya2VyXTsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzU3Rh
cnQgPSBjYWNoZS0+cHJldmlvdXNXb3JkU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6
cHJldmlvdXNTdGFydF07CkBAIC00MTUxLDM2ICs0MTQ5LDI0IEBAIC0gKGlkKWFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0U2VudGVuY2VFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
ciJdKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJP
ZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQg
bmV4dEVuZCA9IGNhY2hlLT5uZXh0U2VudGVuY2VFbmRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVy
T2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZz
ZXQ6bmV4dEVuZF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0
cmluZzpAIkFYUHJldmlvdXNTZW50ZW5jZVN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkg
ewotICAgICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hl
KCk7Ci0gICAgICAgIGlmICghY2FjaGUpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0
Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZp
b3VzU3RhcnQgPSBjYWNoZS0+cHJldmlvdXNTZW50ZW5jZVN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNo
YXJhY3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0OnByZXZpb3VzU3RhcnRdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlciJdKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0
ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICBDaGFyYWN0ZXJPZmZz
ZXQgbmV4dEVuZCA9IGNhY2hlLT5uZXh0UGFyYWdyYXBoRW5kQ2hhcmFjdGVyT2Zmc2V0KGNoYXJh
Y3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVy
T2Zmc2V0Om5leHRFbmRdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
ciJdKSB7Ci0gICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKTsKLSAgICAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJP
ZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQg
cHJldmlvdXNTdGFydCA9IGNhY2hlLT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVyT2Zm
c2V0KGNoYXJhY3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0OnByZXZpb3VzU3RhcnRdOwpAQCAtNDI3Niw3ICs0MjYyLDcgQEAgLSAo
aWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAgaWYgKCFy
YW5nZVNldCkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgUGxhaW5U
ZXh0UmFuZ2UgcGxhaW5UZXh0UmFuZ2UgPSBQbGFpblRleHRSYW5nZShyYW5nZS5sb2NhdGlvbiwg
cmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgICAgIE5TUmVjdCByZWN0ID0gbV9vYmplY3QtPmRvQVhC
b3VuZHNGb3JSYW5nZShwbGFpblRleHRSYW5nZSk7CisgICAgICAgICAgICBOU1JlY3QgcmVjdCA9
IG1fb2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2VVc2luZ0NoYXJhY3Rlck9mZnNldChwbGFpblRl
eHRSYW5nZSk7CiAgICAgICAgICAgICByZXR1cm4gW05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0
XTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCShyZXZpc2lvbiAxOTc3MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyOSw5ICsxMzI5LDE0IEBAIExheW91
dFJlY3QgbG9jYWxDYXJldFJlY3RJblJlbmRlcmVyRm9yQ2EKICAgICBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyOwogICAgIExheW91dFJlY3QgbG9jYWxSZWN0ID0gY2FyZXRQb3NpdGlvbi5sb2NhbENh
cmV0UmVjdChyZW5kZXJlcik7CiAKKyAgICByZXR1cm4gbG9jYWxDYXJldFJlY3RJblJlbmRlcmVy
Rm9yUmVjdChsb2NhbFJlY3QsIGNhcmV0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpLCByZW5kZXJlciwgY2FyZXRQYWludGVyKTsKK30KKworTGF5b3V0UmVjdCBsb2Nh
bENhcmV0UmVjdEluUmVuZGVyZXJGb3JSZWN0KExheW91dFJlY3QmIGxvY2FsUmVjdCwgTm9kZSog
bm9kZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyQmxvY2sqJiBjYXJldFBhaW50ZXIp
Cit7CiAgICAgLy8gR2V0IHRoZSByZW5kZXJlciB0aGF0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9y
IHBhaW50aW5nIHRoZSBjYXJldAogICAgIC8vICh3aGljaCBpcyBlaXRoZXIgdGhlIHJlbmRlcmVy
IHdlIGp1c3QgZm91bmQsIG9yIG9uZSBvZiBpdHMgY29udGFpbmVycykuCi0gICAgY2FyZXRQYWlu
dGVyID0gcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nKGNhcmV0UG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBjYXJldFBhaW50ZXIgPSByZW5kZXJlckZvckNh
cmV0UGFpbnRpbmcobm9kZSk7CiAKICAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRo
ZSByZW5kZXJlciBhbmQgdGhlIGNhcmV0UGFpbnRlci4KICAgICB3aGlsZSAocmVuZGVyZXIgIT0g
Y2FyZXRQYWludGVyKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5oCShy
ZXZpc2lvbiAxOTc3MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsNyBAQCBjb25zdCBTdHJpbmcmIG5vbkJyZWFr
aW5nU3BhY2VTdHJpbmcoKTsKIAogUmVuZGVyQmxvY2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGlu
ZyhOb2RlKik7CiBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvckNhcmV0UGFp
bnRpbmcoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgUmVuZGVyQmxvY2sqJik7CitMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0SW5SZW5kZXJlckZvclJlY3QoTGF5b3V0UmVjdCYsIE5vZGUqLCBSZW5k
ZXJPYmplY3QqLCBSZW5kZXJCbG9jayomKTsKIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2Nh
bENhcmV0UmVjdChSZW5kZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLCBjb25zdCBM
YXlvdXRSZWN0Jik7CiAKIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzcwOSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE2LTAzLTEw
ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBi
b3VuZHMvcG9zaXRpb24gYW5kIGluZGV4IHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHVz
aW5nIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU0OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1mb3ItaW5kZXgtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1m
b3ItaW5kZXguaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1t
YXJrZXItd29yZC1uYXYtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFj
L3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWw6CisKIDIwMTYtMDMtMDcgIFJ5YW4gSGFkZGFkICA8
cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFya2luZyBqcy9wcm9taXNlcy10ZXN0
cy9wcm9taXNlcy10ZXN0cy0yLTMtMy5odG1sIGFzIGZsYWt5IG9uIG1hYwpJbmRleDogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtl
ci1mb3ItaW5kZXgtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACit0ZXh0CisKK3RleHQKK2F1ZGlvIGZpbGUuCitUaGlz
IHZlcmlmaWVzIHRoYXQgdGV4dE1hcmtlckZvckluZGV4IGFuZCBpbmRleEZvclRleHRNYXJrZXIg
YXJlIHdvcmtpbmcgY29ycmVjdGx5LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
T3JpZ2luYWwgbWFya2VyIHN0cmluZzogeAorSW5kZXggaXM6IDMKK05ldyBtYXJrZXIgc3RyaW5n
OiB4CisKK09yaWdpbmFsIG1hcmtlciBzdHJpbmc6ICdsaW5lIGJyZWFrJworSW5kZXggaXM6IDYK
K05ldyBtYXJrZXIgc3RyaW5nOiAnbGluZSBicmVhaycKKworT3JpZ2luYWwgbWFya2VyIHN0cmlu
ZzogZgorSW5kZXggaXM6IDE4CitOZXcgbWFya2VyIHN0cmluZzogZgorCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItZm9yLWluZGV4Lmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1h
cmtlci1mb3ItaW5kZXguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJvZHkg
aWQ9ImJvZHkiIHRhYmluZGV4PSIwIj4KKworPGRpdiB0YWJpbmRleD0iMCIgaWQ9InRleHQxIj50
ZXh0PC9kaXY+Cis8YnI+Cit0ZXh0CisKKzxkaXYgaWQ9InRleHQyIj4KK2F1ZGlvIDxhdWRpbyBj
b250cm9scz48c291cmNlIHNyYz0idGVzdC5tcDMiIHR5cGU9ImF1ZGlvL21wZWciPjwvYXVkaW8+
ZmlsZS4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMgdmVyaWZpZXMg
dGhhdCB0ZXh0TWFya2VyRm9ySW5kZXggYW5kIGluZGV4Rm9yVGV4dE1hcmtlciBhcmUgd29ya2lu
ZyBjb3JyZWN0bHkuIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
KSB7CisgICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKCJ0ZXh0MSIpOworICAgICAgICAvLyBHZXQgdGhlIGFjdHVhbCB0ZXh0IG5v
ZGUuCisgICAgICAgIHRleHQgPSB0ZXh0LmNoaWxkQXRJbmRleCgwKTsKKyAgICAgICAgCisgICAg
ICAgIHZhciBwcmV2aW91cywgY3VycmVudDsKKyAgICAgICAgdmFyIHRleHRNYXJrZXJSYW5nZSA9
IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgdmFyIHN0YXJ0
TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtl
clJhbmdlKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvcndhcmQoMywgcHJldmlvdXMsIHN0YXJ0
TWFya2VyLCB0ZXh0KTsKKyAgICAgICAgcHJldmlvdXMgPSByZXN1bHQucHJldmlvdXM7CisgICAg
ICAgIGN1cnJlbnQgPSByZXN1bHQuY3VycmVudDsKKyAgICAgICAgdmVyaWZ5TWFya2VySW5kZXgo
cHJldmlvdXMsIGN1cnJlbnQsIHRleHQpOyAKKyAgICAgICAgCisgICAgICAgIC8vIEJSCisgICAg
ICAgIHJlc3VsdCA9IGZvcndhcmQoMiwgcHJldmlvdXMsIGN1cnJlbnQsIHRleHQpOworICAgICAg
ICBwcmV2aW91cyA9IHJlc3VsdC5wcmV2aW91czsKKyAgICAgICAgY3VycmVudCA9IHJlc3VsdC5j
dXJyZW50OworICAgICAgICB2ZXJpZnlNYXJrZXJJbmRleChwcmV2aW91cywgY3VycmVudCwgdGV4
dCk7IAorICAgICAgICAKKyAgICAgICAgLy8gQXR0YWNobWVudAorICAgICAgICB0ZXh0ID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOworICAg
ICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4
dCk7CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgcmVzdWx0ID0gZm9yd2FyZCg4LCBw
cmV2aW91cywgc3RhcnRNYXJrZXIsIHRleHQpOworICAgICAgICBwcmV2aW91cyA9IHJlc3VsdC5w
cmV2aW91czsKKyAgICAgICAgY3VycmVudCA9IHJlc3VsdC5jdXJyZW50OworICAgICAgICB2ZXJp
ZnlNYXJrZXJJbmRleChwcmV2aW91cywgY3VycmVudCwgdGV4dCk7CisgICAgfQorICAgIAorICAg
IAorICAgIGZ1bmN0aW9uIGZvcndhcmQoY291bnQsIHByZXZpb3VzTWFya2VyLCBjdXJyZW50TWFy
a2VyLCBvYmopIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cisg
ICAgICAgICAgICBwcmV2aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CisgICAgICAgICAgICBj
dXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0TWFya2VyKGN1cnJlbnRNYXJrZXIpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBwcmV2aW91czogcHJldmlvdXNNYXJr
ZXIsCisgICAgICAgICAgICBjdXJyZW50OiBjdXJyZW50TWFya2VyCisgICAgICAgIH07CisgICAg
fQorICAgIAorICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5lYnJlYWtJblN0cmluZyhzdHIpIHsKKyAg
ICAgICAgdmFyIG5ld2xpbmUgPSAnXG4nOworICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXds
aW5lLCAiJ2xpbmUgYnJlYWsnIik7CisgICAgICAgIHJldHVybiBzdHI7CisgICAgfQorICAgIAor
ICAgIGZ1bmN0aW9uIHZlcmlmeU1hcmtlckluZGV4KHByZXZpb3VzTWFya2VyLCB0ZXh0TWFya2Vy
LCBvYmopIHsKKyAgICAgICAgdmFyIG1hcmtlclJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZv
ck1hcmtlcnMocHJldmlvdXNNYXJrZXIsIHRleHRNYXJrZXIpOworICAgICAgICB2YXIgb3JpZ2lu
YWxTdHJpbmcgPSByZXBsYWNlTGluZWJyZWFrSW5TdHJpbmcob2JqLnN0cmluZ0ZvclRleHRNYXJr
ZXJSYW5nZShtYXJrZXJSYW5nZSkpOworICAgICAgICBkZWJ1ZygiT3JpZ2luYWwgbWFya2VyIHN0
cmluZzogIiArIG9yaWdpbmFsU3RyaW5nKTsKKyAgICAgICAgCisgICAgICAgIHZhciBpbmRleCA9
IG9iai5pbmRleEZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgIHZhciBuZXdNYXJr
ZXIgPSBvYmoudGV4dE1hcmtlckZvckluZGV4KGluZGV4KTsKKyAgICAgICAgbWFya2VyUmFuZ2Ug
PSBvYmoudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhwcmV2aW91c01hcmtlciwgbmV3TWFya2Vy
KTsKKyAgICAgICAgdmFyIG5ld1N0cmluZyA9IHJlcGxhY2VMaW5lYnJlYWtJblN0cmluZyhvYmou
c3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSk7CisgICAgICAgIGRlYnVnKCJJ
bmRleCBpczogIiArIGluZGV4ICsgIlxuTmV3IG1hcmtlciBzdHJpbmc6ICIgKyBuZXdTdHJpbmcg
KyAiXG4iKTsKKyAgICB9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LW1hcmtlci13b3JkLW5hdi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxOTc3MDkpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0
LW1hcmtlci13b3JkLW5hdi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw4
IEBAIGxpbmUgYnJlYWtzCiBzb21lCiB0ZXh0CiB0ZXN0IGF1ZGlvIGZpbGUKK0VkaXQgdGV4dAor
CiBUaGlzIHRlc3RzIHRoYXQgd29yZCBuYXZpZ2F0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5Lgog
CiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCkBAIC01OSw2ICs2MSwxMSBAQCBMZWZ0IHdvcmQg
aXM6IGNhbid0CiBSaWdodCB3b3JkIGlzOiBjYW4ndAogUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3
b3JkIGVuZDogY2FuJ3QKIAorQ3VycmVudCBjaGFyYWN0ZXIgaXM6IAorTGVmdCB3b3JkIGlzOiDl
t6flhYvlipsKK1JpZ2h0IHdvcmQgaXM6IOW3p+WFi+WKmworUHJlIHdvcmQgc3RhcnQgdG8gbmV4
dCB3b3JkIGVuZDogc2VsZWN0J2xpbmUgYnJlYWsn5ben5YWL5YqbCisKIEN1cnJlbnQgY2hhcmFj
dGVyIGlzOiDlhYsKIExlZnQgd29yZCBpczog5ben5YWL5YqbCiBSaWdodCB3b3JkIGlzOiDlt6fl
hYvlipsKQEAgLTExOSw2ICsxMjYsMTEgQEAgTGVmdCB3b3JkIGlzOiBmaWxlCiBSaWdodCB3b3Jk
IGlzOiBmaWxlCiBQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5kOiBmaWxlCiAKK0N1cnJl
bnQgY2hhcmFjdGVyIGlzOiB0CitMZWZ0IHdvcmQgaXM6IEVkaXQKK1JpZ2h0IHdvcmQgaXM6ICAK
K1ByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6IEVkaXQgdGV4dAorCiBUZXN0IGdvaW5n
IGZvcndhcmQuCiBFbmQgd29yZDogZmlsZQogCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2Lmh0bWwJKHJldmlzaW9u
IDE5NzcwOSkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdv
cmQtbmF2Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDExIEBAIHNvbWU8YnI+dGV4
dAogdGVzdCBhdWRpbyA8YXVkaW8gY29udHJvbHM+PHNvdXJjZSBzcmM9InRlc3QubXAzIiB0eXBl
PSJhdWRpby9tcGVnIj48L2F1ZGlvPmZpbGUKIDwvZGl2PgogCis8cCBpZD0idGV4dDgiPgorPHN0
cm9uZz5FZGl0PC9zdHJvbmc+Cit0ZXh0Cis8L3A+CisKIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CiAKQEAgLTY0LDEzICs2OSwxMyBAQCB0ZXN0IGF1
ZGlvIDxhdWRpbyBjb250cm9scz48c291cmNlIHNyYz0iCiAgICAgICAgIC8vIEF0ICJUIiBpbiAi
VGhpc2lzIiwgc2hvdWxkIHJldHVybiB0aGUgd29yZCBhcyAiVGhpc2lzbG9uZ3dvcmQiLgogICAg
ICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAyLCB0
ZXh0KTsKICAgICAgICAgLy8gQXQgIiAiIGJlZm9yZSAiSSIsIHRoZSB3b3JkIHNob3VsZCBiZSAi
SSdsbCIuCi0gICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRN
YXJrZXIsIDE1LCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJp
ZnkoY3VycmVudE1hcmtlciwgMTQsIHRleHQpOwogICAgICAgICAvLyBBdCAiICIgYmVmb3JlICJ0
cnkiLCB0aGUgd29yZCBzaG91bGQgZXhjbHVkZXMgIi4iCi0gICAgICAgIGN1cnJlbnRNYXJrZXIg
PSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDYsIHRleHQpOworICAgICAgICBjdXJy
ZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCA1LCB0ZXh0KTsKICAg
ICAgICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSBjYXNlIHdpdGggY29udGVudGVkaXRhYmxlCiAg
ICAgICAgIC8vIEF0ICJlIiBpbiAiZWRpdGFibGUiLCB0aGUgd29yZCBzaG91bGQgTk9UIGluY2x1
ZGUgIkNvbnRlbnQiIGJlZm9yZSBpdC4KLSAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VB
bmRWZXJpZnkoY3VycmVudE1hcmtlciwgMTksIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2Vy
ID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAxOCwgdGV4dCk7CiAgICAgICAgIAog
ICAgICAgICAvLyBDaGVjayB0aGUgY2FzZSB3aXRoIHJlcGxhY2VkIG5vZGUsIHRoZSByZXBsYWNl
ZCBub2RlIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgd29yZC4KICAgICAgICAgdmFyIHRleHQyID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOwpA
QCAtODksNiArOTQsOCBAQCB0ZXN0IGF1ZGlvIDxhdWRpbyBjb250cm9scz48c291cmNlIHNyYz0i
CiAgICAgICAgIHZhciB0ZXh0NCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgidGV4dDQiKTsKICAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4dDQudGV4
dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0NCk7CiAgICAgICAgIGN1cnJlbnRNYXJrZXIgPSB0
ZXh0NC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHdoZW4gd2UgYXJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGlu
ZSwgaXQgd29uJ3QgZ28gdG8gcHJldmlvdXMgbm9kZS4KKyAgICAgICAgY3VycmVudE1hcmtlciA9
IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMCwgdGV4dDQpOwogICAgICAgICBjdXJy
ZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAyLCB0ZXh0NCk7CiAg
ICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEs
IHRleHQ0KTsKICAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVu
dE1hcmtlciwgMSwgdGV4dDQpOwpAQCAtMTIzLDEyICsxMzAsMTggQEAgdGVzdCBhdWRpbyA8YXVk
aW8gY29udHJvbHM+PHNvdXJjZSBzcmM9IgogICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5j
ZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAxLCB0ZXh0Nyk7CiAgICAgICAgIGN1cnJlbnRNYXJr
ZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRleHQ3KTsKICAgICAgICAg
CisgICAgICAgIC8vIEZvciBub2RlIHdpdGggdGV4dCBub2RlIGNoaWxkcmVuLCB3ZSBzaG91bGQg
dHJlYXQgdGhlIHZpc3VhbCBzcGFjZSBhcyB3b3JkIGJvdW5kYXJ5LgorICAgICAgICB2YXIgdGV4
dDggPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ4
Iik7CisgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHRleHQ4LnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQodGV4dDgpOworICAgICAgICBjdXJyZW50TWFya2VyID0gdGV4dDguc3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRN
YXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDQsIHRleHQ4KTsKKyAgICAg
ICAgCiAgICAgICAgIC8vIENoZWNrIHRoZSB3b3JkIG1hcmtlciBydW5zIGZyb20gc3RhcnQgdG8g
ZW5kLCBhbmQgYmFja3dhcmRzLgogICAgICAgICAvLyBNYWtlIHN1cmUgaXQgd29uJ3QgaGFuZy4K
ICAgICAgICAgdmVyaWZ5RG9jdW1lbnQodGV4dCk7CiAgICAgICAgIAogICAgICAgICBmdW5jdGlv
biBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIG9mZnNldCwgb2JqKSB7Ci0gICAgICAg
ICAgICB2YXIgcHJldmlvdXNNYXJrZXI7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNNYXJrZXIg
PSBjdXJyZW50TWFya2VyOwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7
IGkrKykgewogICAgICAgICAgICAgICAgIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsK
ICAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0TWFya2VyKHByZXZp
b3VzTWFya2VyKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>