00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 package org.gecode.explorer.swing;
00025
00026 import java.awt.*;
00027 import java.awt.event.*;
00028 import javax.swing.*;
00029
00030 import javax.swing.event.*;
00031 import javax.swing.border.*;
00032
00033 import org.gecode.explorer.BoundingBox;
00034 import org.gecode.explorer.*;
00035
00036 public class TreeCanvas
00037 extends JPanel
00038 implements MouseListener, ChangeListener, Scrollable {
00039
00040 boolean firstTime = true;
00041
00042 UINode root;
00043 UINode current;
00044
00045 double scale = 0.3;
00046 double xtrans;
00047 double ytrans = 30.0;
00048 int width, depth;
00049
00050 ExplorerController _ctrl;
00051
00052
00053 JFrame frame;
00054 JScrollPane scrollPane;
00055 JPopupMenu pop;
00056 JSlider scaleSlider;
00057 MenuBar menuBar;
00058 JLabel jl_status, jl_statistics;
00059 JPanel jp_status;
00060 StatusPanel sp_statistics;
00061
00062 public TreeCanvas(ExplorerController ctrl){
00063 setPreferredSize(new Dimension(600,400));
00064 _ctrl = ctrl;
00065 setBackground(Color.white);
00066 setForeground(Color.black);
00067
00068 addMouseListener(this);
00069
00070 String space_name = ctrl.getCurrentNode().getSpace().getName();
00071 frame = new JFrame("Gecode/J Explorer" +
00072 (space_name==""?"" : ": " + space_name));
00073 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
00074 frame.setIconImage(new ImageIcon(gecodeLogo).getImage());
00075
00076 frame.getContentPane().setLayout(new BorderLayout());
00077
00078 scrollPane = new JScrollPane( this );
00079 scrollPane.setVerticalScrollBarPolicy
00080 (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
00081 scrollPane.setHorizontalScrollBarPolicy
00082 (JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
00083
00084 scrollPane.getHorizontalScrollBar().setUnitIncrement(10);
00085 scrollPane.getHorizontalScrollBar().setBlockIncrement(100);
00086 scrollPane.getVerticalScrollBar().setUnitIncrement(10);
00087 scrollPane.getVerticalScrollBar().setBlockIncrement(100);
00088
00089 menuBar = new MenuBar(frame, ctrl);
00090 frame.setJMenuBar(menuBar);
00091 pop = menuBar.getPopupMenu();
00092
00093 frame.getContentPane().add(scrollPane);
00094
00095 scaleSlider = new JSlider(JSlider.VERTICAL, 2, 300, 100);
00096 scaleSlider.addChangeListener(this);
00097 scaleSlider.setPaintTicks(false);
00098 scaleSlider.setPaintLabels(false);
00099
00100 frame.getContentPane().add("East", scaleSlider);
00101
00102 jp_status = new JPanel();
00103 jp_status.setLayout(new BorderLayout());
00104
00105
00106 if (System.getProperty("mrj.version") == null)
00107 jl_status = new JLabel("ready.");
00108 else
00109 jl_status = new JLabel(" ready.");
00110
00111 jp_status.add(jl_status, BorderLayout.WEST);
00112 jl_statistics = new JLabel("");
00113 sp_statistics = new StatusPanel();
00114 jp_status.add(sp_statistics, BorderLayout.EAST);
00115 jp_status.setBorder(new BevelBorder(BevelBorder.LOWERED));
00116 frame.getContentPane().add("South", jp_status);
00117
00118
00119 frame.pack();
00120 frame.setSize(new Dimension(600,400));
00121 frame.setVisible(true);
00122
00123 }
00124
00125 JFrame getFrame() {
00126 return frame;
00127 }
00128
00129 public void updateTree(UINode rootNode, UINode currentNode) {
00130 root = rootNode;
00131 if (current != null)
00132 current.hasShadow = false;
00133 current = currentNode;
00134 current.hasShadow = true;
00135 BoundingBox b = root.getBoundingBox();
00136
00137 if (b != null) {
00138 xtrans = -b.left + 50;
00139
00140 width = b.right - b.left + 100;
00141 depth = b.depth * 200 + 100;
00142 }
00143 Dimension d = scrollPane.getViewport().getExtentSize();
00144 setPreferredSize(new Dimension(Math.max((int)(width*scale), d.width),
00145 Math.max((int)(depth*scale), d.height)));
00146
00147 setStatistics();
00148 revalidate();
00149 repaint();
00150 }
00151
00152 public void scaleToFit() {
00153 if (root != null) {
00154 BoundingBox b = root.getBoundingBox();
00155 Dimension d = scrollPane.getViewport().getExtentSize();
00156
00157 float newYScale = ((float)d.height / (b.depth*200 + 100))*300;
00158 float newXScale = ((float)d.width / (b.right-b.left + 100))*300;
00159 int newScale = Math.min(Math.round(newYScale),
00160 Math.round(newXScale));
00161
00162 scaleSlider.setValue(newScale);
00163 }
00164 }
00165
00166 public void centerCursor() {
00167 if (current != null) {
00168 JViewport p = scrollPane.getViewport();
00169 Coordinate c = current.coordinates();
00170
00171 Dimension extent = p.getExtentSize();
00172 int yCenterOffset = extent.height / 2;
00173 int xCenterOffset = extent.width / 2;
00174
00175
00176 int newy = (int)(scale*(double)c.y());
00177 int newx = (int)((c.x()+(int)xtrans)*scale);
00178
00179 if (!p.getViewRect().contains(newx,newy)) {
00180 newy = Math.max(newy-yCenterOffset, 0);
00181 newx = Math.max(newx-xCenterOffset, 0);
00182 p.setViewPosition(new Point(newx, newy));
00183 revalidate();
00184 repaint();
00185 }
00186 }
00187 }
00188
00189 public void paintComponent(Graphics g){
00190 super.paintComponent(g);
00191 update(g);
00192 }
00193
00194 final static BasicStroke stroke = new BasicStroke(2.0f);
00195 public void update(Graphics g){
00196 Graphics2D g2 = (Graphics2D)g;
00197
00198 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
00199 RenderingHints.VALUE_ANTIALIAS_ON);
00200
00201 g2.translate(xtrans*scale, ytrans);
00202 g2.scale(scale, scale);
00203
00204 Rectangle clip = g2.getClipBounds();
00205
00206 if (clip != null) {
00207 g2.setPaint(Color.white);
00208 g2.fillRect(clip.x, clip.x, clip.width, clip.height);
00209 g2.setPaint(Color.black);
00210 }
00211
00212 if (root != null)
00213 root.draw(g2, new Rect(clip.x, clip.y, clip.width, clip.height));
00214
00215 }
00216
00217 public void setCurrentNode(UINode newNode) {
00218 current.hasShadow = false;
00219 newNode.hasShadow = true;
00220 current = newNode;
00221 centerCursor();
00222 repaint();
00223 }
00224
00225 private void setStatistics() {
00226 int[] stat = _ctrl.getStatistics();
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236 sp_statistics.setSuccess(stat[0]);
00237 sp_statistics.setFailure(stat[1]);
00238 sp_statistics.setChoice(stat[2]);
00239 sp_statistics.setUnknown(stat[3]);
00240 sp_statistics.setDepth(stat[4]);
00241 }
00242
00243 public void mousePressed(MouseEvent e) {}
00244 public void mouseDragged(MouseEvent e) {}
00245 public void mouseReleased(MouseEvent e){}
00246 public void mouseMoved(MouseEvent e){}
00247 public void mouseClicked(MouseEvent e) {
00248 int x = (int) (((double) e.getX()) / scale - xtrans);
00249 int y = (int) (((double) e.getY()) / scale - ytrans/scale);
00250 UINode foundNode = (UINode) root.findNodeForPoint(x, y);
00251 if (foundNode != null) {
00252 _ctrl.setCurrentNode(foundNode);
00253 if (e.getClickCount() == 2 &&
00254 e.getButton() == MouseEvent.BUTTON1) {
00255 _ctrl.inspect();
00256 }
00257
00258
00259 if (e.getClickCount() == 1 &&
00260 e.getButton() == MouseEvent.BUTTON3) {
00261 pop.show(this, e.getX(), e.getY());
00262 }
00263 }
00264 }
00265 public void mouseExited(MouseEvent e){}
00266 public void mouseEntered(MouseEvent e){}
00267
00268
00269 public void stateChanged(ChangeEvent e) {
00270 JSlider source = (JSlider)e.getSource();
00271
00272 scale = ((int)source.getValue()) / 300.0;
00273 double newWidth = width * scale;
00274 double newHeight = depth * scale;
00275 Dimension d = scrollPane.getViewport().getExtentSize();
00276 setPreferredSize(new Dimension(Math.max((int)newWidth, d.width),
00277 Math.max((int)newHeight, d.height)));
00278 revalidate();
00279 repaint();
00280
00281 }
00282
00283 public Dimension getPreferredSize() {
00284 Dimension d = scrollPane.getViewport().getExtentSize();
00285 setPreferredSize(new Dimension(Math.max((int)(width*scale), d.width),
00286 Math.max((int)(depth*scale), d.height)));
00287 return super.getPreferredSize();
00288 }
00289
00290
00291 public Dimension getPreferredScrollableViewportSize() {
00292 return getPreferredSize();
00293 }
00294 public int getScrollableUnitIncrement(Rectangle r, int i, int j) {
00295 return 1;
00296 }
00297 public int getScrollableBlockIncrement(Rectangle r, int i, int j) {
00298 return 1;
00299 }
00300 public boolean getScrollableTracksViewportWidth() {
00301 return false;
00302 }
00303 public boolean getScrollableTracksViewportHeight() {
00304 return false;
00305 }
00306
00307
00308
00309 class StatusPanel extends JPanel {
00310 JLabel ns, nf, nc, nu, d;
00311
00312 public StatusPanel() {
00313 Icon si = new SuccessNode().getIcon();
00314 Icon fi = new FailureNode().getIcon();
00315 Icon ci = new ChoiceNode().getIcon();
00316 Icon ui = new UnknownNode().getIcon();
00317
00318 ns = new JLabel(new SuccessNode().getIcon());
00319 setSuccess(0);
00320 nf = new JLabel(new FailureNode().getIcon());
00321 setFailure(0);
00322 nc = new JLabel(new ChoiceNode().getIcon());
00323 setChoice(0);
00324 nu = new JLabel(new UnknownNode().getIcon());
00325 setUnknown(0);
00326 d = new JLabel();
00327 setDepth(0);
00328 add(ns);
00329 add(nf);
00330 add(nc);
00331 add(nu);
00332 add(d);
00333 }
00334
00335 public void setSuccess(int n) {
00336 ns.setText("" + n);
00337 ns.setVisible(n != 0);
00338 }
00339 public void setFailure(int n) {
00340 nf.setText("" + n);
00341 nf.setVisible(n != 0);
00342 }
00343 public void setChoice(int n) {
00344 nc.setText("" + n);
00345 nc.setVisible(n != 0);
00346 }
00347 public void setUnknown(int n) {
00348 nu.setText("" + n);
00349 nu.setVisible(n != 0);
00350 }
00351 public void setDepth(int n) {
00352
00353 if (System.getProperty("mrj.version") == null)
00354 d.setText("Depth: " + n);
00355 else
00356 d.setText("Depth: " + n + " ");
00357
00358 d.setVisible(n != 0);
00359 }
00360 }
00361
00362
00363 static byte[] gecodeLogo = {
00364 (byte)0x89, (byte)0x50, (byte)0x4e, (byte)0x47, (byte)0x0d, (byte)0x0a,
00365 (byte)0x1a, (byte)0x0a, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x0d,
00366 (byte)0x49, (byte)0x48, (byte)0x44, (byte)0x52, (byte)0x00, (byte)0x00,
00367 (byte)0x00, (byte)0x10, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x10,
00368 (byte)0x08, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x1f,
00369 (byte)0xf3, (byte)0xff, (byte)0x61, (byte)0x00, (byte)0x00, (byte)0x00,
00370 (byte)0x06, (byte)0x62, (byte)0x4b, (byte)0x47, (byte)0x44, (byte)0x00,
00371 (byte)0xff, (byte)0x00, (byte)0xff, (byte)0x00, (byte)0xff, (byte)0xa0,
00372 (byte)0xbd, (byte)0xa7, (byte)0x93, (byte)0x00, (byte)0x00, (byte)0x00,
00373 (byte)0x09, (byte)0x70, (byte)0x48, (byte)0x59, (byte)0x73, (byte)0x00,
00374 (byte)0x00, (byte)0x00, (byte)0x48, (byte)0x00, (byte)0x00, (byte)0x00,
00375 (byte)0x48, (byte)0x00, (byte)0x46, (byte)0xc9, (byte)0x6b, (byte)0x3e,
00376 (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x3a, (byte)0x49, (byte)0x44,
00377 (byte)0x41, (byte)0x54, (byte)0x38, (byte)0xcb, (byte)0x95, (byte)0x92,
00378 (byte)0xcf, (byte)0x4b, (byte)0xd3, (byte)0x71, (byte)0x1c, (byte)0xc6,
00379 (byte)0x5f, (byte)0x9f, (byte)0xef, (byte)0x36, (byte)0x9b, (byte)0x4a,
00380 (byte)0x4e, (byte)0x25, (byte)0x99, (byte)0x9a, (byte)0x88, (byte)0x1d,
00381 (byte)0xbc, (byte)0xe4, (byte)0x21, (byte)0x04, (byte)0x37, (byte)0x1d,
00382 (byte)0x0a, (byte)0x7a, (byte)0x51, (byte)0x90, (byte)0x1d, (byte)0xa2,
00383 (byte)0x0e, (byte)0x0d, (byte)0x54, (byte)0x50, (byte)0xd1, (byte)0x8b,
00384 (byte)0x58, (byte)0x17, (byte)0x41, (byte)0x2f, (byte)0xfe, (byte)0x01,
00385 (byte)0xd3, (byte)0xab, (byte)0x83, (byte)0xbc, (byte)0x85, (byte)0x6b,
00386 (byte)0x28, (byte)0xa2, (byte)0x82, (byte)0x20, (byte)0xfe, (byte)0xd8,
00387 (byte)0x84, (byte)0x8a, (byte)0x4e, (byte)0xe1, (byte)0x49, (byte)0x44,
00388 (byte)0x6b, (byte)0x81, (byte)0xc8, (byte)0x4e, (byte)0xb6, (byte)0x28,
00389 (byte)0x75, (byte)0x8a, (byte)0xd1, (byte)0x46, (byte)0xdf, (byte)0xcf,
00390 (byte)0xf6, (byte)0xee, (byte)0x10, (byte)0x4d, (byte)0x87, (byte)0x13,
00391 (byte)0xea, (byte)0x39, (byte)0xbe, (byte)0xf9, (byte)0x3c, (byte)0xcf,
00392 (byte)0xfb, (byte)0xf3, (byte)0xbc, (byte)0x9f, (byte)0x07, (byte)0x6e,
00393 (byte)0x81, (byte)0xce, (byte)0x68, (byte)0x19, (byte)0xdd, (byte)0x1e,
00394 (byte)0x15, (byte)0xef, (byte)0x92, (byte)0x57, (byte)0x2e, (byte)0x52,
00395 (byte)0x17, (byte)0xc2, (byte)0xff, (byte)0x40, (byte)0x67, (byte)0xb4,
00396 (byte)0x0c, (byte)0xac, (byte)0x0f, (byte)0x08, (byte)0x7e, (byte)0x04,
00397 (byte)0x3f, (byte)0xe2, (byte)0x79, (byte)0xed, (byte)0x91, (byte)0xf3,
00398 (byte)0xd4, (byte)0x79, (byte)0x5e, (byte)0x11, (byte)0x95, (byte)0x8f,
00399 (byte)0x3c, (byte)0xb4, (byte)0x39, (byte)0x44, (byte)0x70, (byte)0x3f,
00400 (byte)0x98, (byte)0x33, (byte)0x6f, (byte)0xa9, (byte)0x6e, (byte)0x21,
00401 (byte)0xec, (byte)0x0b, (byte)0x53, (byte)0x6a, (byte)0x2f, (byte)0xcd,
00402 (byte)0xe1, (byte)0x58, (byte)0x73, (byte)0xc8, (byte)0x69, (byte)0x2d,
00403 (byte)0x83, (byte)0x1b, (byte)0x83, (byte)0x84, (byte)0x0e, (byte)0x42,
00404 (byte)0xd4, (byte)0x96, (byte)0xd4, (byte)0xd2, (byte)0xf5, (byte)0xa0,
00405 (byte)0x8b, (byte)0x9a, (byte)0xbb, (byte)0x35, (byte)0x24, (byte)0x75,
00406 (byte)0x92, (byte)0x83, (byte)0xef, (byte)0x07, (byte)0x74, (byte)0x2f,
00407 (byte)0x75, (byte)0x93, (byte)0x48, (byte)0x25, (byte)0xa4, (byte)0xcc,
00408 (byte)0x5e, (byte)0x76, (byte)0x63, (byte)0x31, (byte)0x3a, (byte)0xad,
00409 (byte)0xa5, (byte)0x6f, (byte)0xad, (byte)0x4f, (byte)0x8c, (byte)0x29,
00410 (byte)0x43, (byte)0xa6, (byte)0x3f, (byte)0x4c, (byte)0x8b, (byte)0x99,
00411 (byte)0x36, (byte)0xe5, (byte)0x3a, (byte)0xe2, (byte)0x3f, (byte)0xe2,
00412 (byte)0x62, (byte)0x4c, (byte)0x19, (byte)0xe2, (byte)0x0e, (byte)0xba,
00413 (byte)0x25, (byte)0x91, (byte)0x4c, (byte)0xe4, (byte)0xda, (byte)0x31,
00414 (byte)0xd3, (byte)0xa6, (byte)0xf4, (byte)0xae, (byte)0xf5, (byte)0x0a,
00415 (byte)0x7e, (byte)0x64, (byte)0xfc, (byte)0xed, (byte)0xb8, (byte)0x88,
00416 (byte)0x88, (byte)0x1c, (byte)0x9e, (byte)0x1d, (byte)0x8a, (byte)0x77,
00417 (byte)0xd9, (byte)0x2b, (byte)0xce, (byte)0x19, (byte)0xa7, (byte)0xd4,
00418 (byte)0xbd, (byte)0xac, (byte)0x93, (byte)0xb6, (byte)0x50, (byte)0x5b,
00419 (byte)0xf6, (byte)0x26, (byte)0xae, (byte)0x39, (byte)0x97, (byte)0x9c,
00420 (byte)0x25, (byte)0xcf, (byte)0x04, (byte)0x40, (byte)0x99, (byte)0x69,
00421 (byte)0x53, (byte)0xfa, (byte)0xd7, (byte)0xfb, (byte)0x59, (byte)0xf8,
00422 (byte)0xb4, (byte)0x80, (byte)0xa1, (byte)0x0c, (byte)0x8e, (byte)0x9f,
00423 (byte)0x1f, (byte)0xe3, (byte)0x2c, (byte)0x76, (byte)0xd2, (byte)0xf8,
00424 (byte)0xaa, (byte)0x91, (byte)0xbd, (byte)0x6f, (byte)0x7b, (byte)0xb7,
00425 (byte)0x1e, (byte)0xba, (byte)0xa9, (byte)0xaa, (byte)0x89, (byte)0x6d,
00426 (byte)0xdf, (byte)0x36, (byte)0x6a, (byte)0x24, (byte)0x3c, (byte)0x22,
00427 (byte)0xb3, (byte)0xbb, (byte)0xb3, (byte)0x00, (byte)0x54, (byte)0x16,
00428 (byte)0x57, (byte)0x12, (byte)0x7f, (byte)0x11, (byte)0xe7, (byte)0xe4,
00429 (byte)0xe7, (byte)0x09, (byte)0x15, (byte)0x33, (byte)0x15, (byte)0x00,
00430 (byte)0xac, (byte)0x3e, (byte)0x5d, (byte)0xa5, (byte)0xbe, (byte)0xbc,
00431 (byte)0x1e, (byte)0x80, (byte)0x89, (byte)0x77, (byte)0x13, (byte)0x6c,
00432 (byte)0x1e, (byte)0x6d, (byte)0x66, (byte)0x45, (byte)0xdc, (byte)0xd5,
00433 (byte)0x6e, (byte)0x0c, (byte)0xe1, (byte)0xca, (byte)0x8e, (byte)0xce,
00434 (byte)0x68, (byte)0x00, (byte)0x0a, (byte)0x6d, (byte)0x85, (byte)0x14,
00435 (byte)0x58, (byte)0x0a, (byte)0x00, (byte)0x88, (byte)0x5d, (byte)0xc4,
00436 (byte)0xb0, (byte)0x28, (byte)0x0b, (byte)0x0d, (byte)0xf7, (byte)0x1a,
00437 (byte)0x70, (byte)0xdc, (byte)0x71, (byte)0xe4, (byte)0x7e, (byte)0x43,
00438 (byte)0xc0, (byte)0x08, (byte)0x74, (byte)0x06, (byte)0xe8, (byte)0x79,
00439 (byte)0xd8, (byte)0x03, (byte)0xc0, (byte)0x69, (byte)0xf2, (byte)0x94,
00440 (byte)0xe8, (byte)0x69, (byte)0x94, (byte)0x62, (byte)0x5b, (byte)0x31,
00441 (byte)0xc3, (byte)0x8f, (byte)0x86, (byte)0x01, (byte)0x18, (byte)0x7b,
00442 (byte)0x33, (byte)0xc6, (byte)0xf2, (byte)0xe7, (byte)0xe5, (byte)0xbc,
00443 (byte)0x16, (byte)0xc2, (byte)0xbe, (byte)0x30, (byte)0x56, (byte)0x9b,
00444 (byte)0xc5, (byte)0xa6, (byte)0xcc, (byte)0xb4, (byte)0x29, (byte)0x4a,
00445 (byte)0x29, (byte)0xe6, (byte)0x3f, (byte)0xce, (byte)0x33, (byte)0xf9,
00446 (byte)0x7e, (byte)0x92, (byte)0x95, (byte)0x27, (byte)0x2b, (byte)0x04,
00447 (byte)0x3a, (byte)0x03, (byte)0xb4, (byte)0xd7, (byte)0xb6, (byte)0xb3,
00448 (byte)0xfb, (byte)0x75, (byte)0x97, (byte)0x8e, (byte)0xda, (byte)0x8e,
00449 (byte)0x1c, (byte)0xb2, (byte)0xab, (byte)0xca, (byte)0x45, (byte)0xc4,
00450 (byte)0x17, (byte)0xa1, (byte)0xbc, (byte)0xb0, (byte)0xfc, (byte)0x2a,
00451 (byte)0xce, (byte)0xbf, (byte)0x31, (byte)0xe2, (byte)0x47, (byte)0xbc,
00452 (byte)0x4b, (byte)0x5e, (byte)0xd9, (byte)0xf9, (byte)0xb2, (byte)0x93,
00453 (byte)0x8d, (byte)0xd2, (byte)0x4c, (byte)0x9b, (byte)0x12, (byte)0x3d,
00454 (byte)0x89, (byte)0x4a, (byte)0x6b, (byte)0xa8, (byte)0xf5, (byte)0x46,
00455 (byte)0x8c, (byte)0xd9, (byte)0x22, (byte)0x59, (byte)0x2d, (byte)0x56,
00456 (byte)0xa5, (byte)0xd3, (byte)0x5a, (byte)0x94, (byte)0x52, (byte)0x84,
00457 (byte)0x0e, (byte)0x42, (byte)0x6c, (byte)0x1c, (byte)0x6d, (byte)0x60,
00458 (byte)0xb7, (byte)0xda, (byte)0x29, (byte)0x29, (byte)0x28, (byte)0xe1,
00459 (byte)0xf2, (byte)0xd7, (byte)0x25, (byte)0x49, (byte)0x9d, (byte)0xa4,
00460 (byte)0xb9, (byte)0xba, (byte)0x99, (byte)0x88, (byte)0x2f, (byte)0xc2,
00461 (byte)0xf5, (byte)0x22, (byte)0xe5, (byte)0x34, (byte)0xd1, (byte)0x6a,
00462 (byte)0xb1, (byte)0x2a, (byte)0x9d, (byte)0xd1, (byte)0x62, (byte)0x28,
00463 (byte)0x83, (byte)0xe0, (byte)0x7e, (byte)0x90, (byte)0x94, (byte)0x4e,
00464 (byte)0x91, (byte)0xd2, (byte)0xa9, (byte)0x7f, (byte)0xaf, (byte)0x32,
00465 (byte)0x80, (byte)0xd5, (byte)0xf8, (byte)0x23, (byte)0xa2, (byte)0x50,
00466 (byte)0xcc, (byte)0xed, (byte)0xcf, (byte)0x01, (byte)0xe0, (byte)0xb9,
00467 (byte)0xef, (byte)0x61, (byte)0xeb, (byte)0xd9, (byte)0xd6, (byte)0x0d,
00468 (byte)0x72, (byte)0x5e, (byte)0x81, (byte)0xeb, (byte)0x22, (byte)0x45,
00469 (byte)0xb6, (byte)0x22, (byte)0x62, (byte)0xe7, (byte)0x31, (byte)0x16,
00470 (byte)0x1f, (byte)0x2f, (byte)0xe2, (byte)0xb0, (byte)0x3b, (byte)0x54,
00471 (byte)0xbe, (byte)0xb7, (byte)0xbf, (byte)0x01, (byte)0x57, (byte)0x10,
00472 (byte)0x22, (byte)0x23, (byte)0x3f, (byte)0xf9, (byte)0x4d, (byte)0x33,
00473 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x49, (byte)0x45,
00474 (byte)0x4e, (byte)0x44, (byte)0xae, (byte)0x42, (byte)0x60, (byte)0x82
00475 };
00476 }