<?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>67857</bug_id>
          
          <creation_ts>2011-09-09 11:03:03 -0700</creation_ts>
          <short_desc>Provide a way to get WebArchive from a BundleFrame</short_desc>
          <delta_ts>2011-09-16 12:18:23 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ada Chan">adachan</reporter>
          <assigned_to name="Ada Chan">adachan</assigned_to>
          <cc>aroben</cc>
    
    <cc>bfulgham</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>jberlin</cc>
    
    <cc>sam</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>464909</commentid>
    <comment_count>0</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2011-09-09 11:03:03 -0700</bug_when>
    <thetext>Implement WKBundleFrameCopyWebArchive().  

Need for &lt;rdar://problem/9898848&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464914</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-09 11:06:07 -0700</bug_when>
    <thetext>Do we really need this at the frame level?  Don&apos;t we already have a way to save WebArchives, can&apos;t we just re-use that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464930</commentid>
    <comment_count>2</comment_count>
      <attachid>106890</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2011-09-09 11:23:02 -0700</bug_when>
    <thetext>Created attachment 106890
Implement WKBundleFrameCopyWebArchive()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464933</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-09 11:26:28 -0700</bug_when>
    <thetext>I missed that this was on the BundleFrame, and not the UIProcess frame.  Carry on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464934</commentid>
    <comment_count>4</comment_count>
      <attachid>106890</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-09 11:28:07 -0700</bug_when>
    <thetext>Comment on attachment 106890
Implement WKBundleFrameCopyWebArchive()

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

We are trying to get in the habit of adding tests for new API, so please add a test in TestWebKitAPI.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:256
&gt; +    RetainPtr&lt;CFDataRef&gt; data;
&gt; +    if (RefPtr&lt;LegacyWebArchive&gt; archive = LegacyWebArchive::create(toImpl(frameRef)-&gt;coreFrame()-&gt;document())) {
&gt; +        if ((data = archive-&gt;rawDataRepresentation()))
&gt; +            return WKDataCreate(CFDataGetBytePtr(data.get()), CFDataGetLength(data.get()));
&gt; +    }

The code to do this should be on the WebFrame itself.  In general, we try to keep the code in API files to a minimum, mainly casts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467106</commentid>
    <comment_count>5</comment_count>
      <attachid>107348</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2011-09-14 10:22:14 -0700</bug_when>
    <thetext>Created attachment 107348
Move logic to get webarchive to WebFrame and add test in TestWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467110</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-14 10:25:10 -0700</bug_when>
    <thetext>Attachment 107348 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Last 3072 characters of output:
nts: set([&apos;./&apos;])
  
    name: net
    url: http://src.chromium.org/svn/trunk/src/net@100742
    parsed_url: http://src.chromium.org/svn/trunk/src/net@100742
    should_process: True
    requirements: set([&apos;./&apos;])
  
    name: tools/data_pack
    url: http://src.chromium.org/svn/trunk/src/tools/data_pack@100742
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/data_pack@100742
    should_process: True
    processed: True
    requirements: set([&apos;./&apos;])
  
    name: third_party/ffmpeg
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/ffmpeg&apos;)
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: tools/generate_stubs
    url: http://src.chromium.org/svn/trunk/src/tools/generate_stubs@100742
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/generate_stubs@100742
    should_process: True
    requirements: set([&apos;./&apos;])
  
    name: third_party/libjpeg_turbo
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/libjpeg_turbo&apos;)
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: third_party/v8-i18n
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/v8-i18n&apos;)
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: tools/grit
    url: http://src.chromium.org/svn/trunk/src/tools/grit@100742
    parsed_url: http://src.chromium.org/svn/trunk/src/tools/grit@100742
    should_process: True
    requirements: set([&apos;./&apos;])
  
    name: base
    url: http://src.chromium.org/svn/trunk/src/base@100742
    parsed_url: http://src.chromium.org/svn/trunk/src/base@100742
    should_process: True
    requirements: set([&apos;./&apos;])
  
    name: sql
    url: http://src.chromium.org/svn/trunk/src/sql@100742
    should_process: True
    requirements: set([&apos;./&apos;])
  
    name: v8
    url: From(&apos;chromium_deps&apos;, &apos;src/v8&apos;)
    should_process: True
    requirements: set([&apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: testing/gtest
    url: From(&apos;chromium_deps&apos;, &apos;src/testing/gtest&apos;)
    should_process: True
    requirements: set([&apos;testing&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: third_party/libwebp
    url: http://src.chromium.org/svn/trunk/src/third_party/libwebp@100742
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;./&apos;])
  
    name: googleurl
    url: From(&apos;chromium_deps&apos;, &apos;src/googleurl&apos;)
    should_process: True
    requirements: set([&apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: third_party/skia/include
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/skia/include&apos;)
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: third_party/ots
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/ots&apos;)
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])
  
    name: third_party/snappy/src
    url: From(&apos;chromium_deps&apos;, &apos;src/third_party/snappy/src&apos;)
    should_process: True
    requirements: set([&apos;third_party&apos;, &apos;chromium_deps&apos;, &apos;./&apos;])

Died at Tools/Scripts/update-webkit-chromium line 80.
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467121</commentid>
    <comment_count>7</comment_count>
      <attachid>107350</attachid>
    <who name="Ada Chan">adachan</who>
    <bug_when>2011-09-14 10:36:57 -0700</bug_when>
    <thetext>Created attachment 107350
Small style error fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467266</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-14 12:55:55 -0700</bug_when>
    <thetext>Wow.  That&apos;s a nasty bug in EWS/update-webkit-chromium</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467280</commentid>
    <comment_count>9</comment_count>
      <attachid>107350</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-09-14 13:17:46 -0700</bug_when>
    <thetext>Comment on attachment 107350
Small style error fixed.

I&apos;m not sure PLATFORM(WIN) is a strict enough test when deciding whether CF data types are available. You may need to test USE(CF) instead, but I&apos;m not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467293</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-14 13:35:54 -0700</bug_when>
    <thetext>PLATFORM(WIN) is poorly named and means &quot;am I compiling the Apple Windows Port&quot;.  Assuming it still requires CF in all cases, than should be correct.  I don&apos;t think WIN-CAIRO uses PLATFORM(WIN), but Adam would know better than I.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467346</commentid>
    <comment_count>11</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2011-09-14 14:30:50 -0700</bug_when>
    <thetext>Sam looked over the patch also.

Committed:
http://trac.webkit.org/changeset/95122</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468626</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2011-09-16 11:09:21 -0700</bug_when>
    <thetext>Whenever possible, it would be great if things that require CF simply use the &apos;USE(CF)&apos; test.  In cases where Apple-specific behavior is needed (e.g., it is interacting with Safari-specific shims), then the PLATFORM(WIN) is probably better.

Ideally, the bits of code that rely on Apple-only libraries and support routines (e.g., the Windows port of Core Animation, etc.) would have a better name, such as &quot;PLATFORM(WIN_APPLE)&quot; or even just &quot;PLATFORM(APPLE)&quot;.

But for now, &quot;PLATFORM(WIN)&quot; seems to be the definition with that meaning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468678</commentid>
    <comment_count>13</comment_count>
      <attachid>107350</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-16 11:50:02 -0700</bug_when>
    <thetext>Comment on attachment 107350
Small style error fixed.

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

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:245
&gt; +WKDataRef WKBundleFrameCopyWebArchive(WKBundleFrameRef frameRef)

Do we need this for individual frames? Could we put this on WKBundlePage instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468698</commentid>
    <comment_count>14</comment_count>
    <who name="Ada Chan">adachan</who>
    <bug_when>2011-09-16 12:18:23 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 107350 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107350&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleFrame.cpp:245
&gt; &gt; +WKDataRef WKBundleFrameCopyWebArchive(WKBundleFrameRef frameRef)
&gt; 
&gt; Do we need this for individual frames? Could we put this on WKBundlePage instead?

It&apos;s more flexible to put this on WKBundleFrame, in case caller wants to get webarchive of a subframe.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106890</attachid>
            <date>2011-09-09 11:23:02 -0700</date>
            <delta_ts>2011-09-14 10:23:05 -0700</delta_ts>
            <desc>Implement WKBundleFrameCopyWebArchive()</desc>
            <filename>67857.patch.txt</filename>
            <type>text/plain</type>
            <size>2683</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0ODY2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDktMDkgIEFkYSBDaGFu
