7  net/luminis/quic/run/KwikCli()V java/io/File /logs   (Ljava/lang/String;)V  exists()Z/logs/./ makeConcatWithConstants&(Ljava/lang/String;)Ljava/lang/String;net/luminis/quic/log/FileLogger  (Ljava/io/File;)V !" #$"net/luminis/quic/run/InteropRunnerloggerLnet/luminis/quic/log/Logger; &'( )*net/luminis/quic/log/LoggerlogInfo(Z)V &, -* logWarning/java/io/IOException 123 45java/lang/SystemoutLjava/io/PrintStream; 89: ; java/io/PrintStreamprintln 1= >?exit(I)VA=Expected at least 3 arguments: C DE outputDirLjava/io/File; G H isDirectory J Kmkdir M NO TESTCASESLjava/util/List; QRS TUjava/util/Listcontains(Ljava/lang/Object;)ZX Y$(Ljava/util/List;)Ljava/lang/String;[java/util/ArrayList Z^ java/net/URL ] Qa bUadd def gh)net/luminis/quic/QuicClientConnectionImpl newBuilder1()Lnet/luminis/quic/QuicClientConnection$Builder; jkl mnnet/luminis/quic/VersionQUIC_version_1Lnet/luminis/quic/Version; pqr st-net/luminis/quic/QuicClientConnection$BuilderversionK(Lnet/luminis/quic/Version;)Lnet/luminis/quic/QuicClientConnection$Builder; pv whnoServerCertificateCheck Qy z{get(I)Ljava/lang/Object; ]} ~toURI()Ljava/net/URI; p uri?(Ljava/net/URI;)Lnet/luminis/quic/QuicClientConnection$Builder; p #N(Lnet/luminis/quic/log/Logger;)Lnet/luminis/quic/QuicClientConnection$Builder; p  initialRtt2(I)Lnet/luminis/quic/QuicClientConnection$Builder; SSLKEYLOGFILE 1 getenv  java/lang/StringisBlank  zjava/nio/file/Paths;(Ljava/lang/String;[Ljava/lang/String;)Ljava/nio/file/Path; p secretsE(Ljava/nio/file/Path;)Lnet/luminis/quic/QuicClientConnection$Builder;transfer Uequals  testTransferB(Ljava/util/List;Lnet/luminis/quic/QuicClientConnection$Builder;)V resumption testResumption multiconnect testMultiConnectzerortt  testZeroRtt keyupdate  testKeyUpdatejava/net/MalformedURLExceptionjava/net/URISyntaxException )(Ljava/io/IOException;)Ljava/lang/String; p build-()Lnet/luminis/quic/QuicClientConnectionImpl; hq-interop  %net/luminis/quic/QuicClientConnectionconnect[(ILjava/lang/String;Lnet/luminis/quic/TransportParameters;Ljava/util/List;)Ljava/util/List;!java/util/concurrent/ForkJoinPool Q size()I  java/lang/Integermin(II)I ? runM(Ljava/util/List;Lnet/luminis/quic/QuicClientConnection;)Ljava/lang/Runnable; submit9(Ljava/lang/Runnable;)Ljava/util/concurrent/ForkJoinTask;  java/util/concurrent/TimeUnitMINUTESLjava/util/concurrent/TimeUnit;  z!java/util/concurrent/ForkJoinTask4(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object;X & infojava/lang/InterruptedExceptiondownload tasks interrupted & error*(Ljava/lang/String;Ljava/lang/Throwable;)V'java/util/concurrent/ExecutionExceptiondownload tasks failed%java/util/concurrent/TimeoutExceptiondownload tasks timed out...   close "java/lang/IllegalArgumentException expected 2 download URLs    http09RequestF(Lnet/luminis/quic/QuicClientConnection;Ljava/net/URL;Ljava/io/File;)V "(Ljava/net/URL;)Ljava/lang/String;  getNewSessionTickets()Ljava/util/List; Q isEmpty/Server did not provide any new session tickets. "net/luminis/quic/QuicSessionTicket p" #$ sessionTicketU(Lnet/luminis/quic/QuicSessionTicket;)Lnet/luminis/quic/QuicClientConnection$Builder; && '*useRelativeTime &) ** logRecovery &, -*logCongestionControl &/ 0* logPackets Q2 34iterator()Ljava/util/Iterator; 678 9java/util/IteratorhasNext 6; <=next()Ljava/lang/Object; ]? @AgetFile()Ljava/lang/String; C DAtimeNow F G8(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;28 J K4(Ljava/net/URL;Ljava/lang/String;)Ljava/lang/String; M N;(Ljava/lang/String;Ljava/io/IOException;)Ljava/lang/String; &P   S T8(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;V:Error: did not get any new session tickets; aborting test. X Y(I)Ljava/lang/String;[8Connection closed; starting second connection with 0-rtt ]] ^AgetPatha5net/luminis/quic/QuicClientConnection$StreamEarlyData c degetBytes()[B `g h([BZ)VjIAttempting to create new stream after connect, because it failed on 0-rttl m&(Ljava/lang/Object;)Ljava/lang/String;onet/luminis/quic/QuicStream q rAgetAbsolutePath t uvhttp09RequestWithZeroRttStreame(Lnet/luminis/quic/QuicConnection;Ljava/lang/String;Lnet/luminis/quic/QuicStream;Ljava/lang/String;)V z {| createStream (Z)Lnet/luminis/quic/QuicStream; n~ getOutputStream()Ljava/io/OutputStream;  java/io/OutputStreamwrite([B)V java/io/FileOutputStream  '(Ljava/lang/String;Ljava/lang/String;)V  n getInputStream()Ljava/io/InputStream;  3(Ljava/io/InputStream;Ljava/io/FileOutputStream;I)VInitiating key update d  updateKeys  java/io/InputStream transferTo(Ljava/io/OutputStream;)J(net/luminis/quic/client/h09/Http09Client  +(Lnet/luminis/quic/QuicClientConnection;Z)V  gjava/net/http/HttpRequest%()Ljava/net/http/HttpRequest$Builder;  !java/net/http/HttpRequest$Builder3(Ljava/net/URI;)Ljava/net/http/HttpRequest$Builder;  ()Ljava/net/http/HttpRequest;  AgetName  'java/net/http/HttpResponse$BodyHandlersofFile>(Ljava/nio/file/Path;)Ljava/net/http/HttpResponse$BodyHandler;  java/net/http/HttpClientsenda(Ljava/net/http/HttpRequest;Ljava/net/http/HttpResponse$BodyHandler;)Ljava/net/http/HttpResponse;java/lang/RuntimeException  (Ljava/lang/Throwable;)V/index   read([BII)I  ([BII)V  java/time/Instantnow()Ljava/time/Instant;  java/time/ZoneId systemDefault()Ljava/time/ZoneId;  atZone-(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;  java/time/LocalTimefrom<(Ljava/time/temporal/TemporalAccessor;)Ljava/time/LocalTime; mm:ss.SSS  "java/time/format/DateTimeFormatter ofPattern8(Ljava/lang/String;)Ljava/time/format/DateTimeFormatter;  format9(Ljava/time/temporal/TemporalAccessor;)Ljava/lang/String; Q parallelStream()Ljava/util/stream/Stream; acceptF(Lnet/luminis/quic/QuicClientConnection;)Ljava/util/function/Consumer;  java/util/stream/StreamforEach (Ljava/util/function/Consumer;)V Q ofl(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/List; TC_TRANSFERLjava/lang/String; ConstantValue TC_RESUMPTIONTC_MULTITC_0RTT TC_KEYUPDATECodeLineNumberTableLocalVariableTablethis$Lnet/luminis/quic/run/InteropRunner;main([Ljava/lang/String;)VeLjava/io/IOException; downloadUrlsbuilder/Lnet/luminis/quic/QuicClientConnection$Builder;keylogfileEnvVarLjava/lang/Exception;args[Ljava/lang/String;logDirlogFiletestCaseiILocalVariableTypeTable Ljava/util/List; StackMapTable(java/lang/Exception Ljava/lang/InterruptedException;)Ljava/util/concurrent/ExecutionException;'Ljava/util/concurrent/TimeoutException;url1Ljava/net/URL; connection'Lnet/luminis/quic/QuicClientConnection;myPool#Ljava/util/concurrent/ForkJoinPool; Exceptions SignatureR(Ljava/util/List;Lnet/luminis/quic/QuicClientConnection$Builder;)Vurl2newSessionTickets connection26Ljava/util/List;ioErrordownload httpRequestearlyDataRequestsalpnearlyDataStreamsILjava/util/List;/Ljava/util/List; requestPath outputFile httpStreamLnet/luminis/quic/QuicStream;fileNameLjava/io/FileOutputStream; httpClientLjava/net/http/HttpClient;requestLjava/net/http/HttpRequest;urlquicConnection!Lnet/luminis/quic/QuicConnection;inLjava/io/InputStream;bytesbuffer[B transferredR localTimeNowLjava/time/LocalTime; timeFormatter$Ljava/time/format/DateTimeFormatter;lambda$testTransfer$1:(Ljava/util/List;Lnet/luminis/quic/QuicClientConnection;)Vlambda$testTransfer$08(Lnet/luminis/quic/QuicClientConnection;Ljava/net/URL;)V SourceFileInteropRunner.javaBootstrapMethodsb cde f$java/lang/invoke/StringConcatFactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;hkwik_client.logjCannot open log file l*Invalid argument; test case '' not known.nAvailable test cases: pWriting keys to r&Invalid argument: cannot parse URL ''t I/O Error: v wxy z{"java/lang/invoke/LambdaMetafactory metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;~  YZ Downloaded Start downloading  at Downloaded  finished at  Error in client: Starting first download at Got  new session ticketsGET   Processing response for stream Download finished at Starting download at (Ljava/lang/Object;)V  [\(Ljava/net/URL;)V InnerClassesBuilderStreamEarlyDatajava/net/http/HttpResponse BodyHandlers&java/net/http/HttpResponse$BodyHandler BodyHandler%java/lang/invoke/MethodHandles$Lookupjava/lang/invoke/MethodHandlesLookup!           NO DE #$/*.  ֻY L+MYY, %+N0,67<*0@7<Y*2 BBF BIW*2NL-P0-V70LW76ZY\:6*]Y*2_`Wc:ioWuWx]|WWdW:)!07W- L- 9- &- - &:0*27:07BE..3< =?0@9ABEEBFCRDVG\HdIhLuM~NQRSTWYZ[Z^_`a bc!d(e5fBgSj\kfmonypqstvw}yz}{|~p FO(  EM $!"# $%IA,&.)QtpB'S. *x]M+N-WYd*ַ:*-W*5:$::-4X[4Xl4X~J  4FJX[]iln{~R] )n * +O ,-./4`01# $%$[Qp]PQ2.34 * Y *x]M*x]N+:W,B,:<cL+ioW+-|W+uW+W+x!W+:W-B-f  +3BKYbis~HO ,-+5-3./b6O.7/#$b68%lQp]]Q2.34 w%(+.*1M,5s,:]N->BE+:HW-B-BI:BLO>.B $>RZir4Z0./9>c:-O# $%$+6aQp6].234  .(BQ+M,:W,*x]B*xBR,N-UO-W,Z+-x!W+:ZY\:6*3*x]\_:`Ybf`W:::6_xixk,*`x]\xnBpsBw, ")7H_foz{#/=Syp ;;!"h!"O)m./f06O7/<O=>O#*$f068<?>@%'{QHQ:Q%+2.34 Dz.Bx+M,W*x]\NBp:,y:}-_b}-:YY:,dX*xBRF  . < D M `jmRO ./<ADBMzCDmZEF4F# $2.34 UY*N+|:Y+> :-,pYSW NY-ĿGJ.GJGJ"  -!G%J#K$T&H =GH*IJ-EK U./UK-UDE% J' uvNY- F,+:Ƕ:YY-: Y-:,X& *+,-!/4072A4M5H#E44FNLMNANCDNBA 4F%! 2. 1N6$*-Y6+-`6ܱ9: <=&>0@>"1NO14F1P"+QR (S"%  T&2.DAVӸٶ߸KL+*C DE UVWX YZN*+ O./ [\= *+B ./ K-])L5^_`|agaiakamaoaqasu|}|aaaaaaaaaau2p `