<?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>127694</bug_id>
          
          <creation_ts>2014-01-27 11:38:30 -0800</creation_ts>
          <short_desc>Upstream iOS old-run-webkit-tests for use with DumpRenderTree in the iOS Simulator</short_desc>
          <delta_ts>2014-02-12 16:33:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</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="David Farler">dfarler</reporter>
          <assigned_to name="David Farler">dfarler</assigned_to>
          <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>972495</commentid>
    <comment_count>0</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-01-27 11:38:30 -0800</bug_when>
    <thetext>As a short path to get simulator layout tests up and running, copy necessary mechanisms for running DumpRenderTree in the simulator to WebKitTestRunner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979580</commentid>
    <comment_count>1</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-02-11 13:38:34 -0800</bug_when>
    <thetext>Retitling - This bug will focus on just upstreaming ORWT and getting it to work with DumpRenderTree. I&apos;ll use a separate bug to alter ORWT to work with WebKitTestRunner and WebKit2, since there will be related changes in WTR itself to open FIFOs, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>979870</commentid>
    <comment_count>2</comment_count>
      <attachid>223972</attachid>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-02-12 08:35:33 -0800</bug_when>
    <thetext>Created attachment 223972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980038</commentid>
    <comment_count>3</comment_count>
      <attachid>223972</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-02-12 15:04:56 -0800</bug_when>
    <thetext>Comment on attachment 223972
Patch

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

&gt; Tools/Scripts/old-run-webkit-tests:140
&gt; +my $expectedResultsDir = &apos;&apos;;  # PLATFORM_IOS

Can the variable have iOS in to remove the need for the comment?

&gt; Tools/Scripts/old-run-webkit-tests:227
&gt; +my $haveInstalledDumpRenderTreeAppOnce; # PLATFORM_IOS

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980043</commentid>
    <comment_count>4</comment_count>
      <attachid>223972</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-02-12 15:20:36 -0800</bug_when>
    <thetext>Comment on attachment 223972
Patch

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

r=me, but consider comments before landing.

&gt; Tools/DumpRenderTree/ios/PerlSupport/Makefile:54
&gt; -OS_X_SDK = $(if $(shell xcrun --show-sdk-path -sdk &quot;macosx&quot; 2&gt; /dev/null),macosx, /)
&gt; -
&gt;  $(DYLIB): DumpRenderTreeSupport.c $(WRAPPER)
&gt; -	TOOLCHAINS= xcrun -sdk $(OS_X_SDK) cc -g -dynamiclib -o $(DYLIB) `$(PERL) -MExtUtils::Embed -eperl_inc` `$(PERL) -MExtUtils::Embed -e&apos;my $$opts = ldopts(0); $$opts =~ s/-arch [^ ]*( |$$)//g; print $$opts, &quot; -arch &quot;, join(&quot; -arch &quot;, split(&quot; &quot;,$$ENV{ARCHS}))&apos;` $^
&gt; +	xcrun -sdk macosx clang -g -dynamiclib -o $(DYLIB) `$(PERL) -MExtUtils::Embed -eperl_inc` `$(PERL) -MExtUtils::Embed -e&apos;my $$opts = ldopts(0); $$opts =~ s/-arch [^ ]*( |$$)//g; print $$opts, &quot; -arch &quot;, join(&quot; -arch &quot;, split(&quot; &quot;,$$ENV{ARCHS}))&apos;` $^

I guess we assume a macosx SDK is always installed now?  This had a workaround for building when no macosx SDK was installed.

&gt; Tools/DumpRenderTree/ios/PerlSupport/Makefile:65
&gt; -	(cd IPhoneSimulatorNotification &amp;&amp; \
&gt; -		SDKROOT=$(OS_X_SDK) TOOLCHAINS= $(PERL) Makefile.PL INSTALL_BASE=$(OUTPUT_DIR) &amp;&amp; \
&gt; -		make SDKROOT=$(OS_X_SDK) TOOLCHAINS= &amp;&amp; \
&gt; -		make test &amp;&amp; \
&gt; -		make install &amp;&amp; \
&gt; -		make realclean)
&gt; +	cd IPhoneSimulatorNotification &amp;&amp; SDKROOT=iphonesimulator perl Makefile.PL INSTALL_BASE=$(OUTPUT_DIR) 
&gt; +	make -C IPhoneSimulatorNotification test
&gt; +	make -C IPhoneSimulatorNotification install
&gt; +	make -C IPhoneSimulatorNotification realclean

The goal of putting the &apos;cd&apos; command inside a subshell was so that the Makefile would not stay in that subdirectory after the command was done.

Do we need a &quot;cd ..&quot; after the last make command to restore that behavior?

&gt; Tools/Scripts/old-run-webkit-tests:230
&gt;  my @macPlatforms = (&quot;mac-leopard&quot;, &quot;mac-snowleopard&quot;, &quot;mac-lion&quot;, &quot;mac&quot;);

I think this should be:

my @macPlatforms = (&quot;mac-mountainlion&quot;, &quot;mac&quot;);

&gt; Tools/Scripts/old-run-webkit-tests:234
&gt; +    # FIXME: No support for iphone-hardware yet.

We could remove this FIXME comment.

&gt; Tools/Scripts/old-run-webkit-tests:314
&gt; +  -e|--expected-results           Specify an alternate directory for expected results (PLATFORM_IOS)

The reason for the &quot;PLATFORM_IOS&quot; was to clearly demarcate any iOS-specific code.  Not sure if it&apos;s worth keeping these comments around any longer, or changing it to &quot;(iOS-only)&quot; in this case.

&gt; Tools/Scripts/old-run-webkit-tests:365
&gt; +    &apos;expected-results|e=s&apos; =&gt; \$expectedResultsDir,  # PLATFORM_IOS 

You can just remove the &quot;# PLATFORM_IOS&quot; comment here.

&gt; Tools/Scripts/old-run-webkit-tests:1261
&gt; +  # Don&apos;t use run-safari, since it tries to load iOS frameworks in desktop Safari.

Nit:  s/desktop/Mac/

&gt; Tools/Scripts/old-run-webkit-tests:1458
&gt; +    system &quot;osascript&quot;, &quot;-e&quot;, &quot;tell application \&quot;iPhone Simulator\&quot; to quit&quot;;

From this date henceforth, I disavow all knowledge of the author of this line of code.

&gt; Tools/Scripts/old-run-webkit-tests:1928
&gt; +        push @extraPlatforms, qw(mac-snowleopard mac);

This should be:

    push @extraPlatforms, qw(mac-mountainlion mac);

Or even better:

    push @extraPlatforms, @macPlatforms;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980053</commentid>
    <comment_count>5</comment_count>
      <attachid>223972</attachid>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-02-12 15:41:44 -0800</bug_when>
    <thetext>Comment on attachment 223972
Patch

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

&gt;&gt; Tools/DumpRenderTree/ios/PerlSupport/Makefile:54
&gt;&gt; +	xcrun -sdk macosx clang -g -dynamiclib -o $(DYLIB) `$(PERL) -MExtUtils::Embed -eperl_inc` `$(PERL) -MExtUtils::Embed -e&apos;my $$opts = ldopts(0); $$opts =~ s/-arch [^ ]*( |$$)//g; print $$opts, &quot; -arch &quot;, join(&quot; -arch &quot;, split(&quot; &quot;,$$ENV{ARCHS}))&apos;` $^
&gt; 
&gt; I guess we assume a macosx SDK is always installed now?  This had a workaround for building when no macosx SDK was installed.

Yes, I hope we can assume that, since you need Xcode to target the simulator and Xcode always comes with the OS X SDK. `xcrun -sdk / -find clang` points to /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.9.xctoolchain/usr/bin/clang.

&gt;&gt; Tools/DumpRenderTree/ios/PerlSupport/Makefile:65
&gt;&gt; +	make -C IPhoneSimulatorNotification realclean
&gt; 
&gt; The goal of putting the &apos;cd&apos; command inside a subshell was so that the Makefile would not stay in that subdirectory after the command was done.
&gt; 
&gt; Do we need a &quot;cd ..&quot; after the last make command to restore that behavior?

make -C will always return to the originating caller&apos;s cwd. Only if you specify multiple -C options in one invocation are they considered relative to each other.

&gt;&gt; Tools/Scripts/old-run-webkit-tests:1458
&gt;&gt; +    system &quot;osascript&quot;, &quot;-e&quot;, &quot;tell application \&quot;iPhone Simulator\&quot; to quit&quot;;
&gt; 
&gt; From this date henceforth, I disavow all knowledge of the author of this line of code.

# David Kilzer (ddkilzer) wuz here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980078</commentid>
    <comment_count>6</comment_count>
    <who name="David Farler">dfarler</who>
    <bug_when>2014-02-12 16:33:19 -0800</bug_when>
    <thetext>Committed r163998: &lt;http://trac.webkit.org/changeset/163998&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223972</attachid>
            <date>2014-02-12 08:35:33 -0800</date>
            <delta_ts>2014-02-12 15:41:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127694-20140212083535.patch</filename>
            <type>text/plain</type>
            <size>25534</size>
            <attacher name="David Farler">dfarler</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzODA3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTIzYTBkYzMxYWYzMmUzZGFjOTI2YmQ3NTY1YTVkZTM2