ICA8YWRhY2hhbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IFdLQnVuZGxlRnJhbWVD
b3B5V2ViQXJjaGl2ZSgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5j
cHA6CisgICAgICAgIChXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUpOiBDcmVhdGUgYSBMZWdh
Y3lXZWJBcmNoaXZlIGZyb20gdGhlIGRvY3VtZW50IGFuZCByZXR1cm4gdGhlIHJhdyBkYXRhIGZy
b20gdGhlIGFyY2hpdmUuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZUZyYW1lLmg6CisKIDIwMTEtMDktMDggIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxl
LmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2JsZW0vOTc0MjM5Mz4gU3BlbGwgY2hlY2tpbmcg
YSB0ZXh0IGFyZWEgY2F1c2VzIHRoZSBwYWdlIHRvIHJlbG9hZApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlRnJhbWUuY3BwCShyZXZpc2lvbiA5NDgyNikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDEwICsyOSwxNSBAQAogCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5j
bHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tEYXRhLmgiCiAjaW5jbHVkZSAi
V2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KIAorI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQorI2lu
Y2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtMjQwLDMgKzI0NSwx
NiBAQCB2b2lkIFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9uKFdLQnVuCiB7CiAgICAgdG9J
bXBsKGZyYW1lUmVmKS0+c2V0VGV4dERpcmVjdGlvbih0b0ltcGwoZGlyZWN0aW9uUmVmKS0+c3Ry
aW5nKCkpOwogfQorCitXS0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWVSZWYpCit7CisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShX
SU4pCisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YTsKKyAgICBpZiAoUmVmUHRyPExlZ2Fj
eVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUodG9JbXBsKGZy
YW1lUmVmKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCkpKSB7CisgICAgICAgIGlmICgoZGF0YSA9
IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBX
S0RhdGFDcmVhdGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGRhdGEuZ2V0KCkpKTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gMDsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5oCShyZXZpc2lvbiA5NDgyNikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVGcmFtZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIFdLX0VYUE9SVCBib29sIFdLQnVuZGxl
RnJhbWVHZXREb2N1bWVudEIKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVD
b3B5U3VnZ2VzdGVkRmlsZW5hbWVGb3JSZXNvdXJjZVdpdGhVUkwoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgV0tVUkxSZWYgdXJsKTsKIFdLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS0J1bmRsZUZyYW1l
Q29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdL
VVJMUmVmIHVybCk7CisgICAgCitXS19FWFBPUlQgV0tEYXRhUmVmIFdLQnVuZGxlRnJhbWVDb3B5
V2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVz
CiB9Cg==
</data>
<flag name="review"
          id="103433"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107348</attachid>
            <date>2011-09-14 10:22:14 -0700</date>
            <delta_ts>2011-09-14 10:36:57 -0700</delta_ts>
            <desc>Move logic to get webarchive to WebFrame and add test in TestWebKitAPI.</desc>
            <filename>67857.patch.txt</filename>
            <type>text/plain</type>
            <size>21866</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MDk2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDktMTQgIEFkYSBDaGFu
ICA8YWRhY2hhbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IFdLQnVuZGxlRnJhbWVD
b3B5V2ViQXJjaGl2ZSgpLgorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Nzg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNw
cDoKKyAgICAgICAgKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZSk6IENhbGwgV2ViRnJhbWU6
OndlYkFyY2hpdmVEYXRhKCkgYW5kIGNyZWF0ZSBhIFdLRGF0YVJlZiBmcm9tIHRoZSByZXR1cm5l
ZCBDRkRhdGFSZWYuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZUZyYW1lLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OndlYkFyY2hpdmVEYXRhKTogQWRkIFdlYkZy
YW1lOjp3ZWJBcmNoaXZlRGF0YSgpLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUpOiBNb3ZlIHRoZSBsb2dp
YyB0byBXZWJGcmFtZTo6d2ViQXJjaGl2ZURhdGEoKSBhbmQgY2FsbCB0aGF0IG1ldGhvZCBoZXJl
LgorCiAyMDExLTA5LTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRGlzYWJsZSBDKysgZXhjZXB0aW9ucyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcAkocmV2aXNpb24gOTUwOTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0Rh
dGEuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpAQCAtMjQwLDMgKzI0MSwxNCBAQCB2b2lk
IFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9uKFdLQnVuCiB7CiAgICAgdG9JbXBsKGZyYW1l
UmVmKS0+c2V0VGV4dERpcmVjdGlvbih0b0ltcGwoZGlyZWN0aW9uUmVmKS0+c3RyaW5nKCkpOwog
fQorCitXS0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWVSZWYpCit7CisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IHRvSW1wbChmcmFtZVJlZiktPndlYkFyY2hpdmVE
YXRhKCk7CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBXS0RhdGFDcmVhdGUoQ0ZEYXRh
R2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpKTsKKyNl
bmRpZgorICAgIAorICAgIHJldHVybiAwOworfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZy
YW1lLmgJKHJldmlzaW9uIDk1MDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYg
KzcwLDggQEAgV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVGcmFtZUdldERvY3VtZW50QgogCiBXS19F
WFBPUlQgV0tTdHJpbmdSZWYgV0tCdW5kbGVGcmFtZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZUZvclJl
c291cmNlV2l0aFVSTChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS1VSTFJlZiB1cmwpOwogV0tf
RVhQT1JUIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdp
dGhVUkwoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tVUkxSZWYgdXJsKTsKKyAgICAKK1dLX0VY
UE9SVCBXS0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gOTUwOTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFJlc291cmNl
RGVjb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2Vi
QXJjaGl2ZS5oPgorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRMZWFrQ291bnRlci5oPgogI2VuZGlmCkBAIC03MjMsNCArNzI3LDE0IEBAIHZvaWQgV2Vi
RnJhbWU6OnNldFRleHREaXJlY3Rpb24oY29uc3QgU3QKICAgICAgICAgbV9jb3JlRnJhbWUtPmVk
aXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rp
b24pOwogfQogCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCitSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBXZWJGcmFtZTo6d2ViQXJjaGl2ZURhdGEoKSBjb25zdAoreworICAgIGlmIChS
ZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0
ZShjb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKSkpCisgICAgICAgIHJldHVybiBhcmNoaXZlLT5yYXdE
YXRhUmVwcmVzZW50YXRpb24oKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorICAg
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24gOTUwOTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYg
KzEzMywxMCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2b2lkIHNldExvYWRMaXN0ZW5lcihMb2Fk
TGlzdGVuZXIqIGxvYWRMaXN0ZW5lcikgeyBtX2xvYWRMaXN0ZW5lciA9IGxvYWRMaXN0ZW5lcjsg
fQogICAgIExvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2Fk
TGlzdGVuZXI7IH0KKyAgICAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJTikKKyAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB3ZWJBcmNoaXZlRGF0YSgpIGNvbnN0OworI2VuZGlmCiAK
IHByaXZhdGU6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWU+IGNyZWF0ZSgpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gOTUwOTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMCArMTEyLDYgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KIAotI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5
V2ViQXJjaGl2ZS5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1MpCiAjaWYg
UExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIk1hY2hQb3J0LmgiCkBAIC0xNDk3LDEwICsxNDkzLDgg
QEAgdm9pZCBXZWJQYWdlOjpnZXRXZWJBcmNoaXZlT2ZGcmFtZSh1aW50NgogI2lmIFBMQVRGT1JN
KE1BQykgfHwgUExBVEZPUk0oV0lOKQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7CiAg
ICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZy
YW1lSUQpKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9
IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShmcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCkp
KSB7Ci0gICAgICAgICAgICBpZiAoKGRhdGEgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKSkpCi0gICAgICAgICAgICAgICAgZGF0YVJlZmVyZW5jZSA9IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEu
Z2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoKGRhdGEgPSBmcmFtZS0+d2ViQXJjaGl2
ZURhdGEoKSkpCisgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YS5n
ZXQoKSkpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTA5NykKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTA5LTE0ICBBZGEgQ2hhbiAg
PGFkYWNoYW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0ZXN0IGZvciBXS0J1bmRsZUZyYW1l
Q29weVdlYkFyY2hpdmUoKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUpOiBEbyBzb21lIGJhc2ljIHNhbml0eSBjaGVja3MgdG8gbWFrZSBzdXJlCisgICAg
ICAgIHRoZSByZXR1cm5lZCBkYXRhIGlzIGEgdmFsaWQgd2ViYXJjaGl2ZS4KKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnNldEluamVjdGVkQnVuZGxlQ2xpZW50KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKTogTG9hZCBzaW1wbGUuaHRtbCBpbiBhIFdlYlZpZXcuICBXYWl0IGZvciBpdCB0byBmaW5p
c2ggbG9hZGluZywgYW5kIHRoZW4gYXNrIHRoZQorICAgICAgICBpbmplY3RlZCBidW5kbGUgZm9y
IHRoZSB3ZWJhcmNoaXZlIGFuZCBjaGVjayB0aGUgcmV0dXJuZWQgd2ViYXJjaGl2ZS4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2ZV9CdW5kbGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OldlYkFyY2hpdmVUZXN0OjpXZWJBcmNoaXZl
VGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpXZWJBcmNoaXZlVGVzdDo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOiBIYW5kbGUgdGhlICJHZXRXZWJBcmNoaXZlIiBtZXNzYWdlIGFuZCByZXR1cm4K
KyAgICAgICAgdGhlIHdlYiBhcmNoaXZlLgorCisgICAgICAgIEFkZCBmaWxlcyB0byBwcm9qZWN0
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qOiBBbHNv
IGxldCBWaXN1YWwgU3R1ZGlvIHJlb3JkZXIgYSBmaWxlLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvd2luL1Rlc3RXZWJLaXRBUElJbmplY3RlZEJ1bmRsZS52Y3Byb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIw
MTEtMDktMTQgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBSZW1vdmUgb2Jzb2xldGUgV2ViVmlld0NsaWVudCBtZXRob2RzIGZyb20g
RHVtcFJlbmRlclRyZWUuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUw
OTYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogCQkzN0RDNjc5MTE0
MEQ3RDc2MDBBQkNDREIgLyogRE9NUmFuZ2VPZlN0cmluZy5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3REM2NzhGMTQwRDdEM0EwMEFC
Q0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLmh0bWwgKi87IH07CiAJCTRCRkRGRkE3MTMxNDc3NkMw
MDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJGREZGQTYxMzE0Nzc2QzAwNjFG
MjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi87IH07CiAJCTRCRkRG
RkE5MTMxNDc3NzcwMDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QkZERkZBODEzMTQ3Nzc3
MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwICovOyB9OworCQk1MjBCQ0Y0
QzE0MUVCMDlFMDA5MzdFQTggLyogV2ViQXJjaGl2ZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIwQkNGNEExNDFFQjA5RTAwOTM3RUE4
IC8qIFdlYkFyY2hpdmVfQnVuZGxlLmNwcCAqLzsgfTsKKwkJNTIwQkNGNEQxNDFFQjA5RTAwOTM3
RUE4IC8qIFdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTIwQkNGNEIxNDFFQjA5RTAwOTM3RUE4IC8qIFdlYkFyY2hpdmUuY3BwICov
OyB9OwogCQk5MzlCQTkxNzE0MTAzNDEyMDAxQTAxQkQgLyogRGV2aWNlU2NhbGVGYWN0b3JPbkJh
Y2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlC
QTkxNjE0MTAzNDEyMDAxQTAxQkQgLyogRGV2aWNlU2NhbGVGYWN0b3JPbkJhY2subW0gKi87IH07
CiAJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdB
OTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAg
Ki87IH07CiAJCUJDMTMxODg1MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMx
ODg0MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKQEAg
LTE1Myw2ICsxNTUsOCBAQAogCQkzN0RDNjc4RjE0MEQ3RDNBMDBBQkNDREIgLyogRE9NUmFuZ2VP
ZlN0cmluZy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRE9NUmFuZ2VPZlN0cmlu
Zy5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkZERkZBNjEzMTQ3NzZDMDA2
MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCRkRGRkE4MTMxNDc3NzcwMDYxRjI0
QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUyMEJDRjRBMTQxRUIwOUUwMDkzN0VBOCAvKiBXZWJBcmNoaXZlX0J1
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJBcmNoaXZl
X0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMEJDRjRCMTQxRUIw
OUUwMDkzN0VBOCAvKiBXZWJBcmNoaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYkFyY2hpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRh
YmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOTM5QkE5MTYxNDEwMzQxMjAwMUEwMUJEIC8q
IERldmljZVNjYWxlRmFjdG9yT25CYWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRGV2aWNlU2NhbGVGYWN0b3JPbkJhY2subW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2hl
Y2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcDsgcGF0aCA9IFdURi9DaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY0LDYgKzM2
OCw4IEBACiAJCQkJQkM3QjYxOUExMjk5RkU5RTAwRDE3NEE0IC8qIFdLUHJlZmVyZW5jZXMuY3Bw
ICovLAogCQkJCUJDOTA5OTVEMTI1NjdCQzEwMDA4Mzc1NiAvKiBXS1N0cmluZy5jcHAgKi8sCiAJ
CQkJQkM5MDk5OTMxMjU2QUNGMTAwMDgzNzU2IC8qIFdLU3RyaW5nSlNTdHJpbmcuY3BwICovLAor
CQkJCTUyMEJDRjRBMTQxRUIwOUUwMDkzN0VBOCAvKiBXZWJBcmNoaXZlX0J1bmRsZS5jcHAgKi8s
CisJCQkJNTIwQkNGNEIxNDFFQjA5RTAwOTM3RUE4IC8qIFdlYkFyY2hpdmUuY3BwICovLAogCQkJ
KTsKIAkJCXBhdGggPSBXZWJLaXQyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU4
OSw2ICs1OTUsNyBAQAogCQkJCTkzOUJBOTE3MTQxMDM0MTIwMDFBMDFCRCAvKiBEZXZpY2VTY2Fs
ZUZhY3Rvck9uQmFjay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3OTlBRDNBMTQxMjBBNDMwMDVF
QjBDNiAvKiBTdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTMzREM4OTExMTQxOTUzQTMwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTIwQkNGNEQxNDFF
QjA5RTAwOTM3RUE4IC8qIFdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC02MDgsNiAr
NjE1LDcgQEAKIAkJCQkzM0JFNUFGOTEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJD
cmFzaF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFREUyMjYxM0U1RTdFNzAwRTYy
RkU4IC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0
Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyMEJDRjRDMTQxRUIwOUUw
MDkzN0VBOCAvKiBXZWJBcmNoaXZlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XZWJBcmNoaXZlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisj
aW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJL
aXQyL1dLVVJMQ0YuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dFByaXZhdGUuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
c3RhdGljIGJvb2wgZGlkRmluaXNoTG9hZDsKK3N0YXRpYyBib29sIGRpZFJlY2VpdmVNZXNzYWdl
OworICAgIAorc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
V0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIGJvZHksIGNv
bnN0IHZvaWQqKQoreworICAgIGRpZFJlY2VpdmVNZXNzYWdlID0gdHJ1ZTsKKworICAgIEVYUEVD
VF9XS19TVFJFUSgiRGlkR2V0V2ViQXJjaGl2ZSIsIG1lc3NhZ2VOYW1lKTsKKyAgICBFWFBFQ1Rf
VFJVRShib2R5KTsKKyAgICBFWFBFQ1RfRVEoV0tEYXRhR2V0VHlwZUlEKCksIFdLR2V0VHlwZUlE
KGJvZHkpKTsKKyAgICBXS0RhdGFSZWYgcmVjZWl2ZWREYXRhID0gc3RhdGljX2Nhc3Q8V0tEYXRh
UmVmPihib2R5KTsKKyAgICAgICAgCisgICAgLy8gRG8gYmFzaWMgc2FuaXR5IGNoZWNrcyBvbiB0
aGUgcmV0dXJuZWQgd2ViYXJjaGl2ZS4gIFdlIGhhdmUgbW9yZSB0aG9yb3VnaCBjaGVja3MgaW4g
TGF5b3V0VGVzdHMuCisgICAgc2l6ZV90IHNpemUgPSBXS0RhdGFHZXRTaXplKHJlY2VpdmVkRGF0
YSk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogYnl0ZXMgPSBXS0RhdGFHZXRCeXRlcyhyZWNl
aXZlZERhdGEpOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRh
Q3JlYXRlKDAsIGJ5dGVzLCBzaXplKSk7CisgICAgQ0ZQcm9wZXJ0eUxpc3RGb3JtYXQgZm9ybWF0
ID0ga0NGUHJvcGVydHlMaXN0WE1MRm9ybWF0X3YxXzAgfCBrQ0ZQcm9wZXJ0eUxpc3RCaW5hcnlG
b3JtYXRfdjFfMDsKKyAgICBSZXRhaW5QdHI8Q0ZQcm9wZXJ0eUxpc3RSZWY+IHByb3BlcnR5TGlz
dChBZG9wdENGLCBDRlByb3BlcnR5TGlzdENyZWF0ZVdpdGhEYXRhKDAsIGRhdGEuZ2V0KCksIGtD
RlByb3BlcnR5TGlzdEltbXV0YWJsZSwgJmZvcm1hdCwgMCkpOworICAgIEVYUEVDVF9UUlVFKHBy
b3BlcnR5TGlzdCk7CisgICAgCisgICAgLy8gSXQgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4KKyAg
ICBFWFBFQ1RfRVEoQ0ZEaWN0aW9uYXJ5R2V0VHlwZUlEKCksIENGR2V0VHlwZUlEKHByb3BlcnR5
TGlzdC5nZXQoKSkpOworICAgIENGRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5ID0gKENGRGljdGlv
bmFyeVJlZilwcm9wZXJ0eUxpc3QuZ2V0KCk7CisgICAgCisgICAgLy8gSXQgc2hvdWxkIGhhdmUg
YSBtYWluIHJlc291cmNlLgorICAgIENGVHlwZVJlZiBtYWluUmVzb3VyY2UgPSBDRkRpY3Rpb25h
cnlHZXRWYWx1ZShkaWN0aW9uYXJ5LCBDRlNUUigiV2ViTWFpblJlc291cmNlIikpOworICAgIEVY
UEVDVF9UUlVFKG1haW5SZXNvdXJjZSk7CisgICAgRVhQRUNUX0VRKENGRGljdGlvbmFyeUdldFR5
cGVJRCgpLCBDRkdldFR5cGVJRChtYWluUmVzb3VyY2UpKTsKKyAgICBDRkRpY3Rpb25hcnlSZWYg
bWFpblJlc291cmNlRGljdGlvbmFyeSA9IChDRkRpY3Rpb25hcnlSZWYpbWFpblJlc291cmNlOwor
ICAgIAorICAgIC8vIE1haW4gcmVzb3VyY2Ugc2hvdWxkIGhhdmUgYSBub24tZW1wdHkgdXJsIGFu
ZCBtaW1lIHR5cGUuCisgICAgQ0ZUeXBlUmVmIHVybCA9IENGRGljdGlvbmFyeUdldFZhbHVlKG1h
aW5SZXNvdXJjZURpY3Rpb25hcnksIENGU1RSKCJXZWJSZXNvdXJjZVVSTCIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh1cmwpOworICAgIEVYUEVDVF9FUShDRlN0cmluZ0dldFR5cGVJRCgpLCBDRkdldFR5
cGVJRCh1cmwpKTsKKyAgICBFWFBFQ1RfTkUoQ0ZTdHJpbmdHZXRMZW5ndGgoKENGU3RyaW5nUmVm
KXVybCksIDApOworICAgIAorICAgIENGVHlwZVJlZiBtaW1lVHlwZSA9IENGRGljdGlvbmFyeUdl
dFZhbHVlKG1haW5SZXNvdXJjZURpY3Rpb25hcnksIENGU1RSKCJXZWJSZXNvdXJjZU1JTUVUeXBl
IikpOworICAgIEVYUEVDVF9UUlVFKG1pbWVUeXBlKTsKKyAgICBFWFBFQ1RfRVEoQ0ZTdHJpbmdH
ZXRUeXBlSUQoKSwgQ0ZHZXRUeXBlSUQobWltZVR5cGUpKTsKKyAgICBFWFBFQ1RfTkUoQ0ZTdHJp
bmdHZXRMZW5ndGgoKENGU3RyaW5nUmVmKW1pbWVUeXBlKSwgMCk7CisgICAgCisgICAgLy8gTWFp
biByZXNvdXJjZSBkaWN0aW9uYXJ5IHNob3VsZCBoYXZlIGEgIldlYlJlc291cmNlRGF0YSIga2V5
LgorICAgIENGVHlwZVJlZiByZXNvdXJjZURhdGEgPSBDRkRpY3Rpb25hcnlHZXRWYWx1ZShtYWlu
UmVzb3VyY2VEaWN0aW9uYXJ5LCBDRlNUUigiV2ViUmVzb3VyY2VEYXRhIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlRGF0YSk7CisgICAgRVhQRUNUX0VRKENGRGF0YUdldFR5cGVJRCgpLCBD
RkdldFR5cGVJRChyZXNvdXJjZURhdGEpKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHN0cmluZ0RhdGEoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVGcm9tRXh0ZXJuYWxSZXByZXNl
bnRhdGlvbigwLCAoQ0ZEYXRhUmVmKXJlc291cmNlRGF0YSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4
KSk7CisgICAgRVhQRUNUX1RSVUUoc3RyaW5nRGF0YSk7CisgICAgCisgICAgLy8gSXQgc2hvdWxk
IGNvbnRhaW4gdGhlIHN0cmluZyAiU2ltcGxlIEhUTUwgZmlsZS4iIGluIGl0LgorICAgIGJvb2wg
Zm91bmRTdHJpbmcgPSBDRlN0cmluZ0ZpbmQoc3RyaW5nRGF0YS5nZXQoKSwgQ0ZTVFIoIlNpbXBs
ZSBIVE1MIGZpbGUuIiksIDApLmxvY2F0aW9uICE9IGtDRk5vdEZvdW5kOworICAgIEVYUEVDVF9U
UlVFKGZvdW5kU3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgc2V0SW5qZWN0ZWRCdW5kbGVDbGll
bnQoV0tDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVD
bGllbnQgaW5qZWN0ZWRCdW5kbGVDbGllbnQ7CisgICAgbWVtc2V0KCZpbmplY3RlZEJ1bmRsZUNs
aWVudCwgMCwgc2l6ZW9mKGluamVjdGVkQnVuZGxlQ2xpZW50KSk7CisgICAgaW5qZWN0ZWRCdW5k
bGVDbGllbnQuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUgPSBkaWRSZWNlaXZl
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZTsKKworICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVu
ZGxlQ2xpZW50KGNvbnRleHQsICZpbmplY3RlZEJ1bmRsZUNsaWVudCk7Cit9CisKK3N0YXRpYyB2
b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiwgV0tU
eXBlUmVmLCBjb25zdCB2b2lkKikKK3sKKyAgICBkaWRGaW5pc2hMb2FkID0gdHJ1ZTsKK30KKwor
VEVTVChXZWJLaXQyLCBXZWJBcmNoaXZlKQoreworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJl
Zj4gY29udGV4dCA9IGFkb3B0V0soVXRpbDo6Y3JlYXRlQ29udGV4dEZvckluamVjdGVkQnVuZGxl
VGVzdCgiV2ViQXJjaGl2ZVRlc3QiKSk7CisgICAgc2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoY29u
dGV4dC5nZXQoKSk7CisKKyAgICBQbGF0Zm9ybVdlYlZpZXcgd2ViVmlldyhjb250ZXh0LmdldCgp
KTsKKworICAgIFdLUGFnZUxvYWRlckNsaWVudCBsb2FkZXJDbGllbnQ7CisgICAgbWVtc2V0KCZs
b2FkZXJDbGllbnQsIDAsIHNpemVvZihsb2FkZXJDbGllbnQpKTsKKyAgICAKKyAgICBsb2FkZXJD
bGllbnQudmVyc2lvbiA9IGtXS1BhZ2VMb2FkZXJDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBs
b2FkZXJDbGllbnQuZGlkRmluaXNoTG9hZEZvckZyYW1lID0gZGlkRmluaXNoTG9hZEZvckZyYW1l
OworICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQod2ViVmlldy5wYWdlKCksICZsb2FkZXJD
bGllbnQpOworCisgICAgV0tQYWdlTG9hZFVSTCh3ZWJWaWV3LnBhZ2UoKSwgYWRvcHRXSyhVdGls
OjpjcmVhdGVVUkxGb3JSZXNvdXJjZSgic2ltcGxlIiwgImh0bWwiKSkuZ2V0KCkpOworCisgICAg
Ly8gV2FpdCB0aWxsIHRoZSBsb2FkIGZpbmlzaGVzIGJlZm9yZSBnZXR0aW5nIHRoZSB3ZWIgYXJj
aGl2ZS4KKyAgICBVdGlsOjpydW4oJmRpZEZpbmlzaExvYWQpOworICAgIFdLQ29udGV4dFBvc3RN
ZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShjb250ZXh0LmdldCgpLCBVdGlsOjp0b1dLKCJHZXRXZWJB
cmNoaXZlIikuZ2V0KCksIHdlYlZpZXcucGFnZSgpKTsKKworICAgIC8vIFdhaXQgdGlsbCB3ZSBo
YXZlIHJlY2VpdmVkIHRoZSB3ZWIgYXJjaGl2ZSBmcm9tIHRoZSBpbmplY3RlZCBidW5kbGUuCisg
ICAgVXRpbDo6cnVuKCZkaWRSZWNlaXZlTWVzc2FnZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XZWJB
cmNoaXZlX0J1bmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyL1dlYkFyY2hpdmVfQnVuZGxlLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XZWJBcmNoaXZlX0J1bmRsZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiSW5qZWN0ZWRCdW5k
bGVUZXN0LmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPFdl
YktpdDIvV0tCdW5kbGVQYWdlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0J1bmRsZUZyYW1lLmg+
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgV2ViQXJjaGl2ZVRlc3QgOiBw
dWJsaWMgSW5qZWN0ZWRCdW5kbGVUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJBcmNoaXZlVGVzdChj
b25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcik7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKK307CisKK3N0YXRpYyBJbmplY3RlZEJ1bmRsZVRl
c3Q6OlJlZ2lzdGVyPFdlYkFyY2hpdmVUZXN0PiByZWdpc3RyYXIoIldlYkFyY2hpdmVUZXN0Iik7
CisKK1dlYkFyY2hpdmVUZXN0OjpXZWJBcmNoaXZlVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRl
bnRpZmllcikKKyAgICA6IEluamVjdGVkQnVuZGxlVGVzdChpZGVudGlmaWVyKQoreworfQorCit2
b2lkIFdlYkFyY2hpdmVUZXN0OjpkaWRSZWNlaXZlTWVzc2FnZShXS0J1bmRsZVJlZiBidW5kbGUs
IFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgYm9keSkKK3sKKyAgICBpZiAoIVdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJHZXRXZWJBcmNoaXZlIikp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChXS0dldFR5cGVJRChib2R5KSAhPSBXS0J1bmRs
ZVBhZ2VHZXRUeXBlSUQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoc3RhdGljX2Nhc3Q8V0tCdW5k
bGVQYWdlUmVmPihib2R5KSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoYnVuZGxlLCBVdGlsOjp0b1dLKCJEaWRHZXRXZWJBcmNoaXZl
IikuZ2V0KCksIGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKGZyYW1lKSkuZ2V0
KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0
V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0QVBJLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0QVBJLnZjcHJvagkocmV2aXNpb24gOTUwOTYpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0QVBJLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtMzg5LDE5ICszODksMTkgQEAKIAkJCU5hbWU9IndpbiIKIAkJCT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXG1haW4uY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLlxJbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXJXaW4uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXFBsYXRmb3JtVXRpbGl0aWVzV2luLmNwcCIKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii5cUGxhdGZvcm1XZWJWaWV3V2luLmNwcCIKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii5cUGxhdGZvcm1VdGlsaXRpZXNXaW4uY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuXEluamVjdGVkQnVuZGxlQ29udHJvbGxlcldpbi5jcHAiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuXFBsYXRmb3JtV2ViVmlld1dpbi5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKQEAgLTU0MCw2ICs1NDAsMTAgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4K
IAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFRlc3RzXFdlYktpdDJcV2ViQXJjaGl2
ZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxUZXN0c1xXZWJLaXQyXFdLUHJlZmVyZW5jZXMuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxl
PgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vVGVzdFdlYktpdEFQSUluamVjdGVkQnVu
ZGxlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2Vi
S2l0QVBJSW5qZWN0ZWRCdW5kbGUudmNwcm9qCShyZXZpc2lvbiA5NTA5NikKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUElJbmplY3RlZEJ1bmRsZS52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTQzMSw2ICs0MzEsMTAgQEAKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxUZXN0
c1xXZWJLaXQyXFJlc3BvbnNpdmVuZXNzVGltZXJEb2VzbnRGaXJlRWFybHlfQnVuZGxlLmNwcCIK
IAkJCQkJPgogCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFRl
c3RzXFdlYktpdDJcV2ViQXJjaGl2ZV9CdW5kbGUuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgog
CQkJPC9GaWx0ZXI+CiAJCTwvRmlsdGVyPgogCQk8RmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107350</attachid>
            <date>2011-09-14 10:36:57 -0700</date>
            <delta_ts>2011-09-16 11:50:02 -0700</delta_ts>
            <desc>Small style error fixed.</desc>
            <filename>67857.patch.txt</filename>
            <type>text/plain</type>
            <size>21865</size>
            <attacher name="Ada Chan">adachan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1MDk2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDktMTQgIEFkYSBDaGFu
