import java.awt.Graphics2D ;
import java.awt.event.* ;
import javax.swing.* ;
public class NewJFrame
extends javax.
swing .
JFrame { private javax.
swing .
JButton jButton1
; private javax.
swing .
JButton jButton5
; private javax.
swing .
JButton jButton6
; private javax.
swing .
JButton jButton7
; private javax.
swing .
JButton jButton8
; private javax.
swing .
JButton jButton9
; private javax.
swing .
JMenu jMenu1
; private javax.
swing .
JMenu jMenu2
; private javax.
swing .
JPanel jPanel1
;
/**
* Creates new form NewJFrame
*/
public NewJFrame( ) {
initComponents( ) ;
//Graphics2D gfx = jPanel1.getGraphics();
}
public javax.
swing .
JButton getjButton1
( ) { return jButton1;
}
public void setjButton1
( javax.
swing .
JButton jButton1
) { this .jButton1 = jButton1;
}
public javax.
swing .
JButton getjButton5
( ) { return jButton5;
}
public void setjButton5
( javax.
swing .
JButton jButton5
) { this .jButton5 = jButton5;
}
public javax.
swing .
JButton getjButton6
( ) { return jButton6;
}
public void setjButton6
( javax.
swing .
JButton jButton6
) { this .jButton6 = jButton6;
}
public javax.
swing .
JButton getjButton7
( ) { return jButton7;
}
public void setjButton7
( javax.
swing .
JButton jButton7
) { this .jButton7 = jButton7;
}
public javax.
swing .
JButton getjButton8
( ) { return jButton8;
}
public void setjButton8
( javax.
swing .
JButton jButton8
) { this .jButton8 = jButton8;
}
public javax.
swing .
JButton getjButton9
( ) { return jButton9;
}
public void setjButton9
( javax.
swing .
JButton jButton9
) { this .jButton9 = jButton9;
}
public javax.
swing .
JMenu getjMenu1
( ) { return jMenu1;
}
public void setjMenu1
( javax.
swing .
JMenu jMenu1
) { this .jMenu1 = jMenu1;
}
public javax.
swing .
JMenu getjMenu2
( ) { return jMenu2;
}
public void setjMenu2
( javax.
swing .
JMenu jMenu2
) { this .jMenu2 = jMenu2;
}
public javax.
swing .
JMenuBar getjMenuBar1
( ) { return jMenuBar1;
}
public void setjMenuBar1
( javax.
swing .
JMenuBar jMenuBar1
) { this .jMenuBar1 = jMenuBar1;
}
public javax.
swing .
JPanel getjPanel1
( ) { return jPanel1;
}
public void setjPanel1
( javax.
swing .
JPanel jPanel1
) { this .jPanel1 = jPanel1;
}
return jScrollBar1;
}
public void setjScrollBar1
( javax.
swing .
JScrollBar jScrollBar1
) { this .jScrollBar1 = jScrollBar1;
}
private void initComponents( ) {
jPanel1
= new javax.
swing .
JPanel ( ) ; jButton1
= new javax.
swing .
JButton ( ) ; jButton5
= new javax.
swing .
JButton ( ) ; jButton6
= new javax.
swing .
JButton ( ) ; jButton7
= new javax.
swing .
JButton ( ) ; jButton8
= new javax.
swing .
JButton ( ) ; jButton9
= new javax.
swing .
JButton ( ) ; jMenu1
= new javax.
swing .
JMenu ( ) ; jMenu2
= new javax.
swing .
JMenu ( ) ;
setTitle( "AlhoritmizationGUI" ) ;
setCursor
( new java.
awt .
Cursor ( java.
awt .
Cursor .
DEFAULT_CURSOR ) ) ;
jPanel1.
setBackground ( new java.
awt .
Color ( 255 ,
255 ,
255 ) ) ; jPanel1.
setBorder ( javax.
swing .
BorderFactory .
createLineBorder ( new java.
awt .
Color ( 0 ,
0 ,
0 ) ,
3 ) ) ;
javax.swing .GroupLayout jPanel1Layout = new javax.swing .GroupLayout ( jPanel1) ;
jPanel1.setLayout ( jPanel1Layout) ;
jPanel1Layout.setHorizontalGroup (
jPanel1Layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .LEADING )
.
addGap ( 0 ,
794 ,
Short .
MAX_VALUE ) ) ;
jPanel1Layout.setVerticalGroup (
jPanel1Layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .LEADING )
.
addGap ( 0 ,
594 ,
Short .
MAX_VALUE ) ) ;
jButton1.setText ( "jButton1" ) ;
jButton1.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ;
jButton5.setText ( "jButton1" ) ;
jButton5.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ;
jButton6.setText ( "jButton1" ) ;
jButton6.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ;
jButton7.setText ( "jButton1" ) ;
jButton7.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ;
jButton8.setText ( "jButton1" ) ;
jButton8.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ;
jButton9.setText ( "jButton1" ) ;
jButton9.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ;
jMenu1.setText ( "File" ) ;
jMenu1.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ; jMenuBar1.add ( jMenu1) ;
jMenu2.setText ( "Edit" ) ;
jMenu2.
setCursor ( new java.
awt .
Cursor ( java.
awt .
Cursor .
HAND_CURSOR ) ) ; jMenuBar1.add ( jMenu2) ;
setJMenuBar( jMenuBar1) ;
javax.swing .GroupLayout layout = new javax.swing .GroupLayout ( getContentPane( ) ) ;
getContentPane( ) .setLayout ( layout) ;
layout.setHorizontalGroup (
layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .LEADING )
.addGroup ( layout.createSequentialGroup ( )
.addContainerGap ( )
.addGroup ( layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .LEADING )
.
addComponent ( jButton1, javax.
swing .
GroupLayout .
Alignment .
TRAILING , javax.
swing .
GroupLayout .
DEFAULT_SIZE , javax.
swing .
GroupLayout .
DEFAULT_SIZE ,
Short .
MAX_VALUE ) .addGroup ( javax.swing .GroupLayout .Alignment .TRAILING , layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .LEADING )
.addComponent ( jButton6, javax.swing .GroupLayout .PREFERRED_SIZE , 86 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addComponent ( jButton9, javax.swing .GroupLayout .PREFERRED_SIZE , 86 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addComponent ( jButton8, javax.swing .GroupLayout .PREFERRED_SIZE , 86 , javax.swing .GroupLayout .PREFERRED_SIZE ) )
.addComponent ( jButton5, javax.swing .GroupLayout .PREFERRED_SIZE , 86 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addComponent ( jButton7, javax.swing .GroupLayout .PREFERRED_SIZE , 86 , javax.swing .GroupLayout .PREFERRED_SIZE ) )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .UNRELATED )
.addComponent ( jPanel1, javax.swing .GroupLayout .PREFERRED_SIZE , javax.swing .GroupLayout .DEFAULT_SIZE , javax.swing .GroupLayout .PREFERRED_SIZE )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .RELATED )
.addComponent ( jScrollBar1, javax.swing .GroupLayout .PREFERRED_SIZE , 17 , javax.swing .GroupLayout .PREFERRED_SIZE )
.
addContainerGap ( javax.
swing .
GroupLayout .
DEFAULT_SIZE ,
Short .
MAX_VALUE ) ) ) ;
layout.setVerticalGroup (
layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .TRAILING )
.addGroup ( javax.swing .GroupLayout .Alignment .LEADING , layout.createSequentialGroup ( )
.addContainerGap ( )
.addComponent ( jButton5, javax.swing .GroupLayout .PREFERRED_SIZE , 63 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .RELATED )
.addComponent ( jButton1, javax.swing .GroupLayout .PREFERRED_SIZE , 63 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .RELATED )
.addComponent ( jButton6, javax.swing .GroupLayout .PREFERRED_SIZE , 63 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .RELATED )
.addComponent ( jButton8, javax.swing .GroupLayout .PREFERRED_SIZE , 63 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .RELATED )
.addComponent ( jButton7, javax.swing .GroupLayout .PREFERRED_SIZE , 63 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addPreferredGap ( javax.swing .LayoutStyle .ComponentPlacement .RELATED )
.addComponent ( jButton9, javax.swing .GroupLayout .PREFERRED_SIZE , 63 , javax.swing .GroupLayout .PREFERRED_SIZE )
.
addContainerGap ( javax.
swing .
GroupLayout .
DEFAULT_SIZE ,
Short .
MAX_VALUE ) ) .addGroup ( layout.createSequentialGroup ( )
.
addGap ( 0 ,
0 ,
Short .
MAX_VALUE ) .addGroup ( layout.createParallelGroup ( javax.swing .GroupLayout .Alignment .LEADING )
.addComponent ( jScrollBar1, javax.swing .GroupLayout .PREFERRED_SIZE , 588 , javax.swing .GroupLayout .PREFERRED_SIZE )
.addComponent ( jPanel1, javax.swing .GroupLayout .PREFERRED_SIZE , javax.swing .GroupLayout .DEFAULT_SIZE , javax.swing .GroupLayout .PREFERRED_SIZE ) )
.addContainerGap ( ) )
) ;
jButton1.getAccessibleContext ( ) .setAccessibleDescription ( "" ) ;
pack( ) ;
} // </editor-fold>
/* private void jButton5MouseClicked(MouseEvent evt) {
Graphics2D gfx = (Graphics2D) jPanel1.getGraphics();
System.out.println(evt.getX());
gfx.drawRect(evt.getX(), evt.getY(), 100, 50);
}*/
public static void main
( String args
[ ] ) { /* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://d...content-available-to-author-only...e.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
if ( "Nimbus" .equals ( info.getName ( ) ) ) {
javax.
swing .
UIManager .
setLookAndFeel ( info.
getClassName ( ) ) ; break ;
}
}
java.util .logging .Logger .getLogger ( NewJFrame.class .getName ( ) ) .log ( java.util .logging .Level .SEVERE , null , ex) ;
java.util .logging .Logger .getLogger ( NewJFrame.class .getName ( ) ) .log ( java.util .logging .Level .SEVERE , null , ex) ;
java.util .logging .Logger .getLogger ( NewJFrame.class .getName ( ) ) .log ( java.util .logging .Level .SEVERE , null , ex) ;
java.util .logging .Logger .getLogger ( NewJFrame.class .getName ( ) ) .log ( java.util .logging .Level .SEVERE , null , ex) ;
}
//</editor-fold>
/* Create and display the form */
//Возможно я где-то здесь накосячил:
//ну или вся прога косяк
public void run( ) {
new NewJFrame( ) .setVisible ( true ) ;
NewJFrame var = new NewJFrame( ) ;
new MouseEvents( var) ;
}
} ) ;
}
// Variables declaration - do not modify
// End of variables declaration
}
aW1wb3J0IGphdmEuYXd0LkdyYXBoaWNzMkQ7CmltcG9ydCBqYXZhLmF3dC5ldmVudC4qOwppbXBvcnQgamF2YXguc3dpbmcuKjsKCnB1YmxpYyBjbGFzcyBOZXdKRnJhbWUgZXh0ZW5kcyBqYXZheC5zd2luZy5KRnJhbWUgewogICAgICAgIHByaXZhdGUgamF2YXguc3dpbmcuSkJ1dHRvbiBqQnV0dG9uMTsKCSAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpCdXR0b24gakJ1dHRvbjU7CgkgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KQnV0dG9uIGpCdXR0b242OwoJICAgIHByaXZhdGUgamF2YXguc3dpbmcuSkJ1dHRvbiBqQnV0dG9uNzsKCSAgICBwcml2YXRlIGphdmF4LnN3aW5nLkpCdXR0b24gakJ1dHRvbjg7CgkgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KQnV0dG9uIGpCdXR0b245OwoJICAgIHByaXZhdGUgamF2YXguc3dpbmcuSk1lbnUgak1lbnUxOwoJICAgIHByaXZhdGUgamF2YXguc3dpbmcuSk1lbnUgak1lbnUyOwoJICAgIHByaXZhdGUgamF2YXguc3dpbmcuSk1lbnVCYXIgak1lbnVCYXIxOwoJICAgIHByaXZhdGUgamF2YXguc3dpbmcuSlBhbmVsIGpQYW5lbDE7CgkgICAgcHJpdmF0ZSBqYXZheC5zd2luZy5KU2Nyb2xsQmFyIGpTY3JvbGxCYXIxOwoJICAgIAoKICAgIC8qKgogICAgICogQ3JlYXRlcyBuZXcgZm9ybSBOZXdKRnJhbWUKICAgICAqLwogICAgcHVibGljIE5ld0pGcmFtZSgpIHsKICAgICAgICBpbml0Q29tcG9uZW50cygpOwogICAgICAgIC8vR3JhcGhpY3MyRCBnZnggPSAgalBhbmVsMS5nZXRHcmFwaGljcygpOwogICAgfQogICAgcHVibGljIGphdmF4LnN3aW5nLkpCdXR0b24gZ2V0akJ1dHRvbjEoKSB7CgkJcmV0dXJuIGpCdXR0b24xOwoJfQoJcHVibGljIHZvaWQgc2V0akJ1dHRvbjEoamF2YXguc3dpbmcuSkJ1dHRvbiBqQnV0dG9uMSkgewoJCXRoaXMuakJ1dHRvbjEgPSBqQnV0dG9uMTsKCX0KCXB1YmxpYyBqYXZheC5zd2luZy5KQnV0dG9uIGdldGpCdXR0b241KCkgewoJCXJldHVybiBqQnV0dG9uNTsKCX0KCXB1YmxpYyB2b2lkIHNldGpCdXR0b241KGphdmF4LnN3aW5nLkpCdXR0b24gakJ1dHRvbjUpIHsKCQl0aGlzLmpCdXR0b241ID0gakJ1dHRvbjU7Cgl9CglwdWJsaWMgamF2YXguc3dpbmcuSkJ1dHRvbiBnZXRqQnV0dG9uNigpIHsKCQlyZXR1cm4gakJ1dHRvbjY7Cgl9CglwdWJsaWMgdm9pZCBzZXRqQnV0dG9uNihqYXZheC5zd2luZy5KQnV0dG9uIGpCdXR0b242KSB7CgkJdGhpcy5qQnV0dG9uNiA9IGpCdXR0b242OwoJfQoJcHVibGljIGphdmF4LnN3aW5nLkpCdXR0b24gZ2V0akJ1dHRvbjcoKSB7CgkJcmV0dXJuIGpCdXR0b243OwoJfQoJcHVibGljIHZvaWQgc2V0akJ1dHRvbjcoamF2YXguc3dpbmcuSkJ1dHRvbiBqQnV0dG9uNykgewoJCXRoaXMuakJ1dHRvbjcgPSBqQnV0dG9uNzsKCX0KCXB1YmxpYyBqYXZheC5zd2luZy5KQnV0dG9uIGdldGpCdXR0b244KCkgewoJCXJldHVybiBqQnV0dG9uODsKCX0KCXB1YmxpYyB2b2lkIHNldGpCdXR0b244KGphdmF4LnN3aW5nLkpCdXR0b24gakJ1dHRvbjgpIHsKCQl0aGlzLmpCdXR0b244ID0gakJ1dHRvbjg7Cgl9CglwdWJsaWMgamF2YXguc3dpbmcuSkJ1dHRvbiBnZXRqQnV0dG9uOSgpIHsKCQlyZXR1cm4gakJ1dHRvbjk7Cgl9CglwdWJsaWMgdm9pZCBzZXRqQnV0dG9uOShqYXZheC5zd2luZy5KQnV0dG9uIGpCdXR0b245KSB7CgkJdGhpcy5qQnV0dG9uOSA9IGpCdXR0b245OwoJfQoJcHVibGljIGphdmF4LnN3aW5nLkpNZW51IGdldGpNZW51MSgpIHsKCQlyZXR1cm4gak1lbnUxOwoJfQoJcHVibGljIHZvaWQgc2V0ak1lbnUxKGphdmF4LnN3aW5nLkpNZW51IGpNZW51MSkgewoJCXRoaXMuak1lbnUxID0gak1lbnUxOwoJfQoJcHVibGljIGphdmF4LnN3aW5nLkpNZW51IGdldGpNZW51MigpIHsKCQlyZXR1cm4gak1lbnUyOwoJfQoJcHVibGljIHZvaWQgc2V0ak1lbnUyKGphdmF4LnN3aW5nLkpNZW51IGpNZW51MikgewoJCXRoaXMuak1lbnUyID0gak1lbnUyOwoJfQoJcHVibGljIGphdmF4LnN3aW5nLkpNZW51QmFyIGdldGpNZW51QmFyMSgpIHsKCQlyZXR1cm4gak1lbnVCYXIxOwoJfQoJcHVibGljIHZvaWQgc2V0ak1lbnVCYXIxKGphdmF4LnN3aW5nLkpNZW51QmFyIGpNZW51QmFyMSkgewoJCXRoaXMuak1lbnVCYXIxID0gak1lbnVCYXIxOwoJfQoJcHVibGljIGphdmF4LnN3aW5nLkpQYW5lbCBnZXRqUGFuZWwxKCkgewoJCXJldHVybiBqUGFuZWwxOwoJfQoJcHVibGljIHZvaWQgc2V0alBhbmVsMShqYXZheC5zd2luZy5KUGFuZWwgalBhbmVsMSkgewoJCXRoaXMualBhbmVsMSA9IGpQYW5lbDE7Cgl9CglwdWJsaWMgamF2YXguc3dpbmcuSlNjcm9sbEJhciBnZXRqU2Nyb2xsQmFyMSgpIHsKCQlyZXR1cm4galNjcm9sbEJhcjE7Cgl9CglwdWJsaWMgdm9pZCBzZXRqU2Nyb2xsQmFyMShqYXZheC5zd2luZy5KU2Nyb2xsQmFyIGpTY3JvbGxCYXIxKSB7CgkJdGhpcy5qU2Nyb2xsQmFyMSA9IGpTY3JvbGxCYXIxOwoJfQogICAgcHJpdmF0ZSB2b2lkIGluaXRDb21wb25lbnRzKCkgewoKICAgICAgICBqUGFuZWwxID0gbmV3IGphdmF4LnN3aW5nLkpQYW5lbCgpOwogICAgICAgIGpCdXR0b24xID0gbmV3IGphdmF4LnN3aW5nLkpCdXR0b24oKTsKICAgICAgICBqQnV0dG9uNSA9IG5ldyBqYXZheC5zd2luZy5KQnV0dG9uKCk7CiAgICAgICAgakJ1dHRvbjYgPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwogICAgICAgIGpCdXR0b243ID0gbmV3IGphdmF4LnN3aW5nLkpCdXR0b24oKTsKICAgICAgICBqQnV0dG9uOCA9IG5ldyBqYXZheC5zd2luZy5KQnV0dG9uKCk7CiAgICAgICAgakJ1dHRvbjkgPSBuZXcgamF2YXguc3dpbmcuSkJ1dHRvbigpOwogICAgICAgIGpTY3JvbGxCYXIxID0gbmV3IGphdmF4LnN3aW5nLkpTY3JvbGxCYXIoKTsKICAgICAgICBqTWVudUJhcjEgPSBuZXcgamF2YXguc3dpbmcuSk1lbnVCYXIoKTsKICAgICAgICBqTWVudTEgPSBuZXcgamF2YXguc3dpbmcuSk1lbnUoKTsKICAgICAgICBqTWVudTIgPSBuZXcgamF2YXguc3dpbmcuSk1lbnUoKTsKCiAgICAgICAgc2V0RGVmYXVsdENsb3NlT3BlcmF0aW9uKGphdmF4LnN3aW5nLldpbmRvd0NvbnN0YW50cy5FWElUX09OX0NMT1NFKTsKICAgICAgICBzZXRUaXRsZSgiQWxob3JpdG1pemF0aW9uR1VJIik7CiAgICAgICAgc2V0Q3Vyc29yKG5ldyBqYXZhLmF3dC5DdXJzb3IoamF2YS5hd3QuQ3Vyc29yLkRFRkFVTFRfQ1VSU09SKSk7CgogICAgICAgIGpQYW5lbDEuc2V0QmFja2dyb3VuZChuZXcgamF2YS5hd3QuQ29sb3IoMjU1LCAyNTUsIDI1NSkpOwogICAgICAgIGpQYW5lbDEuc2V0Qm9yZGVyKGphdmF4LnN3aW5nLkJvcmRlckZhY3RvcnkuY3JlYXRlTGluZUJvcmRlcihuZXcgamF2YS5hd3QuQ29sb3IoMCwgMCwgMCksIDMpKTsKCiAgICAgICAgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQgalBhbmVsMUxheW91dCA9IG5ldyBqYXZheC5zd2luZy5Hcm91cExheW91dChqUGFuZWwxKTsKICAgICAgICBqUGFuZWwxLnNldExheW91dChqUGFuZWwxTGF5b3V0KTsKICAgICAgICBqUGFuZWwxTGF5b3V0LnNldEhvcml6b250YWxHcm91cCgKICAgICAgICAgICAgalBhbmVsMUxheW91dC5jcmVhdGVQYXJhbGxlbEdyb3VwKGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkFsaWdubWVudC5MRUFESU5HKQogICAgICAgICAgICAuYWRkR2FwKDAsIDc5NCwgU2hvcnQuTUFYX1ZBTFVFKQogICAgICAgICk7CiAgICAgICAgalBhbmVsMUxheW91dC5zZXRWZXJ0aWNhbEdyb3VwKAogICAgICAgICAgICBqUGFuZWwxTGF5b3V0LmNyZWF0ZVBhcmFsbGVsR3JvdXAoamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuQWxpZ25tZW50LkxFQURJTkcpCiAgICAgICAgICAgIC5hZGRHYXAoMCwgNTk0LCBTaG9ydC5NQVhfVkFMVUUpCiAgICAgICAgKTsKICAgICAgICAKICAgICAgICAKICAgICAgICBqQnV0dG9uMS5zZXRUZXh0KCJqQnV0dG9uMSIpOwogICAgICAgIGpCdXR0b24xLnNldEN1cnNvcihuZXcgamF2YS5hd3QuQ3Vyc29yKGphdmEuYXd0LkN1cnNvci5IQU5EX0NVUlNPUikpOwogICAgICAgIAogICAgICAgIGpCdXR0b241LnNldFRleHQoImpCdXR0b24xIik7CiAgICAgICAgakJ1dHRvbjUuc2V0Q3Vyc29yKG5ldyBqYXZhLmF3dC5DdXJzb3IoamF2YS5hd3QuQ3Vyc29yLkhBTkRfQ1VSU09SKSk7CiAgICAgICAgCiAgICAgICAgakJ1dHRvbjYuc2V0VGV4dCgiakJ1dHRvbjEiKTsKICAgICAgICBqQnV0dG9uNi5zZXRDdXJzb3IobmV3IGphdmEuYXd0LkN1cnNvcihqYXZhLmF3dC5DdXJzb3IuSEFORF9DVVJTT1IpKTsKCiAgICAgICAgakJ1dHRvbjcuc2V0VGV4dCgiakJ1dHRvbjEiKTsKICAgICAgICBqQnV0dG9uNy5zZXRDdXJzb3IobmV3IGphdmEuYXd0LkN1cnNvcihqYXZhLmF3dC5DdXJzb3IuSEFORF9DVVJTT1IpKTsKCiAgICAgICAgakJ1dHRvbjguc2V0VGV4dCgiakJ1dHRvbjEiKTsKICAgICAgICBqQnV0dG9uOC5zZXRDdXJzb3IobmV3IGphdmEuYXd0LkN1cnNvcihqYXZhLmF3dC5DdXJzb3IuSEFORF9DVVJTT1IpKTsKCiAgICAgICAgakJ1dHRvbjkuc2V0VGV4dCgiakJ1dHRvbjEiKTsKICAgICAgICBqQnV0dG9uOS5zZXRDdXJzb3IobmV3IGphdmEuYXd0LkN1cnNvcihqYXZhLmF3dC5DdXJzb3IuSEFORF9DVVJTT1IpKTsKCiAgICAgICAgak1lbnUxLnNldFRleHQoIkZpbGUiKTsKICAgICAgICBqTWVudTEuc2V0Q3Vyc29yKG5ldyBqYXZhLmF3dC5DdXJzb3IoamF2YS5hd3QuQ3Vyc29yLkhBTkRfQ1VSU09SKSk7CiAgICAgICAgak1lbnVCYXIxLmFkZChqTWVudTEpOwoKICAgICAgICBqTWVudTIuc2V0VGV4dCgiRWRpdCIpOwogICAgICAgIGpNZW51Mi5zZXRDdXJzb3IobmV3IGphdmEuYXd0LkN1cnNvcihqYXZhLmF3dC5DdXJzb3IuSEFORF9DVVJTT1IpKTsKICAgICAgICBqTWVudUJhcjEuYWRkKGpNZW51Mik7CgogICAgICAgIHNldEpNZW51QmFyKGpNZW51QmFyMSk7CgogICAgICAgIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0IGxheW91dCA9IG5ldyBqYXZheC5zd2luZy5Hcm91cExheW91dChnZXRDb250ZW50UGFuZSgpKTsKICAgICAgICBnZXRDb250ZW50UGFuZSgpLnNldExheW91dChsYXlvdXQpOwogICAgICAgIGxheW91dC5zZXRIb3Jpem9udGFsR3JvdXAoCiAgICAgICAgICAgIGxheW91dC5jcmVhdGVQYXJhbGxlbEdyb3VwKGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkFsaWdubWVudC5MRUFESU5HKQogICAgICAgICAgICAuYWRkR3JvdXAobGF5b3V0LmNyZWF0ZVNlcXVlbnRpYWxHcm91cCgpCiAgICAgICAgICAgICAgICAuYWRkQ29udGFpbmVyR2FwKCkKICAgICAgICAgICAgICAgIC5hZGRHcm91cChsYXlvdXQuY3JlYXRlUGFyYWxsZWxHcm91cChqYXZheC5zd2luZy5Hcm91cExheW91dC5BbGlnbm1lbnQuTEVBRElORykKICAgICAgICAgICAgICAgICAgICAuYWRkQ29tcG9uZW50KGpCdXR0b24xLCBqYXZheC5zd2luZy5Hcm91cExheW91dC5BbGlnbm1lbnQuVFJBSUxJTkcsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkRFRkFVTFRfU0laRSwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuREVGQVVMVF9TSVpFLCBTaG9ydC5NQVhfVkFMVUUpCiAgICAgICAgICAgICAgICAgICAgLmFkZEdyb3VwKGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkFsaWdubWVudC5UUkFJTElORywgbGF5b3V0LmNyZWF0ZVBhcmFsbGVsR3JvdXAoamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuQWxpZ25tZW50LkxFQURJTkcpCiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoakJ1dHRvbjYsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA4NiwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpCiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoakJ1dHRvbjksIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA4NiwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpCiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoakJ1dHRvbjgsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA4NiwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpKQogICAgICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoakJ1dHRvbjUsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA4NiwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpCiAgICAgICAgICAgICAgICAgICAgLmFkZENvbXBvbmVudChqQnV0dG9uNywgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUsIDg2LCBqYXZheC5zd2luZy5Hcm91cExheW91dC5QUkVGRVJSRURfU0laRSkpCiAgICAgICAgICAgICAgICAuYWRkUHJlZmVycmVkR2FwKGphdmF4LnN3aW5nLkxheW91dFN0eWxlLkNvbXBvbmVudFBsYWNlbWVudC5VTlJFTEFURUQpCiAgICAgICAgICAgICAgICAuYWRkQ29tcG9uZW50KGpQYW5lbDEsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCBqYXZheC5zd2luZy5Hcm91cExheW91dC5ERUZBVUxUX1NJWkUsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFKQogICAgICAgICAgICAgICAgLmFkZFByZWZlcnJlZEdhcChqYXZheC5zd2luZy5MYXlvdXRTdHlsZS5Db21wb25lbnRQbGFjZW1lbnQuUkVMQVRFRCkKICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoalNjcm9sbEJhcjEsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCAxNywgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpCiAgICAgICAgICAgICAgICAuYWRkQ29udGFpbmVyR2FwKGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkRFRkFVTFRfU0laRSwgU2hvcnQuTUFYX1ZBTFVFKSkKICAgICAgICApOwogICAgICAgIGxheW91dC5zZXRWZXJ0aWNhbEdyb3VwKAogICAgICAgICAgICBsYXlvdXQuY3JlYXRlUGFyYWxsZWxHcm91cChqYXZheC5zd2luZy5Hcm91cExheW91dC5BbGlnbm1lbnQuVFJBSUxJTkcpCiAgICAgICAgICAgIC5hZGRHcm91cChqYXZheC5zd2luZy5Hcm91cExheW91dC5BbGlnbm1lbnQuTEVBRElORywgbGF5b3V0LmNyZWF0ZVNlcXVlbnRpYWxHcm91cCgpCiAgICAgICAgICAgICAgICAuYWRkQ29udGFpbmVyR2FwKCkKICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoakJ1dHRvbjUsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA2MywgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpCiAgICAgICAgICAgICAgICAuYWRkUHJlZmVycmVkR2FwKGphdmF4LnN3aW5nLkxheW91dFN0eWxlLkNvbXBvbmVudFBsYWNlbWVudC5SRUxBVEVEKQogICAgICAgICAgICAgICAgLmFkZENvbXBvbmVudChqQnV0dG9uMSwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUsIDYzLCBqYXZheC5zd2luZy5Hcm91cExheW91dC5QUkVGRVJSRURfU0laRSkKICAgICAgICAgICAgICAgIC5hZGRQcmVmZXJyZWRHYXAoamF2YXguc3dpbmcuTGF5b3V0U3R5bGUuQ29tcG9uZW50UGxhY2VtZW50LlJFTEFURUQpCiAgICAgICAgICAgICAgICAuYWRkQ29tcG9uZW50KGpCdXR0b242LCBqYXZheC5zd2luZy5Hcm91cExheW91dC5QUkVGRVJSRURfU0laRSwgNjMsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFKQogICAgICAgICAgICAgICAgLmFkZFByZWZlcnJlZEdhcChqYXZheC5zd2luZy5MYXlvdXRTdHlsZS5Db21wb25lbnRQbGFjZW1lbnQuUkVMQVRFRCkKICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoakJ1dHRvbjgsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA2MywgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpCiAgICAgICAgICAgICAgICAuYWRkUHJlZmVycmVkR2FwKGphdmF4LnN3aW5nLkxheW91dFN0eWxlLkNvbXBvbmVudFBsYWNlbWVudC5SRUxBVEVEKQogICAgICAgICAgICAgICAgLmFkZENvbXBvbmVudChqQnV0dG9uNywgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUsIDYzLCBqYXZheC5zd2luZy5Hcm91cExheW91dC5QUkVGRVJSRURfU0laRSkKICAgICAgICAgICAgICAgIC5hZGRQcmVmZXJyZWRHYXAoamF2YXguc3dpbmcuTGF5b3V0U3R5bGUuQ29tcG9uZW50UGxhY2VtZW50LlJFTEFURUQpCiAgICAgICAgICAgICAgICAuYWRkQ29tcG9uZW50KGpCdXR0b245LCBqYXZheC5zd2luZy5Hcm91cExheW91dC5QUkVGRVJSRURfU0laRSwgNjMsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFKQogICAgICAgICAgICAgICAgLmFkZENvbnRhaW5lckdhcChqYXZheC5zd2luZy5Hcm91cExheW91dC5ERUZBVUxUX1NJWkUsIFNob3J0Lk1BWF9WQUxVRSkpCiAgICAgICAgICAgIC5hZGRHcm91cChsYXlvdXQuY3JlYXRlU2VxdWVudGlhbEdyb3VwKCkKICAgICAgICAgICAgICAgIC5hZGRHYXAoMCwgMCwgU2hvcnQuTUFYX1ZBTFVFKQogICAgICAgICAgICAgICAgLmFkZEdyb3VwKGxheW91dC5jcmVhdGVQYXJhbGxlbEdyb3VwKGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkFsaWdubWVudC5MRUFESU5HKQogICAgICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoalNjcm9sbEJhcjEsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFLCA1ODgsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LlBSRUZFUlJFRF9TSVpFKQogICAgICAgICAgICAgICAgICAgIC5hZGRDb21wb25lbnQoalBhbmVsMSwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUsIGphdmF4LnN3aW5nLkdyb3VwTGF5b3V0LkRFRkFVTFRfU0laRSwgamF2YXguc3dpbmcuR3JvdXBMYXlvdXQuUFJFRkVSUkVEX1NJWkUpKQogICAgICAgICAgICAgICAgLmFkZENvbnRhaW5lckdhcCgpKQogICAgICAgICk7CgogICAgICAgIGpCdXR0b24xLmdldEFjY2Vzc2libGVDb250ZXh0KCkuc2V0QWNjZXNzaWJsZURlc2NyaXB0aW9uKCIiKTsKCiAgICAgICAgcGFjaygpOwogICAgfS8vIDwvZWRpdG9yLWZvbGQ+ICAgICAgICAgICAgICAgICAgICAgICAgCgogICAvKiBwcml2YXRlIHZvaWQgakJ1dHRvbjVNb3VzZUNsaWNrZWQoTW91c2VFdmVudCBldnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAKICAgICAgICAgICAgICAgR3JhcGhpY3MyRCBnZnggPSAgKEdyYXBoaWNzMkQpIGpQYW5lbDEuZ2V0R3JhcGhpY3MoKTsKICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGV2dC5nZXRYKCkpOwogICAgICAgICAgICAgICBnZnguZHJhd1JlY3QoZXZ0LmdldFgoKSwgZXZ0LmdldFkoKSwgMTAwLCA1MCk7CiAgICAgICAgICAgICAgICB9Ki8KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIAogICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICAvKiBTZXQgdGhlIE5pbWJ1cyBsb29rIGFuZCBmZWVsICovCiAgICAgICAgLy88ZWRpdG9yLWZvbGQgZGVmYXVsdHN0YXRlPSJjb2xsYXBzZWQiIGRlc2M9IiBMb29rIGFuZCBmZWVsIHNldHRpbmcgY29kZSAob3B0aW9uYWwpICI+CiAgICAgICAgLyogSWYgTmltYnVzIChpbnRyb2R1Y2VkIGluIEphdmEgU0UgNikgaXMgbm90IGF2YWlsYWJsZSwgc3RheSB3aXRoIHRoZSBkZWZhdWx0IGxvb2sgYW5kIGZlZWwuCiAgICAgICAgICogRm9yIGRldGFpbHMgc2VlIGh0dHA6Ly9kLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9qYXZhc2UvdHV0b3JpYWwvdWlzd2luZy9sb29rYW5kZmVlbC9wbGFmLmh0bWwgCiAgICAgICAgICovCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgZm9yIChqYXZheC5zd2luZy5VSU1hbmFnZXIuTG9va0FuZEZlZWxJbmZvIGluZm8gOiBqYXZheC5zd2luZy5VSU1hbmFnZXIuZ2V0SW5zdGFsbGVkTG9va0FuZEZlZWxzKCkpIHsKICAgICAgICAgICAgICAgIGlmICgiTmltYnVzIi5lcXVhbHMoaW5mby5nZXROYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgamF2YXguc3dpbmcuVUlNYW5hZ2VyLnNldExvb2tBbmRGZWVsKGluZm8uZ2V0Q2xhc3NOYW1lKCkpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXIuZ2V0TG9nZ2VyKE5ld0pGcmFtZS5jbGFzcy5nZXROYW1lKCkpLmxvZyhqYXZhLnV0aWwubG9nZ2luZy5MZXZlbC5TRVZFUkUsIG51bGwsIGV4KTsKICAgICAgICB9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgIGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlci5nZXRMb2dnZXIoTmV3SkZyYW1lLmNsYXNzLmdldE5hbWUoKSkubG9nKGphdmEudXRpbC5sb2dnaW5nLkxldmVsLlNFVkVSRSwgbnVsbCwgZXgpOwogICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyLmdldExvZ2dlcihOZXdKRnJhbWUuY2xhc3MuZ2V0TmFtZSgpKS5sb2coamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWwuU0VWRVJFLCBudWxsLCBleCk7CiAgICAgICAgfSBjYXRjaCAoamF2YXguc3dpbmcuVW5zdXBwb3J0ZWRMb29rQW5kRmVlbEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXIuZ2V0TG9nZ2VyKE5ld0pGcmFtZS5jbGFzcy5nZXROYW1lKCkpLmxvZyhqYXZhLnV0aWwubG9nZ2luZy5MZXZlbC5TRVZFUkUsIG51bGwsIGV4KTsKICAgICAgICB9CiAgICAgICAgLy88L2VkaXRvci1mb2xkPgoKICAgICAgICAvKiBDcmVhdGUgYW5kIGRpc3BsYXkgdGhlIGZvcm0gKi8KICAgICAgICBqYXZhLmF3dC5FdmVudFF1ZXVlLmludm9rZUxhdGVyKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAJLy/QktC+0LfQvNC+0LbQvdC+INGPINCz0LTQtS3RgtC+INC30LTQtdGB0Ywg0L3QsNC60L7RgdGP0YfQuNC7OgogICAgICAgIAkvL9C90YMg0LjQu9C4INCy0YHRjyDQv9GA0L7Qs9CwINC60L7RgdGP0LoKICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAJbmV3IE5ld0pGcmFtZSgpLnNldFZpc2libGUodHJ1ZSk7CiAgICAgICAgICAgIAlOZXdKRnJhbWUgdmFyID0gbmV3IE5ld0pGcmFtZSgpOwogICAgICAgICAgICAgICAgbmV3IE1vdXNlRXZlbnRzKHZhcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAKICAgIH0KICAgIAogICAKCgkvLyBWYXJpYWJsZXMgZGVjbGFyYXRpb24gLSBkbyBub3QgbW9kaWZ5ICAgICAgICAgICAgICAgICAgICAgCiAgCiAgICAvLyBFbmQgb2YgdmFyaWFibGVzIGRlY2xhcmF0aW9uICAgICAgICAgICAgICAgICAgIAp9Cg==