YmJhZTY5YS4uNTA1MzNlNmNkOTQ3NGVkYTM0NTUxZGIyYmNjNTgwYTU1MWNiZWZjYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDE0LTAyLTEyICBEYXZpZCBGYXJsZXIgIDxkZmFybGVyQGFwcGxlLmNvbT4KKworICAg
ICAgICBVcHN0cmVhbSBpT1Mgb2xkLXJ1bi13ZWJraXQtdGVzdHMgZm9yIHVzZSB3aXRoIER1bXBS
ZW5kZXJUcmVlIGluIHRoZSBpT1MgU2ltdWxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGEgc2hvcnQtdGVybSBlZmZvcnQgdG8gZ2V0
IGxheW91dCB0ZXN0cyB3b3JraW5nIGluIHRoZSBpT1Mgc2ltdWxhdG9yIGFnYWluLgorCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgUGFzcyBQTEFURk9STV9OQU1FIHRvIHRoZSBtYWtlZmlsZS4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9pb3MvUGVybFN1cHBvcnQvTWFrZWZpbGU6CisgICAgICAgIENs
ZWFudXAuCisgICAgICAgICogU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0czoKKyAgICAgICAg
QWRkZWQgZnVuY3Rpb25zIGFuZCBzb21lIGV4Y2VwdGlvbnMgZm9yIHRoZSBzaW11bGF0b3IuCisg
ICAgICAgIChpbnN0YWxsQW5kTGF1bmNoRHVtcFJlbmRlclRyZWVBcHBVc2luZ05vdGlmaWNhdGlv
bik6CisgICAgICAgIChvcGVuSVBob25lU2ltdWxhdG9yKToKKyAgICAgICAgKHF1aXREdW1wUmVu
ZGVyVHJlZUFwcFVzaW5nTm90aWZpY2F0aW9uKToKKyAgICAgICAgKHF1aXRJUGhvbmVTaW11bGF0
b3IpOgorICAgICAgICAoc2ltdWxhdG9yU2Vzc2lvblVVSUQpOgorICAgICAgICAob3BlbkRpZmZU
b29sKToKKyAgICAgICAgKGJ1aWxkRHVtcFRvb2wpOgorICAgICAgICAob3BlbkR1bXBUb29sKToK
KyAgICAgICAgKGNsb3NlRHVtcFRvb2wpOgorICAgICAgICAoZHVtcFRvb2xEaWRDcmFzaCk6Cisg
ICAgICAgIChleHBlY3RlZERpcmVjdG9yeUZvclRlc3QpOgorICAgICAgICAoYnVpbGRQbGF0Zm9y
bVJlc3VsdEhpZXJhcmNoeSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJzLnBtOgorICAg
ICAgICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3Igb2xkLXJ1bi13ZWJraXQtdGVzdHMuCisgICAgICAg
IChkZXRlcm1pbmVJUGhvbmVTaW11bGF0b3JWZXJzaW9uKToKKyAgICAgICAgKGlQaG9uZVNpbXVs
YXRvclZlcnNpb24pOgorCiAyMDE0LTAyLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR0xJQl0gQWRkIEdVbmlxdWVPdXRQdHIgYW5kIHVz
ZSBpdCBpbnN0ZWFkIG9mIEdPd25QdHIKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhh
MDgwMWQ1M2M3NzI0YmFlYWUyNjQ4YTczYjhlMDM1YTY4ODAzYTQuLjY3ZTBmNmZkY2U1YWEzOGMy
M2VhYjZiYTY4ZjFkZmMzMjQyNzAzOGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
ODAwLDcgKzgwMCw3IEBACiAvKiBCZWdpbiBQQlhMZWdhY3lUYXJnZXQgc2VjdGlvbiAqLwogCQlB
MTE1OEQ2MjE4OTI3QUYwMDA4OEMxN0IgLyogUGVybCBTdXBwb3J0ICovID0gewogCQkJaXNhID0g
UEJYTGVnYWN5VGFyZ2V0OwotCQkJYnVpbGRBcmd1bWVudHNTdHJpbmcgPSAiJChBQ1RJT04pIjsK
KwkJCWJ1aWxkQXJndW1lbnRzU3RyaW5nID0gIiQoQUNUSU9OKSBQTEFURk9STV9OQU1FPSQoUExB
VEZPUk1fTkFNRSkiOwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEExMTU4RDYzMTg5MjdB
RjAwMDg4QzE3QiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWExlZ2FjeVRhcmdl
dCAiUGVybCBTdXBwb3J0IiAqLzsKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9QZXJsU3VwcG9ydC9NYWtlZmlsZSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2lvcy9QZXJsU3VwcG9ydC9NYWtlZmlsZQppbmRleCBlNDY3ZDZiZjBm
NzNhYjBkMzZiYTU2ZTAzMTU0YzIwMDhkODQwM2JmLi5iZTA5YWFmMGUxOWVkY2FjMGIzNzkwNGIw
ODVmMTdkZGFhOTVjOTFlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9pb3MvUGVy
bFN1cHBvcnQvTWFrZWZpbGUKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL1BlcmxTdXBw
b3J0L01ha2VmaWxlCkBAIC0yMSwxMCArMjEsMTAgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAogCi1pZm5lcSAoJChmaWx0ZXIgaXBob25lb3MgaXBob25lc2ltdWxhdG9yLCAkKFBM
QVRGT1JNX05BTUUpKSwgKQoraWZuZXEgKCwkKGZpbHRlciBpcGhvbmVzaW11bGF0b3IsICQoUExB
VEZPUk1fTkFNRSkpKQogCi1DT05GSUdVUkFUSU9OX0JVSUxEX0RJUiA/PSAuCi1PVVRQVVRfRElS
PSQoQ09ORklHVVJBVElPTl9CVUlMRF9ESVIpCitUQVJHRVRfQlVJTERfRElSID89IC4KK09VVFBV
VF9ESVI9JChUQVJHRVRfQlVJTERfRElSKQogCiBXUkFQUEVSX0RJUj0kKE9VVFBVVF9ESVIpL0Rl
cml2ZWRTb3VyY2VzL0R1bXBSZW5kZXJUcmVlCiBpZm5lcSAoJChQTEFURk9STV9OQU1FKSxpcGhv
bmVvcykKQEAgLTQwLDI3ICs0MCw2IEBAIERVTVBSRU5ERVJUUkVFPSQoT1VUUFVUX0RJUikvRHVt
cFJlbmRlclRyZWUuYXBwL0R1bXBSZW5kZXJUcmVlCiAjIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGFy
ZCBjb2RlIHRoZXNlIGFyY2hpdGVjdHVyZXMuIFNlZSA8cmRhcjovL3Byb2JsZW0vOTA0NzE3MT4g
Zm9yIG1vcmUgZGlzY3Vzc2lvbiBvbiB3aHkgd2UgaGF2ZSB0by4KIEFSQ0hTPWkzODYgeDg2XzY0
CiAKLU9TWF9WRVJTSU9OID0gJChzaGVsbCBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IGN1dCAt
ZC4gLWYgMikKLWlmZXEgIiQoT1NYX1ZFUlNJT04pIiAiNSIKLUdFTkVSQVRFX1dSQVBQRVIgPSBZ
RVMKLWVuZGlmCi1pZmVxICIkKE9TWF9WRVJTSU9OKSIgIjYiCi1HRU5FUkFURV9XUkFQUEVSID0g
Tk8KLWVuZGlmCi0KLWlmZXEgIiQoR0VORVJBVEVfV1JBUFBFUikiICJZRVMiCi0KLVNXSUc9L3Vz
ci9iaW4vc3dpZwotCi1hbGw6ICQoRFlMSUIpICQoUEVSTF9NT0RVTEUpCi0KLSQoV1JBUFBFUikg
JChQRVJMX01PRFVMRSk6IER1bXBSZW5kZXJUcmVlU3VwcG9ydC5jICQoRFVNUFJFTkRFUlRSRUUp
Ci0JbWtkaXIgLXAgJChXUkFQUEVSX0RJUikKLQkkKFNXSUcpIC1vICQoV1JBUFBFUikgLW91dGRp
ciAkKE9VVFBVVF9ESVIpIC1wZXJsIC1tb2R1bGUgRHVtcFJlbmRlclRyZWVTdXBwb3J0ICQ8Ci0K
LQotZWxzZQotCiAKIGFsbDogJChEWUxJQikgJChQRVJMX01PRFVMRSkKIApAQCAtNzEsMTMgKzUw
LDggQEAgJChXUkFQUEVSKTogRHVtcFJlbmRlclRyZWVTdXBwb3J0X3dyYXBQcmVnZW5lcmF0ZWQu
YyAkKERVTVBSRU5ERVJUUkVFKQogJChQRVJMX01PRFVMRSk6IER1bXBSZW5kZXJUcmVlU3VwcG9y
dFByZWdlbmVyYXRlZC5wbSAkKERVTVBSRU5ERVJUUkVFKQogCWNwIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydFByZWdlbmVyYXRlZC5wbSAkKFBFUkxfTU9EVUxFKQogCi0KLWVuZGlmCi0KLU9TX1hfU0RL
ID0gJChpZiAkKHNoZWxsIHhjcnVuIC0tc2hvdy1zZGstcGF0aCAtc2RrICJtYWNvc3giIDI+IC9k
ZXYvbnVsbCksbWFjb3N4LCAvKQotCiAkKERZTElCKTogRHVtcFJlbmRlclRyZWVTdXBwb3J0LmMg
JChXUkFQUEVSKQotCVRPT0xDSEFJTlM9IHhjcnVuIC1zZGsgJChPU19YX1NESykgY2MgLWcgLWR5
bmFtaWNsaWIgLW8gJChEWUxJQikgYCQoUEVSTCkgLU1FeHRVdGlsczo6RW1iZWQgLWVwZXJsX2lu
Y2AgYCQoUEVSTCkgLU1FeHRVdGlsczo6RW1iZWQgLWUnbXkgJCRvcHRzID0gbGRvcHRzKDApOyAk
JG9wdHMgPX4gcy8tYXJjaCBbXiBdKiggfCQkKS8vZzsgcHJpbnQgJCRvcHRzLCAiIC1hcmNoICIs
IGpvaW4oIiAtYXJjaCAiLCBzcGxpdCgiICIsJCRFTlZ7QVJDSFN9KSknYCAkXgorCXhjcnVuIC1z
ZGsgbWFjb3N4IGNsYW5nIC1nIC1keW5hbWljbGliIC1vICQoRFlMSUIpIGAkKFBFUkwpIC1NRXh0
VXRpbHM6OkVtYmVkIC1lcGVybF9pbmNgIGAkKFBFUkwpIC1NRXh0VXRpbHM6OkVtYmVkIC1lJ215
ICQkb3B0cyA9IGxkb3B0cygwKTsgJCRvcHRzID1+IHMvLWFyY2ggW14gXSooIHwkJCkvL2c7IHBy
aW50ICQkb3B0cywgIiAtYXJjaCAiLCBqb2luKCIgLWFyY2ggIiwgc3BsaXQoIiAiLCQkRU5We0FS
Q0hTfSkpJ2AgJF4KIAogSVBIT05FX1NJTVVMQVRPUl9OT1RJRkNBVElPTl9CVU5ETEU9JChPVVRQ
VVRfRElSKS9saWIvcGVybDUvZGFyd2luLXRocmVhZC1tdWx0aS0ybGV2ZWwvYXV0by9JUGhvbmVT
aW11bGF0b3JOb3RpZmljYXRpb24vSVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLmJ1bmRsZQog
SVBIT05FX1NJTVVMQVRPUl9OT1RJRkNBVElPTl9NT0RVTEU9JChPVVRQVVRfRElSKS9saWIvcGVy
bDUvZGFyd2luLXRocmVhZC1tdWx0aS0ybGV2ZWwvSVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9u
LnBtCkBAIC04NSwxMiArNTksMTAgQEAgSVBIT05FX1NJTVVMQVRPUl9OT1RJRkNBVElPTl9NT0RV
TEU9JChPVVRQVVRfRElSKS9saWIvcGVybDUvZGFyd2luLXRocmVhZC1tdWx0aS0KIGFsbDogJChJ
UEhPTkVfU0lNVUxBVE9SX05PVElGQ0FUSU9OX0JVTkRMRSkgJChJUEhPTkVfU0lNVUxBVE9SX05P
VElGQ0FUSU9OX01PRFVMRSkKIAogJChJUEhPTkVfU0lNVUxBVE9SX05PVElGQ0FUSU9OX0JVTkRM
RSkgJChJUEhPTkVfU0lNVUxBVE9SX05PVElGQ0FUSU9OX01PRFVMRSk6IElQaG9uZVNpbXVsYXRv
ck5vdGlmaWNhdGlvbi9JUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24ueHMgSVBob25lU2ltdWxh
dG9yTm90aWZpY2F0aW9uL01ha2VmaWxlLlBMIElQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbi9s
aWIvSVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLnBtIElQaG9uZVNpbXVsYXRvck5vdGlmaWNh
dGlvbi9wcHBvcnQuaCBJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24vdC9JUGhvbmVTaW11bGF0
b3JOb3RpZmljYXRpb24udAotCShjZCBJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24gJiYgXAot
CQlTREtST09UPSQoT1NfWF9TREspIFRPT0xDSEFJTlM9ICQoUEVSTCkgTWFrZWZpbGUuUEwgSU5T
VEFMTF9CQVNFPSQoT1VUUFVUX0RJUikgJiYgXAotCQltYWtlIFNES1JPT1Q9JChPU19YX1NESykg
VE9PTENIQUlOUz0gJiYgXAotCQltYWtlIHRlc3QgJiYgXAotCQltYWtlIGluc3RhbGwgJiYgXAot
CQltYWtlIHJlYWxjbGVhbikKKwljZCBJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24gJiYgU0RL
Uk9PVD1pcGhvbmVzaW11bGF0b3IgcGVybCBNYWtlZmlsZS5QTCBJTlNUQUxMX0JBU0U9JChPVVRQ
VVRfRElSKSAKKwltYWtlIC1DIElQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbiB0ZXN0CisJbWFr
ZSAtQyBJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24gaW5zdGFsbAorCW1ha2UgLUMgSVBob25l
U2ltdWxhdG9yTm90aWZpY2F0aW9uIHJlYWxjbGVhbgogCSMgVG91Y2ggdGhlIGJ1aWx0IHBlcmwg
bW9kdWxlIGFuZCBpdHMgYnVuZGxlIHNpbmNlIElQaG9uZVNpbXVsYXRvck5vdGlmaWNhdGlvbi54
cyBhbmQgTWFrZWZpbGUuUEwgYWx3YXlzIGhhdmUgbmV3ZXIgZGF0ZXMgYWZ0ZXIgYnVpbGRpbmcu
CiAJdG91Y2ggJChJUEhPTkVfU0lNVUxBVE9SX05PVElGQ0FUSU9OX0JVTkRMRSkgJChJUEhPTkVf
U0lNVUxBVE9SX05PVElGQ0FUSU9OX01PRFVMRSkKIApAQCAtMTA4LDYgKzgwLDEwIEBAIGluc3Rh
bGw6IGFsbAogCiBlbHNlCiAKLWFsbCBjbGVhbiBpbnN0YWxsIGluc3RhbGxoZHJzIGluc3RhbGxz
cmM6CitpbnN0YWxsOgorCithbGw6CisKK2NsZWFuOgogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cyBiL1Rvb2xzL1NjcmlwdHMvb2xkLXJ1bi13
ZWJraXQtdGVzdHMKaW5kZXggYzQ0NmFhYTY0MDQwOWM0MGRmNjEyMzJjZmEwODY2MTc5ZTI0Yzc1
NS4uNGQzYjYzNjBiMzVkMjNlZWJjMmI2YTA3MDM3MDIyNWViMzBmNjdlZSAxMDA3NTUKLS0tIGEv
VG9vbHMvU2NyaXB0cy9vbGQtcnVuLXdlYmtpdC10ZXN0cworKysgYi9Ub29scy9TY3JpcHRzL29s
ZC1ydW4td2Via2l0LXRlc3RzCkBAIC02Myw2ICs2Myw3IEBAIHVzZSBGaWxlOjpTcGVjOjpGdW5j
dGlvbnM7CiB1c2UgRmlsZTo6VGVtcDsKIHVzZSBGaW5kQmluOwogdXNlIEdldG9wdDo6TG9uZzsK
K3VzZSBJTzo6SGFuZGxlOwogdXNlIElQQzo6T3BlbjI7CiB1c2UgSVBDOjpPcGVuMzsKIHVzZSBN
SU1FOjpCYXNlNjQ7CkBAIC0xMjYsMTEgKzEyNywxNyBAQCBzdWIgdG9VUkwoJCk7CiBzdWIgdG9X
aW5kb3dzUGF0aCgkKTsKIHN1YiB2YWxpZGF0ZVNraXBwZWRBcmcoJCQ7JCk7CiBzdWIgd3JpdGVU
b0ZpbGUoJCQpOworc3ViIGluc3RhbGxBbmRMYXVuY2hEdW1wUmVuZGVyVHJlZUFwcFVzaW5nTm90
aWZpY2F0aW9uKCQkKTsKK3N1YiBvcGVuSVBob25lU2ltdWxhdG9yKCk7CitzdWIgcXVpdER1bXBS
ZW5kZXJUcmVlQXBwVXNpbmdOb3RpZmljYXRpb24oKTsKK3N1YiBxdWl0SVBob25lU2ltdWxhdG9y
KCk7CitzdWIgc2ltdWxhdG9yU2Vzc2lvblVVSUQoKTsKIAogIyBBcmd1bWVudCBoYW5kbGluZwog
bXkgJGFkZFBsYXRmb3JtRXhjZXB0aW9ucyA9IDA7CiBteSBAYWRkaXRpb25hbFBsYXRmb3JtRGly
ZWN0b3JpZXMgPSAoKTsKIG15ICRjb21wbGV4VGV4dCA9IDA7CitteSAkZXhwZWN0ZWRSZXN1bHRz
RGlyID0gJyc7ICAjIFBMQVRGT1JNX0lPUwogbXkgJGV4aXRBZnRlck5GYWlsdXJlcyA9IDA7CiBt
eSAkZXhpdEFmdGVyTkNyYXNoZXNPclRpbWVvdXRzID0gMDsKIG15ICRnZW5lcmF0ZU5ld1Jlc3Vs
dHMgPSBpc0FwcGxlTWFjV2ViS2l0KCkgPyAxIDogMDsKQEAgLTIxNywxMCArMjI0LDM2IEBAIG15
ICVwcmV2aW91c1dpbmRvd3NQb3N0TW9ydGVtRGVidWdnZXJWYWx1ZXM7CiAKIG15ICRyZWFsUGxh
dGZvcm07CiAKK215ICRoYXZlSW5zdGFsbGVkRHVtcFJlbmRlclRyZWVBcHBPbmNlOyAjIFBMQVRG
T1JNX0lPUworCitteSBAaVBob25lU2ltdWxhdG9yUGxhdGZvcm1zID0gcXcoaXBob25lLXNpbXVs
YXRvcik7CiBteSBAbWFjUGxhdGZvcm1zID0gKCJtYWMtbGVvcGFyZCIsICJtYWMtc25vd2xlb3Bh
cmQiLCAibWFjLWxpb24iLCAibWFjIik7CiBteSBAd2luUGxhdGZvcm1zID0gKCJ3aW4teHAiLCAi
d2luLXZpc3RhIiwgIndpbi03c3AwIiwgIndpbiIpOwogCi1pZiAoaXNBcHBsZU1hY1dlYktpdCgp
KSB7CitpZiAoaXNJT1NXZWJLaXQoKSkgeworICAgICMgRklYTUU6IE5vIHN1cHBvcnQgZm9yIGlw
aG9uZS1oYXJkd2FyZSB5ZXQuCisgICAgbXkgJHNpbXVsYXRvclZlcnNpb25IYXNoID0gaVBob25l
U2ltdWxhdG9yVmVyc2lvbigpOworICAgIG15ICRzaW11bGF0b3JWZXJzaW9uID0gInYiIC4gJHNp
bXVsYXRvclZlcnNpb25IYXNoLT57bWFqb3J9IC4gIi4iIC4gJHNpbXVsYXRvclZlcnNpb25IYXNo
LT57bWlub3J9OworCisgICAgc3ViIHZlcnNpb25Gcm9tUGxhdGZvcm1TdWZmaXggeworICAgICAg
ICBteSAkdmVyc2lvbiA9IHNoaWZ0OworICAgICAgICAkdmVyc2lvbiA9fiBzL14tLy87CisgICAg
ICAgICR2ZXJzaW9uID1+IHMvLS8uL2c7CisgICAgICAgIHJldHVybiAidiR2ZXJzaW9uIjsKKyAg
ICB9CisKKyAgICBmb3JlYWNoIG15ICRpcGhvbmVTaW11bGF0b3JQbGF0Zm9ybSAocmV2ZXJzZSBA
aVBob25lU2ltdWxhdG9yUGxhdGZvcm1zKSB7CisgICAgICAgIGlmICghJHBsYXRmb3JtKSB7Cisg
ICAgICAgICAgICAkcGxhdGZvcm0gPSAkaXBob25lU2ltdWxhdG9yUGxhdGZvcm07CisgICAgICAg
ICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgIGRpZSAiSW52YWxpZCBwbGF0Zm9ybTogJGlw
aG9uZVNpbXVsYXRvclBsYXRmb3JtIiB1bmxlc3MgJGlwaG9uZVNpbXVsYXRvclBsYXRmb3JtID1+
IC9eaXBob25lLXNpbXVsYXRvcigoLVswLTldKyl7Mn0pJC87CisgICAgICAgIGxhc3QgaWYgZXZh
bCh2ZXJzaW9uRnJvbVBsYXRmb3JtU3VmZml4KCQxKSAuICIgbHQgJHNpbXVsYXRvclZlcnNpb24i
KTsKKyAgICAgICAgJHBsYXRmb3JtID0gJGlwaG9uZVNpbXVsYXRvclBsYXRmb3JtOworICAgIH0K
KworICAgICR0b2xlcmFuY2UgPSAxLjA7Cit9IGVsc2lmIChpc0FwcGxlTWFjV2ViS2l0KCkpIHsK
ICAgICBpZiAoaXNTbm93TGVvcGFyZCgpKSB7CiAgICAgICAgICRwbGF0Zm9ybSA9ICJtYWMtc25v
d2xlb3BhcmQiOwogICAgICAgICAkdG9sZXJhbmNlID0gMC4xOwpAQCAtMjcyLDExICszMDUsMTMg
QEAgbXkgJHNhbXBsZURlZmF1bHQgPSAkcnVuU2FtcGxlID8gInJ1biIgOiAiZG8gbm90IHJ1biI7
CiAKIG15ICR1c2FnZSA9IDw8RU9GOwogVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW3Rl
c3RkaXJ8dGVzdHBhdGggLi4uXQorICAtLTMyLWJpdCAgICAgICAgICAgICAgICAgICAgICAgIFJ1
biB0ZXN0cyBpbiAzMi1iaXQgbW9kZQogICAtLWFkZC1wbGF0Zm9ybS1leGNlcHRpb25zICAgICAg
IFB1dCBuZXcgcmVzdWx0cyBmb3Igbm9uLXBsYXRmb3JtLXNwZWNpZmljIGZhaWxpbmcgdGVzdHMg
aW50byB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcmVzdWx0cyBkaXJlY3RvcnkKICAgLS1hZGRpdGlv
bmFsLXBsYXRmb3JtLWRpcmVjdG9yeSBwYXRoL3RvL2RpcmVjdG9yeQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExvb2sgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgYmVmb3Jl
IGxvb2tpbmcgaW4gYW55IG9mIHRoZSBkZWZhdWx0IHBsYXRmb3JtLXNwZWNpZmljIGRpcmVjdG9y
aWVzCiAgIC0tY29tcGxleC10ZXh0ICAgICAgICAgICAgICAgICAgVXNlIHRoZSBjb21wbGV4IHRl
eHQgY29kZSBwYXRoIGZvciBhbGwgdGV4dCAoTWFjIE9TIFggYW5kIFdpbmRvd3Mgb25seSkKICAg
LWN8LS1jb25maWd1cmF0aW9uIGNvbmZpZyAgICAgICBTZXQgRHVtcFJlbmRlclRyZWUgYnVpbGQg
Y29uZmlndXJhdGlvbgorICAtZXwtLWV4cGVjdGVkLXJlc3VsdHMgICAgICAgICAgIFNwZWNpZnkg
YW4gYWx0ZXJuYXRlIGRpcmVjdG9yeSBmb3IgZXhwZWN0ZWQgcmVzdWx0cyAoUExBVEZPUk1fSU9T
KQogICAtLWdjLWJldHdlZW4tdGVzdHMgICAgICAgICAgICAgIEZvcmNlIGdhcmJhZ2UgY29sbGVj
dGlvbiBiZXR3ZWVuIGVhY2ggdGVzdAogICAtZ3wtLWd1YXJkLW1hbGxvYyAgICAgICAgICAgICAg
IEVuYWJsZSBHdWFyZCBNYWxsb2MKICAgLS1leGl0LWFmdGVyLW4tZmFpbHVyZXMgTiAgICAgICBF
eGl0IGFmdGVyIHRoZSBmaXJzdCBOIGZhaWx1cmVzIChpbmNsdWRlcyBjcmFzaGVzKSBpbnN0ZWFk
IG9mIHJ1bm5pbmcgYWxsIHRlc3RzCkBAIC0zMjcsNiArMzYyLDcgQEAgbXkgJGdldE9wdGlvbnNS
ZXN1bHQgPSBHZXRPcHRpb25zKAogICAgICdhZGQtcGxhdGZvcm0tZXhjZXB0aW9ucycgPT4gXCRh
ZGRQbGF0Zm9ybUV4Y2VwdGlvbnMsCiAgICAgJ2FkZGl0aW9uYWwtcGxhdGZvcm0tZGlyZWN0b3J5
PXMnID0+IFxAYWRkaXRpb25hbFBsYXRmb3JtRGlyZWN0b3JpZXMsCiAgICAgJ2NvbXBsZXgtdGV4
dCcgPT4gXCRjb21wbGV4VGV4dCwKKyAgICAnZXhwZWN0ZWQtcmVzdWx0c3xlPXMnID0+IFwkZXhw
ZWN0ZWRSZXN1bHRzRGlyLCAgIyBQTEFURk9STV9JT1MgCiAgICAgJ2V4aXQtYWZ0ZXItbi1mYWls
dXJlcz1pJyA9PiBcJGV4aXRBZnRlck5GYWlsdXJlcywKICAgICAnZXhpdC1hZnRlci1uLWNyYXNo
ZXMtb3ItdGltZW91dHM9aScgPT4gXCRleGl0QWZ0ZXJOQ3Jhc2hlc09yVGltZW91dHMsCiAgICAg
J2djLWJldHdlZW4tdGVzdHMnID0+IFwkZ2NCZXR3ZWVuVGVzdHMsCkBAIC00MTYsNiArNDUyLDgg
QEAgc2V0Q29uZmlndXJhdGlvblByb2R1Y3REaXIoQ3dkOjphYnNfcGF0aCgkcm9vdCkpIGlmIChk
ZWZpbmVkKCRyb290KSk7CiBteSAkcHJvZHVjdERpciA9IHByb2R1Y3REaXIoKTsKICRwcm9kdWN0
RGlyIC49ICIvUHJvZ3JhbXMiIGlmIGlzR3RrKCk7CiAKK3F1aXRJUGhvbmVTaW11bGF0b3IoKSBp
ZiBpc0lPU1dlYktpdCgpOworCiAjIFNhdmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGJlZm9yZSBj
aGFnaW5nIGl0IHZpYSBjaGRpcldlYktpdAogbXkgJGN1cnJlbnREaXIgPSBjd2QoKTsKIGNoZGly
V2ViS2l0KCk7CkBAIC00MjgsNiArNDY2LDkgQEAgaWYgKCFkZWZpbmVkKCRyb290KSAmJiAhJG5v
QnVpbGREdW1wVG9vbCkgewogfQogCiBteSAkZHVtcFRvb2xOYW1lID0gJHVzZVdlYktpdFRlc3RS
dW5uZXIgPyAiV2ViS2l0VGVzdFJ1bm5lciIgOiAiRHVtcFJlbmRlclRyZWUiOworaWYgKGlzSU9T
V2ViS2l0KCkpIHsKKyAgICAkZHVtcFRvb2xOYW1lID0gJHVzZVdlYktpdFRlc3RSdW5uZXIgPyAi
V2ViS2l0VGVzdFJ1bm5lckFwcC5hcHAvV2ViS2l0VGVzdFJ1bm5lckFwcCIgOiAiRHVtcFJlbmRl
clRyZWUuYXBwL0R1bXBSZW5kZXJUcmVlIjsKK30KIAogaWYgKGlzQXBwbGVXaW5XZWJLaXQoKSkg
ewogICAgICRkdW1wVG9vbE5hbWUgLj0gIl9kZWJ1ZyIgaWYgY29uZmlndXJhdGlvbigpIGVxICJE
ZWJ1Z19BbGwiOwpAQCAtNDQyLDcgKzQ4MywyNCBAQCAkaW1hZ2VEaWZmVG9vbCAuPSAiX2RlYnVn
IiBpZiBpc0N5Z3dpbigpICYmIGNvbmZpZ3VyYXRpb24oKSBlcSAiRGVidWdfQWxsIjsKICRpbWFn
ZURpZmZUb29sIC49ICJfZGVidWciIGlmIGlzQ3lnd2luKCkgJiYgY29uZmlndXJhdGlvbigpIGVx
ICJEZWJ1Z19DYWlybyI7CiBkaWUgImNhbid0IGZpbmQgZXhlY3V0YWJsZSAkaW1hZ2VEaWZmVG9v
bCAobG9va2VkIGluICRwcm9kdWN0RGlyKVxuIiBpZiAkcGl4ZWxUZXN0cyAmJiAhLXggJGltYWdl
RGlmZlRvb2w7CiAKLWNoZWNrRnJhbWV3b3JrcygpIHVubGVzcyBpc0N5Z3dpbigpOworY2hlY2tG
cmFtZXdvcmtzKCkgdW5sZXNzIGlzQ3lnd2luKCkgb3IgaXNJT1NXZWJLaXQoKTsKKworaWYgKGlz
SU9TV2ViS2l0KCkpIHsKKyAgICBwdXNoIEBJTkMsICRwcm9kdWN0RGlyIC4gIi9saWIvcGVybDUv
ZGFyd2luLXRocmVhZC1tdWx0aS0ybGV2ZWwiOworICAgIHJlcXVpcmUgSVBob25lU2ltdWxhdG9y
Tm90aWZpY2F0aW9uOworfQorCitpZiAoaXNBcHBsZU1hY1dlYktpdCgpKSB7CisgICAgcHVzaCBA
SU5DLCAkcHJvZHVjdERpcjsKKyAgICBldmFsICd1c2UgRHVtcFJlbmRlclRyZWVTdXBwb3J0Oyc7
Cit9CisKK29wZW5JUGhvbmVTaW11bGF0b3IoKSBpZiBpc0lPU1dlYktpdCgpOworCitpZiAoaXNB
cHBsZU1hY1dlYktpdCgpKSB7CisgICAgcHVzaCBASU5DLCAkcHJvZHVjdERpcjsKKyAgICByZXF1
aXJlIER1bXBSZW5kZXJUcmVlU3VwcG9ydDsKK30KIAogbXkgJGxheW91dFRlc3RzTmFtZSA9ICJM
YXlvdXRUZXN0cyI7CiBteSAkdGVzdERpcmVjdG9yeSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJGxh
eW91dFRlc3RzTmFtZSk7CkBAIC00NTMsMTMgKzUxMSwxNCBAQCBteSBAcGxhdGZvcm1SZXN1bHRI
aWVyYXJjaHkgPSBidWlsZFBsYXRmb3JtUmVzdWx0SGllcmFyY2h5KCk7CiBteSBAcGxhdGZvcm1U
ZXN0SGllcmFyY2h5ID0gYnVpbGRQbGF0Zm9ybVRlc3RIaWVyYXJjaHkoQHBsYXRmb3JtUmVzdWx0
SGllcmFyY2h5KTsKIAogJGV4cGVjdGVkRGlyZWN0b3J5ID0gJEVOVnsiV2ViS2l0RXhwZWN0ZWRU
ZXN0UmVzdWx0c0RpcmVjdG9yeSJ9IGlmICRFTlZ7IldlYktpdEV4cGVjdGVkVGVzdFJlc3VsdHNE
aXJlY3RvcnkifTsKKyRleHBlY3RlZERpcmVjdG9yeSA9ICRleHBlY3RlZFJlc3VsdHNEaXIgaWYg
JGV4cGVjdGVkUmVzdWx0c0RpciAmJiBpc0lPU1dlYktpdCgpOwogCiAkdGVzdFJlc3VsdHNEaXJl
Y3RvcnkgPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRjdXJyZW50RGlyLCAkdGVzdFJlc3VsdHNEaXJl
Y3RvcnkpOwogIyAkdGVzdFJlc3VsdHNEaXJlY3RvcnkgbXVzdCBiZSBlbXB0eSBiZWZvcmUgdGVz
dGluZy4KIHJtdHJlZSAkdGVzdFJlc3VsdHNEaXJlY3Rvcnk7CiBteSAkdGVzdFJlc3VsdHMgPSBG
aWxlOjpTcGVjLT5jYXRmaWxlKCR0ZXN0UmVzdWx0c0RpcmVjdG9yeSwgInJlc3VsdHMuaHRtbCIp
OwogCi1pZiAoaXNBcHBsZU1hY1dlYktpdCgpKSB7CitpZiAoaXNBcHBsZU1hY1dlYktpdCgpICYm
ICFpc0lPU1dlYktpdCgpKSB7CiAgICAgcHJpbnQgU1RERVJSICJDb21waWxpbmcgSmF2YSB0ZXN0
c1xuIjsKICAgICBteSAkamF2YVRlc3RzRGlyZWN0b3J5ID0gY2F0ZGlyKCR0ZXN0RGlyZWN0b3J5
LCAiamF2YSIpOwogCkBAIC0xMDk3LDYgKzExNTYsOCBAQCBwcmludGYgIlxuJTAuMmZzIHRvdGFs
IHRlc3RpbmcgdGltZVxuIiwgJHRvdGFsVGVzdGluZ1RpbWUgLiAiIjsKIAogISRpc0R1bXBUb29s
T3BlbiB8fCBkaWUgIkZhaWxlZCB0byBjbG9zZSAkZHVtcFRvb2xOYW1lLlxuIjsKIAorcXVpdElQ
aG9uZVNpbXVsYXRvcigpIGlmIGlzSU9TV2ViS2l0KCk7CisKICRpc0h0dHBkT3BlbiA9ICFjbG9z
ZUhUVFBEKCk7CiBjbG9zZVdlYlNvY2tldFNlcnZlcigpOwogCkBAIC0xMTk2LDYgKzEyNTcsOSBA
QCBpZiAoaXNHdGsoKSkgewogICBzeXN0ZW0gImN5Z3N0YXJ0IiwgJHRlc3RSZXN1bHRzIGlmICRs
YXVuY2hTYWZhcmk7CiB9IGVsc2lmIChpc1dpbmRvd3MoKSkgewogICBzeXN0ZW0gInN0YXJ0Iiwg
JHRlc3RSZXN1bHRzIGlmICRsYXVuY2hTYWZhcmk7Cit9IGVsc2lmIChpc0lPU1dlYktpdCgpKSB7
CisgICMgRG9uJ3QgdXNlIHJ1bi1zYWZhcmksIHNpbmNlIGl0IHRyaWVzIHRvIGxvYWQgaU9TIGZy
YW1ld29ya3MgaW4gZGVza3RvcCBTYWZhcmkuCisgIHN5c3RlbSAib3BlbiIsICItYSIsICJTYWZh
cmkiLCAkdGVzdFJlc3VsdHMgaWYgJGxhdW5jaFNhZmFyaTsKIH0gZWxzZSB7CiAgIHN5c3RlbSAi
VG9vbHMvU2NyaXB0cy9ydW4tc2FmYXJpIiwgQGNvbmZpZ3VyYXRpb25BcmdzLCAiLU5TT3BlbiIs
ICR0ZXN0UmVzdWx0cyBpZiAkbGF1bmNoU2FmYXJpOwogfQpAQCAtMTI4Nyw2ICsxMzUxLDExOCBA
QCBzdWIgd3JpdGVUb0ZpbGUoJCQpCiAgICAgY2xvc2UgTkVXRklMRTsKIH0KIAorc3ViIGluc3Rh
bGxBbmRMYXVuY2hEdW1wUmVuZGVyVHJlZUFwcFVzaW5nTm90aWZpY2F0aW9uKCQkKQoreworICAg
IG15ICgkYXJncywgJGNsZWFuRW52KSA9IEBfOworCisgICAgbXkgJGlQaG9uZVNpbXVsYXRvck5v
dGlmaWNhdGlvbiA9IG5ldyBJUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb247CisgICAgJGlQaG9u
ZVNpbXVsYXRvck5vdGlmaWNhdGlvbi0+c3RhcnRPYnNlcnZpbmdBcHBsaWNhdGlvbkxhdW5jaGVk
Tm90aWZpY2F0aW9uKCk7CisKKyAgICBteSAkbWFrZU5TRGljdGlvbmFyeUZyb21IYXNoID0gc3Vi
IHsKKyAgICAgICAgbXkgKCRkaWN0KSA9IEBfOworICAgICAgICBteSAkcmVzdWx0ID0gTlNNdXRh
YmxlRGljdGlvbmFyeS0+YWxsb2MoKS0+aW5pdFdpdGhDYXBhY2l0eV8oc2NhbGFyKGtleXMgJXsk
ZGljdH0pKTsKKyAgICAgICAgZm9yIG15ICRrZXkgKGtleXMgJXskZGljdH0pIHsKKyAgICAgICAg
ICAgICRyZXN1bHQtPnNldE9iamVjdF9mb3JLZXlfKE5TU3RyaW5nLT5zdHJpbmdXaXRoQ1N0cmlu
Z18oJGRpY3QtPnska2V5fSksIE5TU3RyaW5nLT5zdHJpbmdXaXRoQ1N0cmluZ18oJGtleSkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiAkcmVzdWx0LT5hdXRvcmVsZWFzZSgpOworICAgIH07
CisKKyAgICBteSAkbWFrZU5TQXJyYXlGcm9tQXJyYXkgPSBzdWIgeworICAgICAgICBteSAoJGFy
cmF5KSA9IEBfOworICAgICAgICBteSAkcmVzdWx0ID0gTlNNdXRhYmxlQXJyYXktPmFsbG9jKCkt
PmluaXRXaXRoQ2FwYWNpdHlfKHNjYWxhcihAeyRhcnJheX0pKTsKKyAgICAgICAgZm9yIG15ICRp
dGVtIChAeyRhcnJheX0pIHsKKyAgICAgICAgICAgICRyZXN1bHQtPmFkZE9iamVjdF8oTlNTdHJp
bmctPnN0cmluZ1dpdGhDU3RyaW5nXygkaXRlbSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biAkcmVzdWx0LT5hdXRvcmVsZWFzZSgpOworICAgIH07CisKKyAgICBteSAkZGV2aWNlTmFtZSA9
IGFyY2hpdGVjdHVyZSgpIGVxICdpMzg2JyA/ICJpUGhvbmUgUmV0aW5hICg0LWluY2gpIiA6ICJp
UGhvbmUgUmV0aW5hICg0LWluY2ggNjQtYml0KSI7CisKKyAgICBteSAkc2RrUm9vdCA9IGB4Y3J1
biAtLXNkayBpcGhvbmVzaW11bGF0b3IgLS1zaG93LXNkay1wYXRoYDsKKyAgICBjaG9tcCAkc2Rr
Um9vdDsKKworICAgIG15ICRkaWN0ID0geworICAgICAgICBhcHBsaWNhdGlvbkFyZ3VtZW50cyA9
PiAmJG1ha2VOU0FycmF5RnJvbUFycmF5KCRhcmdzKSwKKyAgICAgICAgYXBwbGljYXRpb25FbnZp
cm9ubWVudCA9PiAmJG1ha2VOU0RpY3Rpb25hcnlGcm9tSGFzaCgkY2xlYW5FbnYpLAorICAgICAg
ICBhcHBsaWNhdGlvbklkZW50aWZpZXIgPT4gTlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5nXygi
b3JnLndlYmtpdC5EdW1wUmVuZGVyVHJlZSIpLAorICAgICAgICBhcHBsaWNhdGlvblBhdGggPT4g
TlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5nXygiJHByb2R1Y3REaXIvRHVtcFJlbmRlclRyZWUu
YXBwIiksCisgICAgICAgIGRldmljZUluZm8gPT4gTlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5n
XygkZGV2aWNlTmFtZSksCisgICAgICAgIHNlc3Npb25Pd25lciA9PiBOU1N0cmluZy0+c3RyaW5n
V2l0aENTdHJpbmdfKCRwcm9ncmFtTmFtZSksCisgICAgICAgIHNlc3Npb25VVUlEID0+IE5TU3Ry
aW5nLT5zdHJpbmdXaXRoQ1N0cmluZ18oc2ltdWxhdG9yU2Vzc2lvblVVSUQoKSksCisgICAgICAg
IHNka1Jvb3QgPT4gTlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5nXygkc2RrUm9vdCksCisgICAg
fTsKKyAgICAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5wb3N0U3RhcnRTZXNzaW9uTm90
aWZpY2F0aW9uKCRkaWN0KTsKKworICAgIHdoaWxlICghJGlQaG9uZVNpbXVsYXRvck5vdGlmaWNh
dGlvbi0+aGFzUmVjZWl2ZWRBcHBsaWNhdGlvbkxhdW5jaGVkTm90aWZpY2F0aW9uKCkpIHsKKyAg
ICAgICAgbXkgJGRhdGUgPSBOU0RhdGUtPmFsbG9jKCktPmluaXRXaXRoVGltZUludGVydmFsU2lu
Y2VOb3dfKDAuMSk7CisgICAgICAgIE5TUnVuTG9vcC0+Y3VycmVudFJ1bkxvb3AtPnJ1blVudGls
RGF0ZV8oJGRhdGUpOworICAgICAgICAkZGF0ZS0+cmVsZWFzZSgpOworICAgIH0KKworICAgIHBy
aW50ICJEdW1wUmVuZGVyVHJlZSBoYXMgbGF1bmNoZWQuXG4iOworCisgICAgJGlQaG9uZVNpbXVs
YXRvck5vdGlmaWNhdGlvbi0+c3RvcE9ic2VydmluZ0FwcGxpY2F0aW9uTGF1bmNoZWROb3RpZmlj
YXRpb24oKTsKKworICAgIHJldHVybiAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uLT5hcHBs
aWNhdGlvbkxhdW5jaGVkQXBwbGljYXRpb25QSUQoKTsKK30KKworc3ViIG9wZW5JUGhvbmVTaW11
bGF0b3IoKQoreworICAgIG15ICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24gPSBuZXcgSVBo
b25lU2ltdWxhdG9yTm90aWZpY2F0aW9uOworICAgICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRp
b24tPnN0YXJ0T2JzZXJ2aW5nUmVhZHlOb3RpZmljYXRpb24oKTsKKworICAgIG15ICRkZXZpY2VO
YW1lID0gYXJjaGl0ZWN0dXJlKCkgZXEgJ2kzODYnID8gImlQaG9uZSBSZXRpbmEgKDQtaW5jaCki
IDogImlQaG9uZSBSZXRpbmEgKDQtaW5jaCA2NC1iaXQpIjsKKworICAgIHN5c3RlbSAib3BlbiIs
ICItYSIsICJpUGhvbmUgU2ltdWxhdG9yIiwgIi0tYXJncyIsICItU2Vzc2lvbk9uTGF1bmNoIiwg
Ik5PIiwgIi1TaW11bGF0ZURldmljZSIsICRkZXZpY2VOYW1lOworCisgICAgZGllICQhIGlmIGV4
aXRTdGF0dXMoJD8pOworCisgICAgd2hpbGUgKCEkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9u
LT5oYXNSZWNlaXZlZFJlYWR5Tm90aWZpY2F0aW9uKCkpIHsKKyAgICAgICAgbXkgJGRhdGUgPSBO
U0RhdGUtPmFsbG9jKCktPmluaXRXaXRoVGltZUludGVydmFsU2luY2VOb3dfKDAuMSk7CisgICAg
ICAgIE5TUnVuTG9vcC0+Y3VycmVudFJ1bkxvb3AtPnJ1blVudGlsRGF0ZV8oJGRhdGUpOworICAg
ICAgICAkZGF0ZS0+cmVsZWFzZSgpOworICAgIH0KKworICAgICRpUGhvbmVTaW11bGF0b3JOb3Rp
ZmljYXRpb24tPnN0b3BPYnNlcnZpbmdSZWFkeU5vdGlmaWNhdGlvbigpOworfQorCitzdWIgcXVp
dER1bXBSZW5kZXJUcmVlQXBwVXNpbmdOb3RpZmljYXRpb24oKQoreworICAgIG15ICRpUGhvbmVT
aW11bGF0b3JOb3RpZmljYXRpb24gPSBuZXcgSVBob25lU2ltdWxhdG9yTm90aWZpY2F0aW9uOwor
ICAgICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24tPnN0YXJ0T2JzZXJ2aW5nQXBwbGljYXRp
b25RdWl0Tm90aWZpY2F0aW9uKCk7CisKKyAgICBteSAkZGljdCA9IHsKKyAgICAgICAgc2Vzc2lv
blVVSUQgPT4gTlNTdHJpbmctPnN0cmluZ1dpdGhDU3RyaW5nXyhzaW11bGF0b3JTZXNzaW9uVVVJ
RCgpKSwKKyAgICB9OworICAgICRpUGhvbmVTaW11bGF0b3JOb3RpZmljYXRpb24tPnBvc3RFbmRT
ZXNzaW9uTm90aWZpY2F0aW9uKCRkaWN0KTsKKworICAgICMgRklYTUU6IDxyZGFyOi8vcHJvYmxl
bS83NDQzMDc3PiBEdW1wUmVuZGVyVHJlZSBzaG91bGQgZXhpdCB3aXRob3V0IGhhdmluZyB0byB1
c2Uga2lsbCAtOSBmcm9tIHJ1bi13ZWJraXQtdGVzdHMKKyAgICBraWxsIDksICRkdW1wVG9vbFBJ
RDsKKworICAgIG15ICR0aW1lb3V0Q291bnRlciA9IDA7CisgICAgd2hpbGUgKCEkaVBob25lU2lt
dWxhdG9yTm90aWZpY2F0aW9uLT5oYXNSZWNlaXZlZEFwcGxpY2F0aW9uUXVpdE5vdGlmaWNhdGlv
bigpKSB7CisgICAgICAgIG15ICRkYXRlID0gTlNEYXRlLT5hbGxvYygpLT5pbml0V2l0aFRpbWVJ
bnRlcnZhbFNpbmNlTm93XygwLjEpOworICAgICAgICBOU1J1bkxvb3AtPmN1cnJlbnRSdW5Mb29w
LT5ydW5VbnRpbERhdGVfKCRkYXRlKTsKKyAgICAgICAgJGRhdGUtPnJlbGVhc2UoKTsKKyAgICAg
ICAgaWYgKCsrJHRpbWVvdXRDb3VudGVyID49IDYwMCkgeworICAgICAgICAgICAgcHJpbnQgU1RE
RVJSICJFUlJPUjogSGFuZyB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbiBxdWl0IG5vdGlmaWNhdGlv
bi4gRGlkIER1bXBSZW5kZXJUcmVlLmFwcCBjcmFzaCBpbnN0ZWFkP1xuIjsKKyAgICAgICAgICAg
IGxhc3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAkaVBob25lU2ltdWxhdG9yTm90aWZpY2F0
aW9uLT5zdG9wT2JzZXJ2aW5nQXBwbGljYXRpb25RdWl0Tm90aWZpY2F0aW9uKCk7Cit9CisKK3N1
YiBxdWl0SVBob25lU2ltdWxhdG9yKCkKK3sKKyAgICBzeXN0ZW0gIm9zYXNjcmlwdCIsICItZSIs
ICJ0ZWxsIGFwcGxpY2F0aW9uIFwiaVBob25lIFNpbXVsYXRvclwiIHRvIHF1aXQiOworfQorCitz
dWIgc2ltdWxhdG9yU2Vzc2lvblVVSUQoKQoreworICAgIHJldHVybiAidGhlQXdlc29tZVVuaXF1
ZVNlc3Npb25JZGVudGlmaWVyRm9yRHVtcFJlbmRlclRyZWUiOworfQorCiAjIEJyZWFrIHVwIGEg
cGF0aCBpbnRvIHRoZSBkaXJlY3RvcnkgKHdpdGggc2xhc2gpIGFuZCBiYXNlIG5hbWUuCiBzdWIg
c3BsaXRwYXRoKCQpCiB7CkBAIC0xMzc5LDggKzE1NTUsMTAgQEAgc3ViIG9wZW5EaWZmVG9vbCgp
CiAgICAgcmV0dXJuIGlmICEkcGl4ZWxUZXN0czsKIAogICAgIG15ICVDTEVBTl9FTlY7CisgICAg
bXkgQGNvbW1hbmQgPSAoJGltYWdlRGlmZlRvb2wpOzsKKyAgICB1bnNoaWZ0KEBjb21tYW5kLCAn
eGNydW4nLCAnLXNkaycsIHhjb2RlU0RLKCksICdzaW0nKSBpZiB3aWxsVXNlSU9TU2ltdWxhdG9y
U0RLV2hlbkJ1aWxkaW5nKCk7CiAgICAgJENMRUFOX0VOVntNYWxsb2NTdGFja0xvZ2dpbmd9ID0g
MSBpZiAkc2hvdWxkQ2hlY2tMZWFrczsKLSAgICAkaW1hZ2VEaWZmVG9vbFBJRCA9IG9wZW4yKFwq
RElGRklOLCBcKkRJRkZPVVQsICRpbWFnZURpZmZUb29sLCBsYXVuY2hXaXRoRW52KEBkaWZmVG9v
bEFyZ3MsICVDTEVBTl9FTlYpKSBvciBkaWUgInVuYWJsZSB0byBvcGVuICRpbWFnZURpZmZUb29s
XG4iOworICAgICRpbWFnZURpZmZUb29sUElEID0gb3BlbjIoXCpESUZGSU4sIFwqRElGRk9VVCwg
QGNvbW1hbmQsIGxhdW5jaFdpdGhFbnYoQGRpZmZUb29sQXJncywgJUNMRUFOX0VOVikpIG9yIGRp
ZSAidW5hYmxlIHRvIG9wZW4gJGltYWdlRGlmZlRvb2xcbiI7CiAgICAgJGlzRGlmZlRvb2xPcGVu
ID0gMTsKIH0KIApAQCAtMTQwMyw3ICsxNTgxLDcgQEAgc3ViIGJ1aWxkRHVtcFRvb2woJCkKICAg
ICAgICAgJGNoaWxkRXJyID0gIj4mU1RERVJSIjsKICAgICB9CiAKLSAgICBteSBAYXJncyA9IGFy
Z3VtZW50c0ZvckNvbmZpZ3VyYXRpb24oKTsKKyAgICBteSBAYXJncyA9ICgnLS1zZGsnLCB4Y29k
ZVNESygpLCBhcmd1bWVudHNGb3JDb25maWd1cmF0aW9uKCkpOwogICAgIG15ICRidWlsZFByb2Nl
c3MgPSBvcGVuMygkY2hpbGRJbiwgJGNoaWxkT3V0LCAkY2hpbGRFcnIsICRwZXJsSW50ZXJwcmV0
ZXIsIEZpbGU6OlNwZWMtPmNhdGZpbGUocXcoVG9vbHMgU2NyaXB0cyksICRkdW1wVG9vbEJ1aWxk
U2NyaXB0KSwgQGFyZ3MpIG9yIGRpZSAiRmFpbGVkIHRvIHJ1biBidWlsZC1kdW1wcmVuZGVydHJl
ZSI7CiAgICAgY2xvc2UoJGNoaWxkSW4pOwogICAgIHdhaXRwaWQgJGJ1aWxkUHJvY2VzcywgMDsK
QEAgLTE0NjgsNiArMTY0Niw3IEBAIHN1YiBvcGVuRHVtcFRvb2woKQogICAgICAgICB9CiAKICAg
ICAgICAgJENMRUFOX0VOVntEWUxEX0ZSQU1FV09SS19QQVRIfSA9ICRwcm9kdWN0RGlyOworICAg
ICAgICAkQ0xFQU5fRU5We0RZTERfTElCUkFSWV9QQVRIfSA9ICRwcm9kdWN0RGlyOwogICAgICAg
ICAkQ0xFQU5fRU5We0RZTERfSU5TRVJUX0xJQlJBUklFU30gPSAiL3Vzci9saWIvbGliZ21hbGxv
Yy5keWxpYiIgaWYgJGd1YXJkTWFsbG9jOwogICAgIH0gZWxzaWYgKGlzQ3lnd2luKCkpIHsKICAg
ICAgICAgJENMRUFOX0VOVntIT01FRFJJVkV9ID0gJEVOVnsnSE9NRURSSVZFJ307CkBAIC0xNDg5
LDcgKzE2NjgsNyBAQCBzdWIgb3BlbkR1bXBUb29sKCkKICAgICB9CiAKICAgICBteSBAYXJncyA9
ICgkZHVtcFRvb2wsIEB0b29sQXJncyk7Ci0gICAgaWYgKGlzQXBwbGVNYWNXZWJLaXQoKSkgeyAK
KyAgICBpZiAoaXNBcHBsZU1hY1dlYktpdCgpIGFuZCAhaXNJT1NXZWJLaXQoKSkgeyAKICAgICAg
ICAgdW5zaGlmdCBAYXJncywgImFyY2giLCAiLSIgLiBhcmNoaXRlY3R1cmUoKTsgICAgICAgICAg
ICAgCiAgICAgfQogCkBAIC0xNTAxLDcgKzE2ODAsNTkgQEAgc3ViIG9wZW5EdW1wVG9vbCgpCiAK
ICAgICAkQ0xFQU5fRU5We01hbGxvY1N0YWNrTG9nZ2luZ30gPSAxIGlmICRzaG91bGRDaGVja0xl
YWtzOwogCi0gICAgJGR1bXBUb29sUElEID0gb3BlbjMoXCpPVVQsIFwqSU4sIFwqRVJST1IsIGxh
dW5jaFdpdGhFbnYoQGFyZ3MsICVDTEVBTl9FTlYpKSBvciBkaWUgIkZhaWxlZCB0byBzdGFydCB0
b29sOiAkZHVtcFRvb2xcbiI7CisgICAgaWYgKGlzSU9TV2ViS2l0KCkpIHsKKyAgICAgICAgIyBX
ZSdyZSBlaXRoZXIgcnVubmluZyBpbiB0aGUgaU9TIFNpbXVsYXRvciBvciB0aHJvdWdoIFNwcmlu
Z0JvYXJkLCBzbyBGSUZPIGl0IHVwIQorCisgICAgICAgICMgUmVtb3ZlIG9sZCBGSUZPIGZpbGVz
IGlmIERSVCBwcmV2aW91c2x5IGNyYXNoZWQuCisgICAgICAgIHVubGluayA8L3RtcC9EdW1wUmVu
ZGVyVHJlZV8qPjsKKworICAgICAgICBpZiAoIS1lICcvdG1wL0R1bXBSZW5kZXJUcmVlX0lOJykg
eworICAgICAgICAgICAgc3lzdGVtKCdta2ZpZm8nLCAnL3RtcC9EdW1wUmVuZGVyVHJlZV9JTicp
ID09IDAgb3IgZGllICJDb3VsZG4ndCBta2ZpZm8gRFJUX0lOIjsKKyAgICAgICAgfQorICAgICAg
ICBvcGVuKFwqT1VULCAiKz4gL3RtcC9EdW1wUmVuZGVyVHJlZV9JTiIpIG9yIGRpZSAiQ291bGRu
J3Qgb3BlbiBEUlRfSU4hIjsKKyAgICAgICAgT1VULT5hdXRvZmx1c2goMSk7CisKKyAgICAgICAg
aWYgKCEtZSAnL3RtcC9EdW1wUmVuZGVyVHJlZV9PVVQnKSB7CisgICAgICAgICAgICBzeXN0ZW0o
J21rZmlmbycsICcvdG1wL0R1bXBSZW5kZXJUcmVlX09VVCcpID09IDAgb3IgZGllICJDb3VsZG4n
dCBta2ZpZm8gRFJUX09VVCI7CisgICAgICAgIH0KKyAgICAgICAgb3BlbihcKklOLCAiKzwgL3Rt
cC9EdW1wUmVuZGVyVHJlZV9PVVQiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gRFJUX09VVCEiOwor
CisgICAgICAgIGlmICghLWUgJy90bXAvRHVtcFJlbmRlclRyZWVfRVJST1InKSB7CisgICAgICAg
ICAgICBzeXN0ZW0oJ21rZmlmbycsICcvdG1wL0R1bXBSZW5kZXJUcmVlX0VSUk9SJykgPT0gMCBv
ciBkaWUgIkNvdWxkbid0IG1rZmlmbyBEUlRfRVJST1IiOworICAgICAgICB9CisgICAgICAgIG9w
ZW4oXCpFUlJPUiwgIis8IC90bXAvRHVtcFJlbmRlclRyZWVfRVJST1IiKSBvciBkaWUgIkNvdWxk
bid0IG9wZW4gRFJUX0VSUk9SISI7CisKKyAgICAgICAgc2hpZnQgQGFyZ3M7ICMgcmVtb3ZlIHRo
ZSBhY3R1YWwgYmluYXJ5IG5hbWUKKworICAgICAgICBpZiAoJGhhdmVJbnN0YWxsZWREdW1wUmVu
ZGVyVHJlZUFwcE9uY2UpIHsKKyAgICAgICAgICAgIG15ICRzaW1QYXRoID0gYHhjcnVuIC1zZGsg
aXBob25lc2ltdWxhdG9yIC1maW5kIHNpbWA7CisgICAgICAgICAgICBjaG9tcCAkc2ltUGF0aDsK
KworICAgICAgICAgICAgbXkgQGVudiA9IG1hcCB7CisgICAgICAgICAgICAgICAgbXkgJGtleSA9
ICRfOworICAgICAgICAgICAgICAgIG15ICR2YWwgPSAkQ0xFQU5fRU5WeyRrZXl9OworICAgICAg
ICAgICAgICAgICgiLWVudiIsICIka2V5PSR2YWwiKTsKKyAgICAgICAgICAgIH0ga2V5cyAlQ0xF
QU5fRU5WOworCisgICAgICAgICAgICBteSAkYXJjaEZsYWcgPSBhcmNoaXRlY3R1cmUoKSBlcSAn
aTM4NicgPyAnLS1hcmNoPTMyJyA6ICctLWFyY2g9NjQnOworCisgICAgICAgICAgICBsb2NhbCgq
TEFVTkNISU4sICpMQVVOQ0hPVVQpOworICAgICAgICAgICAgb3BlbjIoXCpMQVVOQ0hJTiwgXCpM
QVVOQ0hPVVQsICRzaW1QYXRoLCAkYXJjaEZsYWcsICJMYXVuY2hBcHAiLCBAZW52LCAib3JnLndl
YmtpdC5EdW1wUmVuZGVyVHJlZSIsIEBhcmdzKSB8fCBkaWUgIiQhIjsKKyAgICAgICAgICAgIG15
ICRzdGRvdXQgPSA8TEFVTkNISU4+OworICAgICAgICAgICAgaWYgKCRzdGRvdXQgPX4gL0xhdW5j
aGVkIG9yZy53ZWJraXQuRHVtcFJlbmRlclRyZWUgd2l0aCBwcm9jZXNzIElEIChbMC05XSspLykg
eworICAgICAgICAgICAgICAgICRkdW1wVG9vbFBJRCA9ICQxOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBkaWUgIkNvdWxkIG5vdCBsYXVuY2ggRHVtcFJlbmRlclRyZWU6
ICQhIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNsb3NlKExBVU5DSE9VVCkgfHwgZGll
ICIkISI7CisgICAgICAgICAgICBjbG9zZShMQVVOQ0hJTikgfHwgZGllICIkISI7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAkZHVtcFRvb2xQSUQgPSBpbnN0YWxsQW5kTGF1bmNoRHVt
cFJlbmRlclRyZWVBcHBVc2luZ05vdGlmaWNhdGlvbihcQGFyZ3MsIFwlQ0xFQU5fRU5WKTsKKyAg
ICAgICAgICAgICRoYXZlSW5zdGFsbGVkRHVtcFJlbmRlclRyZWVBcHBPbmNlID0gMTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgICRkdW1wVG9vbFBJRCA9IG9wZW4zKFwqT1VULCBc
KklOLCBcKkVSUk9SLCBsYXVuY2hXaXRoRW52KEBhcmdzLCAlQ0xFQU5fRU5WKSkgb3IgZGllICJG
YWlsZWQgdG8gc3RhcnQgdG9vbDogJGR1bXBUb29sXG4iOworICAgIH0KICAgICAkaXNEdW1wVG9v
bE9wZW4gPSAxOwogICAgICRkdW1wVG9vbENyYXNoZWQgPSAwOwogfQpAQCAtMTUxNiw2ICsxNzQ3
LDE3IEBAIHN1YiBjbG9zZUR1bXBUb29sKCkKIAogICAgIGNsb3NlIElOOwogICAgIGNsb3NlIE9V
VDsKKyAgICBpZiAoaXNJT1NXZWJLaXQoKSAmJiAhZHVtcFRvb2xEaWRDcmFzaCgpKSB7CisgICAg
ICAgIGlmICgkaGF2ZUluc3RhbGxlZER1bXBSZW5kZXJUcmVlQXBwT25jZSkgeworICAgICAgICAg
ICAga2lsbCA5LCAkZHVtcFRvb2xQSUQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBx
dWl0RHVtcFJlbmRlclRyZWVBcHBVc2luZ05vdGlmaWNhdGlvbigpOworICAgICAgICB9CisKKyAg
ICAgICAgIyBTaW5jZSBjbG9zaW5nIHRoZSBGSUZPIGRvZXNuJ3QgYWN0dWFsbHkgdGVybWluYXRl
IHRoZSBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLAorICAgICAgICAjIGRvIGl0IG91cnNlbHZlcy4g
IFNlZSBhYm92ZSBGSVhNRS4KKyAgICAgICAgdW5saW5rIDwvdG1wL0R1bXBSZW5kZXJUcmVlXyo+
OworICAgIH0KICAgICB3YWl0cGlkICRkdW1wVG9vbFBJRCwgMDsKICAgICAKICAgICAjIGNoZWNr
IGZvciBXZWJDb3JlIGNvdW50ZXIgbGVha3MuCkBAIC0xNTMyLDEwICsxNzc0LDE4IEBAIHN1YiBk
dW1wVG9vbERpZENyYXNoKCkKIHsKICAgICByZXR1cm4gMSBpZiAkZHVtcFRvb2xDcmFzaGVkOwog
ICAgIHJldHVybiAwIHVubGVzcyAkaXNEdW1wVG9vbE9wZW47Ci0gICAgbXkgJHBpZCA9IHdhaXRw
aWQoLTEsIFdOT0hBTkcpOwotICAgIHJldHVybiAxIGlmICgkcGlkID09ICRkdW1wVG9vbFBJRCk7
CisgICAgaWYgKGlzSU9TV2ViS2l0KCkpIHsKKyAgICAgICAgbXkgJGNvdW50ID0ga2lsbCAwLCAk
ZHVtcFRvb2xQSUQ7CisgICAgICAgIHJldHVybiAxIGlmICEkY291bnQ7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbXkgJHBpZCA9IHdhaXRwaWQoLTEsIFdOT0hBTkcpOworICAgICAgICByZXR1cm4g
MSBpZiAoJHBpZCA9PSAkZHVtcFRvb2xQSUQpOworICAgIH0KIAotICAgIHJldHVybiAwOworICAg
ICMgT24gTWFjIE9TIFgsIGNyYXNoaW5nIG1heSBiZSBzaWduaWZpY2FudGx5IGRlbGF5ZWQgYnkg
Y3Jhc2ggcmVwb3J0ZXIuCisgICAgcmV0dXJuIDAgdW5sZXNzIGlzQXBwbGVNYWNXZWJLaXQoKSBv
ciBpc0lPU1dlYktpdCgpOworCisgICAgcmV0dXJuIER1bXBSZW5kZXJUcmVlU3VwcG9ydDo6cHJv
Y2Vzc0lzQ3Jhc2hpbmcoJGR1bXBUb29sUElEKTsKIH0KIAogc3ViIGNvbmZpZ3VyZUFuZE9wZW5I
VFRQRElmTmVlZGVkKCkKQEAgLTE2NzMsNiArMTkyMywxMCBAQCBzdWIgZXhwZWN0ZWREaXJlY3Rv
cnlGb3JUZXN0KCQ7JDskKQogICAgICAgICBwdXNoIEBleHRyYVBsYXRmb3JtcywgIm1hYy13azIi
IGlmICRwbGF0Zm9ybSBlcSAid2luLXdrMiI7CiAgICAgICAgIHB1c2ggQGV4dHJhUGxhdGZvcm1z
LCBxdyhtYWMtbGlvbiBtYWMpOwogICAgIH0KKworICAgIGlmIChpc0lPU1dlYktpdCgpKSB7Cisg
ICAgICAgIHB1c2ggQGV4dHJhUGxhdGZvcm1zLCBxdyhtYWMtc25vd2xlb3BhcmQgbWFjKTsKKyAg
ICB9CiAgIAogICAgIHB1c2ggQGRpcmVjdG9yaWVzLCBtYXAgeyBjYXRkaXIoJHBsYXRmb3JtQmFz
ZURpcmVjdG9yeSwgJF8pIH0gQGV4dHJhUGxhdGZvcm1zOwogICAgIHB1c2ggQGRpcmVjdG9yaWVz
LCAkZXhwZWN0ZWREaXJlY3Rvcnk7CkBAIC0yMTMxLDYgKzIzODUsMTIgQEAgc3ViIGJ1aWxkUGxh
dGZvcm1SZXN1bHRIaWVyYXJjaHkoKQogICAgICAgICBpZiAoJHBsYXRmb3JtIGVxICJ3aW5jYWly
byIpIHsKICAgICAgICAgICAgIEBwbGF0Zm9ybXMgPSAkcGxhdGZvcm07CiAgICAgICAgIH0KKyAg
ICB9IGVsc2lmICgkcGxhdGZvcm0gPX4gL15pcGhvbmUtc2ltdWxhdG9yLS8pIHsKKyAgICAgICAg
bXkgJGk7CisgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8IEBpUGhvbmVTaW11bGF0b3JQbGF0Zm9y
bXM7ICRpKyspIHsKKyAgICAgICAgICAgIGxhc3QgaWYgJGlQaG9uZVNpbXVsYXRvclBsYXRmb3Jt
c1skaV0gZXEgJHBsYXRmb3JtOworICAgICAgICB9CisgICAgICAgIHB1c2ggQHBsYXRmb3Jtcywg
QGlQaG9uZVNpbXVsYXRvclBsYXRmb3Jtc1skaS4uJCNpUGhvbmVTaW11bGF0b3JQbGF0Zm9ybXNd
OwogICAgIH0gZWxzaWYgKCRwbGF0Zm9ybSA9fiAvXmd0ay0vKSB7CiAgICAgICAgIHB1c2ggQHBs
YXRmb3JtcywgJHBsYXRmb3JtOwogICAgICAgICBwdXNoIEBwbGF0Zm9ybXMsICJndGsiOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRkaXJzLnBtCmluZGV4IGFmZWE1YTUyYzJiOWNlMzZiMzkxMjI3ZTAzOTY1MTkwMmJmODI0YTYu
LjE2MWExZGM0ZjYxOGZhZmU4YjIxZjViOTY5N2VkYjU2MjBhNDI4MDEgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdGRpcnMu
cG0KQEAgLTg3LDYgKzg3LDcgQEAgbXkgJGNvbmZpZ3VyYXRpb25Qcm9kdWN0RGlyOwogbXkgJHNv
dXJjZURpcjsKIG15ICRjdXJyZW50U1ZOUmV2aXNpb247CiBteSAkZGVidWdnZXI7CitteSAkaVBo
b25lU2ltdWxhdG9yVmVyc2lvbjsKIG15ICRubVBhdGg7CiBteSAkb3NYVmVyc2lvbjsKIG15ICRn
ZW5lcmF0ZURzeW07CkBAIC0xMTU0LDYgKzExNTUsMzEgQEAgc3ViIGlzUGVyaWFuSW5zdGFsbGVk
KCkKICAgICByZXR1cm4gMDsKIH0KIAorc3ViIGRldGVybWluZUlQaG9uZVNpbXVsYXRvclZlcnNp
b24oKQoreworICAgIHJldHVybiBpZiAkaVBob25lU2ltdWxhdG9yVmVyc2lvbjsKKworICAgIGlm
ICghaXNJT1NXZWJLaXQoKSkgeworICAgICAgICAkaVBob25lU2ltdWxhdG9yVmVyc2lvbiA9IC0x
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbXkgJHZlcnNpb24gPSBgL3Vzci9sb2Nh
bC9iaW4vcHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uYDsKKyAgICBteSBAc3BsaXRWZXJzaW9uID0g
c3BsaXQoL1wuLywgJHZlcnNpb24pOworICAgIEBzcGxpdFZlcnNpb24gPj0gMiBvciBkaWUgIklu
dmFsaWQgdmVyc2lvbiAkdmVyc2lvbiI7CisgICAgJGlQaG9uZVNpbXVsYXRvclZlcnNpb24gPSB7
CisgICAgICAgICAgICAibWFqb3IiID0+ICRzcGxpdFZlcnNpb25bMF0sCisgICAgICAgICAgICAi
bWlub3IiID0+ICRzcGxpdFZlcnNpb25bMV0sCisgICAgICAgICAgICAic3VibWlub3IiID0+IGRl
ZmluZWQoJHNwbGl0VmVyc2lvblsyXSA/ICRzcGxpdFZlcnNpb25bMl0gOiAwKSwKKyAgICB9Owor
fQorCitzdWIgaVBob25lU2ltdWxhdG9yVmVyc2lvbigpCit7CisgICAgZGV0ZXJtaW5lSVBob25l
U2ltdWxhdG9yVmVyc2lvbigpOworICAgIHJldHVybiAkaVBob25lU2ltdWxhdG9yVmVyc2lvbjsK
K30KKwogc3ViIGRldGVybWluZU5tUGF0aCgpCiB7CiAgICAgcmV0dXJuIGlmICRubVBhdGg7Cg==
</data>
<flag name="review"
          id="248051"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>