SVN-fs-dump-format-version: 2
UUID: 6920174f-671f-0410-b817-9fe1dc2ce17e
Revision-number: 0
Prop-content-length: 56
Content-length: 56
K 8
svn:date
V 27
2006-10-09T21:14:35.851011Z
PROPS-END
Revision-number: 1
Prop-content-length: 117
Content-length: 117
K 7
svn:log
V 16
Initial release
K 10
svn:author
V 6
onofre
K 8
svn:date
V 27
2006-12-05T21:14:43.024664Z
PROPS-END
Node-path: CruiseControlConfigurator
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/branches
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/tags
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Revision-number: 2
Prop-content-length: 131
Content-length: 131
K 7
svn:log
V 30
Add the first POM definition.
K 10
svn:author
V 6
onofre
K 8
svn:date
V 27
2006-12-06T07:18:41.181656Z
PROPS-END
Node-path: CruiseControlConfigurator/trunk/pom.xml
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 2524
Text-content-md5: 0fbaf95fd18b4a7da450298807da69fc
Text-content-sha1: b9a6eb315d80959c1481fc19f8414f16ef9e4466
Content-length: 2534
PROPS-END
Redirecting to CruiseControlConfigurator ...
Revision-number: 8 Prop-content-length: 123 Content-length: 123 K 7 svn:log V 22 Add the login window. K 10 svn:author V 6 onofre K 8 svn:date V 27 2006-12-10T16:25:32.811751Z PROPS-END Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/CruiseControlConfiguratorApplication.java Node-kind: file Node-action: change Text-content-length: 1878 Text-content-md5: d6c385063487b10705478a11d9119ee6 Text-content-sha1: daed30d70c3b9a2d2668897e6e8dd10ce65420a0 Content-length: 1878 package net.sourceforge.buildprocess.cruisecontrolconfigurator.client; import nextapp.echo2.app.ApplicationInstance; import nextapp.echo2.app.Window; /** * This is the main Echo2 AJAX client application * * @author Jean-Baptiste Onofr */ public class CruiseControlConfiguratorApplication extends ApplicationInstance { /** * The user logon the application */ private String userid; /** * Convenience method to return the active CruiseControlConfigurator application * asCruiseControlConfiguratorApplication.
*
* @return the active CruiseControlConfiguratorApplication
*/
public static CruiseControlConfiguratorApplication getApplication() {
return (CruiseControlConfiguratorApplication)getActive();
}
/**
* Logon on CruiseControlConfigurator (using model) and display the
* ProjectScreen on success.
*
* @param userid the userid
* @param password the user password
* @return true if the user is identified, false else
*/
public boolean connect(String userid, String password) {
// if the user is identified
// store the userid
this.userid = userid;
// display the ProjectScreen
ProjectScreen projectScreen = new ProjectScreen();
getDefaultWindow().setContent(projectScreen);
return true;
}
/**
* Disconnect the session and display the authentication screen
*/
public void disconnect() {
this.userid = null;
getDefaultWindow().setContent(new LoginScreen());
}
/**
* Init the CruiseControlConfigurator window
*
* @return the main window
*/
public Window init() {
// setStyleSheet(Styles.DEFAULT_STYLE_SHEET);
Window window = new Window();
window.setTitle("CruiseControlConfigurator");
window.setContent(new LoginScreen());
return window;
}
}
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/LoginScreen.java
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 1060
Text-content-md5: c0d790a2ef135141d142b303711668ad
Text-content-sha1: 91f261b467447947ee6bbc9920881863dc645565
Content-length: 1070
PROPS-END
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.PasswordField;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
/**
* Login screen ContentPane
*
* @author Jean-Baptiste Onofr
*/
public class LoginScreen extends ContentPane {
private TextField useridField;
private PasswordField passordField;
/**
* Create a new LoginScreen
*/
public LoginScreen() {
super();
// setStyleName("LoginScreen.ContentPane");
Label label;
Column column = new Column();
// column.setStyleName("LoginScreen.Column")
add(column);
}
}
Revision-number: 9
Prop-content-length: 152
Content-length: 152
K 7
svn:log
V 51
Add style information and resume the login screen.
K 10
svn:author
V 6
onofre
K 8
svn:date
V 27
2006-12-10T20:58:09.405246Z
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/CruiseControlConfiguratorApplication.java
Node-kind: file
Node-action: change
Text-content-length: 1875
Text-content-md5: 26263d8953a65dccbdf4ce5fdf8f889f
Text-content-sha1: a100b9d95421237780e3ddc434616434efe3ca36
Content-length: 1875
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.app.Window;
/**
* This is the main Echo2 AJAX client application
*
* @author Jean-Baptiste Onofr
*/
public class CruiseControlConfiguratorApplication extends ApplicationInstance {
/**
* The user logon the application
*/
private String userid;
/**
* Convenience method to return the active CruiseControlConfigurator application
* as CruiseControlConfiguratorApplication.
*
* @return the active CruiseControlConfiguratorApplication
*/
public static CruiseControlConfiguratorApplication getApplication() {
return (CruiseControlConfiguratorApplication)getActive();
}
/**
* Logon on CruiseControlConfigurator (using model) and display the
* ProjectScreen on success.
*
* @param userid the userid
* @param password the user password
* @return true if the user is identified, false else
*/
public boolean connect(String userid, String password) {
// if the user is identified
// store the userid
this.userid = userid;
// display the ProjectScreen
ProjectScreen projectScreen = new ProjectScreen();
getDefaultWindow().setContent(projectScreen);
return true;
}
/**
* Disconnect the session and display the authentication screen
*/
public void disconnect() {
this.userid = null;
getDefaultWindow().setContent(new LoginScreen());
}
/**
* Init the CruiseControlConfigurator window
*
* @return the main window
*/
public Window init() {
setStyleSheet(Styles.DEFAULT_STYLE_SHEET);
Window window = new Window();
window.setTitle("CruiseControlConfigurator");
window.setContent(new LoginScreen());
return window;
}
}
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/LoginScreen.java
Node-kind: file
Node-action: change
Text-content-length: 3264
Text-content-md5: 5c5ba9ca91dc5969943ecfa9725eb281
Text-content-sha1: ac0b7482f84bbb14e5b86df87af34cc2c9881a4f
Content-length: 3264
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.PasswordField;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
/**
* Login screen ContentPane
*
* @author Jean-Baptiste Onofr
*/
public class LoginScreen extends ContentPane {
private TextField useridField;
private PasswordField passordField;
/**
* Create a new LoginScreen
*/
public LoginScreen() {
super();
setStyleName("LoginScreen.ContentPane");
Label label;
Row row = new Row();
row.setStyleName("LoginScreen.Row")
add(row);
label = new Label(Styles.BUILDPROCESS_IMAGE);
row.add(label);
label = new Label(Styles.CRUISECONTROLCONFIGURATOR_IMAGE);
row.add(label);
WindowPane loginWindow = new WindowPane();
loginWindow.setTitle("Login");
loginWindow.setStyleName("LoginScreen.LoginWindow");
loginWindow.setDefaultCloseOperation(WindowPane.DO_NOTHING_ON_CLOSE);
add(loginWindow);
SplitPane splitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP, new Extent(32));
loginWindow.add(splitPane);
Row controlRow = new Row();
controlRow.setStyleName("ControlPane");
splitPane.add(controlRow);
Button button = new Button("Continue", Styles.ICON_24_YES);
button.setStyleName("ControlPane.Button");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
processLogin();
}
});
controlRow.add(button);
Grid layoutGrid = new Grid();
layoutGrid.setStyleName("LoginScreen.LayoutGrid");
splitPane.add(layoutGrid);
label = new Label("User Id");
label.setStyleName("LoginScreen.Prompt");
layoutGrid.add(label);
useridField = new TextField();
useridField.setWidth(new Extent(300, Extent.PX));
useridField.setStyleName("Default");
useridField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CruiseControlConfiguratorApplication.getActive().setFocusedComponent(passwordField);
}
});
layoutGrid.add(useridField);
label = new Label("Password");
label.setStyleName("LoginScreen.Prompt");
layoutGrid.add(label);
passwordField = new PasswordField();
passwordField.setWidth(new Extent(300, Extent.PX));
passwordField.setStyleName("Default");
layoutGrid.add(passwordField);
passwordField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
processLogin();
}
});
CruiseControlConfiguratorApplication.getActive().setFocusedComponent(useridField);
}
/**
* Process a user log-in request
*/
private void processLogin() {
Window.alert("User : " + useridField.getText() + " / Password : " + passwordField.getText());
}
}
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/Styles.java
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 1264
Text-content-md5: 9ebcc4917946d37098e6dcf05364df8d
Text-content-sha1: fa1fbbd48aadfbf7f7877a34bbe9c2d7c6b0ca3f
Content-length: 1274
PROPS-END
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
import nextapp.echo2.app.ImageReference;
import nextapp.echo2.app.RessourceImageReference;
import nextapp.echo2.app.StyleSheet;
import nextapp.echo2.app.componentxml.ComponentXmlException;
import nextapp.echo2.app.componentxml.StyleSheetLoader;
/**
* Define the look'n feel information.
*
* @author Jean-Baptiste Onofr
*/
public class Styles {
public static final String IMAGE_PATH = "/cruisecontrolconfigurator/resource/image/";
public static final String STYLE_PATH = "/cruisecontrolconfigurator/resource/style/";
/**
* Default application style sheet.
*/
public static final StyleSheet DEFAULT_STYLE_SHEET;
static {
try {
DEFAULT_STYLE_SHEET = StyleSheetLoader.load(STYLE_PATH + "Default.stylesheet", Thread.currentThread().getContextClassloader());
}
catch(ComponentXmlException exception) {
throw new RuntimeException(exception);
}
}
// Images
public static final ImageReference BUILDPROCESS_IMAGE = new ResourceImageReference(IMAGE_PATH + "BuildProcessLogo.png");
public static final ImageReference CRUISECONTROLCONFIGURATOR_IMAGE = new ResourceImageReference(IMAGE_PATH + "CCC.png");
}
Revision-number: 10
Prop-content-length: 144
Content-length: 144
K 7
svn:log
V 43
Add image for AJAX client and new classes.
K 10
svn:author
V 6
onofre
K 8
svn:date
V 27
2006-12-11T19:01:13.911496Z
PROPS-END
Node-path: CruiseControlConfigurator/trunk/pom.xml
Node-kind: file
Node-action: change
Text-content-length: 3504
Text-content-md5: 6313ecab8d76790ce1975502c8a34cc2
Text-content-sha1: 120fb022b2df105ad6c0d6a9d55f691d2e9f4142
Content-length: 3504
CruiseControlConfiguratorApplication.
*
* @return the active CruiseControlConfiguratorApplication
*/
public static CruiseControlConfiguratorApplication getApplication() {
return (CruiseControlConfiguratorApplication)getActive();
}
/**
* Logon on CruiseControlConfigurator (using model) and display the
* ProjectScreen on success.
*
* @param userid the userid
* @param password the user password
* @return true if the user is identified, false else
*/
public boolean connect(String userid, String password) {
// if the user is identified
// store the userid
this.userid = userid;
// display the ProjectScreen
//ProjectScreen projectScreen = new ProjectScreen();
//getDefaultWindow().setContent(projectScreen);
return true;
}
/**
* Disconnect the session and display the authentication screen
*/
public void disconnect() {
this.userid = null;
getDefaultWindow().setContent(new LoginScreen());
}
/**
* Init the CruiseControlConfigurator window
*
* @return the main window
*/
public Window init() {
setStyleSheet(Styles.DEFAULT_STYLE_SHEET);
Window window = new Window();
window.setTitle(Messages.getString("CruiseControlConfigurator.Title.Window"));
window.setContent(new LoginScreen());
return window;
}
}
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/CruiseControlConfiguratorServlet.java
Node-kind: file
Node-action: change
Text-content-length: 783
Text-content-md5: b633ff91ab2a3dfde83c60a7b72b7a7d
Text-content-sha1: dbf6b9dfe4701c772d74a031061717920ecb7e90
Content-length: 783
package net.sourceforge.buildprocess.cruisecontrolconfigurator.web;
import nextapp.echo2.app.ApplicationInstance;
import nextapp.echo2.webcontainer.WebContainerServlet;
/**
* This is the echo-specific of a HttpServlet.
* This servlet is responsible for processing all requests from
* the client-side Echo engine, including rendering the initial
* HTML page, handling XML synchronization services, and sending
* graphic images to the client. All succh client interaction work
* is done behind the scenes.
*
* @author Jean-Baptiste Onofr
*/
public class CruiseControlConfiguratorServlet extends WebContainerServlet {
public ApplicationInstance newApplicationInstance() {
return new CruiseControlConfiguratorApplication();
}
}
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/LoginScreen.java
Node-kind: file
Node-action: change
Text-content-length: 3430
Text-content-md5: 0d440e208750e4acd9e9c70628c1f420
Text-content-sha1: d927d7749a2d2fe69f768b60e87628272233c29b
Content-length: 3430
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
import nextapp.echo2.app.Button;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Grid;
import nextapp.echo2.app.Label;
import nextapp.echo2.app.PasswordField;
import nextapp.echo2.app.Row;
import nextapp.echo2.app.SplitPane;
import nextapp.echo2.app.TextField;
import nextapp.echo2.app.WindowPane;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
/**
* Login screen ContentPane
*
* @author Jean-Baptiste Onofr
*/
public class LoginScreen extends ContentPane {
private TextField useridField;
private PasswordField passordField;
/**
* Create a new LoginScreen
*/
public LoginScreen() {
super();
setStyleName("LoginScreen.ContentPane");
Label label;
Column column = new Column();
row.setStyleName("LoginScreen.Column");
add(column);
label = new Label(Styles.BUILDPROCESS_IMAGE);
row.add(label);
label = new Label(Styles.CRUISECONTROLCONFIGURATOR_IMAGE);
row.add(label);
WindowPane loginWindow = new WindowPane();
loginWindow.setTitle(Messages.getString("LoginScreen.LoginWindowTitle"));
loginWindow.setStyleName("LoginScreen.LoginWindow");
loginWindow.setDefaultCloseOperation(WindowPane.DO_NOTHING_ON_CLOSE);
add(loginWindow);
SplitPane splitPane = new SplitPane(SplitPane.ORIENTATION_VERTICAL_BOTTOM_TOP, new Extent(32));
loginWindow.add(splitPane);
Row controlRow = new Row();
controlRow.setStyleName("ControlPane");
splitPane.add(controlRow);
Button button = new Button(Messages.getString("LoginScreen.Continue"), Styles.ICON_24_YES);
button.setStyleName("ControlPane.Button");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
processLogin();
}
});
controlRow.add(button);
Grid layoutGrid = new Grid();
layoutGrid.setStyleName("LoginScreen.LayoutGrid");
splitPane.add(layoutGrid);
label = new Label(Messages.getString("LoginScreen.PromptUserid"));
label.setStyleName("LoginScreen.Prompt");
layoutGrid.add(label);
useridField = new TextField();
useridField.setWidth(new Extent(300, Extent.PX));
useridField.setStyleName("Default");
useridField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
CruiseControlConfiguratorApplication.getActive().setFocusedComponent(passwordField);
}
});
layoutGrid.add(useridField);
label = new Label(Messages.getString("LoginScreen.PromptPassword"));
label.setStyleName("LoginScreen.Prompt");
layoutGrid.add(label);
passwordField = new PasswordField();
passwordField.setWidth(new Extent(300, Extent.PX));
passwordField.setStyleName("Default");
layoutGrid.add(passwordField);
passwordField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
processLogin();
}
});
CruiseControlConfiguratorApplication.getActive().setFocusedComponent(useridField);
}
/**
* Process a user log-in request
*/
private void processLogin() {
Window.alert("User : " + useridField.getText() + " / Password : " + passwordField.getText());
}
}
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/Messages.java
Node-kind: file
Node-action: add
Prop-content-length: 10
Text-content-length: 71
Text-content-md5: 1420d0bfebf520c5f00857bdc25d3f6d
Text-content-sha1: 95e9625d3fcab3eb980d2e6814266e917b5acebc
Content-length: 81
PROPS-END
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
Node-path: CruiseControlConfigurator/trunk/src/main/java/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/Styles.java
Node-kind: file
Node-action: change
Text-content-length: 1357
Text-content-md5: 463bbcef65e6400bddd5d5a7f94a92c8
Text-content-sha1: 4361fdfc67d5c8a8d474c12b80dd69d9adf73c0c
Content-length: 1357
package net.sourceforge.buildprocess.cruisecontrolconfigurator.client;
import nextapp.echo2.app.ImageReference;
import nextapp.echo2.app.ResourceImageReference;
import nextapp.echo2.app.StyleSheet;
import nextapp.echo2.app.componentxml.ComponentXmlException;
import nextapp.echo2.app.componentxml.StyleSheetLoader;
/**
* Define the look'n feel information.
*
* @author Jean-Baptiste Onofr
*/
public class Styles {
public static final String IMAGE_PATH = "/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/resource/image/";
public static final String STYLE_PATH = "/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/resource/style/";
/**
* Default application style sheet.
*/
public static final StyleSheet DEFAULT_STYLE_SHEET;
static {
try {
DEFAULT_STYLE_SHEET = StyleSheetLoader.load(STYLE_PATH + "Default.stylesheet", Thread.currentThread().getContextClassloader());
}
catch(ComponentXmlException exception) {
throw new RuntimeException(exception);
}
}
// Images
public static final ImageReference BUILDPROCESS_IMAGE = new ResourceImageReference(IMAGE_PATH + "BuildProcessLogo.png");
public static final ImageReference CRUISECONTROLCONFIGURATOR_IMAGE = new ResourceImageReference(IMAGE_PATH + "CruiseControlConfigurator.png");
}
Node-path: CruiseControlConfigurator/trunk/src/main/resources
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess/cruisecontrolconfigurator
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess/cruisecontrolconfigurator/client
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/resource
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/resource/image
Node-kind: dir
Node-action: add
Prop-content-length: 10
Content-length: 10
PROPS-END
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/resource/image/BorderBottom.png
Node-kind: file
Node-action: add
Prop-content-length: 59
Text-content-length: 195
Text-content-md5: f1c380a255326f074c504470a0b023dd
Text-content-sha1: bf91736ef5584723224335acbea18a26a5e670f1
Content-length: 254
K 13
svn:mime-type
V 24
application/octet-stream
PROPS-END
PNG
IHDR o bKGD
pHYs u tIME738kh PIDAT8c*&*QG
$0sR5a3200l,oFS6
FmR_6/5
@[% IENDB`
Node-path: CruiseControlConfigurator/trunk/src/main/resources/net/sourceforge/buildprocess/cruisecontrolconfigurator/client/resource/image/BorderBottomLeft.png
Node-kind: file
Node-action: add
Prop-content-length: 59
Text-content-length: 372
Text-content-md5: 53ac9d4b321869c9054f19e3b6ed69dc
Text-content-sha1: b56e3ee7e27e38da486492228ec131d8ee10f633
Content-length: 431
K 13
svn:mime-type
V 24
application/octet-stream
PROPS-END
PNG
IHDR 4 bKGD
pHYs + tIME7 ռ IDAT8˭[n1EOڙRDeu]Qw<ǑqRŒe+9~x8'd;Z
ge-$W=Yįk Q
i ]% N6y||'=%E%O&v