import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class R2D2AndDroidArmy {
public static void main(String[] args) {
InputStream input;
OutputStream output;
try {
input = new FileInputStream("input.txt");
output = new FileOutputStream("output.txt");
} catch (FileNotFoundException e) {
input = System.in;
output = System.out;
}
Kattio io = new Kattio(input, output);
//int t=io.getInt();
//for (int i=1; i<=t; i++)
(new Solve(io)).main();
io.close();
if (input instanceof FileInputStream)
try {
input.close();
} catch (IOException e) {
}
if (output instanceof FileOutputStream)
try {
output.close();
} catch (IOException e) {
}
}
}
class RMQ
{
int n;
int[] arr;
int[] l,r;
int[] dat;
int[] pos;
public RMQ(int n)
{
this.n = n;
arr = new int[n+1];
dat = new int[4*n+1];
l = new int[4*n+1];
r = new int[4*n+1];
pos = new int[n+1];
RMQHelper(1,1,n);
}
private void RMQHelper(int i,int x,int y)
{
l[i]=x;
r[i]=y;
if (x==y)
{
dat[i]=arr[x];
pos[x]=i;
}
else
{
int m=(x+y)/2;
RMQHelper(i*2,x,m);
RMQHelper(i*2+1,m+1,y);
dat[i]=Math.max(dat[i*2], dat[i*2+1]);
}
}
public void update(int x,int y)
{
arr[x] = y;
dat[pos[x]] = y;
updateHelper(pos[x]/2);
}
private void updateHelper(int x)
{
if (x==0) return;
dat[x] = Math.max(dat[x*2],dat[x*2+1]);
updateHelper(x/2);
}
public int get(int l,int r)
{
return getHelper(1,l,r);
}
private int getHelper(int i,int x,int y)
{
int res;
if (y<l[i] || x>r[i]) res=0;
else
if (x<=l[i] && r[i]<=y) res=dat[i];
else
{
res=getHelper(i*2,x,y);
res=Math.max(res,getHelper(i*2+1,x,y));
}
return res;
}
@Override
public String toString() {
return "RMQ [n=" + n + ", arr=" + Arrays.toString(arr) + ", l=" + Arrays.toString(l) + ", r="
+ Arrays.toString(r) + ", dat=" + Arrays.toString(dat) + ", pos=" + Arrays.toString(pos) + "]";
}
}
class RMQEfficient
{
int n;
int[] arr;
int[][] rmq;
int[] pow;
int[] mn;
public RMQEfficient(int[] arr)
{
this.n = arr.length-1;
this.arr = new int[arr.length];
for (int i=1; i<=n; i++)
this.arr[i] = arr[i];
initPowMn();
initRMQ();
}
private void initPowMn()
{
pow = new int[31];
pow[0] = 1;
mn = new int[n+1];
Arrays.fill(mn, 0);
for (int i=1; i<=30; i++)
{
pow[i]=2*pow[i-1];
if (pow[i]<=n)
{
try
{
mn[pow[i]] = i;
}
catch (IndexOutOfBoundsException e)
{
System.out.println(n+" "+pow[i]+" "+i);
}
}
}
for (int i=1; i<=n; i++)
mn[i] = Math.max(mn[i-1], mn[i]);
}
private void initRMQ()
{
rmq = new int[n+1][31];
for (int i=1; i<=n; i++)
Arrays.fill(rmq[i],-1);
for (int i=1; i<=n; i++)
for (int j=0; j<=30; j++)
initRMQHelper(i,j);
}
private int initRMQHelper(int x,int y)
{
if (x>n) return 0;
else
if (rmq[x][y]!=-1) return rmq[x][y];
else
if (y==0)
rmq[x][y]=arr[x];
else
{
int endSide = x+pow[y]-1;
rmq[x][y]=Math.max(initRMQHelper(x,y-1),
initRMQHelper(endSide-pow[y-1]+1,y-1));
}
return rmq[x][y];
}
public int get(int l,int r)
{
if (r<l) return 0;
//System.out.println("get "+l+" "+r);
int length = (r-l+1);
int step = mn[length];
//System.out.println(step);
try
{
return Math.max(rmq[l][step],rmq[r-pow[step]+1][step]);
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println(l+" "+r+" "+(r-pow[step]+1)+" "+step);
return 0;
}
}
}
class Solve {
Kattio io;
int n,m,k;
int[][] a;
RMQEfficient[] ds;
Solve(Kattio io) {
this.io = io;
}
boolean check(int l,int r)
{
//io.println("check "+l+" "+r);
if (r>n) return false;
int sum = 0;
for (int i=1; i<=m; i++)
{
//io.println("check "+l+" "+r);
sum+=ds[i].get(l, r);
}
return (sum<=k);
}
void main() {
n=io.getInt();
m=io.getInt();
k=io.getInt();
a = new int[n+1][m+1];
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
a[i][j]=io.getInt();
ds = new RMQEfficient[m+1];
for (int i=1; i<=m; i++)
{
int[] init = new int[n+1];
for (int j=1; j<=n; j++)
init[j]=a[j][i];
ds[i] = new RMQEfficient(init);
}
//for (int i=1; i<=m; i++)
// io.println(ds[i]);
int res = 0;
int vtres = 0;
for (int i=1; i<=n; i++)
{
int dau = i, cuoi = n;
do
{
int giua=(dau+cuoi)/2;
if (check(i,giua)) dau=giua+1;
else cuoi=giua-1;
}
while (dau<=cuoi);
if (cuoi-i+1>res)
{
res=cuoi-i+1;
vtres=i;
}
}
for (int i=1; i<=m; i++)
io.print(ds[i].get(vtres,vtres+res-1)+" ");
}
}
class Kattio extends PrintWriter {
public Kattio(InputStream i) {
super(new BufferedOutputStream(System.out));
r = new BufferedReader(new InputStreamReader(i));
}
public Kattio(InputStream i, OutputStream o) {
super(new BufferedOutputStream(o));
r = new BufferedReader(new InputStreamReader(i));
}
public boolean hasMoreTokens() {
return peekToken() != null;
}
public int getInt() {
return Integer.parseInt(nextToken());
}
public double getDouble() {
return Double.parseDouble(nextToken());
}
public long getLong() {
return Long.parseLong(nextToken());
}
public String getWord() {
return nextToken();
}
private BufferedReader r;
private String line;
private StringTokenizer st;
private String token;
private String peekToken() {
if (token == null)
try {
while (st == null || !st.hasMoreTokens()) {
line = r.readLine();
if (line == null)
return null;
st = new StringTokenizer(line);
}
token = st.nextToken();
} catch (IOException e) {
}
return token;
}
private String nextToken() {
String ans = peekToken();
token = null;
return ans;
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwppbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CmltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CmltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwppbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CmltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwoKcHVibGljIGNsYXNzIFIyRDJBbmREcm9pZEFybXkgewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCUlucHV0U3RyZWFtIGlucHV0OwoJCU91dHB1dFN0cmVhbSBvdXRwdXQ7CgkJdHJ5IHsKCQkJaW5wdXQgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCJpbnB1dC50eHQiKTsKCQkJb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIm91dHB1dC50eHQiKTsKCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewoJCQlpbnB1dCA9IFN5c3RlbS5pbjsKCQkJb3V0cHV0ID0gU3lzdGVtLm91dDsKCQl9CgkJS2F0dGlvIGlvID0gbmV3IEthdHRpbyhpbnB1dCwgb3V0cHV0KTsKCQkvL2ludCB0PWlvLmdldEludCgpOwoJCS8vZm9yIChpbnQgaT0xOyBpPD10OyBpKyspCgkJKG5ldyBTb2x2ZShpbykpLm1haW4oKTsKCQlpby5jbG9zZSgpOwoKCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlSW5wdXRTdHJlYW0pCgkJCXRyeSB7CgkJCQlpbnB1dC5jbG9zZSgpOwoJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CgkJCX0KCQlpZiAob3V0cHV0IGluc3RhbmNlb2YgRmlsZU91dHB1dFN0cmVhbSkKCQkJdHJ5IHsKCQkJCW91dHB1dC5jbG9zZSgpOwoJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CgkJCX0KCX0KfQoKY2xhc3MgUk1RCnsKCWludCBuOwoJaW50W10gYXJyOwoJaW50W10gbCxyOwoJaW50W10gZGF0OwoJaW50W10gcG9zOwoJCglwdWJsaWMgUk1RKGludCBuKQoJewoJCXRoaXMubiA9IG47CgkJYXJyID0gbmV3IGludFtuKzFdOwoJCWRhdCA9IG5ldyBpbnRbNCpuKzFdOwoJCWwgPSBuZXcgaW50WzQqbisxXTsKCQlyID0gbmV3IGludFs0Km4rMV07CgkJcG9zID0gbmV3IGludFtuKzFdOwoJCVJNUUhlbHBlcigxLDEsbik7Cgl9CgkKCXByaXZhdGUgdm9pZCBSTVFIZWxwZXIoaW50IGksaW50IHgsaW50IHkpCgl7CgkJbFtpXT14OwoJCXJbaV09eTsKCQlpZiAoeD09eSkKCQl7CgkJCWRhdFtpXT1hcnJbeF07CgkJCXBvc1t4XT1pOwoJCX0KCQllbHNlCgkJewoJCQlpbnQgbT0oeCt5KS8yOwoJCQlSTVFIZWxwZXIoaSoyLHgsbSk7CgkJCVJNUUhlbHBlcihpKjIrMSxtKzEseSk7CgkJCWRhdFtpXT1NYXRoLm1heChkYXRbaSoyXSwgZGF0W2kqMisxXSk7CgkJfQoJfQoJCglwdWJsaWMgdm9pZCB1cGRhdGUoaW50IHgsaW50IHkpCgl7CgkJYXJyW3hdID0geTsKCQlkYXRbcG9zW3hdXSA9IHk7CgkJdXBkYXRlSGVscGVyKHBvc1t4XS8yKTsKCX0KCQoJcHJpdmF0ZSB2b2lkIHVwZGF0ZUhlbHBlcihpbnQgeCkKCXsKCQlpZiAoeD09MCkgcmV0dXJuOwoJCQoJCWRhdFt4XSA9IE1hdGgubWF4KGRhdFt4KjJdLGRhdFt4KjIrMV0pOwoJCXVwZGF0ZUhlbHBlcih4LzIpOwoJfQoJCglwdWJsaWMgaW50IGdldChpbnQgbCxpbnQgcikKCXsKCQlyZXR1cm4gZ2V0SGVscGVyKDEsbCxyKTsKCX0KCQoJcHJpdmF0ZSBpbnQgZ2V0SGVscGVyKGludCBpLGludCB4LGludCB5KQoJewoJCWludCByZXM7CgkJaWYgKHk8bFtpXSB8fCB4PnJbaV0pIHJlcz0wOwoJCWVsc2UKCQlpZiAoeDw9bFtpXSAmJiByW2ldPD15KSByZXM9ZGF0W2ldOwoJCWVsc2UKCQl7CgkJCXJlcz1nZXRIZWxwZXIoaSoyLHgseSk7CgkJCXJlcz1NYXRoLm1heChyZXMsZ2V0SGVscGVyKGkqMisxLHgseSkpOwoJCX0KCQkKCQlyZXR1cm4gcmVzOwoJfQoKCUBPdmVycmlkZQoJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKCQlyZXR1cm4gIlJNUSBbbj0iICsgbiArICIsIGFycj0iICsgQXJyYXlzLnRvU3RyaW5nKGFycikgKyAiLCBsPSIgKyBBcnJheXMudG9TdHJpbmcobCkgKyAiLCByPSIKCQkJCSsgQXJyYXlzLnRvU3RyaW5nKHIpICsgIiwgZGF0PSIgKyBBcnJheXMudG9TdHJpbmcoZGF0KSArICIsIHBvcz0iICsgQXJyYXlzLnRvU3RyaW5nKHBvcykgKyAiXSI7Cgl9Cn0KCmNsYXNzIFJNUUVmZmljaWVudAp7CglpbnQgbjsKCWludFtdIGFycjsKCWludFtdW10gcm1xOwoJaW50W10gcG93OwoJaW50W10gbW47CgkKCXB1YmxpYyBSTVFFZmZpY2llbnQoaW50W10gYXJyKQoJewoJCXRoaXMubiA9IGFyci5sZW5ndGgtMTsKCQkKCQl0aGlzLmFyciA9IG5ldyBpbnRbYXJyLmxlbmd0aF07CgkJZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspCgkJCXRoaXMuYXJyW2ldID0gYXJyW2ldOwoJCQoJCWluaXRQb3dNbigpOwoJCWluaXRSTVEoKTsKCX0KCQoJcHJpdmF0ZSB2b2lkIGluaXRQb3dNbigpCgl7CgkJcG93ID0gbmV3IGludFszMV07CgkJcG93WzBdID0gMTsKCQkKCQltbiA9IG5ldyBpbnRbbisxXTsKCQlBcnJheXMuZmlsbChtbiwgMCk7CgkJCgkJZm9yIChpbnQgaT0xOyBpPD0zMDsgaSsrKQoJCXsKCQkJcG93W2ldPTIqcG93W2ktMV07CgkJCWlmIChwb3dbaV08PW4pIAoJCQl7CgkJCQl0cnkKCQkJCXsKCQkJCQltbltwb3dbaV1dID0gaTsKCQkJCX0KCQkJCWNhdGNoIChJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpCgkJCQl7CgkJCQkJU3lzdGVtLm91dC5wcmludGxuKG4rIiAiK3Bvd1tpXSsiICIraSk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspCgkJCW1uW2ldID0gTWF0aC5tYXgobW5baS0xXSwgbW5baV0pOwoJfQoJCglwcml2YXRlIHZvaWQgaW5pdFJNUSgpCgl7CgkJcm1xID0gbmV3IGludFtuKzFdWzMxXTsKCQlmb3IgKGludCBpPTE7IGk8PW47IGkrKykKCQkJQXJyYXlzLmZpbGwocm1xW2ldLC0xKTsKCQlmb3IgKGludCBpPTE7IGk8PW47IGkrKykKCQkJZm9yIChpbnQgaj0wOyBqPD0zMDsgaisrKQoJCQkJaW5pdFJNUUhlbHBlcihpLGopOwoJfQoJCglwcml2YXRlIGludCBpbml0Uk1RSGVscGVyKGludCB4LGludCB5KQoJewoJCWlmICh4Pm4pIHJldHVybiAwOwoJCWVsc2UKCQlpZiAocm1xW3hdW3ldIT0tMSkgcmV0dXJuIHJtcVt4XVt5XTsKCQllbHNlCgkJaWYgKHk9PTApCgkJCXJtcVt4XVt5XT1hcnJbeF07CgkJZWxzZQoJCXsKCQkJaW50IGVuZFNpZGUgPSB4K3Bvd1t5XS0xOwoJCQlybXFbeF1beV09TWF0aC5tYXgoaW5pdFJNUUhlbHBlcih4LHktMSksCgkJCQkJaW5pdFJNUUhlbHBlcihlbmRTaWRlLXBvd1t5LTFdKzEseS0xKSk7CgkJfQoJCXJldHVybiBybXFbeF1beV07Cgl9CgkKCXB1YmxpYyBpbnQgZ2V0KGludCBsLGludCByKQoJewoJCWlmIChyPGwpIHJldHVybiAwOwoJCS8vU3lzdGVtLm91dC5wcmludGxuKCJnZXQgIitsKyIgIityKTsKCQlpbnQgbGVuZ3RoID0gKHItbCsxKTsKCQlpbnQgc3RlcCA9IG1uW2xlbmd0aF07CgkJLy9TeXN0ZW0ub3V0LnByaW50bG4oc3RlcCk7CgkJdHJ5CgkJewoJCQlyZXR1cm4gTWF0aC5tYXgocm1xW2xdW3N0ZXBdLHJtcVtyLXBvd1tzdGVwXSsxXVtzdGVwXSk7CgkJfQoJCWNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkKCQl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbihsKyIgIityKyIgIisoci1wb3dbc3RlcF0rMSkrIiAiK3N0ZXApOwoJCQlyZXR1cm4gMDsKCQl9Cgl9CgkKfQoKY2xhc3MgU29sdmUgewoJS2F0dGlvIGlvOwoJaW50IG4sbSxrOwoJaW50W11bXSBhOwoJUk1RRWZmaWNpZW50W10gZHM7CglTb2x2ZShLYXR0aW8gaW8pIHsKCQl0aGlzLmlvID0gaW87Cgl9CgkKCWJvb2xlYW4gY2hlY2soaW50IGwsaW50IHIpCgl7CgkJLy9pby5wcmludGxuKCJjaGVjayAiK2wrIiAiK3IpOwoJCWlmIChyPm4pIHJldHVybiBmYWxzZTsKCQlpbnQgc3VtID0gMDsKCQlmb3IgKGludCBpPTE7IGk8PW07IGkrKykKCQl7CgkJCS8vaW8ucHJpbnRsbigiY2hlY2sgIitsKyIgIityKTsKCQkJc3VtKz1kc1tpXS5nZXQobCwgcik7CgkJfQoJCXJldHVybiAoc3VtPD1rKTsKCX0KCgl2b2lkIG1haW4oKSB7CgkJbj1pby5nZXRJbnQoKTsKCQltPWlvLmdldEludCgpOwoJCWs9aW8uZ2V0SW50KCk7CgkJYSA9IG5ldyBpbnRbbisxXVttKzFdOwoJCWZvciAoaW50IGk9MTsgaTw9bjsgaSsrKQoJCQlmb3IgKGludCBqPTE7IGo8PW07IGorKykKCQkJCWFbaV1bal09aW8uZ2V0SW50KCk7CgkJCgkJZHMgPSBuZXcgUk1RRWZmaWNpZW50W20rMV07CgkJCgkJZm9yIChpbnQgaT0xOyBpPD1tOyBpKyspCgkJewoJCQlpbnRbXSBpbml0ID0gbmV3IGludFtuKzFdOwoJCQlmb3IgKGludCBqPTE7IGo8PW47IGorKykKCQkJCWluaXRbal09YVtqXVtpXTsKCQkJZHNbaV0gPSBuZXcgUk1RRWZmaWNpZW50KGluaXQpOwoJCX0KCQkKCQkvL2ZvciAoaW50IGk9MTsgaTw9bTsgaSsrKQoJCS8vCWlvLnByaW50bG4oZHNbaV0pOwoJCQoJCWludCByZXMgPSAwOwoJCWludCB2dHJlcyA9IDA7CgkJZm9yIChpbnQgaT0xOyBpPD1uOyBpKyspCgkJewoJCQlpbnQgZGF1ID0gaSwgY3VvaSA9IG47CgkJCWRvCgkJCXsKCQkJCWludCBnaXVhPShkYXUrY3VvaSkvMjsKCQkJCWlmIChjaGVjayhpLGdpdWEpKSBkYXU9Z2l1YSsxOwoJCQkJZWxzZSBjdW9pPWdpdWEtMTsKCQkJfQoJCQl3aGlsZSAoZGF1PD1jdW9pKTsKCQkJCgkJCWlmIChjdW9pLWkrMT5yZXMpCgkJCXsKCQkJCXJlcz1jdW9pLWkrMTsKCQkJCXZ0cmVzPWk7CgkJCX0KCQl9CgkJCgkJZm9yIChpbnQgaT0xOyBpPD1tOyBpKyspCgkJCWlvLnByaW50KGRzW2ldLmdldCh2dHJlcyx2dHJlcytyZXMtMSkrIiAiKTsKCQkKCX0KfQoKY2xhc3MgS2F0dGlvIGV4dGVuZHMgUHJpbnRXcml0ZXIgewoJcHVibGljIEthdHRpbyhJbnB1dFN0cmVhbSBpKSB7CgkJc3VwZXIobmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKFN5c3RlbS5vdXQpKTsKCQlyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpKSk7Cgl9CgoJcHVibGljIEthdHRpbyhJbnB1dFN0cmVhbSBpLCBPdXRwdXRTdHJlYW0gbykgewoJCXN1cGVyKG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShvKSk7CgkJciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaSkpOwoJfQoKCXB1YmxpYyBib29sZWFuIGhhc01vcmVUb2tlbnMoKSB7CgkJcmV0dXJuIHBlZWtUb2tlbigpICE9IG51bGw7Cgl9CgoJcHVibGljIGludCBnZXRJbnQoKSB7CgkJcmV0dXJuIEludGVnZXIucGFyc2VJbnQobmV4dFRva2VuKCkpOwoJfQoKCXB1YmxpYyBkb3VibGUgZ2V0RG91YmxlKCkgewoJCXJldHVybiBEb3VibGUucGFyc2VEb3VibGUobmV4dFRva2VuKCkpOwoJfQoKCXB1YmxpYyBsb25nIGdldExvbmcoKSB7CgkJcmV0dXJuIExvbmcucGFyc2VMb25nKG5leHRUb2tlbigpKTsKCX0KCglwdWJsaWMgU3RyaW5nIGdldFdvcmQoKSB7CgkJcmV0dXJuIG5leHRUb2tlbigpOwoJfQoKCXByaXZhdGUgQnVmZmVyZWRSZWFkZXIgcjsKCXByaXZhdGUgU3RyaW5nIGxpbmU7Cglwcml2YXRlIFN0cmluZ1Rva2VuaXplciBzdDsKCXByaXZhdGUgU3RyaW5nIHRva2VuOwoKCXByaXZhdGUgU3RyaW5nIHBlZWtUb2tlbigpIHsKCQlpZiAodG9rZW4gPT0gbnVsbCkKCQkJdHJ5IHsKCQkJCXdoaWxlIChzdCA9PSBudWxsIHx8ICFzdC5oYXNNb3JlVG9rZW5zKCkpIHsKCQkJCQlsaW5lID0gci5yZWFkTGluZSgpOwoJCQkJCWlmIChsaW5lID09IG51bGwpCgkJCQkJCXJldHVybiBudWxsOwoJCQkJCXN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihsaW5lKTsKCQkJCX0KCQkJCXRva2VuID0gc3QubmV4dFRva2VuKCk7CgkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKCQkJfQoJCXJldHVybiB0b2tlbjsKCX0KCglwcml2YXRlIFN0cmluZyBuZXh0VG9rZW4oKSB7CgkJU3RyaW5nIGFucyA9IHBlZWtUb2tlbigpOwoJCXRva2VuID0gbnVsbDsKCQlyZXR1cm4gYW5zOwoJfQp9