ICA8YWRhY2hhbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IFdLQnVuZGxlRnJhbWVD
b3B5V2ViQXJjaGl2ZSgpLgorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Nzg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNw
cDoKKyAgICAgICAgKFdLQnVuZGxlRnJhbWVDb3B5V2ViQXJjaGl2ZSk6IENhbGwgV2ViRnJhbWU6
OndlYkFyY2hpdmVEYXRhKCkgYW5kIGNyZWF0ZSBhIFdLRGF0YVJlZiBmcm9tIHRoZSByZXR1cm5l
ZCBDRkRhdGFSZWYuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZUZyYW1lLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OndlYkFyY2hpdmVEYXRhKTogQWRkIFdlYkZy
YW1lOjp3ZWJBcmNoaXZlRGF0YSgpLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJG
cmFtZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUpOiBNb3ZlIHRoZSBsb2dp
YyB0byBXZWJGcmFtZTo6d2ViQXJjaGl2ZURhdGEoKSBhbmQgY2FsbCB0aGF0IG1ldGhvZCBoZXJl
LgorCiAyMDExLTA5LTEzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgRGlzYWJsZSBDKysgZXhjZXB0aW9ucyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tC
dW5kbGVGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmNwcAkocmV2aXNpb24gOTUwOTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
RnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0Rh
dGEuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgpAQCAtMjQwLDMgKzI0MSwxNCBAQCB2b2lk
IFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9uKFdLQnVuCiB7CiAgICAgdG9JbXBsKGZyYW1l
UmVmKS0+c2V0VGV4dERpcmVjdGlvbih0b0ltcGwoZGlyZWN0aW9uUmVmKS0+c3RyaW5nKCkpOwog
fQorCitXS0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWVSZWYpCit7CisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IHRvSW1wbChmcmFtZVJlZiktPndlYkFyY2hpdmVE
YXRhKCk7CisgICAgaWYgKGRhdGEpCisgICAgICAgIHJldHVybiBXS0RhdGFDcmVhdGUoQ0ZEYXRh
R2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpKTsKKyNl
bmRpZgorICAgIAorICAgIHJldHVybiAwOworfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZy
YW1lLmgJKHJldmlzaW9uIDk1MDk2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZUZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYg
KzcwLDggQEAgV0tfRVhQT1JUIGJvb2wgV0tCdW5kbGVGcmFtZUdldERvY3VtZW50QgogCiBXS19F
WFBPUlQgV0tTdHJpbmdSZWYgV0tCdW5kbGVGcmFtZUNvcHlTdWdnZXN0ZWRGaWxlbmFtZUZvclJl
c291cmNlV2l0aFVSTChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS1VSTFJlZiB1cmwpOwogV0tf
RVhQT1JUIFdLU3RyaW5nUmVmIFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJjZVdp
dGhVUkwoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tVUkxSZWYgdXJsKTsKKyAgICAKK1dLX0VY
UE9SVCBXS0RhdGFSZWYgV0tCdW5kbGVGcmFtZUNvcHlXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gOTUwOTYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw2ICs1NywxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFJlc291cmNl
RGVjb2Rlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5V2Vi
QXJjaGl2ZS5oPgorI2VuZGlmCisKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWRMZWFrQ291bnRlci5oPgogI2VuZGlmCkBAIC03MjMsNCArNzI3LDE0IEBAIHZvaWQgV2Vi
RnJhbWU6OnNldFRleHREaXJlY3Rpb24oY29uc3QgU3QKICAgICAgICAgbV9jb3JlRnJhbWUtPmVk
aXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rp
b24pOwogfQogCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCitSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiBXZWJGcmFtZTo6d2ViQXJjaGl2ZURhdGEoKSBjb25zdAoreworICAgIGlmIChS
ZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0
ZShjb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKSkpCisgICAgICAgIHJldHVybiBhcmNoaXZlLT5yYXdE
YXRhUmVwcmVzZW50YXRpb24oKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorICAg
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24gOTUwOTYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDYg
KzEzMywxMCBAQCBwdWJsaWM6CiAgICAgfTsKICAgICB2b2lkIHNldExvYWRMaXN0ZW5lcihMb2Fk
TGlzdGVuZXIqIGxvYWRMaXN0ZW5lcikgeyBtX2xvYWRMaXN0ZW5lciA9IGxvYWRMaXN0ZW5lcjsg
fQogICAgIExvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2Fk
TGlzdGVuZXI7IH0KKyAgICAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJTikKKyAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB3ZWJBcmNoaXZlRGF0YSgpIGNvbnN0OworI2VuZGlmCiAK
IHByaXZhdGU6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRnJhbWU+IGNyZWF0ZSgpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2
aXNpb24gOTUwOTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiwxMCArMTEyLDYgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1JhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9WaXNpYmxlUG9zaXRpb24uaD4KIAotI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYkNvcmUvTGVnYWN5
V2ViQXJjaGl2ZS5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoUExVR0lOX1BST0NFU1MpCiAjaWYg
UExBVEZPUk0oTUFDKQogI2luY2x1ZGUgIk1hY2hQb3J0LmgiCkBAIC0xNDk3LDEwICsxNDkzLDgg
QEAgdm9pZCBXZWJQYWdlOjpnZXRXZWJBcmNoaXZlT2ZGcmFtZSh1aW50NgogI2lmIFBMQVRGT1JN
KE1BQykgfHwgUExBVEZPUk0oV0lOKQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7CiAg
ICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZy
YW1lSUQpKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9
IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShmcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCkp
KSB7Ci0gICAgICAgICAgICBpZiAoKGRhdGEgPSBhcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRp
b24oKSkpCi0gICAgICAgICAgICAgICAgZGF0YVJlZmVyZW5jZSA9IENvcmVJUEM6OkRhdGFSZWZl
cmVuY2UoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEu
Z2V0KCkpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoKGRhdGEgPSBmcmFtZS0+d2ViQXJjaGl2
ZURhdGEoKSkpCisgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gQ29yZUlQQzo6RGF0YVJlZmVy
ZW5jZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YS5n
ZXQoKSkpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NTA5NykKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDExLTA5LTE0ICBBZGEgQ2hhbiAg
PGFkYWNoYW5AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCB0ZXN0IGZvciBXS0J1bmRsZUZyYW1l
Q29weVdlYkFyY2hpdmUoKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY3ODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUpOiBEbyBzb21lIGJhc2ljIHNhbml0eSBjaGVja3MgdG8gbWFrZSBzdXJlCisgICAg
ICAgIHRoZSByZXR1cm5lZCBkYXRhIGlzIGEgdmFsaWQgd2ViYXJjaGl2ZS4KKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnNldEluamVjdGVkQnVuZGxlQ2xpZW50KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKTogTG9hZCBzaW1wbGUuaHRtbCBpbiBhIFdlYlZpZXcuICBXYWl0IGZvciBpdCB0byBmaW5p
c2ggbG9hZGluZywgYW5kIHRoZW4gYXNrIHRoZQorICAgICAgICBpbmplY3RlZCBidW5kbGUgZm9y
IHRoZSB3ZWJhcmNoaXZlIGFuZCBjaGVjayB0aGUgcmV0dXJuZWQgd2ViYXJjaGl2ZS4KKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2ZV9CdW5kbGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OldlYkFyY2hpdmVUZXN0OjpXZWJBcmNoaXZl
VGVzdCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpXZWJBcmNoaXZlVGVzdDo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOiBIYW5kbGUgdGhlICJHZXRXZWJBcmNoaXZlIiBtZXNzYWdlIGFuZCByZXR1cm4K
KyAgICAgICAgdGhlIHdlYiBhcmNoaXZlLgorCisgICAgICAgIEFkZCBmaWxlcyB0byBwcm9qZWN0
LgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qOiBBbHNv
IGxldCBWaXN1YWwgU3R1ZGlvIHJlb3JkZXIgYSBmaWxlLgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvd2luL1Rlc3RXZWJLaXRBUElJbmplY3RlZEJ1bmRsZS52Y3Byb2o6CisgICAgICAgICogVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIw
MTEtMDktMTQgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBSZW1vdmUgb2Jzb2xldGUgV2ViVmlld0NsaWVudCBtZXRob2RzIGZyb20g
RHVtcFJlbmRlclRyZWUuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUw
OTYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogCQkzN0RDNjc5MTE0
MEQ3RDc2MDBBQkNDREIgLyogRE9NUmFuZ2VPZlN0cmluZy5odG1sIGluIENvcHkgUmVzb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3REM2NzhGMTQwRDdEM0EwMEFC
Q0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLmh0bWwgKi87IH07CiAJCTRCRkRGRkE3MTMxNDc3NkMw
MDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJGREZGQTYxMzE0Nzc2QzAwNjFG
MjRCIC8qIEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgKi87IH07CiAJCTRCRkRG
RkE5MTMxNDc3NzcwMDYxRjI0QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QkZERkZBODEzMTQ3Nzc3
MDA2MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGUuY3BwICovOyB9OworCQk1MjBCQ0Y0
QzE0MUVCMDlFMDA5MzdFQTggLyogV2ViQXJjaGl2ZV9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIwQkNGNEExNDFFQjA5RTAwOTM3RUE4
IC8qIFdlYkFyY2hpdmVfQnVuZGxlLmNwcCAqLzsgfTsKKwkJNTIwQkNGNEQxNDFFQjA5RTAwOTM3
RUE4IC8qIFdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTIwQkNGNEIxNDFFQjA5RTAwOTM3RUE4IC8qIFdlYkFyY2hpdmUuY3BwICov
OyB9OwogCQk5MzlCQTkxNzE0MTAzNDEyMDAxQTAxQkQgLyogRGV2aWNlU2NhbGVGYWN0b3JPbkJh
Y2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzlC
QTkxNjE0MTAzNDEyMDAxQTAxQkQgLyogRGV2aWNlU2NhbGVGYWN0b3JPbkJhY2subW0gKi87IH07
CiAJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdB
OTY2REExNDBFQ0NDODAwNUVGOUI0IC8qIENoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAg
Ki87IH07CiAJCUJDMTMxODg1MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMTMx
ODg0MTE3MTE0QjYwMEI2OTcyNyAvKiBQbGF0Zm9ybVV0aWxpdGllc01hYy5tbSAqLzsgfTsKQEAg
LTE1Myw2ICsxNTUsOCBAQAogCQkzN0RDNjc4RjE0MEQ3RDNBMDBBQkNDREIgLyogRE9NUmFuZ2VP
ZlN0cmluZy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gRE9NUmFuZ2VPZlN0cmlu
Zy5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkZERkZBNjEzMTQ3NzZDMDA2
MUYyNEIgLyogSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCRkRGRkE4MTMxNDc3NzcwMDYxRjI0
QiAvKiBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUyMEJDRjRBMTQxRUIwOUUwMDkzN0VBOCAvKiBXZWJBcmNoaXZlX0J1
bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJBcmNoaXZl
X0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMEJDRjRCMTQxRUIw
OUUwMDkzN0VBOCAvKiBXZWJBcmNoaXZlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYkFyY2hpdmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
REQ3NkZBMTA0ODZBQTc2MDBEOTZCNUUgLyogVGVzdFdlYktpdEFQSSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRh
YmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gVGVzdFdlYktpdEFQSTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJOTM5QkE5MTYxNDEwMzQxMjAwMUEwMUJEIC8q
IERldmljZVNjYWxlRmFjdG9yT25CYWNrLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gRGV2aWNlU2NhbGVGYWN0b3JPbkJhY2subW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2hl
Y2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcDsgcGF0aCA9IFdURi9DaGVja2VkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY0LDYgKzM2
OCw4IEBACiAJCQkJQkM3QjYxOUExMjk5RkU5RTAwRDE3NEE0IC8qIFdLUHJlZmVyZW5jZXMuY3Bw
ICovLAogCQkJCUJDOTA5OTVEMTI1NjdCQzEwMDA4Mzc1NiAvKiBXS1N0cmluZy5jcHAgKi8sCiAJ
CQkJQkM5MDk5OTMxMjU2QUNGMTAwMDgzNzU2IC8qIFdLU3RyaW5nSlNTdHJpbmcuY3BwICovLAor
CQkJCTUyMEJDRjRBMTQxRUIwOUUwMDkzN0VBOCAvKiBXZWJBcmNoaXZlX0J1bmRsZS5jcHAgKi8s
CisJCQkJNTIwQkNGNEIxNDFFQjA5RTAwOTM3RUE4IC8qIFdlYkFyY2hpdmUuY3BwICovLAogCQkJ
KTsKIAkJCXBhdGggPSBXZWJLaXQyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU4
OSw2ICs1OTUsNyBAQAogCQkJCTkzOUJBOTE3MTQxMDM0MTIwMDFBMDFCRCAvKiBEZXZpY2VTY2Fs
ZUZhY3Rvck9uQmFjay5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3OTlBRDNBMTQxMjBBNDMwMDVF
QjBDNiAvKiBTdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmluZy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTMzREM4OTExMTQxOTUzQTMwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTIwQkNGNEQxNDFF
QjA5RTAwOTM3RUE4IC8qIFdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC02MDgsNiAr
NjE1LDcgQEAKIAkJCQkzM0JFNUFGOTEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJD
cmFzaF9CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFFREUyMjYxM0U1RTdFNzAwRTYy
RkU4IC8qIEluamVjdGVkQnVuZGxlQ29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0
Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyMEJDRjRDMTQxRUIwOUUw
MDkzN0VBOCAvKiBXZWJBcmNoaXZlX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XZWJBcmNoaXZlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2ViQXJjaGl2
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisj
aW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJL
aXQyL1dLVVJMQ0YuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dFByaXZhdGUuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKwor
c3RhdGljIGJvb2wgZGlkRmluaXNoTG9hZDsKK3N0YXRpYyBib29sIGRpZFJlY2VpdmVNZXNzYWdl
OworICAgIAorc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
V0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIGJvZHksIGNv
bnN0IHZvaWQqKQoreworICAgIGRpZFJlY2VpdmVNZXNzYWdlID0gdHJ1ZTsKKworICAgIEVYUEVD
VF9XS19TVFJFUSgiRGlkR2V0V2ViQXJjaGl2ZSIsIG1lc3NhZ2VOYW1lKTsKKyAgICBFWFBFQ1Rf
VFJVRShib2R5KTsKKyAgICBFWFBFQ1RfRVEoV0tEYXRhR2V0VHlwZUlEKCksIFdLR2V0VHlwZUlE
KGJvZHkpKTsKKyAgICBXS0RhdGFSZWYgcmVjZWl2ZWREYXRhID0gc3RhdGljX2Nhc3Q8V0tEYXRh
UmVmPihib2R5KTsKKyAgICAgICAgCisgICAgLy8gRG8gYmFzaWMgc2FuaXR5IGNoZWNrcyBvbiB0
aGUgcmV0dXJuZWQgd2ViYXJjaGl2ZS4gV2UgaGF2ZSBtb3JlIHRob3JvdWdoIGNoZWNrcyBpbiBM
YXlvdXRUZXN0cy4KKyAgICBzaXplX3Qgc2l6ZSA9IFdLRGF0YUdldFNpemUocmVjZWl2ZWREYXRh
KTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcyA9IFdLRGF0YUdldEJ5dGVzKHJlY2Vp
dmVkRGF0YSk7CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFD
cmVhdGUoMCwgYnl0ZXMsIHNpemUpKTsKKyAgICBDRlByb3BlcnR5TGlzdEZvcm1hdCBmb3JtYXQg
PSBrQ0ZQcm9wZXJ0eUxpc3RYTUxGb3JtYXRfdjFfMCB8IGtDRlByb3BlcnR5TGlzdEJpbmFyeUZv
cm1hdF92MV8wOworICAgIFJldGFpblB0cjxDRlByb3BlcnR5TGlzdFJlZj4gcHJvcGVydHlMaXN0
KEFkb3B0Q0YsIENGUHJvcGVydHlMaXN0Q3JlYXRlV2l0aERhdGEoMCwgZGF0YS5nZXQoKSwga0NG
UHJvcGVydHlMaXN0SW1tdXRhYmxlLCAmZm9ybWF0LCAwKSk7CisgICAgRVhQRUNUX1RSVUUocHJv
cGVydHlMaXN0KTsKKyAgICAKKyAgICAvLyBJdCBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LgorICAg
IEVYUEVDVF9FUShDRkRpY3Rpb25hcnlHZXRUeXBlSUQoKSwgQ0ZHZXRUeXBlSUQocHJvcGVydHlM
aXN0LmdldCgpKSk7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGRpY3Rpb25hcnkgPSAoQ0ZEaWN0aW9u
YXJ5UmVmKXByb3BlcnR5TGlzdC5nZXQoKTsKKyAgICAKKyAgICAvLyBJdCBzaG91bGQgaGF2ZSBh
IG1haW4gcmVzb3VyY2UuCisgICAgQ0ZUeXBlUmVmIG1haW5SZXNvdXJjZSA9IENGRGljdGlvbmFy
eUdldFZhbHVlKGRpY3Rpb25hcnksIENGU1RSKCJXZWJNYWluUmVzb3VyY2UiKSk7CisgICAgRVhQ
RUNUX1RSVUUobWFpblJlc291cmNlKTsKKyAgICBFWFBFQ1RfRVEoQ0ZEaWN0aW9uYXJ5R2V0VHlw
ZUlEKCksIENGR2V0VHlwZUlEKG1haW5SZXNvdXJjZSkpOworICAgIENGRGljdGlvbmFyeVJlZiBt
YWluUmVzb3VyY2VEaWN0aW9uYXJ5ID0gKENGRGljdGlvbmFyeVJlZiltYWluUmVzb3VyY2U7Cisg
ICAgCisgICAgLy8gTWFpbiByZXNvdXJjZSBzaG91bGQgaGF2ZSBhIG5vbi1lbXB0eSB1cmwgYW5k
IG1pbWUgdHlwZS4KKyAgICBDRlR5cGVSZWYgdXJsID0gQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUobWFp
blJlc291cmNlRGljdGlvbmFyeSwgQ0ZTVFIoIldlYlJlc291cmNlVVJMIikpOworICAgIEVYUEVD
VF9UUlVFKHVybCk7CisgICAgRVhQRUNUX0VRKENGU3RyaW5nR2V0VHlwZUlEKCksIENGR2V0VHlw
ZUlEKHVybCkpOworICAgIEVYUEVDVF9ORShDRlN0cmluZ0dldExlbmd0aCgoQ0ZTdHJpbmdSZWYp
dXJsKSwgMCk7CisgICAgCisgICAgQ0ZUeXBlUmVmIG1pbWVUeXBlID0gQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUobWFpblJlc291cmNlRGljdGlvbmFyeSwgQ0ZTVFIoIldlYlJlc291cmNlTUlNRVR5cGUi
KSk7CisgICAgRVhQRUNUX1RSVUUobWltZVR5cGUpOworICAgIEVYUEVDVF9FUShDRlN0cmluZ0dl
dFR5cGVJRCgpLCBDRkdldFR5cGVJRChtaW1lVHlwZSkpOworICAgIEVYUEVDVF9ORShDRlN0cmlu
Z0dldExlbmd0aCgoQ0ZTdHJpbmdSZWYpbWltZVR5cGUpLCAwKTsKKyAgICAKKyAgICAvLyBNYWlu
IHJlc291cmNlIGRpY3Rpb25hcnkgc2hvdWxkIGhhdmUgYSAiV2ViUmVzb3VyY2VEYXRhIiBrZXku
CisgICAgQ0ZUeXBlUmVmIHJlc291cmNlRGF0YSA9IENGRGljdGlvbmFyeUdldFZhbHVlKG1haW5S
ZXNvdXJjZURpY3Rpb25hcnksIENGU1RSKCJXZWJSZXNvdXJjZURhdGEiKSk7CisgICAgRVhQRUNU
X1RSVUUocmVzb3VyY2VEYXRhKTsKKyAgICBFWFBFQ1RfRVEoQ0ZEYXRhR2V0VHlwZUlEKCksIENG
R2V0VHlwZUlEKHJlc291cmNlRGF0YSkpOworICAgIAorICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gc3RyaW5nRGF0YShBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZUZyb21FeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKDAsIChDRkRhdGFSZWYpcmVzb3VyY2VEYXRhLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgp
KTsKKyAgICBFWFBFQ1RfVFJVRShzdHJpbmdEYXRhKTsKKyAgICAKKyAgICAvLyBJdCBzaG91bGQg
Y29udGFpbiB0aGUgc3RyaW5nICJTaW1wbGUgSFRNTCBmaWxlLiIgaW4gaXQuCisgICAgYm9vbCBm
b3VuZFN0cmluZyA9IENGU3RyaW5nRmluZChzdHJpbmdEYXRhLmdldCgpLCBDRlNUUigiU2ltcGxl
IEhUTUwgZmlsZS4iKSwgMCkubG9jYXRpb24gIT0ga0NGTm90Rm91bmQ7CisgICAgRVhQRUNUX1RS
VUUoZm91bmRTdHJpbmcpOworfQorCitzdGF0aWMgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZUNsaWVu
dChXS0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNs
aWVudCBpbmplY3RlZEJ1bmRsZUNsaWVudDsKKyAgICBtZW1zZXQoJmluamVjdGVkQnVuZGxlQ2xp
ZW50LCAwLCBzaXplb2YoaW5qZWN0ZWRCdW5kbGVDbGllbnQpKTsKKyAgICBpbmplY3RlZEJ1bmRs
ZUNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSA9IGRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlOworCisgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5k
bGVDbGllbnQoY29udGV4dCwgJmluamVjdGVkQnVuZGxlQ2xpZW50KTsKK30KKworc3RhdGljIHZv
aWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmLCBXS1R5
cGVSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIGRpZEZpbmlzaExvYWQgPSB0cnVlOworfQorCitU
RVNUKFdlYktpdDIsIFdlYkFyY2hpdmUpCit7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVm
PiBjb250ZXh0ID0gYWRvcHRXSyhVdGlsOjpjcmVhdGVDb250ZXh0Rm9ySW5qZWN0ZWRCdW5kbGVU
ZXN0KCJXZWJBcmNoaXZlVGVzdCIpKTsKKyAgICBzZXRJbmplY3RlZEJ1bmRsZUNsaWVudChjb250
ZXh0LmdldCgpKTsKKworICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkp
OworCisgICAgV0tQYWdlTG9hZGVyQ2xpZW50IGxvYWRlckNsaWVudDsKKyAgICBtZW1zZXQoJmxv
YWRlckNsaWVudCwgMCwgc2l6ZW9mKGxvYWRlckNsaWVudCkpOworICAgIAorICAgIGxvYWRlckNs
aWVudC52ZXJzaW9uID0ga1dLUGFnZUxvYWRlckNsaWVudEN1cnJlbnRWZXJzaW9uOworICAgIGxv
YWRlckNsaWVudC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBkaWRGaW5pc2hMb2FkRm9yRnJhbWU7
CisgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCh3ZWJWaWV3LnBhZ2UoKSwgJmxvYWRlckNs
aWVudCk7CisKKyAgICBXS1BhZ2VMb2FkVVJMKHdlYlZpZXcucGFnZSgpLCBhZG9wdFdLKFV0aWw6
OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKS5nZXQoKSk7CisKKyAgICAv
LyBXYWl0IHRpbGwgdGhlIGxvYWQgZmluaXNoZXMgYmVmb3JlIGdldHRpbmcgdGhlIHdlYiBhcmNo
aXZlLgorICAgIFV0aWw6OnJ1bigmZGlkRmluaXNoTG9hZCk7CisgICAgV0tDb250ZXh0UG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKGNvbnRleHQuZ2V0KCksIFV0aWw6OnRvV0soIkdldFdlYkFy
Y2hpdmUiKS5nZXQoKSwgd2ViVmlldy5wYWdlKCkpOworCisgICAgLy8gV2FpdCB0aWxsIHdlIGhh
dmUgcmVjZWl2ZWQgdGhlIHdlYiBhcmNoaXZlIGZyb20gdGhlIGluamVjdGVkIGJ1bmRsZS4KKyAg
ICBVdGlsOjpydW4oJmRpZFJlY2VpdmVNZXNzYWdlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dlYkFy
Y2hpdmVfQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvV2ViQXJjaGl2ZV9CdW5kbGUuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dlYkFyY2hpdmVfQnVuZGxlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJJbmplY3RlZEJ1bmRs
ZVRlc3QuaCIKKworI2luY2x1ZGUgIlBsYXRmb3JtVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0J1bmRsZVBhZ2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlRnJhbWUuaD4K
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBXZWJBcmNoaXZlVGVzdCA6IHB1
YmxpYyBJbmplY3RlZEJ1bmRsZVRlc3QgeworcHVibGljOgorICAgIFdlYkFyY2hpdmVUZXN0KGNv
bnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoV0tCdW5kbGVSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
LCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpOworfTsKKworc3RhdGljIEluamVjdGVkQnVuZGxlVGVz
dDo6UmVnaXN0ZXI8V2ViQXJjaGl2ZVRlc3Q+IHJlZ2lzdHJhcigiV2ViQXJjaGl2ZVRlc3QiKTsK
KworV2ViQXJjaGl2ZVRlc3Q6OldlYkFyY2hpdmVUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVu
dGlmaWVyKQorICAgIDogSW5qZWN0ZWRCdW5kbGVUZXN0KGlkZW50aWZpZXIpCit7Cit9CisKK3Zv
aWQgV2ViQXJjaGl2ZVRlc3Q6OmRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwg
V0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBib2R5KQoreworICAgIGlmICghV0tT
dHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkdldFdlYkFyY2hpdmUiKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKFdLR2V0VHlwZUlEKGJvZHkpICE9IFdLQnVuZGxl
UGFnZUdldFR5cGVJRCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShzdGF0aWNfY2FzdDxXS0J1bmRs
ZVBhZ2VSZWY+KGJvZHkpKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShidW5kbGUsIFV0aWw6OnRvV0soIkRpZEdldFdlYkFyY2hpdmUi
KS5nZXQoKSwgYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVdlYkFyY2hpdmUoZnJhbWUpKS5nZXQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qCShyZXZpc2lvbiA5NTA5NikKKysr
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zODksMTkgKzM4OSwxOSBAQAogCQkJTmFtZT0id2luIgogCQkJPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFpbi5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuXEluamVj
dGVkQnVuZGxlQ29udHJvbGxlcldpbi5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cUGxhdGZvcm1VdGlsaXRpZXNXaW4uY3BwIgorCQkJCVJlbGF0
aXZlUGF0aD0iLlxtYWluLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLlxQbGF0Zm9ybVdlYlZpZXdXaW4uY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0i
LlxQbGF0Zm9ybVV0aWxpdGllc1dpbi5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUK
LQkJCQlSZWxhdGl2ZVBhdGg9Ii5cSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyV2luLmNwcCIKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cUGxhdGZvcm1XZWJWaWV3V2luLmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQpAQCAtNTQwLDYgKzU0MCwxMCBAQAogCQkJCQk+CiAJCQkJPC9GaWxlPgog
CQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVGVzdHNcV2ViS2l0MlxXZWJBcmNoaXZl
LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFRlc3RzXFdlYktpdDJcV0tQcmVmZXJlbmNlcy5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0QVBJSW5qZWN0ZWRCdW5k
bGUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJL
aXRBUElJbmplY3RlZEJ1bmRsZS52Y3Byb2oJKHJldmlzaW9uIDk1MDk2KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS93aW4vVGVzdFdlYktpdEFQSUluamVjdGVkQnVuZGxlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDMxLDYgKzQzMSwxMCBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFRlc3Rz
XFdlYktpdDJcUmVzcG9uc2l2ZW5lc3NUaW1lckRvZXNudEZpcmVFYXJseV9CdW5kbGUuY3BwIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVGVz
dHNcV2ViS2l0MlxXZWJBcmNoaXZlX0J1bmRsZS5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CiAJ
CQk8L0ZpbHRlcj4KIAkJPC9GaWx0ZXI+CiAJCTxGaWxlCg==
</data>
<flag name="review"
          id="104031"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>