<?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>42193</bug_id>
          
          <creation_ts>2010-07-13 13:50:59 -0700</creation_ts>
          <short_desc>Support layoutTestController.dumpEditingDelegates in WebKitTestRunner</short_desc>
          <delta_ts>2010-07-25 00:56:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>aroben</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>250717</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-07-13 13:50:59 -0700</bug_when>
    <thetext>Support layoutTestController.dumpEditingDelegates in WebKitTestRunner

Many tests (mostly editing tests) depend on this. We may want to find a way to do this without (at least initially) having actual editing delegates. Also, many of these failures likely mask deeper failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250725</commentid>
    <comment_count>1</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-07-13 13:58:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/8186753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251199</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-14 08:25:19 -0700</bug_when>
    <thetext>A temporary option is to use the hack we use for Windows: strip all the editing delegate callbacks when doing the diff between expected and actual results. Obviously this doesn&apos;t help with generating new results, but it does make the tests runnable until we get an editing delegate hooked up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255047</commentid>
    <comment_count>3</comment_count>
      <attachid>62356</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-22 16:20:51 -0700</bug_when>
    <thetext>Created attachment 62356
step 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255085</commentid>
    <comment_count>4</comment_count>
      <attachid>62356</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-22 17:11:40 -0700</bug_when>
    <thetext>Comment on attachment 62356
step 1

&gt; +    bool shouldBeginEditing(WebPage* page, WebCore::Range*);

Omit the argument name &quot;page&quot; here?

&gt; +WKStringRef WKBundleNodeGetNodeName(WKBundleNodeRef node)
&gt; +{
&gt; +    return toRef(toWK(node)-&gt;nodeName().impl());
&gt; +}

Looks to me like this will return a stale pointer if nodeName() returns a temporary string. If nodeName() was guaranteed to always return a string that is owned by the caller, then I’d expect a return type of const String&amp; rather than String. I think this needs to be a copy function.

&gt; +    OwnPtr&lt;Vector&lt;char&gt; &gt; str = WKStringToUTF8(WKBundleNodeGetNodeName(node));
&gt; +    str-&gt;shrink(str-&gt;size() - 1);

Doing this shrink seems strange. Maybe we should change WKStringToUTF8 to return a string instead of an OwnPtr&lt;Vector&lt;char&gt; &gt; in a later patch.

r=me if you change it to WKBundleNodeCopyNodeName</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255119</commentid>
    <comment_count>5</comment_count>
      <attachid>62356</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-22 17:50:45 -0700</bug_when>
    <thetext>Comment on attachment 62356
step 1

Committed &lt;http://trac.webkit.org/changeset/63930&gt;.

Keeping open to add the rest of delegate methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255138</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-22 18:39:07 -0700</bug_when>
    <thetext>It appears this broke both the windows builders on the waterfall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255150</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-22 18:57:11 -0700</bug_when>
    <thetext>Gradually fixing it (so far, r63937 and r63938).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255177</commentid>
    <comment_count>8</comment_count>
      <attachid>62375</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-22 20:19:56 -0700</bug_when>
    <thetext>Created attachment 62375
adding more - work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255795</commentid>
    <comment_count>9</comment_count>
      <attachid>62520</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-24 22:25:21 -0700</bug_when>
    <thetext>Created attachment 62520
step 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255797</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-24 22:27:46 -0700</bug_when>
    <thetext>Attachment 62520 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
51:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:52:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:55:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:56:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:57:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:58:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:59:  More than one command on the same line  [whitespace/newline] [4]
WebKit2/WebProcess/InjectedBundle/API/c/WKBundleAPICast.h:60:  More than one command on the same line  [whitespace/newline] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:453:  InjectedBundlePage::_shouldEndEditing is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:458:  InjectedBundlePage::_shouldInsertNode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:463:  InjectedBundlePage::_shouldInsertText is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:468:  InjectedBundlePage::_shouldDeleteRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:473:  InjectedBundlePage::_shouldChangeSelectedRange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:478:  InjectedBundlePage::_shouldApplyStyle is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:483:  InjectedBundlePage::_didBeginEditing is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:488:  InjectedBundlePage::_didEndEditing is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:493:  InjectedBundlePage::_didChange is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:498:  InjectedBundlePage::_didChangeSelection is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 44 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255806</commentid>
    <comment_count>11</comment_count>
      <attachid>62520</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-25 00:06:58 -0700</bug_when>
    <thetext>Comment on attachment 62520
step 2

r=me. I wonder if it makes sense to break up the test runners InjectedBundlePage soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255808</commentid>
    <comment_count>12</comment_count>
      <attachid>62520</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-25 00:56:48 -0700</bug_when>
    <thetext>Comment on attachment 62520
step 2

Clearing flags on attachment: 62520

Committed r64020: &lt;http://trac.webkit.org/changeset/64020&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255809</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-25 00:56:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62356</attachid>
            <date>2010-07-22 16:20:51 -0700</date>
            <delta_ts>2010-07-22 17:55:47 -0700</delta_ts>
            <desc>step 1</desc>
            <filename>EditorClient1.txt</filename>
            <type>text/plain</type>
            <size>38383</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzkxOCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDctMjIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMTkzCisgICAgICAgIFN1
cHBvcnQgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEVkaXRpbmdEZWxlZ2F0ZXMgaW4gV2ViS2l0
VGVzdFJ1bm5lcgorCisgICAgICAgIFN0ZXAgMTogQWRkIHRoZSBtZXRob2QsIGFuZCBpbXBsZW1l
bnQgb25lIGFjdHVhbCBkZWxlZ2F0ZSBjYWxsIGFzIHByb29mIG9mIGNvbmNlcHQuIE5vIHRlc3Rz
CisgICAgICAgIGZpeGVkLCBidXQgdGhpcyBtYWtlcyBkaWZmZXJlbmNlIG9uZSBsaW5lIHNtYWxs
ZXIgb24gbWFueSBlZGl0aW5nIHRlc3RzLgorCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVBUElDYXN0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZUJhc2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV0tCdW5kbGVOb2Rl
R2V0Tm9kZU5hbWUpOgorICAgICAgICAoV0tCdW5kbGVOb2RlR2V0UGFyZW50KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlTm9kZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5j
cHA6CisgICAgICAgIChXS0J1bmRsZVBhZ2VTZXRFZGl0b3JDbGllbnQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVJhbmdlLmNwcDogQWRkZWQu
CisgICAgICAgIChXS0J1bmRsZVJhbmdlR2V0U3RhcnRPZmZzZXQpOgorICAgICAgICAoV0tCdW5k
bGVSYW5nZUdldFN0YXJ0Q29udGFpbmVyKToKKyAgICAgICAgKFdLQnVuZGxlUmFuZ2VHZXRFbmRP
ZmZzZXQpOgorICAgICAgICAoV0tCdW5kbGVSYW5nZUdldEVuZENvbnRhaW5lcik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVJhbmdlLmg6IEFkZGVk
LgorICAgICAgICBBZGRlZCBXS0J1bmRsZVJhbmdlUmVmIGFuZCBXS0J1bmRsZU5vZGVSZWYgdHlw
ZXMgZm9yIGluamVjdGVkIGJ1bmRsZXMuIFRoZXNlIGFyZSBqdXN0IHBvaW50ZXJzCisgICAgICAg
IHRvIHJlc3BlY3RpdmUgV2ViQ29yZSBvYmplY3RzLCB3aXRob3V0IGFueSBXZWJLaXQyIHdyYXBw
ZXJzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQpOgor
ICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbml0
aWFsaXplSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmluamVjdGVkQnVu
ZGxlRWRpdG9yQ2xpZW50KToKKyAgICAgICAgQWRkZWQgdGhlIHBsdW1iaW5nIGZvciBpbnZva2lu
ZyBpbmplY3RlZCBidW5kbGUgY29kZSBmb3IgZWRpdG9yIGNsaWVudC4gVGhlcmUgaXMgbm8gcmVh
bCBBUEkKKyAgICAgICAgZm9yIGVkaXRvciBjbGllbnQgeWV0LgorCiAyMDEwLTA3LTIyICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBSb2Jlbi4KSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA2MzkwNSkKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1LDEyIEBACiAJCUJDRjY5RkEz
MTE3NkQwMTQwMDQ3MUE1MiAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2OUZBMTExNzZEMDE0MDA0NzFBNTIg
LyogV2ViTmF2aWdhdGlvbkRhdGEuY3BwICovOyB9OwogCQlCQ0Y2OUZBOTExNzZEMUNCMDA0NzFB
NTIgLyogV0tOYXZpZ2F0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkNGNjlGQTcxMTc2RDFDQjAwNDcxQTUyIC8qIFdLTmF2aWdhdGlvbkRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCUJD
RjY5RkFBMTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjY5RkE4MTE3NkQxQ0IwMDQ3
MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhLmNwcCAqLzsgfTsKKwkJRTFFRTUzRTMxMUY4Q0ZDMDAw
Q0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTUzREMxMUY4Q0Y5RjAwQ0NCRUU0
IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oICovOyB9OworCQlFMUVFNTNFNzEx
RjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU1M0U2MTFGOENG
RkIwMENDQkVFNCAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwICovOyB9Owor
CQlFMUVFNTVGNDExRjhGMTg5MDBDQ0JFRTQgLyogV0tCdW5kbGVSYW5nZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTU1RjMxMUY4RjE4OTAwQ0NC
RUU0IC8qIFdLQnVuZGxlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJs
aWMsICk7IH07IH07CisJCUUxRUU1NUY4MTFGOEYxQkMwMENDQkVFNCAvKiBXS0J1bmRsZVJhbmdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU1
NUY3MTFGOEYxQkMwMENDQkVFNCAvKiBXS0J1bmRsZVJhbmdlLmNwcCAqLzsgfTsKKwkJRTFFRTU2
MzAxMUY4RjZBQTAwQ0NCRUU0IC8qIFdLQnVuZGxlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTU2MkYxMUY4RjZBQTAwQ0NCRUU0IC8qIFdL
QnVuZGxlTm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKKwkJRTFFRTU2NTYxMUY4RjcxNzAwQ0NCRUU0IC8qIFdLQnVuZGxlTm9kZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNTY1NTExRjhGNzE3
MDBDQ0JFRTQgLyogV0tCdW5kbGVOb2RlLmNwcCAqLzsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwpA
QCAtNTM3LDYgKzU0MywxMiBAQAogCQlCQ0Y2OUZBMTExNzZEMDE0MDA0NzFBNTIgLyogV2ViTmF2
aWdhdGlvbkRhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
TmF2aWdhdGlvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y2OUZB
NzExNzZEMUNCMDA0NzFBNTIgLyogV0tOYXZpZ2F0aW9uRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRjY5RkE4MTE3NkQxQ0IwMDQ3MUE1MiAvKiBXS05hdmlnYXRpb25EYXRhLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRhdGEu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUVFNTNEQzExRjhDRjlGMDBDQ0JF
RTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMUVFNTNFNjExRjhDRkZCMDBDQ0JFRTQgLyogSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUxRUU1NUYzMTFGOEYxODkwMENDQkVFNCAvKiBXS0J1bmRsZVJh
bmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQnVuZGxlUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFFRTU1RjcxMUY4RjFCQzAwQ0NCRUU0IC8q
IFdLQnVuZGxlUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0tCdW5kbGVSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUxRUU1NjJG
MTFGOEY2QUEwMENDQkVFNCAvKiBXS0J1bmRsZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tCdW5kbGVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUxRUU1NjU1MTFGOEY3MTcwMENDQkVFNCAvKiBXS0J1bmRsZU5vZGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tCdW5kbGVOb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAogLyog
QmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtMTAxNiw2ICsxMDI4
LDggQEAKIAkJCQlCQzIwNEVFNDExQzgzRTlDMDA4RjMzNzUgLyogbWFjICovLAogCQkJCUJDMjA0
RUUwMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5jcHAgKi8sCiAJCQkJQkMyMDRF
RTExMUM4M0U5ODAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlLmggKi8sCisJCQkJRTFFRTUzRTYx
MUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAgKi8s
CisJCQkJRTFFRTUzREMxMUY4Q0Y5RjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudC5oICovLAogCQkJCUJDQThDNkE2MTFFM0JBNUYwMDgxMkZCNyAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VMb2FkZXJDbGllbnQuY3BwICovLAogCQkJCUJDQThDNkE3MTFFM0JBNUYwMDgxMkZC
NyAvKiBJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAqLywKIAkJCQlCQ0E4QzZBRDEx
RTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQuY3BwICovLApAQCAt
MTA1MCw5ICsxMDY0LDEzIEBACiAJCQkJQkNEMjVGMTYxMUQ2QkRFMTAwMTY5QjBFIC8qIFdLQnVu
ZGxlRnJhbWUuY3BwICovLAogCQkJCUJDRDI1RjE1MTFENkJERTEwMDE2OUIwRSAvKiBXS0J1bmRs
ZUZyYW1lLmggKi8sCiAJCQkJQkMyMDRFRUQxMUM4M0VDODAwOEYzMzc1IC8qIFdLQnVuZGxlSW5p
dGlhbGl6ZS5oICovLAorCQkJCUUxRUU1NjU1MTFGOEY3MTcwMENDQkVFNCAvKiBXS0J1bmRsZU5v
ZGUuY3BwICovLAorCQkJCUUxRUU1NjJGMTFGOEY2QUEwMENDQkVFNCAvKiBXS0J1bmRsZU5vZGUu
aCAqLywKIAkJCQlCQzIwNTI4MDExQzk0Mjg0MDA4RjMzNzUgLyogV0tCdW5kbGVQYWdlLmNwcCAq
LywKIAkJCQlCQzIwNTI3RjExQzk0Mjg0MDA4RjMzNzUgLyogV0tCdW5kbGVQYWdlLmggKi8sCiAJ
CQkJQkMxQjQxOTcxMUQ0MUQ1NzAwMTFFOEREIC8qIFdLQnVuZGxlUGFnZVByaXZhdGUuaCAqLywK
KwkJCQlFMUVFNTVGNzExRjhGMUJDMDBDQ0JFRTQgLyogV0tCdW5kbGVSYW5nZS5jcHAgKi8sCisJ
CQkJRTFFRTU1RjMxMUY4RjE4OTAwQ0NCRUU0IC8qIFdLQnVuZGxlUmFuZ2UuaCAqLywKIAkJCSk7
CiAJCQlwYXRoID0gYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xMjYxLDYgKzEy
NzksOSBAQAogCQkJCTFBMjE2MUIwMTFGMzc2NjQwMDhBRDBGNSAvKiBOUEpTT2JqZWN0TWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxQTIxNjJCMTExRjM4OTcxMDA4QUQwRjUgLyogTlBSdW50aW1l
VXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTI0QjVGMzExRjUzMUU4MDBDMzgyNjkg
LyogTWFjaFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFFRTUzRTMxMUY4Q0ZDMDAw
Q0NCRUU0IC8qIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTFFRTU1RjQxMUY4RjE4OTAwQ0NCRUU0IC8qIFdLQnVuZGxlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUUxRUU1NjMwMTFGOEY2QUEwMENDQkVFNCAvKiBXS0J1bmRsZU5vZGUuaCBp
biBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpAQCAtMTQ1Niw2ICsxNDc3LDkgQEAKIAkJCQkxQTIxNjJCMDExRjM4OTcx
MDA4QUQwRjUgLyogTlBSdW50aW1lVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFB
MUM2NDlCMTFGNDE3NDIwMDU1M0MxOSAvKiBXZWJDb250ZXh0TWFjLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUEyNEI1RjIxMUY1MzFFODAwQzM4MjY5IC8qIE1hY2hVdGlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJRTFFRTUzRTcxMUY4Q0ZGQjAwQ0NCRUU0IC8qIEluamVjdGVkQnVuZGxl
UGFnZUVkaXRvckNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUVFNTVGODExRjhGMUJD
MDBDQ0JFRTQgLyogV0tCdW5kbGVSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMUVFNTY1
NjExRjhGNzE3MDBDQ0JFRTQgLyogV0tCdW5kbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaCIKKworI2luY2x1ZGUg
IldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1TdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OkluamVj
dGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudCgpCit7CisgICAgaW5pdGlhbGl6ZSgwKTsKK30KKwor
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmluaXRpYWxpemUoV0tCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50KiBjbGllbnQpCit7CisgICAgaWYgKGNsaWVudCAmJiAhY2xpZW50LT52
ZXJzaW9uKQorICAgICAgICBtX2NsaWVudCA9ICpjbGllbnQ7CisgICAgZWxzZSAKKyAgICAgICAg
bWVtc2V0KCZtX2NsaWVudCwgMCwgc2l6ZW9mKG1fY2xpZW50KSk7Cit9CisKK2Jvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSogcGFn
ZSwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQoreworICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdp
bkVkaXRpbmcpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcodG9S
ZWYocGFnZSksIHRvUmVmKHJhbmdlKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5qZWN0ZWRCdW5kbGVQ
YWdlRWRpdG9yQ2xpZW50X2gKKyNkZWZpbmUgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50
X2gKKworI2luY2x1ZGUgIldLQnVuZGxlUGFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgY2xhc3MgUmFuZ2U7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJGcmFt
ZTsKK2NsYXNzIFdlYlBhZ2U7CisKK2NsYXNzIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dCB7CitwdWJsaWM6CisgICAgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50KCk7CisgICAg
dm9pZCBpbml0aWFsaXplKFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudCopOworCisgICAgYm9vbCBz
aG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSogcGFnZSwgV2ViQ29yZTo6UmFuZ2UqKTsKKworcHJp
dmF0ZToKKyAgICBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQgbV9jbGllbnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNs
aWVudF9oCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCShyZXZpc2lvbiA2MzkwNSkKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTEgQEAKIAogI2luY2x1ZGUgIldLQnVuZGxlQmFzZS5o
IgogCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgTm9kZTsKKyAgICBjbGFzcyBSYW5n
ZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEluamVjdGVkQnVuZGxlOwpAQCAt
MzUsMTQgKzQwLDE4IEBAIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZTsKIAogdGVtcGxh
dGU8dHlwZW5hbWUgQVBJVHlwZT4gc3RydWN0IEJ1bmRsZUFQSVR5cGVJbmZvIHsgfTsKLXRlbXBs
YXRlPD4gc3RydWN0IEJ1bmRsZUFQSVR5cGVJbmZvPFdLQnVuZGxlUGFnZVJlZj4gICAgICAgICAg
ICB7IHR5cGVkZWYgV2ViUGFnZSogSW1wbFR5cGU7IH07CiB0ZW1wbGF0ZTw+IHN0cnVjdCBCdW5k
bGVBUElUeXBlSW5mbzxXS0J1bmRsZUZyYW1lUmVmPiAgICAgICAgICAgeyB0eXBlZGVmIFdlYkZy
YW1lKiBJbXBsVHlwZTsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUFQSVR5cGVJbmZvPFdL
QnVuZGxlTm9kZVJlZj4gICAgICAgICAgICB7IHR5cGVkZWYgV2ViQ29yZTo6Tm9kZSogSW1wbFR5
cGU7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCdW5kbGVBUElUeXBlSW5mbzxXS0J1bmRsZVBhZ2VS
ZWY+ICAgICAgICAgICAgeyB0eXBlZGVmIFdlYlBhZ2UqIEltcGxUeXBlOyB9OwordGVtcGxhdGU8
PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUluZm88V0tCdW5kbGVSYW5nZVJlZj4gICAgICAgICAgIHsg
dHlwZWRlZiBXZWJDb3JlOjpSYW5nZSogSW1wbFR5cGU7IH07CiB0ZW1wbGF0ZTw+IHN0cnVjdCBC
dW5kbGVBUElUeXBlSW5mbzxXS0J1bmRsZVJlZj4gICAgICAgICAgICAgICAgeyB0eXBlZGVmIElu
amVjdGVkQnVuZGxlKiBJbXBsVHlwZTsgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSW1wbFR5cGU+
IHN0cnVjdCBCdW5kbGVJbXBsVHlwZUluZm8geyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxl
SW1wbFR5cGVJbmZvPFdlYlBhZ2UqPiAgICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBXS0J1bmRs
ZVBhZ2VSZWYgQVBJVHlwZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUltcGxUeXBlSW5m
bzxXZWJGcmFtZSo+ICAgICAgICAgICAgICAgICB7IHR5cGVkZWYgV0tCdW5kbGVGcmFtZVJlZiBB
UElUeXBlOyB9OwogdGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZvPEluamVjdGVk
QnVuZGxlKj4gICAgICAgICAgIHsgdHlwZWRlZiBXS0J1bmRsZVJlZiBBUElUeXBlOyB9OwordGVt
cGxhdGU8PiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZvPFdlYkNvcmU6Ok5vZGUqPiAgICAgICAg
ICAgIHsgdHlwZWRlZiBXS0J1bmRsZU5vZGVSZWYgQVBJVHlwZTsgfTsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEJ1bmRsZUltcGxUeXBlSW5mbzxXZWJDb3JlOjpSYW5nZSo+ICAgICAgICAgICB7IHR5cGVk
ZWYgV0tCdW5kbGVSYW5nZVJlZiBBUElUeXBlOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxl
SW1wbFR5cGVJbmZvPFdlYkZyYW1lKj4gICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBXS0J1bmRs
ZUZyYW1lUmVmIEFQSVR5cGU7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCdW5kbGVJbXBsVHlwZUlu
Zm88V2ViUGFnZSo+ICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFdLQnVuZGxlUGFnZVJlZiBB
UElUeXBlOyB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIApJbmRleDogV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhc2UuaAko
cmV2aXNpb24gNjM5MDUpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDkgKzI2LDExIEBACiAjaWZu
ZGVmIFdLQnVuZGxlQmFzZV9oCiAjZGVmaW5lIFdLQnVuZGxlQmFzZV9oCiAKLXR5cGVkZWYgc3Ry
dWN0IE9wYXF1ZVdLQnVuZGxlUGFnZSogV0tCdW5kbGVQYWdlUmVmOwotdHlwZWRlZiBzdHJ1Y3Qg
T3BhcXVlV0tCdW5kbGVGcmFtZSogV0tCdW5kbGVGcmFtZVJlZjsKIHR5cGVkZWYgc3RydWN0IE9w
YXF1ZVdLQnVuZGxlKiBXS0J1bmRsZVJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZVdLQnVuZGxl
RnJhbWUqIFdLQnVuZGxlRnJhbWVSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVXS0J1bmRsZU5v
ZGUqIFdLQnVuZGxlTm9kZVJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZVdLQnVuZGxlUGFnZSog
V0tCdW5kbGVQYWdlUmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tCdW5kbGVSYW5nZSogV0tC
dW5kbGVSYW5nZVJlZjsKIAogI3VuZGVmIFdLX0VYUE9SVAogI2lmIGRlZmluZWQoV0tfTk9fRVhQ
T1JUKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVOb2RlLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJXS0J1bmRsZU5vZGUuaCIK
KworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgor
I2luY2x1ZGUgIldLQnVuZGxlTm9kZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZS5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK1dLU3Ry
aW5nUmVmIFdLQnVuZGxlTm9kZUdldE5vZGVOYW1lKFdLQnVuZGxlTm9kZVJlZiBub2RlKQorewor
ICAgIHJldHVybiB0b1JlZih0b1dLKG5vZGUpLT5ub2RlTmFtZSgpLmltcGwoKSk7Cit9CisKK1dL
QnVuZGxlTm9kZVJlZiBXS0J1bmRsZU5vZGVHZXRQYXJlbnQoV0tCdW5kbGVOb2RlUmVmIG5vZGUp
Cit7CisgICAgcmV0dXJuIHRvUmVmKHRvV0sobm9kZSktPnBhcmVudCgpKTsKK30KSW5kZXg6IFdl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZU5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVOb2RlLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVOb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdLQnVuZGxlTm9kZV9oCisjZGVmaW5lIFdLQnVuZGxlTm9kZV9o
CisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5k
bGVCYXNlLmg+CisKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRib29sLmg+Cisj
ZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXS19F
WFBPUlQgV0tTdHJpbmdSZWYgV0tCdW5kbGVOb2RlR2V0Tm9kZU5hbWUoV0tCdW5kbGVOb2RlUmVm
IG5vZGUpOworCitXS19FWFBPUlQgV0tCdW5kbGVOb2RlUmVmIFdLQnVuZGxlTm9kZUdldFBhcmVu
dChXS0J1bmRsZU5vZGVSZWYgbm9kZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisKKyNlbmRpZiAvKiBXS0J1bmRsZU5vZGVfaCAqLwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5jcHAJKHJl
dmlzaW9uIDYzOTA1KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEyIEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3ZvaWQgV0tCdW5kbGVQYWdlU2V0RWRpdG9yQ2xpZW50
KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQgKiB3a0Ns
aWVudCkKK3sKKyAgICBpZiAod2tDbGllbnQgJiYgIXdrQ2xpZW50LT52ZXJzaW9uKQorICAgICAg
ICB0b1dLKHBhZ2VSZWYpLT5pbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQod2tD
bGllbnQpOworfQorCiB2b2lkIFdLQnVuZGxlUGFnZVNldExvYWRlckNsaWVudChXS0J1bmRsZVBh
Z2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVQYWdlTG9hZGVyQ2xpZW50ICogd2tDbGllbnQpCiB7CiAg
ICAgaWYgKHdrQ2xpZW50ICYmICF3a0NsaWVudC0+dmVyc2lvbikKSW5kZXg6IFdlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlLmgJ
KHJldmlzaW9uIDYzOTA1KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3NywxOCBAQCBzdHJ1
Y3QgV0tCdW5kbGVQYWdlVUlDbGllbnQgewogfTsKIHR5cGVkZWYgc3RydWN0IFdLQnVuZGxlUGFn
ZVVJQ2xpZW50IFdLQnVuZGxlUGFnZVVJQ2xpZW50OwogCi1XS19FWFBPUlQgdm9pZCBXS0J1bmRs
ZVBhZ2VTZXRMb2FkZXJDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlUGFnZUxv
YWRlckNsaWVudCAqIGNsaWVudCk7Ci1XS19FWFBPUlQgdm9pZCBXS0J1bmRsZVBhZ2VTZXRVSUNs
aWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVQYWdlVUlDbGllbnQgKiBjbGllbnQp
OworLy8gRWRpdG9yIGNsaWVudAordHlwZWRlZiBib29sICgqV0tCdW5kbGVQYWdlU2hvdWxkQmVn
aW5FZGl0aW5nQ2FsbGJhY2spKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVJhbmdlUmVm
IHJhbmdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3N0cnVjdCBXS0J1bmRsZVBhZ2VFZGl0
b3JDbGllbnQgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjsKKyAgICBjb25zdCB2b2lkICogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVu
dEluZm87CisgICAgV0tCdW5kbGVQYWdlU2hvdWxkQmVnaW5FZGl0aW5nQ2FsbGJhY2sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCZWdpbkVkaXRpbmc7Cit9OwordHlwZWRlZiBz
dHJ1Y3QgV0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50IFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudDsK
KworV0tfRVhQT1JUIHZvaWQgV0tCdW5kbGVQYWdlU2V0RWRpdG9yQ2xpZW50KFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQqIGNsaWVudCk7CitXS19FWFBPUlQg
dm9pZCBXS0J1bmRsZVBhZ2VTZXRMb2FkZXJDbGllbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdL
QnVuZGxlUGFnZUxvYWRlckNsaWVudCogY2xpZW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLQnVuZGxl
UGFnZVNldFVJQ2xpZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVBhZ2VVSUNsaWVu
dCogY2xpZW50KTsKIAogV0tfRVhQT1JUIFdLQnVuZGxlRnJhbWVSZWYgV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlKTsKIApJbmRleDogV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUmFuZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVJhbmdlLmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVJhbmdlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJXS0J1bmRsZVJhbmdlLmgiCisKKyNpbmNsdWRlICJXS0J1bmRsZUFQ
SUNhc3QuaCIKKyNpbmNsdWRlICJXS0J1bmRsZU5vZGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jh
bmdlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKwordW5zaWduZWQgV0tCdW5kbGVSYW5nZUdldFN0YXJ0T2Zmc2V0KFdLQnVuZGxlUmFuZ2VS
ZWYgcmFuZ2UpCit7CisgICAgcmV0dXJuIHRvV0socmFuZ2UpLT5zdGFydE9mZnNldCgpOworfQor
CitXS0J1bmRsZU5vZGVSZWYgV0tCdW5kbGVSYW5nZUdldFN0YXJ0Q29udGFpbmVyKFdLQnVuZGxl
UmFuZ2VSZWYgcmFuZ2UpCit7CisgICAgcmV0dXJuIHRvUmVmKHRvV0socmFuZ2UpLT5zdGFydENv
bnRhaW5lcigpKTsKK30KKwordW5zaWduZWQgV0tCdW5kbGVSYW5nZUdldEVuZE9mZnNldChXS0J1
bmRsZVJhbmdlUmVmIHJhbmdlKQoreworICAgIHJldHVybiB0b1dLKHJhbmdlKS0+ZW5kT2Zmc2V0
KCk7Cit9CisKK1dLQnVuZGxlTm9kZVJlZiBXS0J1bmRsZVJhbmdlR2V0RW5kQ29udGFpbmVyKFdL
QnVuZGxlUmFuZ2VSZWYgcmFuZ2UpCit7CisgICAgcmV0dXJuIHRvUmVmKHRvV0socmFuZ2UpLT5l
bmRDb250YWluZXIoKSk7Cit9CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVSYW5nZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVJhbmdlLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVSYW5nZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS0J1bmRs
ZVJhbmdlX2gKKyNkZWZpbmUgV0tCdW5kbGVSYW5nZV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dL
QmFzZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVCYXNlLmg+CisKKyNpZm5kZWYgX19j
cGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXS19FWFBPUlQgdW5zaWduZWQgV0tCdW5kbGVS
YW5nZUdldFN0YXJ0T2Zmc2V0KFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UpOworCitXS19FWFBPUlQg
V0tCdW5kbGVOb2RlUmVmIFdLQnVuZGxlUmFuZ2VHZXRTdGFydENvbnRhaW5lcihXS0J1bmRsZVJh
bmdlUmVmIHJhbmdlKTsKKworV0tfRVhQT1JUIHVuc2lnbmVkIFdLQnVuZGxlUmFuZ2VHZXRFbmRP
ZmZzZXQoV0tCdW5kbGVSYW5nZVJlZiByYW5nZSk7CisKK1dLX0VYUE9SVCBXS0J1bmRsZU5vZGVS
ZWYgV0tCdW5kbGVSYW5nZUdldEVuZENvbnRhaW5lcihXS0J1bmRsZVJhbmdlUmVmIHJhbmdlKTsK
KworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLQnVuZGxlUmFu
Z2VfaCAqLwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDYzOTA1KQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwMiwxMCArMTAyLDExIEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0VkaXRhYmxlKCkK
IH0KIAogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0aW5nKFJhbmdlKikK
K2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoUmFuZ2UqIHJhbmdlKQog
eworICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgp
LnNob3VsZEJlZ2luRWRpdGluZyhtX3BhZ2UsIHJhbmdlKTsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKikKSW5kZXg6IFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA2MzkwNSkKKysrIFdlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiArMTIzLDEx
IEBAIFdlYlBhZ2U6On5XZWJQYWdlKCkKICNlbmRpZgogfQogCit2b2lkIFdlYlBhZ2U6OmluaXRp
YWxpemVJbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudChXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQq
IGNsaWVudCkKK3sKKyAgICBtX2VkaXRvckNsaWVudC5pbml0aWFsaXplKGNsaWVudCk7Cit9CisK
IHZvaWQgV2ViUGFnZTo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KFdLQnVu
ZGxlUGFnZUxvYWRlckNsaWVudCogY2xpZW50KQogewogICAgIG1fbG9hZGVyQ2xpZW50LmluaXRp
YWxpemUoY2xpZW50KTsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJl
dmlzaW9uIDYzOTA1KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFdlYlBhZ2VfaAogCiAjaW5j
bHVkZSAiRHJhd2luZ0FyZWEuaCIKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JD
bGllbnQuaCIKICNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCIKICNp
bmNsdWRlICJJbmplY3RlZEJ1bmRsZVBhZ2VVSUNsaWVudC5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWVMb2FkZXJUeXBlcy5oPgpAQCAtOTEsOSArOTIsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyJik7CiAKICAgICAvLyAtLSBJbmplY3RlZEJ1bmRs
ZSBtZXRob2RzCisgICAgdm9pZCBpbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGllbnQo
V0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50Kik7CiAgICAgdm9pZCBpbml0aWFsaXplSW5qZWN0ZWRC
dW5kbGVMb2FkZXJDbGllbnQoV0tCdW5kbGVQYWdlTG9hZGVyQ2xpZW50Kik7CiAgICAgdm9pZCBp
bml0aWFsaXplSW5qZWN0ZWRCdW5kbGVVSUNsaWVudChXS0J1bmRsZVBhZ2VVSUNsaWVudCopOwog
CisgICAgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50JiBpbmplY3RlZEJ1bmRsZUVkaXRv
ckNsaWVudCgpIHsgcmV0dXJuIG1fZWRpdG9yQ2xpZW50OyB9CiAgICAgSW5qZWN0ZWRCdW5kbGVQ
YWdlTG9hZGVyQ2xpZW50JiBpbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpIHsgcmV0dXJuIG1f
bG9hZGVyQ2xpZW50OyB9CiAgICAgSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQmIGluamVjdGVk
QnVuZGxlVUlDbGllbnQoKSB7IHJldHVybiBtX3VpQ2xpZW50OyB9CiAKQEAgLTEzOCw2ICsxNDEs
NyBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkludFNpemUgbV92aWV3U2l6ZTsKICAgICBPd25Q
dHI8RHJhd2luZ0FyZWE+IG1fZHJhd2luZ0FyZWE7CiAKKyAgICBJbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQgbV9lZGl0b3JDbGllbnQ7CiAgICAgSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVy
Q2xpZW50IG1fbG9hZGVyQ2xpZW50OwogICAgIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50IG1f
dWlDbGllbnQ7CiAKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzOTE4KQorKysgV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTAtMDctMjIgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyMTkzCisgICAgICAgIFN1cHBvcnQgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEVk
aXRpbmdEZWxlZ2F0ZXMgaW4gV2ViS2l0VGVzdFJ1bm5lcgorCisgICAgICAgIFN0ZXAgMTogQWRk
IHRoZSBtZXRob2QsIGFuZCBpbXBsZW1lbnQgb25lIGFjdHVhbCBkZWxlZ2F0ZSBjYWxsIGFzIHBy
b29mIG9mIGNvbmNlcHQuIE5vIHRlc3RzCisgICAgICAgIGZpeGVkLCBidXQgdGhpcyBtYWtlcyBk
aWZmZXJlbmNlIG9uZSBsaW5lIHNtYWxsZXIgb24gbWFueSBlZGl0aW5nIHRlc3RzLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9MYXlvdXRUZXN0
Q29udHJvbGxlci5pZGw6CisgICAgICAgIEFkZGVkIGR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkgYW5k
IHNldEFjY2VwdHNFZGl0aW5nKCkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6OmR1bXBQYXRo
KTogRHVtcCBwYXRoIHRvIGEgbm9kZSBpbiBhIGZvcm1hdCB0aGF0J3MgY29tcGF0aWJsZSB3aXRo
IER1bXBSZW5kZXJUcmVlLgorICAgICAgICAoV1RSOjpvcGVyYXRvcjw8KTogUHJpbnQgYSByYW5n
ZS4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpJbmplY3RlZEJ1bmRsZVBhZ2Up
OiBTZXQgZWRpdG9yIGNsaWVudCBpbiBhZGRpdGlvbiB0byBleGlzdGluZworICAgICAgICBjbGll
bnRzLgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6Ol9zaG91bGRCZWdpbkVkaXRp
bmcpOiBUaGUgb25seSBjbGllbnQgbWV0aG9kIGltcGxlbWVudGVkIHNvIGZhci4KKyAgICAgICAg
KFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcpOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5oOiBBZGRlZCBhIHNlY3Rpb24gZm9yIGVkaXRvciBjbGllbnQKKyAgICAgICAgY2FsbHMuCisK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRl
c3RDb250cm9sbGVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wRWRpdGluZ0NhbGxiYWNrcyk6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250
cm9sbGVyOjpzZXRBY2NlcHRzRWRpdGluZyk6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250
cm9sbGVyOjphY2NlcHRzRWRpdGluZyk6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9s
bGVyOjpzaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcyk6CisgICAgICAgIFN0b3JlIG1fYWNjZXB0
c0VkaXRpbmcgYW5kIG1fZHVtcEVkaXRpbmdDYWxsYmFja3MuCisKIDIwMTAtMDctMjIgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCShyZXZpc2lvbiA2
MzkwNSkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGVQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTQgKzI5LDE4IEBACiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLQXJyYXkuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlRnJhbWUuaD4KKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQnVuZGxlTm9kZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdl
UHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQyL1dLQnVuZGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZ0NGLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIFBhc3NP
d25QdHI8VmVjdG9yPGNoYXI+ID4gV0tTdHJpbmdUb1VURjgoV0tTdHJpbmdSZWYgd2tTdHJpbmdS
ZWYpCkBAIC01Miw2ICs1NiwyOSBAQCBzdGF0aWMgUGFzc093blB0cjxWZWN0b3I8Y2hhcj4gPiBX
S1N0cmluCiAgICAgcmV0dXJuIGJ1ZmZlci5yZWxlYXNlKCk7CiB9CiAKKworc3RhdGljIHN0cmlu
ZyBkdW1wUGF0aChXS0J1bmRsZU5vZGVSZWYgbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiAiKG51bGwpIjsKKworICAgIE93blB0cjxWZWN0b3I8Y2hhcj4gPiBzdHIgPSBX
S1N0cmluZ1RvVVRGOChXS0J1bmRsZU5vZGVHZXROb2RlTmFtZShub2RlKSk7CisgICAgc3RyLT5z
aHJpbmsoc3RyLT5zaXplKCkgLSAxKTsKKyAgICBXS0J1bmRsZU5vZGVSZWYgcGFyZW50ID0gV0tC
dW5kbGVOb2RlR2V0UGFyZW50KG5vZGUpOworICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAgc3Ry
LT5hcHBlbmQoIiA+ICIsIDMpOworICAgICAgICBzdHJpbmcgcGFyZW50UGF0aCA9IGR1bXBQYXRo
KHBhcmVudCk7CisgICAgICAgIHN0ci0+YXBwZW5kKHBhcmVudFBhdGguZGF0YSgpLCBwYXJlbnRQ
YXRoLmxlbmd0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cmluZyhzdHItPmRhdGEoKSwgc3Ry
LT5zaXplKCkpOworfQorCitzdGF0aWMgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBvdXQs
IFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2VSZWYpCit7CisgICAgb3V0IDw8ICJyYW5nZSBmcm9tICIg
PDwgV0tCdW5kbGVSYW5nZUdldFN0YXJ0T2Zmc2V0KHJhbmdlUmVmKSA8PCAiIG9mICIgPDwgZHVt
cFBhdGgoV0tCdW5kbGVSYW5nZUdldFN0YXJ0Q29udGFpbmVyKHJhbmdlUmVmKSkgPDwgIiB0byAi
IDw8IFdLQnVuZGxlUmFuZ2VHZXRFbmRPZmZzZXQocmFuZ2VSZWYpIDw8ICIgb2YgIiA8PCBkdW1w
UGF0aChXS0J1bmRsZVJhbmdlR2V0RW5kQ29udGFpbmVyKHJhbmdlUmVmKSk7CisgICAgcmV0dXJu
IG91dDsKK30KKwogSW5qZWN0ZWRCdW5kbGVQYWdlOjpJbmplY3RlZEJ1bmRsZVBhZ2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1faXNMb2FkaW5nKGZh
bHNlKQpAQCAtODAsNiArMTA3LDEzIEBAIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5k
bGVQYWdlKFcKICAgICAgICAgX3dpbGxSdW5KYXZhU2NyaXB0UHJvbXB0CiAgICAgfTsKICAgICBX
S0J1bmRsZVBhZ2VTZXRVSUNsaWVudChtX3BhZ2UsICZ1aUNsaWVudCk7CisKKyAgICBXS0J1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQgZWRpdG9yQ2xpZW50ID0geworICAgICAgICAwLAorICAgICAgICB0
aGlzLAorICAgICAgICBfc2hvdWxkQmVnaW5FZGl0aW5nLAorICAgIH07CisgICAgV0tCdW5kbGVQ
YWdlU2V0RWRpdG9yQ2xpZW50KG1fcGFnZSwgJmVkaXRvckNsaWVudCk7CiB9CiAKIEluamVjdGVk
QnVuZGxlUGFnZTo6fkluamVjdGVkQnVuZGxlUGFnZSgpCkBAIC0zMDIsNCArMzM2LDE5IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmkKICAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3MoKSA8PCAiUFJPTVBUOiAiIDw8IFdLU3RyaW5nVG9VVEY4KG1lc3NhZ2Up
LT5kYXRhKCkgPDwgIiwgZGVmYXVsdCB0ZXh0OiAiIDw8IFdLU3RyaW5nVG9VVEY4KGRlZmF1bHRW
YWx1ZSktPmRhdGEoKSA8PCAgIlxuIjsKIH0KIAorLy8gRWRpdG9yIENsaWVudCBDYWxsYmFja3MK
KworYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6Ol9zaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlUGFnZSo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+c2hvdWxkQmVnaW5FZGl0aW5nKHJhbmdlKTsKK30K
KworYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJh
bmdlUmVmIHJhbmdlKQoreworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiA8PCByYW5nZSA8PCAiXG4iOworICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0Vk
aXRpbmcoKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFdlYktpdFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuaAkocmV2aXNpb24gNjM5MDUpCisrKyBXZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw2ICs3MSwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgd2lsbFJ1bkphdmFTY3Jp
cHRDb25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpOwogICAgIHZv
aWQgd2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJpbmdS
ZWYgZGVmYXVsdFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKTsKIAorICAgIC8vIEVkaXRvciBjbGll
bnQKKyAgICBzdGF0aWMgYm9vbCBfc2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVuZGxlUGFnZVJlZiwg
V0tCdW5kbGVSYW5nZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgYm9vbCBzaG91
bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZVJlZik7CisKICAgICB2b2lkIGR1bXBBbGxGcmFt
ZVNjcm9sbFBvc2l0aW9ucygpOwogCiAgICAgV0tCdW5kbGVQYWdlUmVmIG1fcGFnZTsKSW5kZXg6
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2MzkwNSkK
KysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBAIFBhc3NSZWZQ
dHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+IExheW91dFQKIExheW91dFRlc3RDb250cm9sbGVyOjpM
YXlvdXRUZXN0Q29udHJvbGxlcihjb25zdCBzdGQ6OnN0cmluZyYgdGVzdFBhdGhPclVSTCkKICAg
ICA6IG1fZHVtcEFzVGV4dChmYWxzZSkKICAgICAsIG1fc2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xs
UG9zaXRpb25zKGZhbHNlKQorICAgICwgbV9hY2NlcHRzRWRpdGluZyh0cnVlKQorICAgICwgbV9k
dW1wRWRpdGluZ0NhbGxiYWNrcyhmYWxzZSkKICAgICAsIG1fZHVtcFN0YXR1c0NhbGxiYWNrcyhm
YWxzZSkKICAgICAsIG1fd2FpdFRvRHVtcChmYWxzZSkKICAgICAsIG1fdGVzdFJlcGFpbnQoZmFs
c2UpCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiA2
MzkwNSkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBPdGhlciBraW5kcyBvZiBkdW1waW5nLgogICAgIHZvaWQgZHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKSB7IG1fc2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRp
b25zID0gdHJ1ZTsgfQorICAgIHZvaWQgZHVtcEVkaXRpbmdDYWxsYmFja3MoKSB7IG1fZHVtcEVk
aXRpbmdDYWxsYmFja3MgPSB0cnVlOyB9CiAgICAgdm9pZCBkdW1wU3RhdHVzQ2FsbGJhY2tzKCkg
eyBtX2R1bXBTdGF0dXNDYWxsYmFja3MgPSB0cnVlOyB9CiAKICAgICAvLyBSZXBhaW50IHRlc3Rp
bmcuCkBAIC02Miw4ICs2MywxMiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCkgY29uc3Q7CiAgICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSwgSlNTdHJp
bmdSZWYgZWxlbWVudElkKTsKIAorICAgIHZvaWQgc2V0QWNjZXB0c0VkaXRpbmcoYm9vbCB2YWx1
ZSkgeyBtX2FjY2VwdHNFZGl0aW5nID0gdmFsdWU7IH0KKyAgICBib29sIGFjY2VwdHNFZGl0aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9hY2NlcHRzRWRpdGluZzsgfQorCiAgICAgYm9vbCBzaG91bGRE
dW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZER1bXBB
bGxGcmFtZVNjcm9sbFBvc2l0aW9uczsgfQogICAgIGJvb2wgc2hvdWxkRHVtcEFzVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fZHVtcEFzVGV4dDsgfQorICAgIGJvb2wgc2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX2R1bXBFZGl0aW5nQ2FsbGJhY2tzOyB9CiAgICAg
Ym9vbCBzaG91bGREdW1wRE9NQXNXZWJBcmNoaXZlKCkgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRE
dW1wTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKICAgICBib29sIHNob3VsZER1bXBT
b3VyY2VBc1dlYkFyY2hpdmUoKSBjb25zdDsKQEAgLTc4LDYgKzgzLDggQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9kdW1wQXNUZXh0OwogICAgIGJvb2wgbV9zaG91bGREdW1wQWxsRnJhbWVTY3Jv
bGxQb3NpdGlvbnM7CisgICAgYm9vbCBtX2FjY2VwdHNFZGl0aW5nOworICAgIGJvb2wgbV9kdW1w
RWRpdGluZ0NhbGxiYWNrczsKICAgICBib29sIG1fZHVtcFN0YXR1c0NhbGxiYWNrczsKICAgICBi
b29sIG1fd2FpdFRvRHVtcDsgLy8gVHJ1ZSBpZiB3YWl0VW50aWxEb25lKCkgaGFzIGJlZW4gY2Fs
bGVkLCBidXQgbm90aWZ5RG9uZSgpIGhhcyBub3QgeWV0IGJlZW4gY2FsbGVkLgogICAgIGJvb2wg
bV90ZXN0UmVwYWludDsKSW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQmluZGluZ3MvTGF5b3V0VGVzdENvbnRyb2xsZXIuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaWRsCShyZXZpc2lvbiA2MzkwNSkKKysrIFdlYktpdFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIG1vZHVsZSBXVFIgewogCiAg
ICAgICAgIC8vIE90aGVyIGtpbmRzIG9mIGR1bXBpbmcuCiAgICAgICAgIHZvaWQgZHVtcENoaWxk
RnJhbWVTY3JvbGxQb3NpdGlvbnMoKTsKKyAgICAgICAgdm9pZCBkdW1wRWRpdGluZ0NhbGxiYWNr
cygpOwogICAgICAgICB2b2lkIGR1bXBTdGF0dXNDYWxsYmFja3MoKTsKIAogICAgICAgICAvLyBS
ZXBhaW50IHRlc3RpbmcuCkBAIC00Myw2ICs0NCw4IEBAIG1vZHVsZSBXVFIgewogICAgICAgICAv
LyBBbmltYXRpb24gdGVzdGluZy4KICAgICAgICAgaW50IG51bWJlck9mQWN0aXZlQW5pbWF0aW9u
cygpOwogICAgICAgICBib29sZWFuIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElk
KGluIERPTVN0cmluZyBhbmltYXRpb25OYW1lLCBpbiBkb3VibGUgdGltZSwgaW4gRE9NU3RyaW5n
IGVsZW1lbnRJZCk7CisKKyAgICAgICAgdm9pZCBzZXRBY2NlcHRzRWRpdGluZyhpbiBib29sZWFu
IHZhbHVlKTsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>62375</attachid>
            <date>2010-07-22 20:19:56 -0700</date>
            <delta_ts>2010-07-24 22:25:21 -0700</delta_ts>
            <desc>adding more - work in progress</desc>
            <filename>EditorDelegates.txt</filename>
            <type>text/plain</type>
            <size>17134</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2VFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiA2
MzkzNykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMSArNDYsNDYgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmluaQogICAgICAgICBtZW1zZXQo
Jm1fY2xpZW50LCAwLCBzaXplb2YobV9jbGllbnQpKTsKIH0KIAotYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZyhXZWJQYWdlKiBwYWdlLCBXZWJD
b3JlOjpSYW5nZSogcmFuZ2UpCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
c2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UqIHBhZ2UsIFJhbmdlKiByYW5nZSkKIHsKICAgICBp
ZiAobV9jbGllbnQuc2hvdWxkQmVnaW5FZGl0aW5nKQogICAgICAgICByZXR1cm4gbV9jbGllbnQu
c2hvdWxkQmVnaW5FZGl0aW5nKHRvUmVmKHBhZ2UpLCB0b1JlZihyYW5nZSksIG1fY2xpZW50LmNs
aWVudEluZm8pOwogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIEluamVjdGVkQnVuZGxlUGFn
ZUVkaXRvckNsaWVudDo6c2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlKiBwYWdlLCBSYW5nZSogcmFu
Z2UpCit7CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcpCisgICAgICAgIHJldHVy
biBtX2NsaWVudC5zaG91bGRFbmRFZGl0aW5nKHRvUmVmKHBhZ2UpLCB0b1JlZihyYW5nZSksIG1f
Y2xpZW50LmNsaWVudEluZm8pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkSW5zZXJ0Tm9kZShXZWJQYWdlKiBwYWdlLCBO
b2RlKiBub2RlLCBSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rp
b24pCit7CisgICAgaWYgKG1fY2xpZW50LnNob3VsZEluc2VydE5vZGUpCisgICAgICAgIHJldHVy
biBtX2NsaWVudC5zaG91bGRJbnNlcnROb2RlKHRvUmVmKHBhZ2UpLCB0b1JlZihub2RlKSwgdG9S
ZWYocmFuZ2VUb1JlcGxhY2UpLCB0b1dLKGFjdGlvbiksIG1fY2xpZW50LmNsaWVudEluZm8pOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dDo6c2hvdWxkSW5zZXJ0VGV4dChXZWJQYWdlKiBwYWdlLCBTdHJpbmdJbXBsKiB0ZXh0LCBSYW5n
ZSogcmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCit7CisgICAgaWYg
KG1fY2xpZW50LnNob3VsZEluc2VydFRleHQpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91
bGRJbnNlcnRUZXh0KHRvUmVmKHBhZ2UpLCB0b1JlZih0ZXh0KSwgdG9SZWYocmFuZ2VUb1JlcGxh
Y2UpLCB0b1dLKGFjdGlvbiksIG1fY2xpZW50LmNsaWVudEluZm8pOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRl
UmFuZ2UoV2ViUGFnZSogcGFnZSwgUmFuZ2UqIHJhbmdlKQoreworICAgIGlmIChtX2NsaWVudC5z
aG91bGREZWxldGVSYW5nZSkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZERlbGV0ZVJh
bmdlKHRvUmVmKHBhZ2UpLCB0b1JlZihyYW5nZSksIG1fY2xpZW50LmNsaWVudEluZm8pOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXZWJQYWdlKiBwYWdlLCBSYW5nZSogZnJvbVJhbmdl
LCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5n
KQoreworICAgIGlmIChtX2NsaWVudC5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKQorICAgICAg
ICByZXR1cm4gbV9jbGllbnQuc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSh0b1JlZihwYWdlKSwg
dG9SZWYoZnJvbVJhbmdlKSwgdG9SZWYodG9SYW5nZSksIHRvV0soYWZmaW5pdHkpLCBzdGlsbFNl
bGVjdGluZywgbV9jbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGll
bnQuaAkocmV2aXNpb24gNjM5MzcpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDkgKzI3LDEzIEBACiAjZGVmaW5lIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudF9oCiAK
ICNpbmNsdWRlICJXS0J1bmRsZVBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvckluc2Vy
dEFjdGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEFmZmluaXR5Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFJhbmdlOworICAgIGNsYXNz
IFN0cmluZ0ltcGw7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMsNiArNDcsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQqKTsK
IAogICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UqLCBXZWJDb3JlOjpSYW5nZSop
OworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlKiwgV2ViQ29yZTo6UmFuZ2UqKTsK
KyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSosIFdlYkNvcmU6Ok5vZGUqLCBXZWJD
b3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2VydEFjdGlvbik7
CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UqLCBXZWJDb3JlOjpTdHJpbmdJbXBs
KiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0b3JJbnNlcnRB
Y3Rpb24pOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSosIFdlYkNvcmU6OlJh
bmdlKik7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBhZ2UqLCBXZWJD
b3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwgV2ViQ29yZTo6
RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKTsKIAogcHJpdmF0ZToKICAg
ICBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQgbV9jbGllbnQ7CkluZGV4OiBXZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVBUElDYXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2Fz
dC5oCShyZXZpc2lvbiA2MzkzNykKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsOSBA
QAogI2RlZmluZSBXS0J1bmRsZUFQSUNhc3RfaAogCiAjaW5jbHVkZSAiV0tCdW5kbGVCYXNlLmgi
CisjaW5jbHVkZSAiV0tCdW5kbGVQYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3JJbnNl
cnRBY3Rpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRBZmZpbml0eS5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZTsKQEAgLTY5LDQgKzcyLDM1IEBAIGlubGluZSB0
eXBlbmFtZSBXZWJLaXQ6OkJ1bmRsZUltcGxUeXBlSW4KICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx0eXBlbmFtZSBXZWJLaXQ6OkJ1bmRsZUltcGxUeXBlSW5mbzxUPjo6QVBJVHlwZT4odCk7
CiB9CiAKK2lubGluZSBXS0luc2VydEFjdGlvblR5cGUgdG9XSyhXZWJDb3JlOjpFZGl0b3JJbnNl
cnRBY3Rpb24gYWN0aW9uKQoreworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBXZWJD
b3JlOjpFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZDoKKyAgICAgICAgcmV0dXJuIGtXS0luc2VydEFj
dGlvblR5cGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvblBhc3RlZDoKKyAgICAgICAgcmV0dXJuIGtXS0luc2VydEFjdGlvblBhc3RlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb25Ecm9wcGVk
OgorICAgICAgICByZXR1cm4ga1dLSW5zZXJ0QWN0aW9uRHJvcHBlZDsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrV0tJbnNlcnRB
Y3Rpb25UeXBlZDsKK30KKworaW5saW5lIFdLQWZmaW5pdHlUeXBlIHRvV0soV2ViQ29yZTo6RUFm
ZmluaXR5IGFmZmluaXR5KQoreworICAgIHN3aXRjaCAoYWZmaW5pdHkpIHsKKyAgICBjYXNlIFdl
YkNvcmU6OlVQU1RSRUFNOgorICAgICAgICByZXR1cm4ga1dLQWZmaW5pdHlVcHN0cmVhbTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpET1dOU1RSRUFNOgorICAgICAgICByZXR1
cm4ga1dLQWZmaW5pdHlEb3duc3RyZWFtOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGtXS0FmZmluaXR5VXBzdHJlYW07Cit9CisK
ICNlbmRpZiAvLyBXS0J1bmRsZUFQSUNhc3RfaApJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAkocmV2aXNpb24g
NjM5MzcpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDE5IEBACiBleHRlcm4gIkMiIHsK
ICNlbmRpZgogCitlbnVtIHsKKyAgICBrV0tJbnNlcnRBY3Rpb25UeXBlZCA9IDAsCisgICAga1dL
SW5zZXJ0QWN0aW9uUGFzdGVkID0gMSwKKyAgICBrV0tJbnNlcnRBY3Rpb25Ecm9wcGVkID0gMgor
fTsKK3R5cGVkZWYgdWludDMyX3QgV0tJbnNlcnRBY3Rpb25UeXBlOworCitlbnVtIHsKKyAgICBr
V0tBZmZpbml0eVVwc3RyZWFtLAorICAgIGtXS0FmZmluaXR5RG93bnN0cmVhbQorfTsKK3R5cGVk
ZWYgdWludDMyX3QgV0tBZmZpbml0eVR5cGU7CisKIC8vIExvYWRlciBDbGllbnQKIHR5cGVkZWYg
dm9pZCAoKldLQnVuZGxlUGFnZURpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVDYWxsYmFj
aykoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tCdW5kbGVQYWdlRGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVDYWxsYmFjaykoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pOwpAQCAtNzksMTAgKzkyLDIxIEBAIHR5cGVkZWYgc3RydWN0IFdLQnVuZGxlUGFnZVVJQ2xp
ZW50IFdLQnUKIAogLy8gRWRpdG9yIGNsaWVudAogdHlwZWRlZiBib29sICgqV0tCdW5kbGVQYWdl
U2hvdWxkQmVnaW5FZGl0aW5nQ2FsbGJhY2spKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRs
ZVJhbmdlUmVmIHJhbmdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgYm9vbCAo
KldLQnVuZGxlUGFnZVNob3VsZEVuZEVkaXRpbmdDYWxsYmFjaykoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlw
ZWRlZiBib29sICgqV0tCdW5kbGVQYWdlU2hvdWxkSW5zZXJ0Tm9kZUNhbGxiYWNrKShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVOb2RlUmVmIG5vZGUsIFdLQnVuZGxlUmFuZ2VSZWYgcmFu
Z2VUb1JlcGxhY2UsIFdLSW5zZXJ0QWN0aW9uVHlwZSBhY3Rpb24sIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOwordHlwZWRlZiBib29sICgqV0tCdW5kbGVQYWdlU2hvdWxkSW5zZXJ0VGV4dENhbGxi
YWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0J1bmRsZVJh
bmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlvblR5cGUgYWN0aW9uLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgYm9vbCAoKldLQnVuZGxlUGFnZVNob3VsZERlbGV0
ZVJhbmdlQ2FsbGJhY2spKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVJhbmdlUmVmIHJh
bmdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgYm9vbCAoKldLQnVuZGxlUGFn
ZVNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRs
ZVJhbmdlUmVmIGZyb21SYW5nZSwgV0tCdW5kbGVSYW5nZVJlZiB0b1JhbmdlLCBXS0FmZmluaXR5
VHlwZSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZywgY29uc3Qgdm9pZCogY2xpZW50SW5m
byk7CisKIHN0cnVjdCBXS0J1bmRsZVBhZ2VFZGl0b3JDbGllbnQgewogICAgIGludCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVyc2lvbjsKICAgICBjb25zdCB2b2lkICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudEluZm87CiAgICAgV0tCdW5kbGVQYWdlU2hv
dWxkQmVnaW5FZGl0aW5nQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGRCZWdpbkVkaXRpbmc7CisgICAgV0tCdW5kbGVQYWdlU2hvdWxkRW5kRWRpdGluZ0NhbGxiYWNr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRFbmRFZGl0aW5nOworICAgIFdL
QnVuZGxlUGFnZVNob3VsZEluc2VydE5vZGVDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvdWxkSW5zZXJ0Tm9kZTsKKyAgICBXS0J1bmRsZVBhZ2VTaG91bGRJbnNlcnRU
ZXh0Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluc2VydFRl
eHQ7CisgICAgV0tCdW5kbGVQYWdlU2hvdWxkRGVsZXRlUmFuZ2VDYWxsYmFjayAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG91bGREZWxldGVSYW5nZTsKKyAgICBXS0J1bmRsZVBhZ2VT
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
b3VsZENoYW5nZVNlbGVjdGVkUmFuZ2U7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgV0tCdW5kbGVQYWdl
RWRpdG9yQ2xpZW50IFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudDsKIApJbmRleDogV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHJldmlzaW9uIDYzOTM3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxMSBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6cGFnZURlc3Ryb3llZCgpCiAgICAgZGVsZXRlIHRoaXM7CiB9CiAK
LWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShSYW5nZSopCitib29sIFdl
YkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKQogeworICAgIGJv
b2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZERl
bGV0ZVJhbmdlKG1fcGFnZSwgcmFuZ2UpOwogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6
OnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKQpAQCAtMTA5LDI2ICsxMTAs
MzIgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRpdGluZwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFJh
bmdlKikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFJhbmdlKiByYW5n
ZSkKIHsKKyAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVFZGl0b3JDbGll
bnQoKS5zaG91bGRFbmRFZGl0aW5nKG1fcGFnZSwgcmFuZ2UpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdlKiwgRWRpdG9ySW5zZXJ0
QWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSogbm9k
ZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rpb24gYWN0aW9uKQogewor
ICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNo
b3VsZEluc2VydE5vZGUobV9wYWdlLCBub2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KGNvbnN0IFN0cmlu
ZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNo
b3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSogcmFuZ2VUb1JlcGxhY2Us
IEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgYm9v
bCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkSW5z
ZXJ0VGV4dChtX3BhZ2UsIHRleHQuaW1wbCgpLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdlKiBmcm9tUmFuZ2UsIFJh
bmdlKiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCitib29sIFdlYkVk
aXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5nZSogZnJvbVJhbmdlLCBS
YW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQog
ewotICAgIHJldHVybiB0cnVlOworICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1
bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UobV9wYWdlLCBmcm9t
UmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OnNob3VsZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIFJhbmdlKikKSW5kZXg6
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHJldmlzaW9uIDYzOTM3KQorKysg
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDExIEBAIEluamVjdGVkQnVu
ZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQYWdlKFcKICAgICAgICAgMCwKICAgICAgICAgdGhpcywK
ICAgICAgICAgX3Nob3VsZEJlZ2luRWRpdGluZywKKyAgICAgICAgX3Nob3VsZEVuZEVkaXRpbmcs
CisgICAgICAgIF9zaG91bGRJbnNlcnROb2RlLAorICAgICAgICBfc2hvdWxkSW5zZXJ0VGV4dCwK
KyAgICAgICAgX3Nob3VsZERlbGV0ZVJhbmdlLAorICAgICAgICBfc2hvdWxkQ2hhbmdlU2VsZWN0
ZWRSYW5nZQogICAgIH07CiAgICAgV0tCdW5kbGVQYWdlU2V0RWRpdG9yQ2xpZW50KG1fcGFnZSwg
JmVkaXRvckNsaWVudCk7CiB9CkBAIC0zNzYsNiArMzgxLDMxIEBAIGJvb2wgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpfc2hvdWxkQmVnaW5FZGkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5qZWN0ZWRC
dW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5zaG91bGRCZWdpbkVk
aXRpbmcocmFuZ2UpOwogfQogCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6X3Nob3VsZEVuZEVk
aXRpbmcoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluamVjdGVkQnVu
ZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+c2hvdWxkRW5kRWRpdGlu
ZyhyYW5nZSk7Cit9CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpfc2hvdWxkSW5zZXJ0Tm9k
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVOb2RlUmVmIG5vZGUsIFdLQnVuZGxlUmFu
Z2VSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0QWN0aW9uVHlwZSBhY3Rpb24sIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxl
UGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+c2hvdWxkSW5zZXJ0Tm9kZShu
b2RlLCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKK30KKworYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6Ol9zaG91bGRJbnNlcnRUZXh0KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0
ZXh0LCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlvblR5cGUg
YWN0aW9uLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbmplY3RlZEJ1bmRsZVBhZ2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPnNo
b3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2VUb1JlcGxhY2UsIGFjdGlvbik7Cit9CisKK2Jvb2wg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpfc2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGNsaWVudEluZm8pKS0+c2hvdWxkRGVsZXRlUmFuZ2UocmFuZ2UpOworfQorCitib29sIElu
amVjdGVkQnVuZGxlUGFnZTo6X3Nob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgZnJvbVJhbmdlLCBXS0J1bmRsZVJhbmdlUmVmIHRv
UmFuZ2UsIFdLQWZmaW5pdHlUeXBlIGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmplY3RlZEJ1
bmRsZVBhZ2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPnNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoZnJvbVJhbmdlLCB0b1JhbmdlLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rpbmcp
OworfQorCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVu
ZGxlUmFuZ2VSZWYgcmFuZ2UpCiB7CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQpAQCAt
MzgzLDUgKzQxMyw2MSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0
CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5hY2NlcHRzRWRpdGluZygpOwogfQogCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkRW5kRWRpdGluZyhXS0J1bmRsZVJhbmdlUmVmIHJhbmdlKQoreworICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwg
IkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIgPDwgcmFuZ2Ug
PDwgIlxuIjsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RD
b250cm9sbGVyKCktPmFjY2VwdHNFZGl0aW5nKCk7Cit9CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpzaG91bGRJbnNlcnROb2RlKFdLQnVuZGxlTm9kZVJlZiBub2RlLCBXS0J1bmRsZVJhbmdl
UmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlvblR5cGUgYWN0aW9uKQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyICppbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKKyAgICAgICAgIldlYlZp
ZXdJbnNlcnRBY3Rpb25UeXBlZCIsCisgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVk
IiwKKyAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKKyAgICB9OworCisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiIDw8IGR1bXBQ
YXRoKG5vZGUpIDw8ICIgcmVwbGFjaW5nRE9NUmFuZ2U6IiA8PCByYW5nZVRvUmVwbGFjZSA8PCAi
IGdpdmVuQWN0aW9uOiIgPDwgaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0gPDwgIlxuIjsKKyAg
ICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCkt
PmFjY2VwdHNFZGl0aW5nKCk7Cit9CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJ
bnNlcnRUZXh0KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2VUb1JlcGxh
Y2UsIFdLSW5zZXJ0QWN0aW9uVHlwZSBhY3Rpb24pCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIg
Kmluc2VydGFjdGlvbnN0cmluZ1tdID0geworICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblR5
cGVkIiwKKyAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWQiLAorICAgICAgICAiV2Vi
Vmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAorICAgIH07CisKKyAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0OiIgPDwgV0tTdHJpbmdUb1VURjgodGV4dCkt
PmRhdGEoKSA8PCAiIHJlcGxhY2luZ0RPTVJhbmdlOiIgPDwgcmFuZ2VUb1JlcGxhY2UgPDwgIiBn
aXZlbkFjdGlvbjoiIDw8IGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dIDw8ICJcbiI7CisgICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5h
Y2NlcHRzRWRpdGluZygpOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVs
ZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZVJlZiByYW5nZSkKK3sKKyAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2Fs
bGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElU
SU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiIDw8IHJhbmdlIDw8ICJcbiI7Cisg
ICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5hY2NlcHRzRWRpdGluZygpOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlUmVmIGZyb21SYW5nZSwgV0tCdW5kbGVS
YW5nZVJlZiB0b1JhbmdlLCBXS0FmZmluaXR5VHlwZSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVj
dGluZykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqYWZmaW5pdHlzdHJpbmdbXSA9IHsKKyAg
ICAgICAgIk5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbSIsCisgICAgICAgICJOU1NlbGVjdGlv
bkFmZmluaXR5RG93bnN0cmVhbSIKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBjaGFyICpib29s
c3RyaW5nW10gPSB7CisgICAgICAgICJGQUxTRSIsCisgICAgICAgICJUUlVFIgorICAgIH07CisK
KyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3RlZERP
TVJhbmdlOiIgPDwgZnJvbVJhbmdlIDw8ICIgdG9ET01SYW5nZToiIDw8IHRvUmFuZ2UgPDwgIiBh
ZmZpbml0eTogIiA8PCBhZmZpbml0eXN0cmluZ1thZmZpbml0eV0gPDwgIiBzdGlsbFNlbGVjdGlu
ZzoiIDw8IGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddIDw8ICJcbiI7CisgICAgcmV0dXJuIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5hY2NlcHRzRWRp
dGluZygpOworfQorCiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlUGFnZS5oCShyZXZpc2lvbiA2MzkzNykKKysrIFdlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDcgKzczLDE3IEBAIHByaXZhdGU6CiAKICAgICAvLyBFZGl0b3IgY2xpZW50CiAg
ICAgc3RhdGljIGJvb2wgX3Nob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVBhZ2VSZWYsIFdLQnVu
ZGxlUmFuZ2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIF9z
aG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVSYW5nZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgX3Nob3VsZEluc2VydE5vZGUoV0tC
dW5kbGVQYWdlUmVmLCBXS0J1bmRsZU5vZGVSZWYsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2VUb1Jl
cGxhY2UsIFdLSW5zZXJ0QWN0aW9uVHlwZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAg
c3RhdGljIGJvb2wgX3Nob3VsZEluc2VydFRleHQoV0tCdW5kbGVQYWdlUmVmLCBXS1N0cmluZ1Jl
ZiwgV0tCdW5kbGVSYW5nZVJlZiByYW5nZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgYm9vbCBfc2hvdWxkRGVsZXRlUmFu
Z2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZVJhbmdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKKyAgICBzdGF0aWMgYm9vbCBfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRs
ZVBhZ2VSZWYsIFdLQnVuZGxlUmFuZ2VSZWYgZnJvbVJhbmdlLCBXS0J1bmRsZVJhbmdlUmVmIHRv
UmFuZ2UsIFdLQWZmaW5pdHlUeXBlLCBib29sIHN0aWxsU2VsZWN0aW5nLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKICAgICBib29sIHNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlUmVm
KTsKKyAgICBib29sIHNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZVJlZik7CisgICAgYm9v
bCBzaG91bGRJbnNlcnROb2RlKFdLQnVuZGxlTm9kZVJlZiwgV0tCdW5kbGVSYW5nZVJlZiByYW5n
ZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlKTsKKyAgICBib29sIHNob3VsZEluc2VydFRl
eHQoV0tTdHJpbmdSZWYsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0
QWN0aW9uVHlwZSk7CisgICAgYm9vbCBzaG91bGREZWxldGVSYW5nZShXS0J1bmRsZVJhbmdlUmVm
KTsKKyAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVSYW5nZVJlZiBm
cm9tUmFuZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgdG9SYW5nZSwgV0tBZmZpbml0eVR5cGUsIGJvb2wg
c3RpbGxTZWxlY3RpbmcpOwogCiAgICAgdm9pZCBkdW1wQWxsRnJhbWVzVGV4dCgpOwogICAgIHZv
aWQgZHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25zKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62520</attachid>
            <date>2010-07-24 22:25:21 -0700</date>
            <delta_ts>2010-07-25 00:56:48 -0700</delta_ts>
            <desc>step 2</desc>
            <filename>EditorDelegates2.txt</filename>
            <type>text/plain</type>
            <size>35315</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDAxOCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMDctMjQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMTkzCisgICAgICAgIFN1
cHBvcnQgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEVkaXRpbmdEZWxlZ2F0ZXMgaW4gV2ViS2l0
VGVzdFJ1bm5lcgorCisgICAgICAgIFN0ZXAgMiAtIGFkZCB0aGUgcmVzdCBvZiBlZGl0aW5nIGRl
bGVnYXRlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVBUElDYXN0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZUJhc2UuaDoKKyAgICAgICAgQWRkZWQgZW51bXMgZm9yIEVkaXRvckluc2VydEFj
dGlvbiBhbmQgRUFmZmluaXR5LiBBbHNvIGFkZGVkIGEgZHVtbXkgdHlwZSBmb3IKKyAgICAgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiAtIG5laXRoZXIgRHVtcFJlbmRlclRyZWUgbm90IFdlYktpdFRl
c3RSdW5uZXIgYWN0dWFsbHkgdXNlIHRoYXQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNo
b3VsZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0
b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQpOgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OnNob3VsZERlbGV0ZVJhbmdlKToKKyAg
ICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0
OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEVuZEVkaXRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6ZGlkQ2hhbmdl
U2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlUGFnZUVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xp
ZW50OjpzaG91bGREZWxldGVSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVu
dDo6c2hvdWxkRW5kRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
c2hvdWxkSW5zZXJ0Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hv
dWxkSW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvdWxk
Q2hhbmdlU2VsZWN0ZWRSYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
c2hvdWxkQXBwbHlTdHlsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlk
QmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpyZXNwb25k
VG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJl
c3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OmRpZEVuZEVkaXRpbmcpOgorICAgICAgICBBZGRlZCByZW1haW5pbmcgZGVsYWdhdGVzIHRo
YXQgYXJlIG5lZWRlZCBmb3IgV2ViS2l0VGVzdFJ1bm5lci4KKwogMjAxMC0wNy0xOSBCYWxhenMg
S2VsZW1lbiA8a2JAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRv
ckNsaWVudC5jcHAJKHJldmlzaW9uIDY0MDA2KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDExICs0Niw3NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dDo6aW5pCiAgICAgICAgIG1lbXNldCgmbV9jbGllbnQsIDAsIHNpemVvZihtX2NsaWVudCkpOwog
fQogCi1ib29sIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVudDo6c2hvdWxkQmVnaW5FZGl0
aW5nKFdlYlBhZ2UqIHBhZ2UsIFdlYkNvcmU6OlJhbmdlKiByYW5nZSkKK2Jvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRCZWdpbkVkaXRpbmcoV2ViUGFnZSogcGFnZSwg
UmFuZ2UqIHJhbmdlKQogewogICAgIGlmIChtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcpCiAg
ICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRCZWdpbkVkaXRpbmcodG9SZWYocGFnZSksIHRv
UmVmKHJhbmdlKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0aW5nKFdl
YlBhZ2UqIHBhZ2UsIFJhbmdlKiByYW5nZSkKK3sKKyAgICBpZiAobV9jbGllbnQuc2hvdWxkRW5k
RWRpdGluZykKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEVuZEVkaXRpbmcodG9SZWYo
cGFnZSksIHRvUmVmKHJhbmdlKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNl
cnROb2RlKFdlYlBhZ2UqIHBhZ2UsIE5vZGUqIG5vZGUsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwg
RWRpdG9ySW5zZXJ0QWN0aW9uIGFjdGlvbikKK3sKKyAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5z
ZXJ0Tm9kZSkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydE5vZGUodG9SZWYo
cGFnZSksIHRvUmVmKG5vZGUpLCB0b1JlZihyYW5nZVRvUmVwbGFjZSksIHRvV0soYWN0aW9uKSwg
bV9jbGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UqIHBhZ2Us
IFN0cmluZ0ltcGwqIHRleHQsIFJhbmdlKiByYW5nZVRvUmVwbGFjZSwgRWRpdG9ySW5zZXJ0QWN0
aW9uIGFjdGlvbikKK3sKKyAgICBpZiAobV9jbGllbnQuc2hvdWxkSW5zZXJ0VGV4dCkKKyAgICAg
ICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEluc2VydFRleHQodG9SZWYocGFnZSksIHRvUmVmKHRl
eHQpLCB0b1JlZihyYW5nZVRvUmVwbGFjZSksIHRvV0soYWN0aW9uKSwgbV9jbGllbnQuY2xpZW50
SW5mbyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlRWRp
dG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShXZWJQYWdlKiBwYWdlLCBSYW5nZSogcmFuZ2Up
Cit7CisgICAgaWYgKG1fY2xpZW50LnNob3VsZERlbGV0ZVJhbmdlKQorICAgICAgICByZXR1cm4g
bV9jbGllbnQuc2hvdWxkRGVsZXRlUmFuZ2UodG9SZWYocGFnZSksIHRvUmVmKHJhbmdlKSwgbV9j
bGllbnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBhZ2Uq
IHBhZ2UsIFJhbmdlKiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHkgYWZmaW5p
dHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCit7CisgICAgaWYgKG1fY2xpZW50LnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlKHRvUmVmKHBhZ2UpLCB0b1JlZihmcm9tUmFuZ2UpLCB0b1JlZih0b1JhbmdlKSwg
dG9XSyhhZmZpbml0eSksIHN0aWxsU2VsZWN0aW5nLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6
OnNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSogcGFnZSwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIFJhbmdlKiByYW5nZSkKK3sKKyAgICBpZiAobV9jbGllbnQuc2hvdWxkQXBwbHlTdHlsZSkK
KyAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZEFwcGx5U3R5bGUodG9SZWYocGFnZSksIHRv
UmVmKHN0eWxlKSwgdG9SZWYocmFuZ2UpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZEJl
Z2luRWRpdGluZyhXZWJQYWdlKiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKQor
eworICAgIGlmIChtX2NsaWVudC5kaWRCZWdpbkVkaXRpbmcpCisgICAgICAgIG1fY2xpZW50LmRp
ZEJlZ2luRWRpdGluZyh0b1JlZihwYWdlKSwgdG9SZWYobm90aWZpY2F0aW9uTmFtZSksIG1fY2xp
ZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZUVkaXRvckNsaWVu
dDo6ZGlkRW5kRWRpdGluZyhXZWJQYWdlKiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25O
YW1lKQoreworICAgIGlmIChtX2NsaWVudC5kaWRFbmRFZGl0aW5nKQorICAgICAgICBtX2NsaWVu
dC5kaWRFbmRFZGl0aW5nKHRvUmVmKHBhZ2UpLCB0b1JlZihub3RpZmljYXRpb25OYW1lKSwgbV9j
bGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xp
ZW50OjpkaWRDaGFuZ2UoV2ViUGFnZSogcGFnZSwgU3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFt
ZSkKK3sKKyAgICBpZiAobV9jbGllbnQuZGlkQ2hhbmdlKQorICAgICAgICBtX2NsaWVudC5kaWRD
aGFuZ2UodG9SZWYocGFnZSksIHRvUmVmKG5vdGlmaWNhdGlvbk5hbWUpLCBtX2NsaWVudC5jbGll
bnRJbmZvKTsKK30KKwordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnQ6OmRpZENo
YW5nZVNlbGVjdGlvbihXZWJQYWdlKiBwYWdlLCBTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1l
KQoreworICAgIGlmIChtX2NsaWVudC5kaWRDaGFuZ2VTZWxlY3Rpb24pCisgICAgICAgIG1fY2xp
ZW50LmRpZENoYW5nZVNlbGVjdGlvbih0b1JlZihwYWdlKSwgdG9SZWYobm90aWZpY2F0aW9uTmFt
ZSksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VF
ZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY0MDA2KQor
KysgV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZUVk
aXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNywxNCBAQAogI2RlZmluZSBJ
bmplY3RlZEJ1bmRsZVBhZ2VFZGl0b3JDbGllbnRfaAogCiAjaW5jbHVkZSAiV0tCdW5kbGVQYWdl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FZGl0b3JJbnNlcnRBY3Rpb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RleHRBZmZpbml0eS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3Mg
Q1NTU3R5bGVEZWNsYXJhdGlvbjsKKyAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFJhbmdlOwor
ICAgIGNsYXNzIFN0cmluZ0ltcGw7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNDMsNiAr
NDgsMTYgQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVBhZ2VFZGl0b3JD
bGllbnQqKTsKIAogICAgIGJvb2wgc2hvdWxkQmVnaW5FZGl0aW5nKFdlYlBhZ2UqLCBXZWJDb3Jl
OjpSYW5nZSopOworICAgIGJvb2wgc2hvdWxkRW5kRWRpdGluZyhXZWJQYWdlKiwgV2ViQ29yZTo6
UmFuZ2UqKTsKKyAgICBib29sIHNob3VsZEluc2VydE5vZGUoV2ViUGFnZSosIFdlYkNvcmU6Ok5v
ZGUqLCBXZWJDb3JlOjpSYW5nZSogcmFuZ2VUb1JlcGxhY2UsIFdlYkNvcmU6OkVkaXRvckluc2Vy
dEFjdGlvbik7CisgICAgYm9vbCBzaG91bGRJbnNlcnRUZXh0KFdlYlBhZ2UqLCBXZWJDb3JlOjpT
dHJpbmdJbXBsKiwgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBXZWJDb3JlOjpFZGl0
b3JJbnNlcnRBY3Rpb24pOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV2ViUGFnZSosIFdl
YkNvcmU6OlJhbmdlKik7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdlYlBh
Z2UqLCBXZWJDb3JlOjpSYW5nZSogZnJvbVJhbmdlLCBXZWJDb3JlOjpSYW5nZSogdG9SYW5nZSwg
V2ViQ29yZTo6RUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKTsKKyAgICBi
b29sIHNob3VsZEFwcGx5U3R5bGUoV2ViUGFnZSosIFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRp
b24qLCBXZWJDb3JlOjpSYW5nZSopOworICAgIHZvaWQgZGlkQmVnaW5FZGl0aW5nKFdlYlBhZ2Uq
LCBXZWJDb3JlOjpTdHJpbmdJbXBsKiBub3RpZmljYXRpb25OYW1lKTsKKyAgICB2b2lkIGRpZEVu
ZEVkaXRpbmcoV2ViUGFnZSosIFdlYkNvcmU6OlN0cmluZ0ltcGwqIG5vdGlmaWNhdGlvbk5hbWUp
OworICAgIHZvaWQgZGlkQ2hhbmdlKFdlYlBhZ2UqLCBXZWJDb3JlOjpTdHJpbmdJbXBsKiBub3Rp
ZmljYXRpb25OYW1lKTsKKyAgICB2b2lkIGRpZENoYW5nZVNlbGVjdGlvbihXZWJQYWdlKiwgV2Vi
Q29yZTo6U3RyaW5nSW1wbCogbm90aWZpY2F0aW9uTmFtZSk7CiAKIHByaXZhdGU6CiAgICAgV0tC
dW5kbGVQYWdlRWRpdG9yQ2xpZW50IG1fY2xpZW50OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlQVBJQ2FzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUFQSUNhc3QuaAko
cmV2aXNpb24gNjQwMDYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2MvV0tCdW5kbGVBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDEyIEBACiAj
ZGVmaW5lIFdLQnVuZGxlQVBJQ2FzdF9oCiAKICNpbmNsdWRlICJXS0J1bmRsZUJhc2UuaCIKKyNp
bmNsdWRlICJXS0J1bmRsZVBhZ2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0VkaXRvckluc2VydEFj
dGlvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEFmZmluaXR5Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogICAgIGNsYXNzIE5vZGU7
CiAgICAgY2xhc3MgUmFuZ2U7CiB9CkBAIC00MCwxOCArNDQsMjAgQEAgY2xhc3MgV2ViRnJhbWU7
CiBjbGFzcyBXZWJQYWdlOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBUElUeXBlPiBzdHJ1Y3QgQnVu
ZGxlQVBJVHlwZUluZm8geyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUluZm88
V0tCdW5kbGVGcmFtZVJlZj4gICAgICAgICAgIHsgdHlwZWRlZiBXZWJGcmFtZSogSW1wbFR5cGU7
IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCdW5kbGVBUElUeXBlSW5mbzxXS0J1bmRsZU5vZGVSZWY+
ICAgICAgICAgICAgeyB0eXBlZGVmIFdlYkNvcmU6Ok5vZGUqIEltcGxUeXBlOyB9OwotdGVtcGxh
dGU8PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUluZm88V0tCdW5kbGVQYWdlUmVmPiAgICAgICAgICAg
IHsgdHlwZWRlZiBXZWJQYWdlKiBJbXBsVHlwZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJ1bmRs
ZUFQSVR5cGVJbmZvPFdLQnVuZGxlUmFuZ2VSZWY+ICAgICAgICAgICB7IHR5cGVkZWYgV2ViQ29y
ZTo6UmFuZ2UqIEltcGxUeXBlOyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUlu
Zm88V0tCdW5kbGVSZWY+ICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBJbmplY3RlZEJ1bmRsZSog
SW1wbFR5cGU7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCdW5kbGVBUElUeXBlSW5mbzxXS0J1bmRs
ZUNTU1N0eWxlRGVjbGFyYXRpb25SZWY+ICAgICB7IHR5cGVkZWYgV2ViQ29yZTo6Q1NTU3R5bGVE
ZWNsYXJhdGlvbiogSW1wbFR5cGU7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCdW5kbGVBUElUeXBl
SW5mbzxXS0J1bmRsZUZyYW1lUmVmPiAgICAgICAgICAgICAgICAgICB7IHR5cGVkZWYgV2ViRnJh
bWUqIEltcGxUeXBlOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUluZm88V0tC
dW5kbGVOb2RlUmVmPiAgICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFdlYkNvcmU6Ok5vZGUq
IEltcGxUeXBlOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUluZm88V0tCdW5k
bGVQYWdlUmVmPiAgICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFdlYlBhZ2UqIEltcGxUeXBl
OyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlQVBJVHlwZUluZm88V0tCdW5kbGVSYW5nZVJl
Zj4gICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFdlYkNvcmU6OlJhbmdlKiBJbXBsVHlwZTsg
fTsKK3RlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUFQSVR5cGVJbmZvPFdLQnVuZGxlUmVmPiAgICAg
ICAgICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBJbmplY3RlZEJ1bmRsZSogSW1wbFR5cGU7IH07
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEltcGxUeXBlPiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZv
IHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUltcGxUeXBlSW5mbzxJbmplY3RlZEJ1bmRs
ZSo+ICAgICAgICAgICB7IHR5cGVkZWYgV0tCdW5kbGVSZWYgQVBJVHlwZTsgfTsKLXRlbXBsYXRl
PD4gc3RydWN0IEJ1bmRsZUltcGxUeXBlSW5mbzxXZWJDb3JlOjpOb2RlKj4gICAgICAgICAgICB7
IHR5cGVkZWYgV0tCdW5kbGVOb2RlUmVmIEFQSVR5cGU7IH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBC
dW5kbGVJbXBsVHlwZUluZm88V2ViQ29yZTo6UmFuZ2UqPiAgICAgICAgICAgeyB0eXBlZGVmIFdL
QnVuZGxlUmFuZ2VSZWYgQVBJVHlwZTsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUltcGxU
eXBlSW5mbzxXZWJGcmFtZSo+ICAgICAgICAgICAgICAgICB7IHR5cGVkZWYgV0tCdW5kbGVGcmFt
ZVJlZiBBUElUeXBlOyB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZvPFdl
YlBhZ2UqPiAgICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBXS0J1bmRsZVBhZ2VSZWYgQVBJVHlw
ZTsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUltcGxUeXBlSW5mbzxJbmplY3RlZEJ1bmRs
ZSo+ICAgICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBXS0J1bmRsZVJlZiBBUElUeXBlOyB9Owor
dGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZvPFdlYkNvcmU6OkNTU1N0eWxlRGVj
bGFyYXRpb24qPiAgICAgeyB0eXBlZGVmIFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBB
UElUeXBlOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZvPFdlYkNvcmU6
Ok5vZGUqPiAgICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFdLQnVuZGxlTm9kZVJlZiBBUElU
eXBlOyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQnVuZGxlSW1wbFR5cGVJbmZvPFdlYkNvcmU6OlJh
bmdlKj4gICAgICAgICAgICAgICAgICAgeyB0eXBlZGVmIFdLQnVuZGxlUmFuZ2VSZWYgQVBJVHlw
ZTsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJ1bmRsZUltcGxUeXBlSW5mbzxXZWJGcmFtZSo+ICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZWRlZiBXS0J1bmRsZUZyYW1lUmVmIEFQSVR5cGU7
IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCdW5kbGVJbXBsVHlwZUluZm88V2ViUGFnZSo+ICAgICAg
ICAgICAgICAgICAgICAgICAgICB7IHR5cGVkZWYgV0tCdW5kbGVQYWdlUmVmIEFQSVR5cGU7IH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCkBAIC02OSw0ICs3NSwzNSBAQCBpbmxpbmUgdHlw
ZW5hbWUgV2ViS2l0OjpCdW5kbGVJbXBsVHlwZUluCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dHlwZW5hbWUgV2ViS2l0OjpCdW5kbGVJbXBsVHlwZUluZm88VD46OkFQSVR5cGU+KHQpOwog
fQogCitpbmxpbmUgV0tJbnNlcnRBY3Rpb25UeXBlIHRvV0soV2ViQ29yZTo6RWRpdG9ySW5zZXJ0
QWN0aW9uIGFjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGFjdGlvbikgeworICAgIGNhc2UgV2ViQ29y
ZTo6RWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQ6CisgICAgICAgIHJldHVybiBrV0tJbnNlcnRBY3Rp
b25UeXBlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpFZGl0b3JJbnNlcnRB
Y3Rpb25QYXN0ZWQ6CisgICAgICAgIHJldHVybiBrV0tJbnNlcnRBY3Rpb25QYXN0ZWQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6RWRpdG9ySW5zZXJ0QWN0aW9uRHJvcHBlZDoK
KyAgICAgICAgcmV0dXJuIGtXS0luc2VydEFjdGlvbkRyb3BwZWQ7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1dLSW5zZXJ0QWN0
aW9uVHlwZWQ7Cit9CisKK2lubGluZSBXS0FmZmluaXR5VHlwZSB0b1dLKFdlYkNvcmU6OkVBZmZp
bml0eSBhZmZpbml0eSkKK3sKKyAgICBzd2l0Y2ggKGFmZmluaXR5KSB7CisgICAgY2FzZSBXZWJD
b3JlOjpVUFNUUkVBTToKKyAgICAgICAgcmV0dXJuIGtXS0FmZmluaXR5VXBzdHJlYW07CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6RE9XTlNUUkVBTToKKyAgICAgICAgcmV0dXJu
IGtXS0FmZmluaXR5RG93bnN0cmVhbTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrV0tBZmZpbml0eVVwc3RyZWFtOworfQorCiAj
ZW5kaWYgLy8gV0tCdW5kbGVBUElDYXN0X2gKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVCYXNlLmgJKHJldmlzaW9uIDY0
MDA2KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFdLQnVuZGxl
QmFzZV9oCiAKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZVdLQnVuZGxlKiBXS0J1bmRsZVJlZjsKK3R5
cGVkZWYgc3RydWN0IE9wYXF1ZVdLQnVuZGxlRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiogV0tCdW5k
bGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tCdW5kbGVG
cmFtZSogV0tCdW5kbGVGcmFtZVJlZjsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZVdLQnVuZGxlTm9k
ZSogV0tCdW5kbGVOb2RlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlV0tCdW5kbGVQYWdlKiBX
S0J1bmRsZVBhZ2VSZWY7CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZS5oCShyZXZpc2lvbiA2NDAwNikKKysrIFdl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsMTkgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK2Vu
dW0geworICAgIGtXS0luc2VydEFjdGlvblR5cGVkID0gMCwKKyAgICBrV0tJbnNlcnRBY3Rpb25Q
YXN0ZWQgPSAxLAorICAgIGtXS0luc2VydEFjdGlvbkRyb3BwZWQgPSAyCit9OwordHlwZWRlZiB1
aW50MzJfdCBXS0luc2VydEFjdGlvblR5cGU7CisKK2VudW0geworICAgIGtXS0FmZmluaXR5VXBz
dHJlYW0sCisgICAga1dLQWZmaW5pdHlEb3duc3RyZWFtCit9OwordHlwZWRlZiB1aW50MzJfdCBX
S0FmZmluaXR5VHlwZTsKKwogLy8gTG9hZGVyIENsaWVudAogdHlwZWRlZiB2b2lkICgqV0tCdW5k
bGVQYWdlRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZUNhbGxiYWNrKShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5m
byk7CiB0eXBlZGVmIHZvaWQgKCpXS0J1bmRsZVBhZ2VEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbExvYWRGb3JGcmFtZUNhbGxiYWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwg
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CkBAIC03OCwx
MSArOTEsMzAgQEAgc3RydWN0IFdLQnVuZGxlUGFnZVVJQ2xpZW50IHsKIHR5cGVkZWYgc3RydWN0
IFdLQnVuZGxlUGFnZVVJQ2xpZW50IFdLQnVuZGxlUGFnZVVJQ2xpZW50OwogCiAvLyBFZGl0b3Ig
Y2xpZW50CisvLyBGSVhNRTogT2JqZWN0aXZlLUMgQVBJIHByb3ZpZGVzIGEgV2ViVmlldyBwb2lu
dGVyIGluIGNhbGxiYWNrcywgd2hhdCBzaG91bGQgdGhlIGluamVjdGVkIGJ1bmRsZSBBUEkgZG8/
CiB0eXBlZGVmIGJvb2wgKCpXS0J1bmRsZVBhZ2VTaG91bGRCZWdpbkVkaXRpbmdDYWxsYmFjayko
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwordHlwZWRlZiBib29sICgqV0tCdW5kbGVQYWdlU2hvdWxkRW5kRWRpdGlu
Z0NhbGxiYWNrKShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVSYW5nZVJlZiByYW5nZSwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIGJvb2wgKCpXS0J1bmRsZVBhZ2VTaG91
bGRJbnNlcnROb2RlQ2FsbGJhY2spKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZU5vZGVS
ZWYgbm9kZSwgV0tCdW5kbGVSYW5nZVJlZiByYW5nZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25U
eXBlIGFjdGlvbiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIGJvb2wgKCpXS0J1
bmRsZVBhZ2VTaG91bGRJbnNlcnRUZXh0Q2FsbGJhY2spKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBzdHJpbmcsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5z
ZXJ0QWN0aW9uVHlwZSBhY3Rpb24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiBi
b29sICgqV0tCdW5kbGVQYWdlU2hvdWxkRGVsZXRlUmFuZ2VDYWxsYmFjaykoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OwordHlwZWRlZiBib29sICgqV0tCdW5kbGVQYWdlU2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSko
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgZnJvbVJhbmdlLCBXS0J1bmRs
ZVJhbmdlUmVmIHRvUmFuZ2UsIFdLQWZmaW5pdHlUeXBlIGFmZmluaXR5LCBib29sIHN0aWxsU2Vs
ZWN0aW5nLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgYm9vbCAoKldLQnVuZGxl
UGFnZVNob3VsZEFwcGx5U3R5bGUpKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUNTU1N0
eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tCdW5kbGVQYWdlRWRpdGluZ05vdGlm
aWNhdGlvbikoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5h
bWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCiBzdHJ1Y3QgV0tCdW5kbGVQYWdlRWRpdG9y
Q2xpZW50IHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247CiAgICAgY29uc3Qgdm9pZCAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJ
bmZvOwogICAgIFdLQnVuZGxlUGFnZVNob3VsZEJlZ2luRWRpdGluZ0NhbGxiYWNrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmVnaW5FZGl0aW5nOworICAgIFdLQnVuZGxlUGFn
ZVNob3VsZEVuZEVkaXRpbmdDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hvdWxkRW5kRWRpdGluZzsKKyAgICBXS0J1bmRsZVBhZ2VTaG91bGRJbnNlcnROb2RlQ2FsbGJh
Y2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluc2VydE5vZGU7CisgICAg
V0tCdW5kbGVQYWdlU2hvdWxkSW5zZXJ0VGV4dENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaG91bGRJbnNlcnRUZXh0OworICAgIFdLQnVuZGxlUGFnZVNob3VsZERlbGV0
ZVJhbmdlQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkRGVsZXRl
UmFuZ2U7CisgICAgV0tCdW5kbGVQYWdlU2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlOworICAgIFdL
QnVuZGxlUGFnZVNob3VsZEFwcGx5U3R5bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvdWxkQXBwbHlTdHlsZTsKKyAgICBXS0J1bmRsZVBhZ2VFZGl0aW5nTm90aWZp
Y2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZEJlZ2luRWRpdGlu
ZzsKKyAgICBXS0J1bmRsZVBhZ2VFZGl0aW5nTm90aWZpY2F0aW9uICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRpZEVuZEVkaXRpbmc7CisgICAgV0tCdW5kbGVQYWdlRWRpdGlu
Z05vdGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWRDaGFu
Z2U7CisgICAgV0tCdW5kbGVQYWdlRWRpdGluZ05vdGlmaWNhdGlvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaWRDaGFuZ2VTZWxlY3Rpb247CiB9OwogdHlwZWRlZiBzdHJ1
Y3QgV0tCdW5kbGVQYWdlRWRpdG9yQ2xpZW50IFdLQnVuZGxlUGFnZUVkaXRvckNsaWVudDsKIApJ
bmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDY0MDA2KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEw
ICs0MiwxMSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6cGFnZURlc3Ryb3llZCgpCiAgICAgZGVs
ZXRlIHRoaXM7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGREZWxldGVSYW5nZShS
YW5nZSopCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJh
bmdlKQogeworICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNs
aWVudCgpLnNob3VsZERlbGV0ZVJhbmdlKG1fcGFnZSwgcmFuZ2UpOwogICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2UoSFRNTEVsZW1lbnQqKQpA
QCAtMTA5LDMyICsxMTAsMzkgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEJlZ2luRWRp
dGluZwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91
bGRFbmRFZGl0aW5nKFJhbmdlKikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFbmRFZGl0
aW5nKFJhbmdlKiByYW5nZSkKIHsKKyAgICBib29sIHJlc3VsdCA9IG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS5zaG91bGRFbmRFZGl0aW5nKG1fcGFnZSwgcmFuZ2UpOwogICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydE5vZGUoTm9kZSosIFJhbmdl
KiwgRWRpdG9ySW5zZXJ0QWN0aW9uKQorYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEluc2Vy
dE5vZGUoTm9kZSogbm9kZSwgUmFuZ2UqIHJhbmdlVG9SZXBsYWNlLCBFZGl0b3JJbnNlcnRBY3Rp
b24gYWN0aW9uKQogeworICAgIGJvb2wgcmVzdWx0ID0gbV9wYWdlLT5pbmplY3RlZEJ1bmRsZUVk
aXRvckNsaWVudCgpLnNob3VsZEluc2VydE5vZGUobV9wYWdlLCBub2RlLCByYW5nZVRvUmVwbGFj
ZSwgYWN0aW9uKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRJbnNlcnRU
ZXh0KGNvbnN0IFN0cmluZyYsIFJhbmdlKiwgRWRpdG9ySW5zZXJ0QWN0aW9uKQorYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnNob3VsZEluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBSYW5nZSog
cmFuZ2VUb1JlcGxhY2UsIEVkaXRvckluc2VydEFjdGlvbiBhY3Rpb24pCiB7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgYm9vbCByZXN1bHQgPSBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xp
ZW50KCkuc2hvdWxkSW5zZXJ0VGV4dChtX3BhZ2UsIHRleHQuaW1wbCgpLCByYW5nZVRvUmVwbGFj
ZSwgYWN0aW9uKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLWJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFJhbmdl
KiBmcm9tUmFuZ2UsIFJhbmdlKiB0b1JhbmdlLCBFQWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rp
bmcpCitib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShSYW5n
ZSogZnJvbVJhbmdlLCBSYW5nZSogdG9SYW5nZSwgRUFmZmluaXR5IGFmZmluaXR5LCBib29sIHN0
aWxsU2VsZWN0aW5nKQogewotICAgIHJldHVybiB0cnVlOworICAgIGJvb2wgcmVzdWx0ID0gbV9w
YWdlLT5pbmplY3RlZEJ1bmRsZUVkaXRvckNsaWVudCgpLnNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2UobV9wYWdlLCBmcm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAotYm9v
bCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbios
IFJhbmdlKikKK2Jvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRBcHBseVN0eWxlKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlLCBSYW5nZSogcmFuZ2UpCiB7CisgICAgYm9vbCByZXN1bHQgPSBt
X3BhZ2UtPmluamVjdGVkQnVuZGxlRWRpdG9yQ2xpZW50KCkuc2hvdWxkQXBwbHlTdHlsZShtX3Bh
Z2UsIHN0eWxlLCByYW5nZSk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxk
TW92ZVJhbmdlQWZ0ZXJEZWxldGUoUmFuZ2UqLCBSYW5nZSopCkBAIC0xNDUsMjEgKzE1MywzMCBA
QCBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkTW92ZVJhbmdlQWZ0CiAKIHZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpkaWRCZWdpbkVkaXRpbmcoKQogeworICAgIC8vIEZJWE1FOiBXaGF0IGdvb2Qg
aXMgYSBub3RpZmljYXRpb24gbmFtZSwgaWYgaXQncyBhbHdheXMgdGhlIHNhbWU/CisgICAgc3Rh
dGljIGNvbnN0IFN0cmluZyBXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZpY2F0aW9uID0gIldl
YlZpZXdEaWRCZWdpbkVkaXRpbmdOb3RpZmljYXRpb24iOworICAgIG1fcGFnZS0+aW5qZWN0ZWRC
dW5kbGVFZGl0b3JDbGllbnQoKS5kaWRCZWdpbkVkaXRpbmcobV9wYWdlLCBXZWJWaWV3RGlkQmVn
aW5FZGl0aW5nTm90aWZpY2F0aW9uLmltcGwoKSk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpCiB7Cisg
ICAgc3RhdGljIGNvbnN0IFN0cmluZyBXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0aW9uID0gIldl
YlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb24iOworICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVF
ZGl0b3JDbGllbnQoKS5kaWRDaGFuZ2UobV9wYWdlLCBXZWJWaWV3RGlkQ2hhbmdlTm90aWZpY2F0
aW9uLmltcGwoKSk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oKQogeworICAgIHN0YXRpYyBjb25zdCBT
dHJpbmcgV2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNhdGlvbiA9ICJXZWJWaWV3RGlk
Q2hhbmdlU2VsZWN0aW9uTm90aWZpY2F0aW9uIjsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
RWRpdG9yQ2xpZW50KCkuZGlkQ2hhbmdlU2VsZWN0aW9uKG1fcGFnZSwgV2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbk5vdGlmaWNhdGlvbi5pbXBsKCkpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpkaWRFbmRFZGl0aW5nKCkKIHsKKyAgICBzdGF0aWMg
Y29uc3QgU3RyaW5nIFdlYlZpZXdEaWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uID0gIldlYlZpZXdE
aWRFbmRFZGl0aW5nTm90aWZpY2F0aW9uIjsKKyAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxlRWRp
dG9yQ2xpZW50KCkuZGlkRW5kRWRpdGluZyhtX3BhZ2UsIFdlYlZpZXdEaWRFbmRFZGl0aW5nTm90
aWZpY2F0aW9uLmltcGwoKSk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIApJbmRleDogV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gNjQwMTgpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzNyBAQAorMjAxMC0wNy0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIxOTMKKyAgICAgICAg
U3VwcG9ydCBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wRWRpdGluZ0RlbGVnYXRlcyBpbiBXZWJL
aXRUZXN0UnVubmVyCisKKyAgICAgICAgU3RlcCAyIC0gYWRkIHRoZSByZXN0IG9mIGVkaXRpbmcg
ZGVsZWdhdGVzLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZVBhZ2UuY3BwOgorICAgICAgICAoV1RSOjpvcGVyYXRvcjw8KTogRml4ZWQg
dG8gbm90IGNyYXNoIHdoZW4gcmFuZ2UgaXMgbnVsbC4KKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRC
dW5kbGVQYWdlOjpJbmplY3RlZEJ1bmRsZVBhZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZVBhZ2U6Ol9zaG91bGRFbmRFZGl0aW5nKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpfc2hvdWxkSW5zZXJ0Tm9kZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6X3Nob3VsZEluc2VydFRleHQpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBh
Z2U6Ol9zaG91bGREZWxldGVSYW5nZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFn
ZTo6X3Nob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1
bmRsZVBhZ2U6Ol9zaG91bGRBcHBseVN0eWxlKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5k
bGVQYWdlOjpfZGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQ
YWdlOjpfZGlkRW5kRWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6
X2RpZENoYW5nZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6X2RpZENoYW5n
ZVNlbGVjdGlvbik6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5k
RWRpdGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0
Tm9kZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4
dCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuZ2Up
OgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5
bGUpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyk6
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyk6CisgICAg
ICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKToKKyAgICAgICAgKFdUUjo6
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24pOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmg6CisKIDIwMTAt
MDctMjQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVBhZ2UuY3BwCShyZXZpc2lvbiA2NDAwNikKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDcgKzEwMSwyMCBAQCBzdGF0aWMgc3RyaW5nIGR1bXBQYXRoKFdLQnVuZGxlTm9kZVJl
ZiBuCiAKIHN0YXRpYyBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG91dCwgV0tCdW5kbGVS
YW5nZVJlZiByYW5nZVJlZikKIHsKLSAgICBvdXQgPDwgInJhbmdlIGZyb20gIiA8PCBXS0J1bmRs
ZVJhbmdlR2V0U3RhcnRPZmZzZXQocmFuZ2VSZWYpIDw8ICIgb2YgIiA8PCBkdW1wUGF0aChXS0J1
bmRsZVJhbmdlR2V0U3RhcnRDb250YWluZXIocmFuZ2VSZWYpKSA8PCAiIHRvICIgPDwgV0tCdW5k
bGVSYW5nZUdldEVuZE9mZnNldChyYW5nZVJlZikgPDwgIiBvZiAiIDw8IGR1bXBQYXRoKFdLQnVu
ZGxlUmFuZ2VHZXRFbmRDb250YWluZXIocmFuZ2VSZWYpKTsKKyAgICBpZiAocmFuZ2VSZWYpCisg
ICAgICAgIG91dCA8PCAicmFuZ2UgZnJvbSAiIDw8IFdLQnVuZGxlUmFuZ2VHZXRTdGFydE9mZnNl
dChyYW5nZVJlZikgPDwgIiBvZiAiIDw8IGR1bXBQYXRoKFdLQnVuZGxlUmFuZ2VHZXRTdGFydENv
bnRhaW5lcihyYW5nZVJlZikpIDw8ICIgdG8gIiA8PCBXS0J1bmRsZVJhbmdlR2V0RW5kT2Zmc2V0
KHJhbmdlUmVmKSA8PCAiIG9mICIgPDwgZHVtcFBhdGgoV0tCdW5kbGVSYW5nZUdldEVuZENvbnRh
aW5lcihyYW5nZVJlZikpOworICAgIGVsc2UKKyAgICAgICAgb3V0IDw8ICIobnVsbCkiOworCisg
ICAgcmV0dXJuIG91dDsKK30KKworc3RhdGljIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYg
b3V0LCBXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUpCit7CisgICAgLy8gRHVt
cFJlbmRlclRyZWUgY2FsbHMgLVtET01DU1NTdHlsZURlY2xhcmF0aW9uIGRlc2NyaXB0aW9uXSwg
d2hpY2gganVzdCBkdW1wcyBjbGFzcyBuYW1lIGFuZCBvYmplY3QgYWRkcmVzcy4KKyAgICAvLyBO
byBleGlzdGluZyB0ZXN0cyBhY3R1YWxseSBoaXQgdGhpcyBjb2RlIHBhdGggYXQgdGhlIHRpbWUg
b2YgdGhpcyB3cml0aW5nLCBiZWNhdXNlIFdlYkNvcmUgZG9lc24ndCBjYWxsCisgICAgLy8gdGhl
IGVkaXRpbmcgY2xpZW50IGlmIHRoZSBzdHlsaW5nIG9wZXJhdGlvbiBzb3VyY2UgaXMgQ29tbWFu
ZEZyb21ET00gb3IgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFjZS4KKyAgICBvdXQgPDwg
IjxET01DU1NTdHlsZURlY2xhcmF0aW9uIEFERFJFU1M+IjsKICAgICByZXR1cm4gb3V0OwogfQog
CkBAIC0xMzgsNiArMTUxLDE2IEBAIEluamVjdGVkQnVuZGxlUGFnZTo6SW5qZWN0ZWRCdW5kbGVQ
YWdlKFcKICAgICAgICAgMCwKICAgICAgICAgdGhpcywKICAgICAgICAgX3Nob3VsZEJlZ2luRWRp
dGluZywKKyAgICAgICAgX3Nob3VsZEVuZEVkaXRpbmcsCisgICAgICAgIF9zaG91bGRJbnNlcnRO
b2RlLAorICAgICAgICBfc2hvdWxkSW5zZXJ0VGV4dCwKKyAgICAgICAgX3Nob3VsZERlbGV0ZVJh
bmdlLAorICAgICAgICBfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZSwKKyAgICAgICAgX3Nob3Vs
ZEFwcGx5U3R5bGUsCisgICAgICAgIF9kaWRCZWdpbkVkaXRpbmcsCisgICAgICAgIF9kaWRFbmRF
ZGl0aW5nLAorICAgICAgICBfZGlkQ2hhbmdlLAorICAgICAgICBfZGlkQ2hhbmdlU2VsZWN0aW9u
CiAgICAgfTsKICAgICBXS0J1bmRsZVBhZ2VTZXRFZGl0b3JDbGllbnQobV9wYWdlLCAmZWRpdG9y
Q2xpZW50KTsKIH0KQEAgLTQyNyw2ICs0NTAsNTYgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6
Ol9zaG91bGRCZWdpbkVkaQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmplY3RlZEJ1bmRsZVBh
Z2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPnNob3VsZEJlZ2luRWRpdGluZyhy
YW5nZSk7CiB9CiAKK2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpfc2hvdWxkRW5kRWRpdGluZyhX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVSYW5nZVJlZiByYW5nZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdl
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5zaG91bGRFbmRFZGl0aW5nKHJhbmdl
KTsKK30KKworYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6Ol9zaG91bGRJbnNlcnROb2RlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZU5vZGVSZWYgbm9kZSwgV0tCdW5kbGVSYW5nZVJlZiBy
YW5nZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlIGFjdGlvbiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdlKj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5zaG91bGRJbnNlcnROb2RlKG5vZGUsIHJh
bmdlVG9SZXBsYWNlLCBhY3Rpb24pOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6X3No
b3VsZEluc2VydFRleHQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRleHQsIFdL
QnVuZGxlUmFuZ2VSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0QWN0aW9uVHlwZSBhY3Rpb24s
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluamVj
dGVkQnVuZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+c2hvdWxkSW5z
ZXJ0VGV4dCh0ZXh0LCByYW5nZVRvUmVwbGFjZSwgYWN0aW9uKTsKK30KKworYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6Ol9zaG91bGREZWxldGVSYW5nZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVSYW5nZVJlZiByYW5nZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xp
ZW50SW5mbykpLT5zaG91bGREZWxldGVSYW5nZShyYW5nZSk7Cit9CisKK2Jvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgV0tCdW5kbGVSYW5nZVJlZiBmcm9tUmFuZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgdG9SYW5nZSwg
V0tBZmZpbml0eVR5cGUgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluamVjdGVkQnVuZGxlUGFn
ZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShmcm9tUmFuZ2UsIHRvUmFuZ2UsIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7Cit9CisK
K2Jvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpfc2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSwgV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLCBXS0J1bmRsZVJh
bmdlUmVmIHJhbmdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxJbmplY3RlZEJ1bmRsZVBhZ2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIHJhbmdlKTsKK30KKwordm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6Ol9kaWRCZWdpbkVkaXRpbmcoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIG5vdGlmaWNhdGlvbk5hbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgc3Rh
dGljX2Nhc3Q8SW5qZWN0ZWRCdW5kbGVQYWdlKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5m
bykpLT5kaWRCZWdpbkVkaXRpbmcobm90aWZpY2F0aW9uTmFtZSk7Cit9CisKK3ZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpfZGlkRW5kRWRpdGluZyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJp
bmdSZWYgbm90aWZpY2F0aW9uTmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBz
dGF0aWNfY2FzdDxJbmplY3RlZEJ1bmRsZVBhZ2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJ
bmZvKSktPmRpZEVuZEVkaXRpbmcobm90aWZpY2F0aW9uTmFtZSk7Cit9CisKK3ZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpfZGlkQ2hhbmdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHN0YXRp
Y19jYXN0PEluamVjdGVkQnVuZGxlUGFnZSo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8p
KS0+ZGlkQ2hhbmdlKG5vdGlmaWNhdGlvbk5hbWUpOworfQorCit2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6X2RpZENoYW5nZVNlbGVjdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdS
ZWYgbm90aWZpY2F0aW9uTmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBzdGF0
aWNfY2FzdDxJbmplY3RlZEJ1bmRsZVBhZ2UqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZv
KSktPmRpZENoYW5nZVNlbGVjdGlvbihub3RpZmljYXRpb25OYW1lKTsKK30KKwogYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlUmVmIHJhbmdl
KQogewogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKQEAgLTQzNCw0ICs1MDcsOTIgQEAg
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdAogICAgIHJldHVybiBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRp
bmcoKTsKIH0KIAorYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmcoV0tC
dW5kbGVSYW5nZVJlZiByYW5nZSkKK3sKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiIDw8IHJhbmdlIDw8ICJcbiI7CisgICAgcmV0
dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5hY2Nl
cHRzRWRpdGluZygpOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0
Tm9kZShXS0J1bmRsZU5vZGVSZWYgbm9kZSwgV0tCdW5kbGVSYW5nZVJlZiByYW5nZVRvUmVwbGFj
ZSwgV0tJbnNlcnRBY3Rpb25UeXBlIGFjdGlvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAq
aW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CisgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlw
ZWQiLAorICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCIsCisgICAgICAgICJXZWJW
aWV3SW5zZXJ0QWN0aW9uRHJvcHBlZCIsCisgICAgfTsKKworICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJ
TkcgREVMRUdBVEU6IHNob3VsZEluc2VydE5vZGU6IiA8PCBkdW1wUGF0aChub2RlKSA8PCAiIHJl
cGxhY2luZ0RPTVJhbmdlOiIgPDwgcmFuZ2VUb1JlcGxhY2UgPDwgIiBnaXZlbkFjdGlvbjoiIDw8
IGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dIDw8ICJcbiI7CisgICAgcmV0dXJuIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5hY2NlcHRzRWRpdGluZygp
OworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmlu
Z1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlv
blR5cGUgYWN0aW9uKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFyICppbnNlcnRhY3Rpb25zdHJp
bmdbXSA9IHsKKyAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZCIsCisgICAgICAgICJX
ZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkIiwKKyAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25E
cm9wcGVkIiwKKyAgICB9OworCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlv
dXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hv
dWxkSW5zZXJ0VGV4dDoiIDw8IHRleHQgPDwgIiByZXBsYWNpbmdET01SYW5nZToiIDw8IHJhbmdl
VG9SZXBsYWNlIDw8ICIgZ2l2ZW5BY3Rpb246IiA8PCBpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9u
XSA8PCAiXG4iOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKK30KKworYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UpCit7CisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6IiA8PCBy
YW5nZSA8PCAiXG4iOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKK30KKworYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVSYW5nZVJlZiBmcm9t
UmFuZ2UsIFdLQnVuZGxlUmFuZ2VSZWYgdG9SYW5nZSwgV0tBZmZpbml0eVR5cGUgYWZmaW5pdHks
IGJvb2wgc3RpbGxTZWxlY3RpbmcpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5
c3RyaW5nW10gPSB7CisgICAgICAgICJOU1NlbGVjdGlvbkFmZmluaXR5VXBzdHJlYW0iLAorICAg
ICAgICAiTlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0iCisgICAgfTsKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciAqYm9vbHN0cmluZ1tdID0geworICAgICAgICAiRkFMU0UiLAorICAgICAgICAi
VFJVRSIKKyAgICB9OworCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRU
ZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxk
Q2hhbmdlU2VsZWN0ZWRET01SYW5nZToiIDw8IGZyb21SYW5nZSA8PCAiIHRvRE9NUmFuZ2U6IiA8
PCB0b1JhbmdlIDw8ICIgYWZmaW5pdHk6IiA8PCBhZmZpbml0eXN0cmluZ1thZmZpbml0eV0gPDwg
IiBzdGlsbFNlbGVjdGluZzoiIDw8IGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddIDw8ICJcbiI7
CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxl
cigpLT5hY2NlcHRzRWRpdGluZygpOworfQorCitib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUsIFdLQnVu
ZGxlUmFuZ2VSZWYgcmFuZ2UpCit7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5s
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTog
c2hvdWxkQXBwbHlTdHlsZToiIDw8IHN0eWxlIDw8ICIgdG9FbGVtZW50c0luRE9NUmFuZ2U6IiA8
PCByYW5nZSA8PCAiXG4iOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5
b3V0VGVzdENvbnRyb2xsZXIoKS0+YWNjZXB0c0VkaXRpbmcoKTsKK30KKwordm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1l
KQoreworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVk
aXRpbmc6IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7Cit9CisKK3ZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCit7
CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6
IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7Cit9CisKK3ZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKK3sKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
cygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlOiIgPDwgbm90aWZpY2F0
aW9uTmFtZSA8PCAiXG4iOworfQorCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdl
U2VsZWN0aW9uKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCit7CisgICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRp
dGluZ0NhbGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8
PCAiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbjoiIDw8IG5vdGlm
aWNhdGlvbk5hbWUgPDwgIlxuIjsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVFIKSW5kZXg6IFdl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaAkocmV2aXNpb24gNjQwMDYpCisrKyBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3MywyNyBAQCBwcml2YXRlOgogCiAgICAgLy8gRWRp
dG9yIGNsaWVudAogICAgIHN0YXRpYyBib29sIF9zaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVQ
YWdlUmVmLCBXS0J1bmRsZVJhbmdlUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBz
dGF0aWMgYm9vbCBfc2hvdWxkRW5kRWRpdGluZyhXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlUmFu
Z2VSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyBib29sIF9zaG91bGRJ
bnNlcnROb2RlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVOb2RlUmVmLCBXS0J1bmRsZVJhbmdl
UmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlvblR5cGUsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOworICAgIHN0YXRpYyBib29sIF9zaG91bGRJbnNlcnRUZXh0KFdLQnVuZGxlUGFnZVJl
ZiwgV0tTdHJpbmdSZWYsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0
QWN0aW9uVHlwZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgX3No
b3VsZERlbGV0ZVJhbmdlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVSYW5nZVJlZiwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgX3Nob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZVJhbmdlUmVmIGZyb21SYW5nZSwgV0tCdW5k
bGVSYW5nZVJlZiB0b1JhbmdlLCBXS0FmZmluaXR5VHlwZSwgYm9vbCBzdGlsbFNlbGVjdGluZywg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisgICAgc3RhdGljIGJvb2wgX3Nob3VsZEFwcGx5U3R5
bGUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUs
IFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0
YXRpYyB2b2lkIF9kaWRCZWdpbkVkaXRpbmcoV0tCdW5kbGVQYWdlUmVmLCBXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9p
ZCBfZGlkRW5kRWRpdGluZyhXS0J1bmRsZVBhZ2VSZWYsIFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlv
bk5hbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworICAgIHN0YXRpYyB2b2lkIF9kaWRDaGFu
Z2UoV0tCdW5kbGVQYWdlUmVmLCBXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBfZGlkQ2hhbmdlU2VsZWN0aW9uKFdL
QnVuZGxlUGFnZVJlZiwgV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CiAgICAgYm9vbCBzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZVJl
Zik7CisgICAgYm9vbCBzaG91bGRFbmRFZGl0aW5nKFdLQnVuZGxlUmFuZ2VSZWYpOworICAgIGJv
b2wgc2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRsZU5vZGVSZWYsIFdLQnVuZGxlUmFuZ2VSZWYgcmFu
Z2VUb1JlcGxhY2UsIFdLSW5zZXJ0QWN0aW9uVHlwZSk7CisgICAgYm9vbCBzaG91bGRJbnNlcnRU
ZXh0KFdLU3RyaW5nUmVmLCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2Vy
dEFjdGlvblR5cGUpOworICAgIGJvb2wgc2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZVJl
Zik7CisgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VSZWYg
ZnJvbVJhbmdlLCBXS0J1bmRsZVJhbmdlUmVmIHRvUmFuZ2UsIFdLQWZmaW5pdHlUeXBlLCBib29s
IHN0aWxsU2VsZWN0aW5nKTsKKyAgICBib29sIHNob3VsZEFwcGx5U3R5bGUoV0tCdW5kbGVDU1NT
dHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlKTsKKyAgICB2
b2lkIGRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKTsKKyAgICB2
b2lkIGRpZEVuZEVkaXRpbmcoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSk7CisgICAgdm9p
ZCBkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSk7CisgICAgdm9pZCBkaWRD
aGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSk7CiAKICAgICB2b2lk
IGR1bXBBbGxGcmFtZXNUZXh0KCk7CiAgICAgdm9pZCBkdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlv
bnMoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0MDE4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMjQgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQyMTkzCisgICAgICAgIFN1cHBvcnQgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEVkaXRpbmdE
ZWxlZ2F0ZXMgaW4gV2ViS2l0VGVzdFJ1bm5lcgorCisgICAgICAgIFN0ZXAgMiAtIGFkZCB0aGUg
cmVzdCBvZiBlZGl0aW5nIGRlbGVnYXRlcy4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy13azIv
U2tpcHBlZDogQ2hhbmdlZCB0aGUgYnVnIHRyYWNraW5nIHdoeSB0aGUgdGVzdHMgYXJlIHNraXBw
ZWQgLSB0aGUgZGVsZWdhdGVzCisgICAgICAgIGFyZSBub3cgaW1wbGVtZW50ZWQsIGJ1dCBvbmUg
b2YgdGhlbSBpc24ndCBjYWxsZWQgZm9yIHNvbWUgcmVhc29uLgorCiAyMDEwLTA3LTI0ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGF2aWQgS2lsemVyLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9Ta2lwcGVk
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIvU2tpcHBlZAkocmV2
aXNpb24gNjQwMDYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1NraXBwZWQJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDggQEAgY29tcG9zaXRpbmcvZ2VvbWV0cnkvbGltaXQt
bGF5ZXItYm91bmRzLQogY29tcG9zaXRpbmcvZ2VvbWV0cnkvbGltaXQtbGF5ZXItYm91bmRzLXRy
YW5zZm9ybWVkLW92ZXJmbG93Lmh0bWwKIGNvbXBvc2l0aW5nL2FuaW1hdGlvbi9hbmltYXRpb24t
Y29tcG9zaXRpbmcuaHRtbAogCi0jIFN1cHBvcnQgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEVk
aXRpbmdDYWxsYmFja3MgaW4gV2ViS2l0VGVzdFJ1bm5lcgotIyA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMTkzPgorIyBXZWJFZGl0b3JDbGllbnQ6OmRpZEJlZ2lu
RWRpdGluZyBpcyBuZXZlciBjYWxsZWQgaW4gV2ViS2l0MgorIyA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQyOTM5PgogZWRpdGluZy9kZWxldGluZy80ODQ1MzcxLmh0
bWwKIGVkaXRpbmcvZGVsZXRpbmcvNTU0Njc2My5odG1sCiBlZGl0aW5nL2RlbGV0aW5nL2NvbGxh
cHNlLXdoaXRlc3BhY2UtMzU4NzYwMS1maXguaHRtbAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>