Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » Visual Editor (VE) » Parse Error and partial solution
Parse Error and partial solution [message #118091] Thu, 16 February 2006 12:01 Go to next message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
Hello !
I installed with success this pop-up calendar:
http://www.cwroethel.com/Projects/JPopupCalendar/

One of the commands to build this calendar is:

final PopupCalendar popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);


VE doesn't seem to like this bit of code (c.f log )

What can I do to change this and still make VE displaying my work.

Thanks.


LOG
+++ Warning +++: Thu Feb 16 12:10:41 CET 2006 Skipping expression: final PopupCalendar popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH)

!ENTRY org.eclipse.ve.java.core 2 0 2006-02-16 12:10:41.810
!MESSAGE Exception thrown.
!STACK 0
java.lang.NullPointerException
at org.eclipse.ve.internal.java.codegen.java.AbstractExpression Decoder.decode(AbstractExpressionDecoder.java:165)
at org.eclipse.ve.internal.java.codegen.model.CodeExpressionRef .decodeExpression(CodeExpressionRef.java:330)
at org.eclipse.ve.internal.java.codegen.core.JavaSourceTranslat or.decodeExpression(JavaSourceTranslator.java:588)
at org.eclipse.ve.internal.java.codegen.core.JavaSourceTranslat or.buildCompositionModel(JavaSourceTranslator.java:714)
at org.eclipse.ve.internal.java.codegen.core.JavaSourceTranslat or.reverseParse(JavaSourceTranslator.java:846)
at org.eclipse.ve.internal.java.codegen.core.JavaSourceTranslat or$1.doRun(JavaSourceTranslator.java:893)
at org.eclipse.ve.internal.java.codegen.util.ReverseParserJob.r un(ReverseParserJob.java:56)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)
Re: Parse Error and partial solution [message #118116 is a reply to message #118091] Thu, 16 February 2006 14:34 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

What version of Eclipse, GEF, EMF, and VE do you have installed?

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #118133 is a reply to message #118091] Thu, 16 February 2006 14:48 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

I downloaded the source and no where does it do:

>
> final PopupCalendar popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
>

So I can't debug it. I need to have the code this was in so that I can
see why you are getting the error. Often the parser is sensitive to all
of the code, not just one line of code.
--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #118144 is a reply to message #118133] Thu, 16 February 2006 16:14 Go to previous messageGo to next message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
------=_Part_2151_8167228.1140106564225
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Thanks for your reply,

I am using Eclipse 3.2M4, VE1.2M1, EMF2.2M3, GEF3,2M3 on Mac OS X 10.4.5 with java 1.5 (it is actually the same problem on a windows xp machine with java 1.4.2 and the same eclipse configuration).

Concerning the code, I installed the package net.cwroethel.swt.popupcalendar and then used the SimpleExample2 to produce the attached source.
------=_Part_2151_8167228.1140106564225
Content-Type: application/octet-stream;
name=Medclipse_Consultation_Consultation_PopUp_RDV.java
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=Medclipse_Consultation_Consultation_PopUp_RDV.java

package ch.medclipse.application;

import java.util.Locale;

import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.GridData;
import net.cwroethel.swt.popupcalendar.*;

import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.SWT;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Medclipse_Consultation_Consultation_PopUp_RDV {

Shell sShell = null; // @jve:decl-index=0:visual-constraint="10,10"
private ScrolledComposite scrolledComposite = null;
private Composite composite = null;
private Combo combodans = null;
private Button radioButtondans = null;
private Button radioButtontousles = null;
private Combo combotousles = null;
private Button radioButtondate = null;

private Button buttonajouter = null;
//* Pop-Up Calendar
private Text textdate = null;
private Button buttondatepop = null;
//**


/**
* This method initializes sShell
*/
void createSShell() {
sShell = new Shell(SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
sShell.setText("PROCHAIN RENDEZ-VOUS");
sShell.setLayout(new FillLayout()); // Generated
sShell.setLocation(new Point(300, 300));
createScrolledComposite();
sShell.setSize(new Point(302, 172));
}


/**
* This method initializes scrolledComposite
*
*/
private void createScrolledComposite() {
scrolledComposite = new ScrolledComposite(sShell, SWT.NONE);
scrolledComposite.setExpandHorizontal(true); // Generated
createComposite();
scrolledComposite.setExpandVertical(true); // Generated
scrolledComposite.setContent(composite); // Generated
}

//* create the popup calendar.
final PopupCalendar popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
//**

/**
* This method initializes composite
*
*/
private void createComposite() {
GridData gridData = new GridData();
gridData.widthHint = 100; // Generated
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3; // Generated
composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(gridLayout); // Generated
radioButtondate = new Button(composite, SWT.RADIO);
radioButtondate.setText("Date"); // Generated

//* Pop-Up Calendar
//create the Calendar Text widget.
textdate = new Text(composite, SWT.CENTER | SWT.READ_ONLY);
GridData data = new GridData();
data.widthHint = 80;
data.heightHint = 20;
textdate.setLayoutData(data);
textdate.setBackground(Display.getCurrent().getSystemColor(S WT.COLOR_WHITE));
//create the Calendar button and pop-up, listener
buttondatepop = new Button(composite, SWT.NONE);
buttondatepop
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
Control comp = (Control)event.getSource();
popupCal.open(comp, PopupCalendar.RIGHT);
buttondatepop.setFocus();
// a little trick to speed up opening the window
popupCal.getDateChooser().paint();
}
});
// finally add the selection listener for pop-up calendar
popupCal.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (popupCal.getDate() != null) {
textdate.setText(new SimpleDateFormat("EEE dd/MM/yy").format(
popupCal.getDate().getTime()));
}
}
});
//** End Pop-Up Calendar
radioButtondans = new Button(composite, SWT.RADIO);
radioButtondans.setText("Dans"); // Generated
createCombodans();
Label filler3 = new Label(composite, SWT.NONE);
radioButtontousles = new Button(composite, SWT.RADIO);
radioButtontousles.setText("Tous les"); // Generated
createCombotousles();
Label filler = new Label(composite, SWT.NONE);
Label filler1 = new Label(composite, SWT.NONE);
Label filler2 = new Label(composite, SWT.NONE);
buttonajouter = new Button(composite, SWT.NONE);
buttonajouter.setText("Ajouter"); // Generated
}

/**
* This method initializes combodans
*
*/
private void createCombodans() {
GridData gridData1 = new GridData();
gridData1.widthHint = 100;
combodans = new Combo(composite, SWT.NONE);
combodans.setItems (new String []{"","1 jour","2 jours","3 jours","4 jours","5 jours","6 jours","1 semaine", "2 semaines","3 semaines","1 mois","2 mois","3 mois","4 mois", "5 mois","6 mois","7 mois","8 mois", "9 mois","10 mois","11 mois","1 an"});
combodans.setLayoutData(gridData1);
}

/**
* This method initializes combotousles
*
*/
private void createCombotousles() {
GridData gridData2 = new GridData();
gridData2.widthHint = 100;
combotousles = new Combo(composite, SWT.NONE);
combotousles.setItems (new String []{"","1 jour","2 jours","3 jours","4 jours","5 jours","1 semaine", "2 semaines","3 semaines","1 mois","2 mois","3 mois","4 mois", "5 mois","6 mois","7 mois","8 mois", "9 mois","10 mois","11 mois","1 an"});
combotousles.setLayoutData(gridData2);
}}

------=_Part_2151_8167228.1140106564225--
Re: Parse Error and partial solution [message #118166 is a reply to message #118144] Thu, 16 February 2006 17:01 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

Thanks.

I've opened

https://bugs.eclipse.org/bugs/show_bug.cgi?id=128247

to address this problem. But for now what you need to do is change to:

PopupCalendar popupCal;

createShell() {
sShell = ...
popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL,
Locale.FRENCH);
}

You will get some exceptions in the error log, but you can ignore them.
The problem with this new pattern is that we don't realize that
PopupCalendar is an SWT wrapper so we don't call the constructor on the
SWT UI thread. But the rest of your class will show.

Buenzli wrote:
> Thanks for your reply,
>
> I am using Eclipse 3.2M4, VE1.2M1, EMF2.2M3, GEF3,2M3 on Mac OS X 10.4.5 with java 1.5 (it is actually the same problem on a windows xp machine with java 1.4.2 and the same eclipse configuration).
>
> Concerning the code, I installed the package net.cwroethel.swt.popupcalendar and then used the SimpleExample2 to produce the attached source.

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #118177 is a reply to message #118166] Thu, 16 February 2006 21:23 Go to previous messageGo to next message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
Thanks for trying to solve that out.

Ok here is the code:

// *Create the popup calendar first part
PopupCalendar popupCal;
PopupCalendar popupCal2;
// **
/**
* This method initializes sShell
*/
void createSShell() {
sShell = new Shell(SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
sShell.setText("DEMANDES");
sShell.setLayout(new FillLayout()); // Generated
sShell.setLocation(new Point(75, 100));
createScrolledComposite();
sShell.setSize(new Point(1013, 640));
// * Create the popup calendar second part
popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
popupCal2 = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
//**
}

When I try to launch via "java beans" I receive this message in the console:
IWAV0056I Java Bean ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes started with the createSShell method
IWAV0052E Invocation Target Exception creating ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.SWTLaunch er.runShell(SWTLauncher.java:467)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.SWTLaunch er.launch(SWTLauncher.java:181)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeans Launcher.main(JavaBeansLauncher.java:70)
Caused by: java.lang.NullPointerException
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createGrouplaboratoire(Medclipse_Consultatio n_Consultation_PopUp_Demandes.java:314)
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createComposite(Medclipse_Consultation_Consu ltation_PopUp_Demandes.java:223)
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createScrolledComposite(Medclipse_Consultati on_Consultation_PopUp_Demandes.java:186)
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createSShell(Medclipse_Consultation_Consulta tion_PopUp_Demandes.java:172)
... 7 more

MMmmfff what does it mean ? Am I doing something wrong ?
Re: Parse Error and partial solution [message #118187 is a reply to message #118177] Thu, 16 February 2006 22:43 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

The error is happening in your code:

> Caused by: java.lang.NullPointerException
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createGrouplaboratoire(Medclipse_Consultatio n_Consultation_PopUp_Demandes.java:314)
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createComposite(Medclipse_Consultation_Consu ltation_PopUp_Demandes.java:223)
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createScrolledComposite(Medclipse_Consultati on_Consultation_PopUp_Demandes.java:186)
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createSShell(Medclipse_Consultation_Consulta tion_PopUp_Demandes.java:172)
> ... 7 more
>
> MMmmfff what does it mean ? Am I doing something wrong ?

You need to see why you would get an NPE at line 314 of the class
Medclipse_Consultation_Consultation_PopUp_Demandes.

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #118211 is a reply to message #118187] Fri, 17 February 2006 06:06 Go to previous messageGo to next message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
------=_Part_2302_13448963.1140156433895
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

The error comes from here:
// **// finally add the selection listener for pop-up calendar
popupCal.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (popupCal.getDate() != null) {
textdatelabo.setText(new SimpleDateFormat("EEE dd/MM/yy").format(
popupCal.getDate().getTime()));
}
}
});

I attached the full code.
------=_Part_2302_13448963.1140156433895
Content-Type: application/octet-stream;
name=Medclipse_Consultation_Consultation_PopUp_Demandes.java
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=Medclipse_Consultation_Consultation_PopUp_Demandes. java

cGFja2FnZSBjaC5tZWRjbGlwc2UuYXBwbGljYXRpb247DQoNCmltcG9ydCBq YXZhLnRleHQuU2lt
cGxlRGF0ZUZvcm1hdDsNCmltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOw0KDQpp bXBvcnQgbmV0LmN3
cm9ldGhlbC5zd3QucG9wdXBjYWxlbmRhci5Qb3B1cENhbGVuZGFyOw0KDQpp bXBvcnQgb3JnLmVj
bGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KaW1wb3J0IG9yZy5lY2xp cHNlLnN3dC5ldmVu
dHMuU2VsZWN0aW9uQWRhcHRlcjsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qu ZXZlbnRzLlNlbGVj
dGlvbkV2ZW50Ow0KaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Q b2ludDsNCmltcG9y
dCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsNCmltcG9ydCBvcmcu ZWNsaXBzZS5zd3Qu
Y3VzdG9tLlNjcm9sbGVkQ29tcG9zaXRlOw0KaW1wb3J0IG9yZy5lY2xpcHNl LnN3dC5TV1Q7DQpp
bXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KaW1w b3J0IG9yZy5lY2xp
cHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCmltcG9ydCBvcmcuZWNsaXBz ZS5zd3Qud2lkZ2V0
cy5Hcm91cDsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRE YXRhOw0KaW1wb3J0
IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7DQppbXBvcnQgb3Jn LmVjbGlwc2Uuc3d0
LndpZGdldHMuRGlzcGxheTsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lk Z2V0cy5MYWJlbDsN
CmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247DQppbXBv cnQgb3JnLmVjbGlw
c2Uuc3d0LndpZGdldHMuQ29tYm87DQppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0 LndpZGdldHMuVGV4
dDsNCg0KcHVibGljIGNsYXNzIE1lZGNsaXBzZV9Db25zdWx0YXRpb25fQ29u c3VsdGF0aW9uX1Bv
cFVwX0RlbWFuZGVzIHsNCg0KCVNoZWxsIHNTaGVsbCA9IG51bGw7ICAvLyAg QGp2ZTpkZWNsLWlu
ZGV4PTA6dmlzdWFsLWNvbnN0cmFpbnQ9IjE5LDkiDQoJcHJpdmF0ZSBTY3Jv bGxlZENvbXBvc2l0
ZSBzY3JvbGxlZENvbXBvc2l0ZSA9IG51bGw7DQoJcHJpdmF0ZSBDb21wb3Np dGUgY29tcG9zaXRl
ID0gbnVsbDsNCglwcml2YXRlIEdyb3VwIGdyb3VwbGFib3JhdG9pcmUgPSBu dWxsOw0KCXByaXZh
dGUgTGFiZWwgbGFiZWx0eXBlID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxh YmVsZGV0YWlscyA9
IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJlbGRhdGVkZXNpcmVlID0gbnVs bDsNCglwcml2YXRl
IExhYmVsIGZpbGxlcjkgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgZmlsbGVy MTAgPSBudWxsOw0K
CXByaXZhdGUgTGFiZWwgbGFiZWxsaWV1ID0gbnVsbDsNCglwcml2YXRlIExh YmVsIGZpbGxlcjUg
PSBudWxsOw0KCXByaXZhdGUgTGFiZWwgZmlsbGVyNyA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBs
YWJlbHJlbWFycXVlMSA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gY2hlY2tC b3hsYWJvcmF0b2ly
ZSA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RhdGVsYWJvID0gbnVs bDsNCglwcml2YXRl
IExhYmVsIGxhYmVsb3UgPSBudWxsOw0KCXByaXZhdGUgVGV4dCB0ZXh0ZGF0 ZWxhYm8gPSBudWxs
Ow0KCXByaXZhdGUgTGFiZWwgZmlsbGVyMyA9IG51bGw7DQoJcHJpdmF0ZSBM YWJlbCBmaWxsZXI0
ID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGZpbGxlcjYgPSBudWxsOw0KCXBy aXZhdGUgVGV4dCB0
ZXh0cmVtYXJxdWVsYWJvID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVj a0JveHJhZGlvID0g
bnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvZGF0ZXJhZGlvID0gbnVsbDsN Cglwcml2YXRlIExh
YmVsIGxhYmVsb3UxID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dGRhdGVy YWRpbyA9IG51bGw7
DQoJcHJpdmF0ZSBDb21ibyBjb21ib2xpZXVyYWRpbyA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBs
YWJlbG91MiA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1cmFkaW8g PSBudWxsOw0KCXBy
aXZhdGUgVGV4dCB0ZXh0cmVtYXJxdWVyYWRpbyA9IG51bGw7DQoJcHJpdmF0 ZSBCdXR0b24gY2hl
Y2tCb3hlY2cgPSBudWxsOw0KCXByaXZhdGUgQ29tYm8gY29tYm9kZXRhaWxl Y2cgPSBudWxsOw0K
CXByaXZhdGUgQ29tYm8gY29tYm9kYXRlZWNnID0gbnVsbDsNCglwcml2YXRl IExhYmVsIGxhYmVs
b3UzID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dGRhdGVlY2cgPSBudWxs Ow0KCXByaXZhdGUg
TGFiZWwgZmlsbGVyID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGZpbGxlcjIg PSBudWxsOw0KCXBy
aXZhdGUgTGFiZWwgZmlsbGVyOCA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRl eHRyZW1hcnF1ZWVj
ZyA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gY2hlY2tCb3h0ZXN0ZGVmZm9y dCA9IG51bGw7DQoJ
cHJpdmF0ZSBDb21ibyBjb21ib2RldGFpbGVyZ29tZXRyaWUgPSBudWxsOw0K CXByaXZhdGUgQ29t
Ym8gY29tYm9kYXRlZXJnb21ldHJpZSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJl bCBsYWJlbG91NCA9
IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRkYXRlZXJnb21ldHJpZSA9IG51 bGw7DQoJcHJpdmF0
ZSBDb21ibyBjb21ib2xpZXVlcmdvbWV0cmllID0gbnVsbDsNCglwcml2YXRl IExhYmVsIGxhYmVs
b3UyMSA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1ZXJnb21ldHJp ZSA9IG51bGw7DQoJ
cHJpdmF0ZSBUZXh0IHRleHRyZW1hcnF1ZWVyZ28gPSBudWxsOw0KCXByaXZh dGUgR3JvdXAgZ3Jv
dXBjb25zdWx0YXRpb25zID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVs dHlwZTEgPSBudWxs
Ow0KCXByaXZhdGUgTGFiZWwgbGFiZWxkZXRhaWxzMSA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBs
YWJlbGRhdGVkZXNpcmVlMSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBmaWxs ZXIxNCA9IG51bGw7
DQoJcHJpdmF0ZSBMYWJlbCBmaWxsZXIxID0gbnVsbDsNCglwcml2YXRlIExh YmVsIGxhYmVsbGll
dTEgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgZmlsbGVyMTIgPSBudWxsOw0K CXByaXZhdGUgTGFi
ZWwgZmlsbGVyMTMgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgbGFiZWxyZW1h cnF1ZTIgPSBudWxs
Ow0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94Y29uc3VsdGF0aW9uc3BlYyA9 IG51bGw7DQoJcHJp
dmF0ZSBDb21ibyBjb21ib2RldGFpbGNvbnN1bHRlc3BlY2lhbGlzZWUgPSBu dWxsOw0KCXByaXZh
dGUgQ29tYm8gY29tYm9kYXRlY29uc3VsdGVzcGVjID0gbnVsbDsNCglwcml2 YXRlIExhYmVsIGxh
YmVsb3U1ID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dGRhdGVjb25zdWx0 YXRpb25zcGVjID0g
bnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvbGlldWNvbnN1bHRhdGlvbnNw ZWMgPSBudWxsOw0K
CXByaXZhdGUgTGFiZWwgbGFiZWxvdTIyID0gbnVsbDsNCglwcml2YXRlIFRl eHQgdGV4dGxpZXVj
b25zdWx0YXRpb25zcGVjID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dHJl bWFycXVlY29uc3Vs
dGVzcGVjID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGNvbnN1 bHRldGVsc3BlYyA9
IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RldGFpbGNvbnN1bHRldGVs c3BlYyA9IG51bGw7
DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RhdGVjb25zdWx0ZXRlbHNwZWMgPSBu dWxsOw0KCXByaXZh
dGUgTGFiZWwgbGFiZWxvdTUxID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4 dGRhdGVjb25zdWx0
YXRldGVsc3BlYyA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2xpZXVj b25zdWx0ZXRlbHNw
ZWMgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgbGFiZWxvdTIyMSA9IG51bGw7 DQoJcHJpdmF0ZSBU
ZXh0IHRleHRsaWV1Y29uc3VsdGV0ZWxzcGVjID0gbnVsbDsNCglwcml2YXRl IFRleHQgdGV4dHJl
bWFycXVlY29uc3VsdGV0ZWxzcGVjID0gbnVsbDsNCglwcml2YXRlIEJ1dHRv biBjaGVja0JveGhv
c3BpdGFsaXNhdGlvbiA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2Rl dGFpbGhvc3BpdGFs
aXNhdGlvbiA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RhdGVob3Nw aXRhbGlzYXRpb24g
PSBudWxsOw0KCXByaXZhdGUgTGFiZWwgbGFiZWxvdTUxMSA9IG51bGw7DQoJ cHJpdmF0ZSBUZXh0
IHRleHRkYXRlaG9zcGl0YWxpc2F0aW9uID0gbnVsbDsNCglwcml2YXRlIENv bWJvIGNvbWJvbGll
dWhvc3BpdGFsaXNhdGlvbiA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJl bG91MjIxMSA9IG51
bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1aG9zcGl0YWxpc2F0aW9uID0g bnVsbDsNCglwcml2
YXRlIFRleHQgdGV4dHJlbWFycXVlaG9zcGl0ID0gbnVsbDsNCglwcml2YXRl IEdyb3VwIGdyb3Vw
ZGl2ZXJzID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVsdHlwZTExID0g bnVsbDsNCglwcml2
YXRlIExhYmVsIGxhYmVsZGV0YWlsczExID0gbnVsbDsNCglwcml2YXRlIExh YmVsIGxhYmVsZGF0
ZWRlc2lyZWUxMSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBmaWxsZXIxOCA9 IG51bGw7DQoJcHJp
dmF0ZSBMYWJlbCBmaWxsZXIxMSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBs YWJlbGxpZXUxMSA9
IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBmaWxsZXIxNiA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBm
aWxsZXIxNyA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJlbHJlbWFycXVl MyA9IG51bGw7DQoJ
cHJpdmF0ZSBCdXR0b24gY2hlY2tCb3h2YWNjaW4gPSBudWxsOw0KCXByaXZh dGUgQ29tYm8gY29t
Ym9kZXRhaWx2YWNjaW4gPSBudWxsOw0KCXByaXZhdGUgQ29tYm8gY29tYm9k YXRldmFjY2luID0g
bnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVsb3U1MiA9IG51bGw7DQoJcHJp dmF0ZSBUZXh0IHRl
eHRkYXRldmFjY2luID0gbnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvbGll dXZhY2NpbiA9IG51
bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJlbG91MjIyID0gbnVsbDsNCglwcml2 YXRlIFRleHQgdGV4
dGxpZXV2YWNjaW4gPSBudWxsOw0KCXByaXZhdGUgVGV4dCB0ZXh0cmVtYXJx dWV2YWNjaW4gPSBu
dWxsOw0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94cHJvY2hyZHYgPSBudWxs Ow0KCXByaXZhdGUg
TGFiZWwgZmlsbGVyMTUxID0gbnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJv ZGF0ZXByb2NocmR2
ID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVsb3U1MjEgPSBudWxsOw0K CXByaXZhdGUgVGV4
dCB0ZXh0ZGF0ZXByb2NocmR2ID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGZp bGxlcjE1ID0gbnVs
bDsNCglwcml2YXRlIExhYmVsIGZpbGxlcjE5ID0gbnVsbDsNCglwcml2YXRl IExhYmVsIGZpbGxl
cjIwID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dHJlbWFycXVlcHJvY2hy ZHYgPSBudWxsOw0K
CXByaXZhdGUgQ29tcG9zaXRlIGNvbXBvc2l0ZTEgPSBudWxsOw0KCXByaXZh dGUgQnV0dG9uIGJ1
dHRvbmVudm95ZXJkZW1hbmRlID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBi dXR0b25jcmVlcmFs
ZXJ0ZSA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9ub3V2cmlybGFi byA9IG51bGw7DQoJ
cHJpdmF0ZSBCdXR0b24gYnV0dG9ub3V2cmlycmFkaW8gPSBudWxsOw0KCXBy aXZhdGUgVGV4dCB0
ZXh0bGFibyA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRyYWRpbyA9IG51 bGw7DQoJcHJpdmF0
ZSBCdXR0b24gY2hlY2tCb3hhdXRyZXMgPSBudWxsOw0KCXByaXZhdGUgVGV4 dCB0ZXh0YXV0cmVz
ID0gbnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvZGF0ZWF1dHJlcyA9IG51 bGw7DQoJcHJpdmF0
ZSBMYWJlbCBsYWJlbG91NiA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRk YXRlYXV0cmVzID0g
bnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvbGlldWF1dHJlcyA9IG51bGw7 DQoJcHJpdmF0ZSBM
YWJlbCBsYWJlbG91NyA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1 YXV0cmVzID0gbnVs
bDsNCglwcml2YXRlIFRleHQgdGV4dHJlbWFycXVlYXV0cmVzID0gbnVsbDsN Ci8vCSogUG9wLVVw
IENhbGVuZGFyDQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9uZGF0ZXBvcCA9IG51 bGw7DQovLyoqDQoJ
DQovLwkqQ3JlYXRlIHRoZSBwb3B1cCBjYWxlbmRhciBmaXJzdCBwYXJ0DQoJ UG9wdXBDYWxlbmRh
ciBwb3B1cENhbDsNCglQb3B1cENhbGVuZGFyIHBvcHVwQ2FsMjsNCi8vICoq DQoJLyoqDQoJICog
VGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgc1NoZWxsDQoJICovDQoJdm9pZCBj cmVhdGVTU2hlbGwo
KSB7DQoJCXNTaGVsbCA9IG5ldyBTaGVsbChTV1QuU0hFTExfVFJJTSB8IFNX VC5BUFBMSUNBVElP
Tl9NT0RBTCk7DQoJCXNTaGVsbC5zZXRUZXh0KCJERU1BTkRFUyIpOw0KCQlz U2hlbGwuc2V0TGF5
b3V0KG5ldyBGaWxsTGF5b3V0KCkpOyAgLy8gR2VuZXJhdGVkDQoJCXNTaGVs bC5zZXRMb2NhdGlv
bihuZXcgUG9pbnQoNzUsIDEwMCkpOw0KCQljcmVhdGVTY3JvbGxlZENvbXBv c2l0ZSgpOw0KCQlz
U2hlbGwuc2V0U2l6ZShuZXcgUG9pbnQoMTAxMywgNjQwKSk7DQovLyAqIENy ZWF0ZSB0aGUgcG9w
dXAgY2FsZW5kYXIgc2Vjb25kIHBhcnQNCgkJcG9wdXBDYWwgPSBuZXcgUG9w dXBDYWxlbmRhcihz
U2hlbGwgLCBQb3B1cENhbGVuZGFyLlNIT1dBTEwsIExvY2FsZS5GUkVOQ0gp Ow0KCQlwb3B1cENh
bDIgPSBuZXcgUG9wdXBDYWxlbmRhcihzU2hlbGwgLCBQb3B1cENhbGVuZGFy LlNIT1dBTEwsIExv
Y2FsZS5GUkVOQ0gpOw0KLy8qKg0KCX0NCgkvKioNCgkgKiBUaGlzIG1ldGhv ZCBpbml0aWFsaXpl
cyBzY3JvbGxlZENvbXBvc2l0ZQkNCgkgKg0KCSAqLw0KCXByaXZhdGUgdm9p ZCBjcmVhdGVTY3Jv
bGxlZENvbXBvc2l0ZSgpIHsNCgkJc2Nyb2xsZWRDb21wb3NpdGUgPSBuZXcg U2Nyb2xsZWRDb21w
b3NpdGUoc1NoZWxsLCBTV1QuTk9ORSk7DQoJCXNjcm9sbGVkQ29tcG9zaXRl LnNldEV4cGFuZEhv
cml6b250YWwodHJ1ZSk7ICAvLyBHZW5lcmF0ZWQNCgkJY3JlYXRlQ29tcG9z aXRlKCk7DQoJCXNj
cm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKHRydWUpOyAgLy8g R2VuZXJhdGVkDQoJ
CXNjcm9sbGVkQ29tcG9zaXRlLnNldENvbnRlbnQoY29tcG9zaXRlKTsgIC8v IEdlbmVyYXRlZA0K
CX0NCgkNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGRhdGVsYWJvID0gbnVs bDsNCglwcml2YXRl
IEJ1dHRvbiBjaGVja0JveGRhdGVyYWRpbyA9IG51bGw7DQoJcHJpdmF0ZSBC dXR0b24gY2hlY2tC
b3hkYXRlZWNnID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGRh dGV0ZXN0ZWZmb3J0
ID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGRhdGVjb25zdWx0 ZXNwZWMgPSBudWxs
Ow0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94ZGF0ZXRlbHNwZWMgPSBudWxs Ow0KCXByaXZhdGUg
QnV0dG9uIGNoZWNrQm94ZGF0ZWhvc3AgPSBudWxsOw0KCXByaXZhdGUgQnV0 dG9uIGNoZWNrQm94
ZGF0ZXZhY2NpbiA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gY2hlY2tCb3hk YXRlcHJvY2hhaW5y
ZHYgPSBudWxsOw0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94ZGF0ZWF1dHJl cyA9IG51bGw7DQoJ
cHJpdmF0ZSBCdXR0b24gYnV0dG9uZGF0ZWxhYm8gPSBudWxsOw0KCXByaXZh dGUgQnV0dG9uIGJ1
dHRvbmRhdGVyYWRpbyA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9u ZGF0ZWVjZyA9IG51
bGw7DQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9uZGF0ZXRlc3RlZmZvcnQgPSBu dWxsOw0KCXByaXZh
dGUgQnV0dG9uIGJ1dHRvbmRhdGVjb25zdWx0c3BlYyA9IG51bGw7DQoJcHJp dmF0ZSBCdXR0b24g
YnV0dG9uZGF0ZXRlbHNwZWMgPSBudWxsOw0KCXByaXZhdGUgQnV0dG9uIGJ1 dHRvbmRhdGVob3Nw
aXQgPSBudWxsOw0KCXByaXZhdGUgQnV0dG9uIGJ1dHRvbmRhdGV2YWNjaW4g PSBudWxsOw0KCXBy
aXZhdGUgQnV0dG9uIGJ1dHRvbmRhdGVwcm9jaGFpbnJkdiA9IG51bGw7DQoJ cHJpdmF0ZSBCdXR0
b24gYnV0dG9uZGF0ZWF1dHJlcyA9IG51bGw7DQoNCiAgICANCgkNCgkvKioN CgkgKiBUaGlzIG1l
dGhvZCBpbml0aWFsaXplcyBjb21wb3NpdGUJDQoJICoNCgkgKi8NCglwcml2 YXRlIHZvaWQgY3Jl
YXRlQ29tcG9zaXRlKCkgew0KCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBu ZXcgR3JpZExheW91
dCgpOw0KCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAxOyAgLy8gR2VuZXJh dGVkDQoJCWNvbXBv
c2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsZWRDb21wb3NpdGUsIFNXVC5O T05FKTsNCgkJY29t
cG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsgIC8vIEdlbmVyYXRlZA0K CQljcmVhdGVHcm91
cGxhYm9yYXRvaXJlKCk7DQoJCWNyZWF0ZUdyb3VwY29uc3VsdGF0aW9ucygp Ow0KCQljcmVhdGVH
cm91cGRpdmVycygpOw0KCQljcmVhdGVDb21wb3NpdGUxKCk7DQoJfQ0KDQoJ LyoqDQoJICogVGhp
cyBtZXRob2QgaW5pdGlhbGl6ZXMgZ3JvdXBsYWJvcmF0b2lyZQkNCgkgKg0K CSAqLw0KCXByaXZh
dGUgdm9pZCBjcmVhdGVHcm91cGxhYm9yYXRvaXJlKCkgew0KCQlHcmlkRGF0 YSBncmlkRGF0YTYg
PSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGE2LndpZHRoSGludCA9IDEy MDsNCgkJR3JpZERh
dGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGEud2lk dGhIaW50ID0gMTIw
Ow0KCQlHcmlkRGF0YSBncmlkRGF0YTM1ID0gbmV3IEdyaWREYXRhKCk7DQoJ CWdyaWREYXRhMzUu
d2lkdGhIaW50ID0gMTUwOyAgLy8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdy aWREYXRhOCA9IG5l
dyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTgud2lkdGhIaW50ID0gMTMwOyAg Ly8gR2VuZXJhdGVk
DQoJCUdyaWREYXRhIGdyaWREYXRhMTAgPSBuZXcgR3JpZERhdGEoKTsNCgkJ Z3JpZERhdGExMC53
aWR0aEhpbnQgPSA1MDsgIC8vIEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlk RGF0YTM0ID0gbmV3
IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMzQud2lkdGhIaW50ID0gMTUwOyAg Ly8gR2VuZXJhdGVk
DQoJCUdyaWREYXRhIGdyaWREYXRhNyA9IG5ldyBHcmlkRGF0YSgpOw0KCQln cmlkRGF0YTcud2lk
dGhIaW50ID0gNTA7ICAvLyBHZW5lcmF0ZWQNCgkJR3JpZERhdGEgZ3JpZERh dGEzMyA9IG5ldyBH
cmlkRGF0YSgpOw0KCQlncmlkRGF0YTMzLndpZHRoSGludCA9IDE1MDsgIC8v IEdlbmVyYXRlZA0K
CQlHcmlkRGF0YSBncmlkRGF0YTIgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3Jp ZERhdGEyLndpZHRo
SGludCA9IDEzMDsgIC8vIEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlkRGF0 YTQgPSBuZXcgR3Jp
ZERhdGEoKTsNCgkJZ3JpZERhdGE0LndpZHRoSGludCA9IDcwOyAgLy8gR2Vu ZXJhdGVkDQoJCUdy
aWREYXRhIGdyaWREYXRhMzIgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERh dGEzMi53aWR0aEhp
bnQgPSAxNTA7ICAvLyBHZW5lcmF0ZWQNCgkJR3JpZERhdGEgZ3JpZERhdGEx ID0gbmV3IEdyaWRE
YXRhKCk7DQoJCWdyaWREYXRhMS53aWR0aEhpbnQgPSA3MDsgIC8vIEdlbmVy YXRlZA0KCQlHcmlk
TGF5b3V0IGdyaWRMYXlvdXQxID0gbmV3IEdyaWRMYXlvdXQoKTsNCgkJZ3Jp ZExheW91dDEubnVt
Q29sdW1ucyA9IDEyOyAgLy8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWRE YXRhMTYgPSBuZXcg
R3JpZERhdGEoKTsNCgkJZ3JpZERhdGExNi5oZWlnaHRIaW50ID0gMTcwOyAg Ly8gR2VuZXJhdGVk
DQoJCWdyaWREYXRhMTYud2lkdGhIaW50ID0gOTkwOyAgLy8gR2VuZXJhdGVk DQoJCWdyb3VwbGFi
b3JhdG9pcmUgPSBuZXcgR3JvdXAoY29tcG9zaXRlLCBTV1QuTk9ORSk7DQoJ CWdyb3VwbGFib3Jh
dG9pcmUuc2V0VGV4dCgiRVhBTUVOUyIpOyAgLy8gR2VuZXJhdGVkDQoJCWdy b3VwbGFib3JhdG9p
cmUuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE2KTsgIC8vIEdlbmVyYXRlZA0K CQlncm91cGxhYm9y
YXRvaXJlLnNldExheW91dChncmlkTGF5b3V0MSk7ICAvLyBHZW5lcmF0ZWQN CgkJbGFiZWx0eXBl
ID0gbmV3IExhYmVsKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJ bGFiZWx0eXBlLnNl
dFRleHQoIlR5cGUiKTsgIC8vIEdlbmVyYXRlZA0KCQlMYWJlbCBmaWxsZXIy OCA9IG5ldyBMYWJl
bChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsZGV0YWls cyA9IG5ldyBMYWJl
bChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsZGV0YWls cy5zZXRUZXh0KCJE
w6l0YWlscyIpOyAgLy8gR2VuZXJhdGVkDQoJCWxhYmVsZGF0ZWRlc2lyZWUg PSBuZXcgTGFiZWwo
Z3JvdXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlsYWJlbGRhdGVkZXNp cmVlLnNldFRleHQo
IkRhdGUgZMOpc2lyw6llIik7ICAvLyBHZW5lcmF0ZWQNCgkJZmlsbGVyOSA9 IG5ldyBMYWJlbChn
cm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCUxhYmVsIGZpbGxlcjMw ID0gbmV3IExhYmVs
KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJZmlsbGVyMTAgPSBu ZXcgTGFiZWwoZ3Jv
dXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlMYWJlbCBmaWxsZXIzMyA9 IG5ldyBMYWJlbChn
cm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsbGlldSA9IG5l dyBMYWJlbChncm91
cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsbGlldS5zZXRUZXh0 KCJMaWV1Iik7ICAv
LyBHZW5lcmF0ZWQNCgkJZmlsbGVyNSA9IG5ldyBMYWJlbChncm91cGxhYm9y YXRvaXJlLCBTV1Qu
Tk9ORSk7DQoJCWZpbGxlcjcgPSBuZXcgTGFiZWwoZ3JvdXBsYWJvcmF0b2ly ZSwgU1dULk5PTkUp
Ow0KCQlsYWJlbHJlbWFycXVlMSA9IG5ldyBMYWJlbChncm91cGxhYm9yYXRv aXJlLCBTV1QuTk9O
RSk7DQoJCWxhYmVscmVtYXJxdWUxLnNldFRleHQoIlJlbWFycXVlIik7ICAv LyBHZW5lcmF0ZWQN
CgkJY2hlY2tCb3hsYWJvcmF0b2lyZSA9IG5ldyBCdXR0b24oZ3JvdXBsYWJv cmF0b2lyZSwgU1dU
LkNIRUNLKTsNCgkJY2hlY2tCb3hsYWJvcmF0b2lyZS5zZXRUZXh0KCJMYWJv cmF0b2lyZSIpOyAg
Ly8gR2VuZXJhdGVkDQoJCWJ1dHRvbm91dnJpcmxhYm8gPSBuZXcgQnV0dG9u KGdyb3VwbGFib3Jh
dG9pcmUsIFNXVC5OT05FKTsNCgkJYnV0dG9ub3V2cmlybGFiby5hZGRTZWxl Y3Rpb25MaXN0ZW5l
cihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVy KCkgew0KCQkJCQlw
dWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZl bnRzLlNlbGVjdGlv
bkV2ZW50IGUpIHsNCgkJCQkJCU1lZGNsaXBzZV9Db25zdWx0YXRpb25fQ29u c3VsdGF0aW9uX1Bv
cFVwX0RlbWFuZGVzX0xhYm8gdGhpc0NsYXNzID0gbmV3IE1lZGNsaXBzZV9D b25zdWx0YXRpb25f
Q29uc3VsdGF0aW9uX1BvcFVwX0RlbWFuZGVzX0xhYm8gKCk7DQoJCQkJCQl0 aGlzQ2xhc3MuY3Jl
YXRlU1NoZWxsKCk7DQoJCQkJCQl0aGlzQ2xhc3Muc1NoZWxsLm9wZW4oKTsg Ly8gVE9ETyBBdXRv
LWdlbmVyYXRlZCBFdmVudCBzdHViIHdpZGdldFNlbGVjdGVkKCkNCgkJCQkJ fQ0KCQkJCX0pOw0K
CQl0ZXh0bGFibyA9IG5ldyBUZXh0KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5C T1JERVIpOw0KCQl0
ZXh0bGFiby5zZXRMYXlvdXREYXRhKGdyaWREYXRhNik7DQoJCWNyZWF0ZUNv bWJvZGF0ZWxhYm8o
KTsNCgkJbGFiZWxvdSA9IG5ldyBMYWJlbChncm91cGxhYm9yYXRvaXJlLCBT V1QuTk9ORSk7DQoJ
CWxhYmVsb3Uuc2V0VGV4dCgib3UiKTsgIC8vIEdlbmVyYXRlZA0KCQljaGVj a0JveGRhdGVsYWJv
ID0gbmV3IEJ1dHRvbihncm91cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0K Ly8JCSogUG9wLVVw
IENhbGVuZGFyDQoJCS8vY3JlYXRlIHRoZSBDYWxlbmRhciBUZXh0IHdpZGdl dC4NCgkJdGV4dGRh
dGVsYWJvID0gbmV3IFRleHQoZ3JvdXBsYWJvcmF0b2lyZSwgU1dULkJPUkRF UiB8IFNXVC5SRUFE
X09OTFkpOw0KCQl0ZXh0ZGF0ZWxhYm8uc2V0TGF5b3V0RGF0YShncmlkRGF0 YTEpOyAgLy8gR2Vu
ZXJhdGVkDQoJCXRleHRkYXRlbGFiby5zZXRCYWNrZ3JvdW5kKERpc3BsYXku Z2V0Q3VycmVudCgp
LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOw0KCQkvLyBDcmVh dGUgdGhlIEJ1dHRv
biBQb3AtVXAgQ2FsZW5kYXINCgkJYnV0dG9uZGF0ZWxhYm8gPSBuZXcgQnV0 dG9uKGdyb3VwbGFi
b3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJYnV0dG9uZGF0ZWxhYm8uYWRkU2Vs ZWN0aW9uTGlzdGVu
ZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRl cigpIHsNCgkJCXB1
YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50 KSB7DQoJCSAgICAg
ICAgQ29udHJvbCBjb21wID0gKENvbnRyb2wpZXZlbnQuZ2V0U291cmNlKCk7 DQoJCSAgICAgICAg
cG9wdXBDYWwub3Blbihjb21wLCBQb3B1cENhbGVuZGFyLlJJR0hUKTsNCgkJ ICAgICAgfQ0KCQl9
KTsNCi8vCQkgIGZpbmFsbHkgYWRkIHRoZSBzZWxlY3Rpb24gbGlzdGVuZXIg Zm9yIHBvcC11cCBj
YWxlbmRhcg0KICAgICAgICBwb3B1cENhbC5hZGRTZWxlY3Rpb25MaXN0ZW5l cihuZXcgU2VsZWN0
aW9uQWRhcHRlcigpIHsNCiAgCSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNl bGVjdGVkKFNlbGVj
dGlvbkV2ZW50IGUpIHsNCiAgCSAgICAgICAgaWYgKHBvcHVwQ2FsLmdldERh dGUoKSAhPSBudWxs
KSB7DQogIAkgICAgICAgICAgdGV4dGRhdGVsYWJvLnNldFRleHQobmV3IFNp bXBsZURhdGVGb3Jt
YXQoIkVFRSBkZC9NTS95eSIpLmZvcm1hdCgNCiAgCSAgICAgICAgICAgICAg cG9wdXBDYWwuZ2V0
RGF0ZSgpLmdldFRpbWUoKSkpOw0KICAJICAgICAgICB9DQogIAkgICAgICB9 DQogIAkgICAgfSk7
DQovLyoqIEVuZCBQb3AtVXAgQ2FsZW5kYXINCgkJZmlsbGVyMyA9IG5ldyBM YWJlbChncm91cGxh
Ym9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWZpbGxlcjQgPSBuZXcgTGFiZWwo Z3JvdXBsYWJvcmF0
b2lyZSwgU1dULk5PTkUpOw0KCQlmaWxsZXI2ID0gbmV3IExhYmVsKGdyb3Vw bGFib3JhdG9pcmUs
IFNXVC5OT05FKTsNCgkJdGV4dHJlbWFycXVlbGFibyA9IG5ldyBUZXh0KGdy b3VwbGFib3JhdG9p
cmUsIFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVsYWJvLnNldExheW91 dERhdGEoZ3JpZERh
dGEzMik7ICAvLyBHZW5lcmF0ZWQNCgkJY2hlY2tCb3hyYWRpbyA9IG5ldyBC dXR0b24oZ3JvdXBs
YWJvcmF0b2lyZSwgU1dULkNIRUNLKTsNCgkJY2hlY2tCb3hyYWRpby5zZXRU ZXh0KCJSYWRpb2dy
YXBoaWUiKTsgIC8vIEdlbmVyYXRlZA0KCQlidXR0b25vdXZyaXJyYWRpbyA9 IG5ldyBCdXR0b24o
Z3JvdXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlidXR0b25vdXZyaXJy YWRpbw0KCQkuYWRk
U2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMu U2VsZWN0aW9uQWRh
cHRlcigpIHsNCgkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5l Y2xpcHNlLnN3dC5l
dmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KCQkJCU1lZGNsaXBzZV9Db25z dWx0YXRpb25fQ29u
c3VsdGF0aW9uX1BvcFVwX0RlbWFuZGVzX1JhZGlvIHRoaXNDbGFzcyA9IG5l dyBNZWRjbGlwc2Vf
Q29uc3VsdGF0aW9uX0NvbnN1bHRhdGlvbl9Qb3BVcF9EZW1hbmRlc19SYWRp byAoKTsNCgkJCQl0
aGlzQ2xhc3MuY3JlYXRlU1NoZWxsKCk7DQoJCQkJdGhpc0NsYXNzLnNTaGVs bC5vcGVuKCk7IC8v
IFRPRE8gQXV0by1nZW5lcmF0ZWQgRXZlbnQgc3R1YiB3aWRnZXRTZWxlY3Rl ZCgpDQoJCQl9DQoJ
CX0pOw0KCQl0ZXh0cmFkaW8gPSBuZXcgVGV4dChncm91cGxhYm9yYXRvaXJl LCBTV1QuQk9SREVS
KTsNCgkJdGV4dHJhZGlvLnNldExheW91dERhdGEoZ3JpZERhdGEpOw0KCQlj cmVhdGVDb21ib2Rh
dGVyYWRpbygpOw0KCQlsYWJlbG91MSA9IG5ldyBMYWJlbChncm91cGxhYm9y YXRvaXJlLCBTV1Qu
Tk9ORSk7DQoJCWxhYmVsb3UxLnNldFRleHQoIm91Iik7ICAvLyBHZW5lcmF0 ZWQNCgkJY2hlY2tC
b3hkYXRlcmFkaW8gPSBuZXcgQnV0dG9uKGdyb3VwbGFib3JhdG9pcmUsIFNX VC5DSEVDSyk7DQov
LwkJKiBQb3AtVXAgQ2FsZW5kYXINCgkJLy9jcmVhdGUgdGhlIENhbGVuZGFy IFRleHQgd2lkZ2V0
Lg0KCQl0ZXh0ZGF0ZXJhZGlvID0gbmV3IFRleHQoZ3JvdXBsYWJvcmF0b2ly ZSwgU1dULkJPUkRF
UiB8IFNXVC5SRUFEX09OTFkpOw0KCQl0ZXh0ZGF0ZXJhZGlvLnNldExheW91 dERhdGEoZ3JpZERh
dGE0KTsgIC8vIEdlbmVyYXRlZA0KCQl0ZXh0ZGF0ZXJhZGlvLnNldEJhY2tn cm91bmQoRGlzcGxh
eS5nZXRDdXJyZW50KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX1dISVRF KSk7DQovLwkJIENy
ZWF0ZSB0aGUgQnV0dG9uIFBvcC1VcCBDYWxlbmRhcg0KCQlidXR0b25kYXRl cmFkaW8gPSBuZXcg
QnV0dG9uKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJYnV0dG9u ZGF0ZXJhZGlvLmFk
ZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRz LlNlbGVjdGlvbkFk
YXB0ZXIoKSB7DQoJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxl Y3Rpb25FdmVudCBl
dmVudCkgew0KCQkgICAgICAgIENvbnRyb2wgY29tcCA9IChDb250cm9sKWV2 ZW50LmdldFNvdXJj
ZSgpOw0KCQkgICAgICAgIHBvcHVwQ2FsMi5vcGVuKGNvbXAsIFBvcHVwQ2Fs ZW5kYXIuUklHSFQp
Ow0KCQkgICAgICB9DQoJCX0pOw0KLy8JCSAgZmluYWxseSBhZGQgdGhlIHNl bGVjdGlvbiBsaXN0
ZW5lciBmb3IgcG9wLXVwIGNhbGVuZGFyDQogICAgICAgIHBvcHVwQ2FsMi5h ZGRTZWxlY3Rpb25M
aXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsNCiAgCSAgICAgIHB1 YmxpYyB2b2lkIHdp
ZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsNCiAgCSAgICAgICAg aWYgKHBvcHVwQ2Fs
Mi5nZXREYXRlKCkgIT0gbnVsbCkgew0KICAJICAgICAgICAgIHRleHRkYXRl cmFkaW8uc2V0VGV4
dChuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGRkL01NL3l5IikuZm9ybWF0 KA0KICAJICAgICAg
ICAgICAgICBwb3B1cENhbDIuZ2V0RGF0ZSgpLmdldFRpbWUoKSkpOw0KICAJ ICAgICAgICB9DQog
IAkgICAgICB9DQogIAkgICAgfSk7DQovLyoqIEVuZCBQb3AtVXAgQ2FsZW5k YXINCgkJY3JlYXRl
Q29tYm9saWV1cmFkaW8oKTsNCgkJbGFiZWxvdTIgPSBuZXcgTGFiZWwoZ3Jv dXBsYWJvcmF0b2ly
ZSwgU1dULk5PTkUpOw0KCQlsYWJlbG91Mi5zZXRUZXh0KCJvdSIpOyAgLy8g R2VuZXJhdGVkDQoJ
CXRleHRsaWV1cmFkaW8gPSBuZXcgVGV4dChncm91cGxhYm9yYXRvaXJlLCBT V1QuQk9SREVSKTsN
CgkJdGV4dGxpZXVyYWRpby5zZXRUZXh0KCIiKTsgIC8vIEdlbmVyYXRlZA0K CQl0ZXh0bGlldXJh
ZGlvLnNldExheW91dERhdGEoZ3JpZERhdGEyKTsgIC8vIEdlbmVyYXRlZA0K CQl0ZXh0cmVtYXJx
dWVyYWRpbyA9IG5ldyBUZXh0KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5CT1JE RVIpOw0KCQl0ZXh0
cmVtYXJxdWVyYWRpby5zZXRMYXlvdXREYXRhKGdyaWREYXRhMzMpOyAgLy8g R2VuZXJhdGVkDQoJ
CWNoZWNrQm94ZWNnID0gbmV3IEJ1dHRvbihncm91cGxhYm9yYXRvaXJlLCBT V1QuQ0hFQ0spOw0K
CQljaGVja0JveGVjZy5zZXRUZXh0KCJFQ0ciKTsgIC8vIEdlbmVyYXRlZA0K CQlMYWJlbCBmaWxs
ZXIyNSA9IG5ldyBMYWJlbChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7 DQoJCWNyZWF0ZUNv
bWJvZGV0YWlsZWNnKCk7DQoJCWNyZWF0ZUNvbWJvZGF0ZWVjZygpOw0KCQls YWJlbG91MyA9IG5l
dyBMYWJlbChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVs b3UzLnNldFRleHQo
Im91Iik7ICAvLyBHZW5lcmF0ZWQNCgkJY2hlY2tCb3hkYXRlZWNnID0gbmV3 IEJ1dHRvbihncm91
cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0KCQl0ZXh0ZGF0ZWVjZyA9IG5l dyBUZXh0KGdyb3Vw
bGFib3JhdG9pcmUsIFNXVC5CT1JERVIpOw0KCQl0ZXh0ZGF0ZWVjZy5zZXRM YXlvdXREYXRhKGdy
aWREYXRhNyk7ICAvLyBHZW5lcmF0ZWQNCgkJYnV0dG9uZGF0ZWVjZyA9IG5l dyBCdXR0b24oZ3Jv
dXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlmaWxsZXIgPSBuZXcgTGFi ZWwoZ3JvdXBsYWJv
cmF0b2lyZSwgU1dULk5PTkUpOw0KCQlmaWxsZXIyID0gbmV3IExhYmVsKGdy b3VwbGFib3JhdG9p
cmUsIFNXVC5OT05FKTsNCgkJZmlsbGVyOCA9IG5ldyBMYWJlbChncm91cGxh Ym9yYXRvaXJlLCBT
V1QuTk9ORSk7DQoJCXRleHRyZW1hcnF1ZWVjZyA9IG5ldyBUZXh0KGdyb3Vw bGFib3JhdG9pcmUs
IFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVlY2cuc2V0TGF5b3V0RGF0 YShncmlkRGF0YTM0
KTsgIC8vIEdlbmVyYXRlZA0KCQljaGVja0JveHRlc3RkZWZmb3J0ID0gbmV3 IEJ1dHRvbihncm91
cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0KCQljaGVja0JveHRlc3RkZWZm b3J0LnNldFRleHQo
IlRlc3QgZCdFZmZvcnQiKTsgIC8vIEdlbmVyYXRlZA0KCQlMYWJlbCBmaWxs ZXIyNCA9IG5ldyBM
YWJlbChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWNyZWF0ZUNv bWJvZGV0YWlsZXJn
b21ldHJpZSgpOw0KCQljcmVhdGVDb21ib2RhdGVlcmdvbWV0cmllKCk7DQoJ CWxhYmVsb3U0ID0g
bmV3IExhYmVsKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJbGFi ZWxvdTQuc2V0VGV4
dCgib3UiKTsgIC8vIEdlbmVyYXRlZA0KCQljaGVja0JveGRhdGV0ZXN0ZWZm b3J0ID0gbmV3IEJ1
dHRvbihncm91cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0KCQl0ZXh0ZGF0 ZWVyZ29tZXRyaWUg
PSBuZXcgVGV4dChncm91cGxhYm9yYXRvaXJlLCBTV1QuQk9SREVSKTsNCgkJ dGV4dGRhdGVlcmdv
bWV0cmllLnNldExheW91dERhdGEoZ3JpZERhdGExMCk7ICAvLyBHZW5lcmF0 ZWQNCgkJYnV0dG9u
ZGF0ZXRlc3RlZmZvcnQgPSBuZXcgQnV0dG9uKGdyb3VwbGFib3JhdG9pcmUs IFNXVC5OT05FKTsN
CgkJY3JlYXRlQ29tYm9saWV1ZXJnb21ldHJpZSgpOw0KCQlsYWJlbG91MjEg PSBuZXcgTGFiZWwo
Z3JvdXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlsYWJlbG91MjEuc2V0 VGV4dCgib3UiKTsg
IC8vIEdlbmVyYXRlZA0KCQl0ZXh0bGlldWVyZ29tZXRyaWUgPSBuZXcgVGV4 dChncm91cGxhYm9y
YXRvaXJlLCBTV1QuQk9SREVSKTsNCgkJdGV4dGxpZXVlcmdvbWV0cmllLnNl dFRleHQoIiIpOyAg
Ly8gR2VuZXJhdGVkDQoJCXRleHRsaWV1ZXJnb21ldHJpZS5zZXRMYXlvdXRE YXRhKGdyaWREYXRh
OCk7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4dHJlbWFycXVlZXJnbyA9IG5ldyBU ZXh0KGdyb3VwbGFi
b3JhdG9pcmUsIFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVlcmdvLnNl dExheW91dERhdGEo
Z3JpZERhdGEzNSk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkvKioNCgkgKiBU aGlzIG1ldGhvZCBp
bml0aWFsaXplcyBjb21ib2RhdGVsYWJvCQ0KCSAqDQoJICovDQoJcHJpdmF0 ZSB2b2lkIGNyZWF0
ZUNvbWJvZGF0ZWxhYm8oKSB7DQoJCUdyaWREYXRhIGdyaWREYXRhNDIgPSBu ZXcgR3JpZERhdGEo
KTsNCgkJZ3JpZERhdGE0Mi53aWR0aEhpbnQgPSA4MDsgIC8vIEdlbmVyYXRl ZA0KCQljb21ib2Rh
dGVsYWJvID0gbmV3IENvbWJvKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05F KTsNCgkJY29tYm9k
YXRlbGFiby5zZXRJdGVtcyAobmV3IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdo dWkiLCJFbiB1cmdl
bmNlcyIsICJEw6hzIHF1ZSBwb3NzaWJsZSIsICJEYW5zIDEgam91ciIsIkRh bnMgMiBqb3VycyIs
IkRhbnMgMyBqb3VycyIsIkRhbnMgNCBqb3VycyIsIkRhbnMgNSBqb3VycyIs IkRhbnMgNiBqb3Vy
cyIsIkRhbnMgMSBzZW1haW5lIiwiRGFucyAyIHNlbWFpbmVzIiwiRGFucyAz IHNlbWFpbmVzIiwi
RGFucyAxIG1vaXMiLCJEYW5zIDIgbW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFu cyA0IG1vaXMiLCJE
YW5zIDUgbW9pcyIsIkRhbnMgNiBtb2lzIiwiRGFucyA3IG1vaXMiLCJEYW5z IDggbW9pcyIsIkRh
bnMgOSBtb2lzIiwiRGFucyAxMCBtb2lzIiwiRGFucyAxMSBtb2lzIiwgIkRh bnMgMSBhbiIsICJE
YW5zIDIgYW5zIiwgIkRhbnMgMyBhbnMiLCAiRGFucyA0IGFucyIsICJEYW5z IDUgYW5zIn0pOw0K
CQljb21ib2RhdGVsYWJvLnNldExheW91dERhdGEoZ3JpZERhdGE0Mik7ICAv LyBHZW5lcmF0ZWQN
Cgl9DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21i b2RhdGVyYWRpbwkN
CgkgKg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVyYWRp bygpIHsNCgkJR3Jp
ZERhdGEgZ3JpZERhdGE0MyA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0 YTQzLndpZHRoSGlu
dCA9IDgwOyAgLy8gR2VuZXJhdGVkDQoJCWNvbWJvZGF0ZXJhZGlvID0gbmV3 IENvbWJvKGdyb3Vw
bGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJY29tYm9kYXRlcmFkaW8uc2V0 SXRlbXMgKG5ldyBT
dHJpbmcgW117IiIsIkF1am91cmQnaHVpIiwiRW4gdXJnZW5jZXMiLCAiRMOo cyBxdWUgcG9zc2li
bGUiLCAiRGFucyAxIGpvdXIiLCJEYW5zIDIgam91cnMiLCJEYW5zIDMgam91 cnMiLCJEYW5zIDQg
am91cnMiLCJEYW5zIDUgam91cnMiLCJEYW5zIDYgam91cnMiLCJEYW5zIDEg c2VtYWluZSIsIkRh
bnMgMiBzZW1haW5lcyIsIkRhbnMgMyBzZW1haW5lcyIsIkRhbnMgMSBtb2lz IiwiRGFucyAyIG1v
aXMiLCJEYW5zIDMgbW9pcyIsIkRhbnMgNCBtb2lzIiwiRGFucyA1IG1vaXMi LCJEYW5zIDYgbW9p
cyIsIkRhbnMgNyBtb2lzIiwiRGFucyA4IG1vaXMiLCJEYW5zIDkgbW9pcyIs IkRhbnMgMTAgbW9p
cyIsIkRhbnMgMTEgbW9pcyIsICJEYW5zIDEgYW4iLCAiRGFucyAyIGFucyIs ICJEYW5zIDMgYW5z
IiwgIkRhbnMgNCBhbnMiLCAiRGFucyA1IGFucyJ9KTsNCgkJY29tYm9kYXRl cmFkaW8uc2V0TGF5
b3V0RGF0YShncmlkRGF0YTQzKTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8q Kg0KCSAqIFRoaXMg
bWV0aG9kIGluaXRpYWxpemVzIGNvbWJvbGlldXJhZGlvCQ0KCSAqDQoJICov DQoJcHJpdmF0ZSB2
b2lkIGNyZWF0ZUNvbWJvbGlldXJhZGlvKCkgew0KCQlHcmlkRGF0YSBncmlk RGF0YTMgPSBuZXcg
R3JpZERhdGEoKTsNCgkJZ3JpZERhdGEzLndpZHRoSGludCA9IDEyMDsgIC8v IEdlbmVyYXRlZA0K
CQljb21ib2xpZXVyYWRpbyA9IG5ldyBDb21ibyhncm91cGxhYm9yYXRvaXJl LCBTV1QuTk9ORSk7
DQoJCWNvbWJvbGlldXJhZGlvLnNldFRleHQoIkNob2lzaXIiKTsgIC8vIEdl bmVyYXRlZA0KCQlj
b21ib2xpZXVyYWRpby5zZXRMYXlvdXREYXRhKGdyaWREYXRhMyk7ICAvLyBH ZW5lcmF0ZWQNCgl9
DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2Rl dGFpbGVjZwkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RldGFpbGVjZygp IHsNCgkJR3JpZERh
dGEgZ3JpZERhdGE1ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhNS53 aWR0aEhpbnQgPSAx
MzA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRhaWxlY2cgPSBuZXcgQ29t Ym8oZ3JvdXBsYWJv
cmF0b2lyZSwgU1dULk5PTkUpOw0KCQljb21ib2RldGFpbGVjZy5zZXRUZXh0 KCJDaG9pc2lyIik7
ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRhaWxlY2cuc2V0SXRlbXMgKG5l dyBTdHJpbmcgW117
IiIsIkNvdXJ0IiwiTG9uZyJ9KTsNCgkJY29tYm9kZXRhaWxlY2cuc2V0TGF5 b3V0RGF0YShncmlk
RGF0YTUpOyAgLy8gR2VuZXJhdGVkDQoJfQ0KDQoJLyoqDQoJICogVGhpcyBt ZXRob2QgaW5pdGlh
bGl6ZXMgY29tYm9kYXRlZWNnCQ0KCSAqDQoJICovDQoJcHJpdmF0ZSB2b2lk IGNyZWF0ZUNvbWJv
ZGF0ZWVjZygpIHsNCgkJR3JpZERhdGEgZ3JpZERhdGE0NiA9IG5ldyBHcmlk RGF0YSgpOw0KCQln
cmlkRGF0YTQ2LndpZHRoSGludCA9IDgwOyAgLy8gR2VuZXJhdGVkDQoJCWNv bWJvZGF0ZWVjZyA9
IG5ldyBDb21ibyhncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWNv bWJvZGF0ZWVjZy5z
ZXRJdGVtcyAobmV3IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1 cmdlbmNlcyIsICJE
w6hzIHF1ZSBwb3NzaWJsZSIsICJEYW5zIDEgam91ciIsIkRhbnMgMiBqb3Vy cyIsIkRhbnMgMyBq
b3VycyIsIkRhbnMgNCBqb3VycyIsIkRhbnMgNSBqb3VycyIsIkRhbnMgNiBq b3VycyIsIkRhbnMg
MSBzZW1haW5lIiwiRGFucyAyIHNlbWFpbmVzIiwiRGFucyAzIHNlbWFpbmVz IiwiRGFucyAxIG1v
aXMiLCJEYW5zIDIgbW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFucyA0IG1vaXMi LCJEYW5zIDUgbW9p
cyIsIkRhbnMgNiBtb2lzIiwiRGFucyA3IG1vaXMiLCJEYW5zIDggbW9pcyIs IkRhbnMgOSBtb2lz
IiwiRGFucyAxMCBtb2lzIiwiRGFucyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIs ICJEYW5zIDIgYW5z
IiwgIkRhbnMgMyBhbnMiLCAiRGFucyA0IGFucyIsICJEYW5zIDUgYW5zIn0p Ow0KCQljb21ib2Rh
dGVlY2cuc2V0TGF5b3V0RGF0YShncmlkRGF0YTQ2KTsgIC8vIEdlbmVyYXRl ZA0KCX0NCg0KCS8q
Kg0KCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGV0YWlsZXJn b21ldHJpZQkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RldGFpbGVyZ29t ZXRyaWUoKSB7DQoJ
CUdyaWREYXRhIGdyaWREYXRhMTEgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3Jp ZERhdGExMS53aWR0
aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRhaWxlcmdv bWV0cmllID0gbmV3
IENvbWJvKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJY29tYm9k ZXRhaWxlcmdvbWV0
cmllLnNldFRleHQoIkNob2lzaXIiKTsgIC8vIEdlbmVyYXRlZA0KCQljb21i b2RldGFpbGVyZ29t
ZXRyaWUuc2V0SXRlbXMgKG5ldyBTdHJpbmcgW117IiIsIkVyZ29tw6l0cmll IiwiVVMgZGUgc3Ry
ZXNzIiwgIlNjaW50aWdyYXBoaWUgYXUgVGhhbGxpdW0ifSk7DQoJCWNvbWJv ZGV0YWlsZXJnb21l
dHJpZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTEpOyAgLy8gR2VuZXJhdGVk DQoJfQ0KDQoJLyoq
DQoJICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgY29tYm9kYXRlZXJnb21l dHJpZQkNCgkgKg0K
CSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVlcmdvbWV0cmll KCkgew0KCQlHcmlk
RGF0YSBncmlkRGF0YTQ3ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRh NDcud2lkdGhIaW50
ID0gODA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kYXRlZXJnb21ldHJpZSA9 IG5ldyBDb21ibyhn
cm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZWVyZ29t ZXRyaWUuc2V0SXRl
bXMgKG5ldyBTdHJpbmcgW117IiIsIkF1am91cmQnaHVpIiwiRW4gdXJnZW5j ZXMiLCAiRMOocyBx
dWUgcG9zc2libGUiLCAiRGFucyAxIGpvdXIiLCJEYW5zIDIgam91cnMiLCJE YW5zIDMgam91cnMi
LCJEYW5zIDQgam91cnMiLCJEYW5zIDUgam91cnMiLCJEYW5zIDYgam91cnMi LCJEYW5zIDEgc2Vt
YWluZSIsIkRhbnMgMiBzZW1haW5lcyIsIkRhbnMgMyBzZW1haW5lcyIsIkRh bnMgMSBtb2lzIiwi
RGFucyAyIG1vaXMiLCJEYW5zIDMgbW9pcyIsIkRhbnMgNCBtb2lzIiwiRGFu cyA1IG1vaXMiLCJE
YW5zIDYgbW9pcyIsIkRhbnMgNyBtb2lzIiwiRGFucyA4IG1vaXMiLCJEYW5z IDkgbW9pcyIsIkRh
bnMgMTAgbW9pcyIsIkRhbnMgMTEgbW9pcyIsICJEYW5zIDEgYW4iLCAiRGFu cyAyIGFucyIsICJE
YW5zIDMgYW5zIiwgIkRhbnMgNCBhbnMiLCAiRGFucyA1IGFucyJ9KTsNCgkJ Y29tYm9kYXRlZXJn
b21ldHJpZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhNDcpOyAgLy8gR2VuZXJh dGVkDQoJfQ0KDQoJ
LyoqDQoJICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgY29tYm9saWV1ZXJn b21ldHJpZQkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2xpZXVlcmdvbWV0 cmllKCkgew0KCQlH
cmlkRGF0YSBncmlkRGF0YTkgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERh dGE5LndpZHRoSGlu
dCA9IDEyMDsgIC8vIEdlbmVyYXRlZA0KCQljb21ib2xpZXVlcmdvbWV0cmll ID0gbmV3IENvbWJv
KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJY29tYm9saWV1ZXJn b21ldHJpZS5zZXRU
ZXh0KCJDaG9pc2lyIik7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9saWV1ZXJn b21ldHJpZS5zZXRM
YXlvdXREYXRhKGdyaWREYXRhOSk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkv KioNCgkgKiBUaGlz
IG1ldGhvZCBpbml0aWFsaXplcyBncm91cGNvbnN1bHRhdGlvbnMJDQoJICoN CgkgKi8NCglwcml2
YXRlIHZvaWQgY3JlYXRlR3JvdXBjb25zdWx0YXRpb25zKCkgew0KCQlHcmlk RGF0YSBncmlkRGF0
YTM4ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMzgud2lkdGhIaW50 ID0gMTAwOyAgLy8g
R2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMjMgPSBuZXcgR3JpZERh dGEoKTsNCgkJZ3Jp
ZERhdGEyMy53aWR0aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJR3Jp ZERhdGEgZ3JpZERh
dGEyMiA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTIyLndpZHRoSGlu dCA9IDUwOyAgLy8g
R2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMzcgPSBuZXcgR3JpZERh dGEoKTsNCgkJZ3Jp
ZERhdGEzNy53aWR0aEhpbnQgPSAxMDA7ICAvLyBHZW5lcmF0ZWQNCgkJR3Jp ZERhdGEgZ3JpZERh
dGEyMCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTIwLndpZHRoSGlu dCA9IDEzMDsgIC8v
IEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlkRGF0YTE5ID0gbmV3IEdyaWRE YXRhKCk7DQoJCWdy
aWREYXRhMTkud2lkdGhIaW50ID0gNTA7ICAvLyBHZW5lcmF0ZWQNCgkJR3Jp ZERhdGEgZ3JpZERh
dGEzNiA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTM2LndpZHRoSGlu dCA9IDEwMDsgIC8v
IEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlkRGF0YTE3ID0gbmV3IEdyaWRE YXRhKCk7DQoJCWdy
aWREYXRhMTcud2lkdGhIaW50ID0gMTMwOyAgLy8gR2VuZXJhdGVkDQoJCUdy aWREYXRhIGdyaWRE
YXRhMTQgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGExNC53aWR0aEhp bnQgPSA1MDsgIC8v
IEdlbmVyYXRlZA0KCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQyID0gbmV3IEdy aWRMYXlvdXQoKTsN
CgkJZ3JpZExheW91dDIubnVtQ29sdW1ucyA9IDEyOyAgLy8gR2VuZXJhdGVk DQoJCUdyaWREYXRh
IGdyaWREYXRhMTIgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGExMi5o ZWlnaHRIaW50ID0g
MTIwOyAgLy8gR2VuZXJhdGVkDQoJCWdyaWREYXRhMTIud2lkdGhIaW50ID0g OTkwOyAgLy8gR2Vu
ZXJhdGVkDQoJCWdyb3VwY29uc3VsdGF0aW9ucyA9IG5ldyBHcm91cChjb21w b3NpdGUsIFNXVC5O
T05FKTsNCgkJZ3JvdXBjb25zdWx0YXRpb25zLnNldFRleHQoIkNPTlNVTFRB VElPTlMiKTsgIC8v
IEdlbmVyYXRlZA0KCQlncm91cGNvbnN1bHRhdGlvbnMuc2V0TGF5b3V0RGF0 YShncmlkRGF0YTEy
KTsgIC8vIEdlbmVyYXRlZA0KCQlncm91cGNvbnN1bHRhdGlvbnMuc2V0TGF5 b3V0KGdyaWRMYXlv
dXQyKTsgIC8vIEdlbmVyYXRlZA0KCQlsYWJlbHR5cGUxID0gbmV3IExhYmVs KGdyb3VwY29uc3Vs
dGF0aW9ucywgU1dULk5PTkUpOw0KCQlsYWJlbHR5cGUxLnNldFRleHQoIlR5 cGUiKTsgIC8vIEdl
bmVyYXRlZA0KCQlsYWJlbGRldGFpbHMxID0gbmV3IExhYmVsKGdyb3VwY29u c3VsdGF0aW9ucywg
U1dULk5PTkUpOw0KCQlsYWJlbGRldGFpbHMxLnNldFRleHQoIkTDqXRhaWxz Iik7ICAvLyBHZW5l
cmF0ZWQNCgkJbGFiZWxkYXRlZGVzaXJlZTEgPSBuZXcgTGFiZWwoZ3JvdXBj b25zdWx0YXRpb25z
LCBTV1QuTk9ORSk7DQoJCWxhYmVsZGF0ZWRlc2lyZWUxLnNldFRleHQoIkRh dGUgZMOpc2lyw6ll
Iik7ICAvLyBHZW5lcmF0ZWQNCgkJZmlsbGVyMTQgPSBuZXcgTGFiZWwoZ3Jv dXBjb25zdWx0YXRp
b25zLCBTV1QuTk9ORSk7DQoJCUxhYmVsIGZpbGxlcjI5ID0gbmV3IExhYmVs KGdyb3VwY29uc3Vs
dGF0aW9ucywgU1dULk5PTkUpOw0KCQlmaWxsZXIxID0gbmV3IExhYmVsKGdy b3VwY29uc3VsdGF0
aW9ucywgU1dULk5PTkUpOw0KCQlMYWJlbCBmaWxsZXIzMiA9IG5ldyBMYWJl bChncm91cGNvbnN1
bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJbGFiZWxsaWV1MSA9IG5ldyBMYWJl bChncm91cGNvbnN1
bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJbGFiZWxsaWV1MS5zZXRUZXh0KCJM aWV1Iik7ICAvLyBH
ZW5lcmF0ZWQNCgkJZmlsbGVyMTIgPSBuZXcgTGFiZWwoZ3JvdXBjb25zdWx0 YXRpb25zLCBTV1Qu
Tk9ORSk7DQoJCWZpbGxlcjEzID0gbmV3IExhYmVsKGdyb3VwY29uc3VsdGF0 aW9ucywgU1dULk5P
TkUpOw0KCQlsYWJlbHJlbWFycXVlMiA9IG5ldyBMYWJlbChncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5OT05FKTsNCgkJbGFiZWxyZW1hcnF1ZTIuc2V0VGV4dCgiUmVtYXJxdWUi KTsgIC8vIEdlbmVy
YXRlZA0KCQlMYWJlbCBmaWxsZXIyMyA9IG5ldyBMYWJlbChncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5OT05FKTsNCgkJY2hlY2tCb3hjb25zdWx0YXRpb25zcGVjID0gbmV3IEJ1 dHRvbihncm91cGNv
bnN1bHRhdGlvbnMsIFNXVC5DSEVDSyk7DQoJCWNoZWNrQm94Y29uc3VsdGF0 aW9uc3BlYy5zZXRU
ZXh0KCJDb25zdWx0YXRpb24gc3DDqWNpYWxpc8OpZSIpOyAgLy8gR2VuZXJh dGVkDQoJCWNyZWF0
ZUNvbWJvZGV0YWlsY29uc3VsdGVzcGVjaWFsaXNlZSgpOw0KCQljcmVhdGVD b21ib2RhdGVjb25z
dWx0ZXNwZWMoKTsNCgkJbGFiZWxvdTUgPSBuZXcgTGFiZWwoZ3JvdXBjb25z dWx0YXRpb25zLCBT
V1QuTk9ORSk7DQoJCWxhYmVsb3U1LnNldFRleHQoIm91Iik7ICAvLyBHZW5l cmF0ZWQNCgkJY2hl
Y2tCb3hkYXRlY29uc3VsdGVzcGVjID0gbmV3IEJ1dHRvbihncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5DSEVDSyk7DQoJCXRleHRkYXRlY29uc3VsdGF0aW9uc3BlYyA9IG5ldyBU ZXh0KGdyb3VwY29u
c3VsdGF0aW9ucywgU1dULkJPUkRFUik7DQoJCXRleHRkYXRlY29uc3VsdGF0 aW9uc3BlYy5zZXRM
YXlvdXREYXRhKGdyaWREYXRhMTQpOyAgLy8gR2VuZXJhdGVkDQoJCWJ1dHRv bmRhdGVjb25zdWx0
c3BlYyA9IG5ldyBCdXR0b24oZ3JvdXBjb25zdWx0YXRpb25zLCBTV1QuTk9O RSk7DQoJCWNyZWF0
ZUNvbWJvbGlldWNvbnN1bHRhdGlvbnNwZWMoKTsNCgkJbGFiZWxvdTIyID0g bmV3IExhYmVsKGdy
b3VwY29uc3VsdGF0aW9ucywgU1dULk5PTkUpOw0KCQlsYWJlbG91MjIuc2V0 VGV4dCgib3UiKTsg
IC8vIEdlbmVyYXRlZA0KCQl0ZXh0bGlldWNvbnN1bHRhdGlvbnNwZWMgPSBu ZXcgVGV4dChncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0bGlldWNvbnN1 bHRhdGlvbnNwZWMu
c2V0VGV4dCgiIik7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4dGxpZXVjb25zdWx0 YXRpb25zcGVjLnNl
dExheW91dERhdGEoZ3JpZERhdGExNyk7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4 dHJlbWFycXVlY29u
c3VsdGVzcGVjID0gbmV3IFRleHQoZ3JvdXBjb25zdWx0YXRpb25zLCBTV1Qu Qk9SREVSKTsNCgkJ
dGV4dHJlbWFycXVlY29uc3VsdGVzcGVjLnNldExheW91dERhdGEoZ3JpZERh dGEzNik7ICAvLyBH
ZW5lcmF0ZWQNCgkJTGFiZWwgZmlsbGVyMjIgPSBuZXcgTGFiZWwoZ3JvdXBj b25zdWx0YXRpb25z
LCBTV1QuTk9ORSk7DQoJCWNoZWNrQm94Y29uc3VsdGV0ZWxzcGVjID0gbmV3 IEJ1dHRvbihncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5DSEVDSyk7DQoJCWNoZWNrQm94Y29uc3Vs dGV0ZWxzcGVjLnNl
dFRleHQoIkNvbnN1bHQuIHTDqWwuIHNww6ljaWFsaXPDqWUiKTsgIC8vIEdl bmVyYXRlZA0KCQlj
cmVhdGVDb21ib2RldGFpbGNvbnN1bHRldGVsc3BlYygpOw0KCQljcmVhdGVD b21ib2RhdGVjb25z
dWx0ZXRlbHNwZWMoKTsNCgkJbGFiZWxvdTUxID0gbmV3IExhYmVsKGdyb3Vw Y29uc3VsdGF0aW9u
cywgU1dULk5PTkUpOw0KCQlsYWJlbG91NTEuc2V0VGV4dCgib3UiKTsgIC8v IEdlbmVyYXRlZA0K
CQljaGVja0JveGRhdGV0ZWxzcGVjID0gbmV3IEJ1dHRvbihncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5DSEVDSyk7DQoJCXRleHRkYXRlY29uc3VsdGF0ZXRlbHNwZWMgPSBuZXcg VGV4dChncm91cGNv
bnN1bHRhdGlvbnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0ZGF0ZWNvbnN1bHRh dGV0ZWxzcGVjLnNl
dExheW91dERhdGEoZ3JpZERhdGExOSk7ICAvLyBHZW5lcmF0ZWQNCgkJYnV0 dG9uZGF0ZXRlbHNw
ZWMgPSBuZXcgQnV0dG9uKGdyb3VwY29uc3VsdGF0aW9ucywgU1dULk5PTkUp Ow0KCQljcmVhdGVD
b21ib2xpZXVjb25zdWx0ZXRlbHNwZWMoKTsNCgkJbGFiZWxvdTIyMSA9IG5l dyBMYWJlbChncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJbGFiZWxvdTIyMS5zZXRU ZXh0KCJvdSIpOyAg
Ly8gR2VuZXJhdGVkDQoJCXRleHRsaWV1Y29uc3VsdGV0ZWxzcGVjID0gbmV3 IFRleHQoZ3JvdXBj
b25zdWx0YXRpb25zLCBTV1QuQk9SREVSKTsNCgkJdGV4dGxpZXVjb25zdWx0 ZXRlbHNwZWMuc2V0
VGV4dCgiIik7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4dGxpZXVjb25zdWx0ZXRl bHNwZWMuc2V0TGF5
b3V0RGF0YShncmlkRGF0YTIwKTsgIC8vIEdlbmVyYXRlZA0KCQl0ZXh0cmVt YXJxdWVjb25zdWx0
ZXRlbHNwZWMgPSBuZXcgVGV4dChncm91cGNvbnN1bHRhdGlvbnMsIFNXVC5C T1JERVIpOw0KCQl0
ZXh0cmVtYXJxdWVjb25zdWx0ZXRlbHNwZWMuc2V0TGF5b3V0RGF0YShncmlk RGF0YTM3KTsgIC8v
IEdlbmVyYXRlZA0KCQlMYWJlbCBmaWxsZXIyMSA9IG5ldyBMYWJlbChncm91 cGNvbnN1bHRhdGlv
bnMsIFNXVC5OT05FKTsNCgkJY2hlY2tCb3hob3NwaXRhbGlzYXRpb24gPSBu ZXcgQnV0dG9uKGdy
b3VwY29uc3VsdGF0aW9ucywgU1dULkNIRUNLKTsNCgkJY2hlY2tCb3hob3Nw aXRhbGlzYXRpb24u
c2V0VGV4dCgiSG9zcGl0YWxpc2F0aW9uIik7ICAvLyBHZW5lcmF0ZWQNCgkJ Y3JlYXRlQ29tYm9k
ZXRhaWxob3NwaXRhbGlzYXRpb24oKTsNCgkJY3JlYXRlQ29tYm9kYXRlaG9z cGl0YWxpc2F0aW9u
KCk7DQoJCWxhYmVsb3U1MTEgPSBuZXcgTGFiZWwoZ3JvdXBjb25zdWx0YXRp b25zLCBTV1QuTk9O
RSk7DQoJCWxhYmVsb3U1MTEuc2V0VGV4dCgib3UiKTsgIC8vIEdlbmVyYXRl ZA0KCQljaGVja0Jv
eGRhdGVob3NwID0gbmV3IEJ1dHRvbihncm91cGNvbnN1bHRhdGlvbnMsIFNX VC5DSEVDSyk7DQoJ
CXRleHRkYXRlaG9zcGl0YWxpc2F0aW9uID0gbmV3IFRleHQoZ3JvdXBjb25z dWx0YXRpb25zLCBT
V1QuQk9SREVSKTsNCgkJdGV4dGRhdGVob3NwaXRhbGlzYXRpb24uc2V0TGF5 b3V0RGF0YShncmlk
RGF0YTIyKTsgIC8vIEdlbmVyYXRlZA0KCQlidXR0b25kYXRlaG9zcGl0ID0g bmV3IEJ1dHRvbihn
cm91cGNvbnN1bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJY3JlYXRlQ29tYm9s aWV1aG9zcGl0YWxp
c2F0aW9uKCk7DQoJCWxhYmVsb3UyMjExID0gbmV3IExhYmVsKGdyb3VwY29u c3VsdGF0aW9ucywg
U1dULk5PTkUpOw0KCQlsYWJlbG91MjIxMS5zZXRUZXh0KCJvdSIpOyAgLy8g R2VuZXJhdGVkDQoJ
CXRleHRsaWV1aG9zcGl0YWxpc2F0aW9uID0gbmV3IFRleHQoZ3JvdXBjb25z dWx0YXRpb25zLCBT
V1QuQk9SREVSKTsNCgkJdGV4dGxpZXVob3NwaXRhbGlzYXRpb24uc2V0VGV4 dCgiIik7ICAvLyBH
ZW5lcmF0ZWQNCgkJdGV4dGxpZXVob3NwaXRhbGlzYXRpb24uc2V0TGF5b3V0 RGF0YShncmlkRGF0
YTIzKTsgIC8vIEdlbmVyYXRlZA0KCQl0ZXh0cmVtYXJxdWVob3NwaXQgPSBu ZXcgVGV4dChncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVo b3NwaXQuc2V0TGF5
b3V0RGF0YShncmlkRGF0YTM4KTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8q Kg0KCSAqIFRoaXMg
bWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGV0YWlsY29uc3VsdGVzcGVjaWFs aXNlZQkNCgkgKg0K
CSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RldGFpbGNvbnN1bHRl c3BlY2lhbGlzZWUo
KSB7DQoJCUdyaWREYXRhIGdyaWREYXRhMTMgPSBuZXcgR3JpZERhdGEoKTsN CgkJZ3JpZERhdGEx
My53aWR0aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRh aWxjb25zdWx0ZXNw
ZWNpYWxpc2VlID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dU Lk5PTkUpOw0KCQlj
b21ib2RldGFpbGNvbnN1bHRlc3BlY2lhbGlzZWUuc2V0SXRlbXMgKG5ldyBT dHJpbmcgW117IiIs
IkFzc2lzdGFudCBTb2NpYWwiLCJBbGNvb2xnaWUvRMOpcGVuZGFuY2VzIiwg IkNhcmRpb2xvZ2ll
IiwgIkNoaXJ1cmdpZSIsIkRlcm1hdG9sb2dpZSIsIkRlbnRpc3RlIiwiRGlh YsOpdGlvbG9naWUi
LCAiR2FzdHJvLUVudMOpcm9sb2dpZSIsICJHeW7DqWNvbG9naWUiLCJIw6lt YXRvbG9naWUiLCJJ
bW11bm9sb2dpZS9BbGxlcmdvbG9naWUiLCJJbmZlY3Rpb2xvZ2llIiwiTcOp ZGVjaW5lIEludGVy
bmUiLCAiTsOpcGhyb2xvZ2llIiwiTmV1cm9sb2dpZSIsIk9ydGhvcMOpZGll IiwgIk9STCIsIlDD
qWRpYXRyaWUiLCJQbmV1bW9sb2dpZSIsIlBzeWNoaWF0cmllIiwiUGh5c2lv dGjDqXJhcGllIiwg
IlJ1bWF0b2xvZ2llIn0pOw0KCQljb21ib2RldGFpbGNvbnN1bHRlc3BlY2lh bGlzZWUuc2V0TGF5
b3V0RGF0YShncmlkRGF0YTEzKTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8q Kg0KCSAqIFRoaXMg
bWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGF0ZWNvbnN1bHRlc3BlYwkNCgkg Kg0KCSAqLw0KCXBy
aXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVjb25zdWx0ZXNwZWMoKSB7DQoJ CUdyaWREYXRhIGdy
aWREYXRhNDggPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGE0OC53aWR0 aEhpbnQgPSA4MDsg
IC8vIEdlbmVyYXRlZA0KCQljb21ib2RhdGVjb25zdWx0ZXNwZWMgPSBuZXcg Q29tYm8oZ3JvdXBj
b25zdWx0YXRpb25zLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZWNvbnN1bHRl c3BlYy5zZXRJdGVt
cyAobmV3IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1cmdlbmNl cyIsICJEw6hzIHF1
ZSBwb3NzaWJsZSIsICJEYW5zIDEgam91ciIsIkRhbnMgMiBqb3VycyIsIkRh bnMgMyBqb3VycyIs
IkRhbnMgNCBqb3VycyIsIkRhbnMgNSBqb3VycyIsIkRhbnMgNiBqb3VycyIs IkRhbnMgMSBzZW1h
aW5lIiwiRGFucyAyIHNlbWFpbmVzIiwiRGFucyAzIHNlbWFpbmVzIiwiRGFu cyAxIG1vaXMiLCJE
YW5zIDIgbW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFucyA0IG1vaXMiLCJEYW5z IDUgbW9pcyIsIkRh
bnMgNiBtb2lzIiwiRGFucyA3IG1vaXMiLCJEYW5zIDggbW9pcyIsIkRhbnMg OSBtb2lzIiwiRGFu
cyAxMCBtb2lzIiwiRGFucyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIsICJEYW5z IDIgYW5zIiwgIkRh
bnMgMyBhbnMiLCAiRGFucyA0IGFucyIsICJEYW5zIDUgYW5zIn0pOw0KCQlj b21ib2RhdGVjb25z
dWx0ZXNwZWMuc2V0TGF5b3V0RGF0YShncmlkRGF0YTQ4KTsgIC8vIEdlbmVy YXRlZA0KCX0NCg0K
CS8qKg0KCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbWJvbGlldWNv bnN1bHRhdGlvbnNw
ZWMJDQoJICoNCgkgKi8NCglwcml2YXRlIHZvaWQgY3JlYXRlQ29tYm9saWV1 Y29uc3VsdGF0aW9u
c3BlYygpIHsNCgkJR3JpZERhdGEgZ3JpZERhdGExNSA9IG5ldyBHcmlkRGF0 YSgpOw0KCQlncmlk
RGF0YTE1LndpZHRoSGludCA9IDEyMDsgIC8vIEdlbmVyYXRlZA0KCQljb21i b2xpZXVjb25zdWx0
YXRpb25zcGVjID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dU Lk5PTkUpOw0KCQlj
b21ib2xpZXVjb25zdWx0YXRpb25zcGVjLnNldFRleHQoIkNob2lzaXIiKTsg IC8vIEdlbmVyYXRl
ZA0KCQljb21ib2xpZXVjb25zdWx0YXRpb25zcGVjLnNldExheW91dERhdGEo Z3JpZERhdGExNSk7
ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBp bml0aWFsaXplcyBj
b21ib2RldGFpbGNvbnN1bHRldGVsc3BlYwkNCgkgKg0KCSAqLw0KCXByaXZh dGUgdm9pZCBjcmVh
dGVDb21ib2RldGFpbGNvbnN1bHRldGVsc3BlYygpIHsNCgkJR3JpZERhdGEg Z3JpZERhdGEyMSA9
IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTIxLndpZHRoSGludCA9IDEz MDsgIC8vIEdlbmVy
YXRlZA0KCQljb21ib2RldGFpbGNvbnN1bHRldGVsc3BlYyA9IG5ldyBDb21i byhncm91cGNvbnN1
bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJY29tYm9kZXRhaWxjb25zdWx0ZXRl bHNwZWMuc2V0SXRl
bXMgKG5ldyBTdHJpbmcgW117IiIsIkFzc2lzdGFudCBTb2NpYWwiLCJBbGNv b2xnaWUvRMOpcGVu
ZGFuY2VzIiwgIkNhcmRpb2xvZ2llIiwgIkNoaXJ1cmdpZSIsIkRlcm1hdG9s b2dpZSIsIkRlbnRp
c3RlIiwiRGlhYsOpdGlvbG9naWUiLCAiR2FzdHJvLUVudMOpcm9sb2dpZSIs ICJHeW7DqWNvbG9n
aWUiLCJIw6ltYXRvbG9naWUiLCJJbW11bm9sb2dpZS9BbGxlcmdvbG9naWUi LCJJbmZlY3Rpb2xv
Z2llIiwiTcOpZGVjaW5lIEludGVybmUiLCAiTsOpcGhyb2xvZ2llIiwiTmV1 cm9sb2dpZSIsIk9y
dGhvcMOpZGllIiwgIk9STCIsIlDDqWRpYXRyaWUiLCJQbmV1bW9sb2dpZSIs IlBzeWNoaWF0cmll
IiwiUGh5c2lvdGjDqXJhcGllIiwiUnVtYXRvbG9naWUifSk7DQoJCWNvbWJv ZGV0YWlsY29uc3Vs
dGV0ZWxzcGVjLnNldExheW91dERhdGEoZ3JpZERhdGEyMSk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2RhdGVj b25zdWx0ZXRlbHNw
ZWMJDQoJICoNCgkgKi8NCglwcml2YXRlIHZvaWQgY3JlYXRlQ29tYm9kYXRl Y29uc3VsdGV0ZWxz
cGVjKCkgew0KCQlHcmlkRGF0YSBncmlkRGF0YTQ5ID0gbmV3IEdyaWREYXRh KCk7DQoJCWdyaWRE
YXRhNDkud2lkdGhIaW50ID0gODA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9k YXRlY29uc3VsdGV0
ZWxzcGVjID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dULk5P TkUpOw0KCQljb21i
b2RhdGVjb25zdWx0ZXRlbHNwZWMuc2V0SXRlbXMgKG5ldyBTdHJpbmcgW117 IiIsIkF1am91cmQn
aHVpIiwiRW4gdXJnZW5jZXMiLCAiRMOocyBxdWUgcG9zc2libGUiLCAiRGFu cyAxIGpvdXIiLCJE
YW5zIDIgam91cnMiLCJEYW5zIDMgam91cnMiLCJEYW5zIDQgam91cnMiLCJE YW5zIDUgam91cnMi
LCJEYW5zIDYgam91cnMiLCJEYW5zIDEgc2VtYWluZSIsIkRhbnMgMiBzZW1h aW5lcyIsIkRhbnMg
MyBzZW1haW5lcyIsIkRhbnMgMSBtb2lzIiwiRGFucyAyIG1vaXMiLCJEYW5z IDMgbW9pcyIsIkRh
bnMgNCBtb2lzIiwiRGFucyA1IG1vaXMiLCJEYW5zIDYgbW9pcyIsIkRhbnMg NyBtb2lzIiwiRGFu
cyA4IG1vaXMiLCJEYW5zIDkgbW9pcyIsIkRhbnMgMTAgbW9pcyIsIkRhbnMg MTEgbW9pcyIsICJE
YW5zIDEgYW4iLCAiRGFucyAyIGFucyIsICJEYW5zIDMgYW5zIiwgIkRhbnMg NCBhbnMiLCAiRGFu
cyA1IGFucyJ9KTsNCgkJY29tYm9kYXRlY29uc3VsdGV0ZWxzcGVjLnNldExh eW91dERhdGEoZ3Jp
ZERhdGE0OSk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkvKioNCgkgKiBUaGlz IG1ldGhvZCBpbml0
aWFsaXplcyBjb21ib2xpZXVjb25zdWx0ZXRlbHNwZWMJDQoJICoNCgkgKi8N Cglwcml2YXRlIHZv
aWQgY3JlYXRlQ29tYm9saWV1Y29uc3VsdGV0ZWxzcGVjKCkgew0KCQlHcmlk RGF0YSBncmlkRGF0
YTE4ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMTgud2lkdGhIaW50 ID0gMTIwOyAgLy8g
R2VuZXJhdGVkDQoJCWNvbWJvbGlldWNvbnN1bHRldGVsc3BlYyA9IG5ldyBD b21ibyhncm91cGNv
bnN1bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJY29tYm9saWV1Y29uc3VsdGV0 ZWxzcGVjLnNldFRl
eHQoIkNob2lzaXIiKTsgIC8vIEdlbmVyYXRlZA0KCQljb21ib2xpZXVjb25z dWx0ZXRlbHNwZWMu
c2V0TGF5b3V0RGF0YShncmlkRGF0YTE4KTsgIC8vIEdlbmVyYXRlZA0KCX0N Cg0KCS8qKg0KCSAq
IFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGV0YWlsaG9zcGl0YWxp c2F0aW9uCQ0KCSAq
DQoJICovDQoJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbWJvZGV0YWlsaG9zcGl0 YWxpc2F0aW9uKCkg
ew0KCQlHcmlkRGF0YSBncmlkRGF0YTI1ID0gbmV3IEdyaWREYXRhKCk7DQoJ CWdyaWREYXRhMjUu
d2lkdGhIaW50ID0gMTMwOyAgLy8gR2VuZXJhdGVkDQoJCWNvbWJvZGV0YWls aG9zcGl0YWxpc2F0
aW9uID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dULk5PTkUp Ow0KCQljb21ib2Rl
dGFpbGhvc3BpdGFsaXNhdGlvbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMjUp OyAgLy8gR2VuZXJh
dGVkDQoJfQ0KDQoJLyoqDQoJICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMg Y29tYm9kYXRlaG9z
cGl0YWxpc2F0aW9uCQ0KCSAqDQoJICovDQoJcHJpdmF0ZSB2b2lkIGNyZWF0 ZUNvbWJvZGF0ZWhv
c3BpdGFsaXNhdGlvbigpIHsNCgkJR3JpZERhdGEgZ3JpZERhdGE1MCA9IG5l dyBHcmlkRGF0YSgp
Ow0KCQlncmlkRGF0YTUwLndpZHRoSGludCA9IDgwOyAgLy8gR2VuZXJhdGVk DQoJCWNvbWJvZGF0
ZWhvc3BpdGFsaXNhdGlvbiA9IG5ldyBDb21ibyhncm91cGNvbnN1bHRhdGlv bnMsIFNXVC5OT05F
KTsNCgkJY29tYm9kYXRlaG9zcGl0YWxpc2F0aW9uLnNldEl0ZW1zIChuZXcg U3RyaW5nIFtdeyIi
LCJBdWpvdXJkJ2h1aSIsIkVuIHVyZ2VuY2VzIiwgIkTDqHMgcXVlIHBvc3Np YmxlIiwgIkRhbnMg
MSBqb3VyIiwiRGFucyAyIGpvdXJzIiwiRGFucyAzIGpvdXJzIiwiRGFucyA0 IGpvdXJzIiwiRGFu
cyA1IGpvdXJzIiwiRGFucyA2IGpvdXJzIiwiRGFucyAxIHNlbWFpbmUiLCJE YW5zIDIgc2VtYWlu
ZXMiLCJEYW5zIDMgc2VtYWluZXMiLCJEYW5zIDEgbW9pcyIsIkRhbnMgMiBt b2lzIiwiRGFucyAz
IG1vaXMiLCJEYW5zIDQgbW9pcyIsIkRhbnMgNSBtb2lzIiwiRGFucyA2IG1v aXMiLCJEYW5zIDcg
bW9pcyIsIkRhbnMgOCBtb2lzIiwiRGFucyA5IG1vaXMiLCJEYW5zIDEwIG1v aXMiLCJEYW5zIDEx
IG1vaXMiLCAiRGFucyAxIGFuIiwgIkRhbnMgMiBhbnMiLCAiRGFucyAzIGFu cyIsICJEYW5zIDQg
YW5zIiwgIkRhbnMgNSBhbnMifSk7DQoJCWNvbWJvZGF0ZWhvc3BpdGFsaXNh dGlvbi5zZXRMYXlv
dXREYXRhKGdyaWREYXRhNTApOyAgLy8gR2VuZXJhdGVkDQoJfQ0KDQoJLyoq DQoJICogVGhpcyBt
ZXRob2QgaW5pdGlhbGl6ZXMgY29tYm9saWV1aG9zcGl0YWxpc2F0aW9uCQ0K CSAqDQoJICovDQoJ
cHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbWJvbGlldWhvc3BpdGFsaXNhdGlvbigp IHsNCgkJR3JpZERh
dGEgZ3JpZERhdGEyNCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTI0 LndpZHRoSGludCA9
IDEyMDsgIC8vIEdlbmVyYXRlZA0KCQljb21ib2xpZXVob3NwaXRhbGlzYXRp b24gPSBuZXcgQ29t
Ym8oZ3JvdXBjb25zdWx0YXRpb25zLCBTV1QuTk9ORSk7DQoJCWNvbWJvbGll dWhvc3BpdGFsaXNh
dGlvbi5zZXRUZXh0KCJDaG9pc2lyIik7ICAvLyBHZW5lcmF0ZWQNCgkJY29t Ym9saWV1aG9zcGl0
YWxpc2F0aW9uLnNldExheW91dERhdGEoZ3JpZERhdGEyNCk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBncm91cGRpdmVy cwkNCgkgKg0KCSAq
Lw0KCXByaXZhdGUgdm9pZCBjcmVhdGVHcm91cGRpdmVycygpIHsNCgkJR3Jp ZERhdGEgZ3JpZERh
dGE1NCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTU0LndpZHRoSGlu dCA9IDEzMDsNCgkJ
R3JpZERhdGEgZ3JpZERhdGE1MyA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlk RGF0YTUzLndpZHRo
SGludCA9IDE1MDsNCgkJR3JpZERhdGEgZ3JpZERhdGE1MiA9IG5ldyBHcmlk RGF0YSgpOw0KCQln
cmlkRGF0YTUyLndpZHRoSGludCA9IDUwOw0KCQlHcmlkRGF0YSBncmlkRGF0 YTUxID0gbmV3IEdy
aWREYXRhKCk7DQoJCWdyaWREYXRhNTEud2lkdGhIaW50ID0gMTIwOw0KCQlH cmlkRGF0YSBncmlk
RGF0YTQwID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhNDAud2lkdGhI aW50ID0gMTUwOyAg
Ly8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMzEgPSBuZXcgR3Jp ZERhdGEoKTsNCgkJ
Z3JpZERhdGEzMS53aWR0aEhpbnQgPSA1MDsgIC8vIEdlbmVyYXRlZA0KCQlH cmlkRGF0YSBncmlk
RGF0YTM5ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMzkud2lkdGhI aW50ID0gMTUwOyAg
Ly8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMjcgPSBuZXcgR3Jp ZERhdGEoKTsNCgkJ
Z3JpZERhdGEyNy53aWR0aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJ R3JpZERhdGEgZ3Jp
ZERhdGEyOSA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTI5LndpZHRo SGludCA9IDUwOyAg
Ly8gR2VuZXJhdGVkDQoJCUdyaWRMYXlvdXQgZ3JpZExheW91dDMgPSBuZXcg R3JpZExheW91dCgp
Ow0KCQlncmlkTGF5b3V0My5udW1Db2x1bW5zID0gMTE7ICAvLyBHZW5lcmF0 ZWQNCgkJR3JpZERh
dGEgZ3JpZERhdGEyNiA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTI2 LmhlaWdodEhpbnQg
PSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJZ3JpZERhdGEyNi53aWR0aEhpbnQg PSA5OTA7ICAvLyBH
ZW5lcmF0ZWQNCgkJZ3JvdXBkaXZlcnMgPSBuZXcgR3JvdXAoY29tcG9zaXRl LCBTV1QuTk9ORSk7
DQoJCWdyb3VwZGl2ZXJzLnNldFRleHQoIkRJVkVSUyIpOyAgLy8gR2VuZXJh dGVkDQoJCWdyb3Vw
ZGl2ZXJzLnNldExheW91dERhdGEoZ3JpZERhdGEyNik7ICAvLyBHZW5lcmF0 ZWQNCgkJZ3JvdXBk
aXZlcnMuc2V0TGF5b3V0KGdyaWRMYXlvdXQzKTsgIC8vIEdlbmVyYXRlZA0K CQlsYWJlbHR5cGUx
MSA9IG5ldyBMYWJlbChncm91cGRpdmVycywgU1dULk5PTkUpOw0KCQlsYWJl bHR5cGUxMS5zZXRU
ZXh0KCJUeXBlIik7ICAvLyBHZW5lcmF0ZWQNCgkJbGFiZWxkZXRhaWxzMTEg PSBuZXcgTGFiZWwo
Z3JvdXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJbGFiZWxkZXRhaWxzMTEuc2V0 VGV4dCgiRMOpdGFp
bHMiKTsgIC8vIEdlbmVyYXRlZA0KCQlsYWJlbGRhdGVkZXNpcmVlMTEgPSBu ZXcgTGFiZWwoZ3Jv
dXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJbGFiZWxkYXRlZGVzaXJlZTExLnNl dFRleHQoIkRhdGUg
ZMOpc2lyw6llIik7ICAvLyBHZW5lcmF0ZWQNCgkJZmlsbGVyMTggPSBuZXcg TGFiZWwoZ3JvdXBk
aXZlcnMsIFNXVC5OT05FKTsNCgkJTGFiZWwgZmlsbGVyMzEgPSBuZXcgTGFi ZWwoZ3JvdXBkaXZl
cnMsIFNXVC5OT05FKTsNCgkJZmlsbGVyMTEgPSBuZXcgTGFiZWwoZ3JvdXBk aXZlcnMsIFNXVC5O
T05FKTsNCgkJTGFiZWwgZmlsbGVyMzUgPSBuZXcgTGFiZWwoZ3JvdXBkaXZl cnMsIFNXVC5OT05F
KTsNCgkJbGFiZWxsaWV1MTEgPSBuZXcgTGFiZWwoZ3JvdXBkaXZlcnMsIFNX VC5OT05FKTsNCgkJ
bGFiZWxsaWV1MTEuc2V0VGV4dCgiTGlldSIpOyAgLy8gR2VuZXJhdGVkDQoJ CWZpbGxlcjE2ID0g
bmV3IExhYmVsKGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWZpbGxlcjE3 ID0gbmV3IExhYmVs
KGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWxhYmVscmVtYXJxdWUzID0g bmV3IExhYmVsKGdy
b3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWxhYmVscmVtYXJxdWUzLnNldFRl eHQoIlJlbWFycXVl
Iik7ICAvLyBHZW5lcmF0ZWQNCgkJY2hlY2tCb3h2YWNjaW4gPSBuZXcgQnV0 dG9uKGdyb3VwZGl2
ZXJzLCBTV1QuQ0hFQ0spOw0KCQljaGVja0JveHZhY2Npbi5zZXRUZXh0KCJW YWNjaW4iKTsgIC8v
IEdlbmVyYXRlZA0KCQljcmVhdGVDb21ib2RldGFpbHZhY2NpbigpOw0KCQlj cmVhdGVDb21ib2Rh
dGV2YWNjaW4oKTsNCgkJbGFiZWxvdTUyID0gbmV3IExhYmVsKGdyb3VwZGl2 ZXJzLCBTV1QuTk9O
RSk7DQoJCWxhYmVsb3U1Mi5zZXRUZXh0KCJvdSIpOyAgLy8gR2VuZXJhdGVk DQoJCWNoZWNrQm94
ZGF0ZXZhY2NpbiA9IG5ldyBCdXR0b24oZ3JvdXBkaXZlcnMsIFNXVC5DSEVD Syk7DQoJCXRleHRk
YXRldmFjY2luID0gbmV3IFRleHQoZ3JvdXBkaXZlcnMsIFNXVC5CT1JERVIp Ow0KCQl0ZXh0ZGF0
ZXZhY2Npbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMjkpOyAgLy8gR2VuZXJh dGVkDQoJCWJ1dHRv
bmRhdGV2YWNjaW4gPSBuZXcgQnV0dG9uKGdyb3VwZGl2ZXJzLCBTV1QuTk9O RSk7DQoJCWNyZWF0
ZUNvbWJvbGlldXZhY2NpbigpOw0KCQlsYWJlbG91MjIyID0gbmV3IExhYmVs KGdyb3VwZGl2ZXJz
LCBTV1QuTk9ORSk7DQoJCWxhYmVsb3UyMjIuc2V0VGV4dCgib3UiKTsgIC8v IEdlbmVyYXRlZA0K
CQl0ZXh0bGlldXZhY2NpbiA9IG5ldyBUZXh0KGdyb3VwZGl2ZXJzLCBTV1Qu Qk9SREVSKTsNCgkJ
dGV4dGxpZXV2YWNjaW4uc2V0VGV4dCgiIik7ICAvLyBHZW5lcmF0ZWQNCgkJ dGV4dGxpZXV2YWNj
aW4uc2V0TGF5b3V0RGF0YShncmlkRGF0YTI3KTsgIC8vIEdlbmVyYXRlZA0K CQl0ZXh0cmVtYXJx
dWV2YWNjaW4gPSBuZXcgVGV4dChncm91cGRpdmVycywgU1dULkJPUkRFUik7 DQoJCXRleHRyZW1h
cnF1ZXZhY2Npbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMzkpOyAgLy8gR2Vu ZXJhdGVkDQoJCWNo
ZWNrQm94cHJvY2hyZHYgPSBuZXcgQnV0dG9uKGdyb3VwZGl2ZXJzLCBTV1Qu Q0hFQ0spOw0KCQlj
aGVja0JveHByb2NocmR2LnNldFRleHQoIlByb2NoYWluIFJEViIpOyAgLy8g R2VuZXJhdGVkDQoJ
CWZpbGxlcjE1MSA9IG5ldyBMYWJlbChncm91cGRpdmVycywgU1dULk5PTkUp Ow0KCQljcmVhdGVD
b21ib2RhdGVwcm9jaHJkdigpOw0KCQlsYWJlbG91NTIxID0gbmV3IExhYmVs KGdyb3VwZGl2ZXJz
LCBTV1QuTk9ORSk7DQoJCWxhYmVsb3U1MjEuc2V0VGV4dCgib3UiKTsgIC8v IEdlbmVyYXRlZA0K
CQljaGVja0JveGRhdGVwcm9jaGFpbnJkdiA9IG5ldyBCdXR0b24oZ3JvdXBk aXZlcnMsIFNXVC5D
SEVDSyk7DQoJCXRleHRkYXRlcHJvY2hyZHYgPSBuZXcgVGV4dChncm91cGRp dmVycywgU1dULkJP
UkRFUik7DQoJCXRleHRkYXRlcHJvY2hyZHYuc2V0TGF5b3V0RGF0YShncmlk RGF0YTMxKTsgIC8v
IEdlbmVyYXRlZA0KCQlidXR0b25kYXRlcHJvY2hhaW5yZHYgPSBuZXcgQnV0 dG9uKGdyb3VwZGl2
ZXJzLCBTV1QuTk9ORSk7DQoJCWZpbGxlcjE1ID0gbmV3IExhYmVsKGdyb3Vw ZGl2ZXJzLCBTV1Qu
Tk9ORSk7DQoJCWZpbGxlcjE5ID0gbmV3IExhYmVsKGdyb3VwZGl2ZXJzLCBT V1QuTk9ORSk7DQoJ
CWZpbGxlcjIwID0gbmV3IExhYmVsKGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7 DQoJCXRleHRyZW1h
cnF1ZXByb2NocmR2ID0gbmV3IFRleHQoZ3JvdXBkaXZlcnMsIFNXVC5CT1JE RVIpOw0KCQl0ZXh0
cmVtYXJxdWVwcm9jaHJkdi5zZXRMYXlvdXREYXRhKGdyaWREYXRhNDApOyAg Ly8gR2VuZXJhdGVk
DQoJCWNoZWNrQm94YXV0cmVzID0gbmV3IEJ1dHRvbihncm91cGRpdmVycywg U1dULkNIRUNLKTsN
CgkJY2hlY2tCb3hhdXRyZXMuc2V0VGV4dCgiQXV0cmVzIik7DQoJCXRleHRh dXRyZXMgPSBuZXcg
VGV4dChncm91cGRpdmVycywgU1dULkJPUkRFUik7DQoJCXRleHRhdXRyZXMu c2V0TGF5b3V0RGF0
YShncmlkRGF0YTUxKTsNCgkJY3JlYXRlQ29tYm9kYXRlYXV0cmVzKCk7CgkJ bGFiZWxvdTYgPSBu
ZXcgTGFiZWwoZ3JvdXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJbGFiZWxvdTYu c2V0VGV4dCgib3Ui
KTsNCgkJY2hlY2tCb3hkYXRlYXV0cmVzID0gbmV3IEJ1dHRvbihncm91cGRp dmVycywgU1dULkNI
RUNLKTsNCgkJdGV4dGRhdGVhdXRyZXMgPSBuZXcgVGV4dChncm91cGRpdmVy cywgU1dULkJPUkRF
Uik7DQoJCXRleHRkYXRlYXV0cmVzLnNldExheW91dERhdGEoZ3JpZERhdGE1 Mik7DQoJCWJ1dHRv
bmRhdGVhdXRyZXMgPSBuZXcgQnV0dG9uKGdyb3VwZGl2ZXJzLCBTV1QuTk9O RSk7DQoJCWNyZWF0
ZUNvbWJvbGlldWF1dHJlcygpOwoJCWxhYmVsb3U3ID0gbmV3IExhYmVsKGdy b3VwZGl2ZXJzLCBT
V1QuTk9ORSk7DQoJCWxhYmVsb3U3LnNldFRleHQoIm91Iik7DQoJCXRleHRs aWV1YXV0cmVzID0g
bmV3IFRleHQoZ3JvdXBkaXZlcnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0bGll dWF1dHJlcy5zZXRM
YXlvdXREYXRhKGdyaWREYXRhNTQpOw0KCQl0ZXh0cmVtYXJxdWVhdXRyZXMg PSBuZXcgVGV4dChn
cm91cGRpdmVycywgU1dULkJPUkRFUik7DQoJCXRleHRyZW1hcnF1ZWF1dHJl cy5zZXRMYXlvdXRE
YXRhKGdyaWREYXRhNTMpOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgbWV0aG9k IGluaXRpYWxpemVz
IGNvbWJvZGV0YWlsdmFjY2luCQ0KCSAqDQoJICovDQoJcHJpdmF0ZSB2b2lk IGNyZWF0ZUNvbWJv
ZGV0YWlsdmFjY2luKCkgew0KCQlHcmlkRGF0YSBncmlkRGF0YTMwID0gbmV3 IEdyaWREYXRhKCk7
DQoJCWdyaWREYXRhMzAud2lkdGhIaW50ID0gMTMwOyAgLy8gR2VuZXJhdGVk DQoJCWNvbWJvZGV0
YWlsdmFjY2luID0gbmV3IENvbWJvKGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7 DQoJCWNvbWJvZGV0
YWlsdmFjY2luLnNldExheW91dERhdGEoZ3JpZERhdGEzMCk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2RhdGV2 YWNjaW4JDQoJICoN
CgkgKi8NCglwcml2YXRlIHZvaWQgY3JlYXRlQ29tYm9kYXRldmFjY2luKCkg ew0KCQlHcmlkRGF0
YSBncmlkRGF0YTQ1ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhNDUu d2lkdGhIaW50ID0g
ODA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kYXRldmFjY2luID0gbmV3IENv bWJvKGdyb3VwZGl2
ZXJzLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZXZhY2Npbi5zZXRJdGVtcyAo bmV3IFN0cmluZyBb
XXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1cmdlbmNlcyIsICJEw6hzIHF1ZSBw b3NzaWJsZSIsICJE
YW5zIDEgam91ciIsIkRhbnMgMiBqb3VycyIsIkRhbnMgMyBqb3VycyIsIkRh bnMgNCBqb3VycyIs
IkRhbnMgNSBqb3VycyIsIkRhbnMgNiBqb3VycyIsIkRhbnMgMSBzZW1haW5l IiwiRGFucyAyIHNl
bWFpbmVzIiwiRGFucyAzIHNlbWFpbmVzIiwiRGFucyAxIG1vaXMiLCJEYW5z IDIgbW9pcyIsIkRh
bnMgMyBtb2lzIiwiRGFucyA0IG1vaXMiLCJEYW5zIDUgbW9pcyIsIkRhbnMg NiBtb2lzIiwiRGFu
cyA3IG1vaXMiLCJEYW5zIDggbW9pcyIsIkRhbnMgOSBtb2lzIiwiRGFucyAx MCBtb2lzIiwiRGFu
cyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIsICJEYW5zIDIgYW5zIiwgIkRhbnMg MyBhbnMiLCAiRGFu
cyA0IGFucyIsICJEYW5zIDUgYW5zIn0pOw0KCQljb21ib2RhdGV2YWNjaW4u c2V0TGF5b3V0RGF0
YShncmlkRGF0YTQ1KTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8qKg0KCSAq IFRoaXMgbWV0aG9k
IGluaXRpYWxpemVzIGNvbWJvbGlldXZhY2NpbgkNCgkgKg0KCSAqLw0KCXBy aXZhdGUgdm9pZCBj
cmVhdGVDb21ib2xpZXV2YWNjaW4oKSB7DQoJCUdyaWREYXRhIGdyaWREYXRh MjggPSBuZXcgR3Jp
ZERhdGEoKTsNCgkJZ3JpZERhdGEyOC53aWR0aEhpbnQgPSAxMjA7ICAvLyBH ZW5lcmF0ZWQNCgkJ
Y29tYm9saWV1dmFjY2luID0gbmV3IENvbWJvKGdyb3VwZGl2ZXJzLCBTV1Qu Tk9ORSk7DQoJCWNv
bWJvbGlldXZhY2Npbi5zZXRUZXh0KCJDaG9pc2lyIik7ICAvLyBHZW5lcmF0 ZWQNCgkJY29tYm9s
aWV1dmFjY2luLnNldExheW91dERhdGEoZ3JpZERhdGEyOCk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2RhdGVw cm9jaHJkdgkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVwcm9jaHJk digpIHsNCgkJR3Jp
ZERhdGEgZ3JpZERhdGE0NCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0 YTQ0LndpZHRoSGlu
dCA9IDgwOyAgLy8gR2VuZXJhdGVkDQoJCWNvbWJvZGF0ZXByb2NocmR2ID0g bmV3IENvbWJvKGdy
b3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZXByb2NocmR2LnNl dEl0ZW1zIChuZXcg
U3RyaW5nIFtdeyIiLCJBdWpvdXJkJ2h1aSIsIkVuIHVyZ2VuY2VzIiwgIkTD qHMgcXVlIHBvc3Np
YmxlIiwgIkRhbnMgMSBqb3VyIiwiRGFucyAyIGpvdXJzIiwiRGFucyAzIGpv dXJzIiwiRGFucyA0
IGpvdXJzIiwiRGFucyA1IGpvdXJzIiwiRGFucyA2IGpvdXJzIiwiRGFucyAx IHNlbWFpbmUiLCJE
YW5zIDIgc2VtYWluZXMiLCJEYW5zIDMgc2VtYWluZXMiLCJEYW5zIDEgbW9p cyIsIkRhbnMgMiBt
b2lzIiwiRGFucyAzIG1vaXMiLCJEYW5zIDQgbW9pcyIsIkRhbnMgNSBtb2lz IiwiRGFucyA2IG1v
aXMiLCJEYW5zIDcgbW9pcyIsIkRhbnMgOCBtb2lzIiwiRGFucyA5IG1vaXMi LCJEYW5zIDEwIG1v
aXMiLCJEYW5zIDExIG1vaXMiLCAiRGFucyAxIGFuIiwgIkRhbnMgMiBhbnMi LCAiRGFucyAzIGFu
cyIsICJEYW5zIDQgYW5zIiwgIkRhbnMgNSBhbnMifSk7DQoJCWNvbWJvZGF0 ZXByb2NocmR2LnNl
dExheW91dERhdGEoZ3JpZERhdGE0NCk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoN CgkvKioNCgkgKiBU
aGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21wb3NpdGUxCQ0KCSAqDQoJICov DQoJcHJpdmF0ZSB2
b2lkIGNyZWF0ZUNvbXBvc2l0ZTEoKSB7DQoJCUdyaWRMYXlvdXQgZ3JpZExh eW91dDQgPSBuZXcg
R3JpZExheW91dCgpOw0KCQlncmlkTGF5b3V0NC5udW1Db2x1bW5zID0gMTsg IC8vIEdlbmVyYXRl
ZA0KCQlHcmlkRGF0YSBncmlkRGF0YTQxID0gbmV3IEdyaWREYXRhKCk7DQoJ CWdyaWREYXRhNDEu
aGVpZ2h0SGludCA9IDEwMDsgIC8vIEdlbmVyYXRlZA0KCQlncmlkRGF0YTQx LndpZHRoSGludCA9
IDk5OTsgIC8vIEdlbmVyYXRlZA0KCQljb21wb3NpdGUxID0gbmV3IENvbXBv c2l0ZShjb21wb3Np
dGUsIFNXVC5OT05FKTsNCgkJY29tcG9zaXRlMS5zZXRMYXlvdXREYXRhKGdy aWREYXRhNDEpOyAg
Ly8gR2VuZXJhdGVkDQoJCWNvbXBvc2l0ZTEuc2V0TGF5b3V0KGdyaWRMYXlv dXQ0KTsgIC8vIEdl
bmVyYXRlZA0KCQlidXR0b25lbnZveWVyZGVtYW5kZSA9IG5ldyBCdXR0b24o Y29tcG9zaXRlMSwg
U1dULk5PTkUpOw0KCQlidXR0b25lbnZveWVyZGVtYW5kZS5zZXRUZXh0KCJF bnZveWVyIGxhL2xl
cyBkZW1hbmRlKHMpIik7ICAvLyBHZW5lcmF0ZWQNCgkJYnV0dG9uY3JlZXJh bGVydGUgPSBuZXcg
QnV0dG9uKGNvbXBvc2l0ZTEsIFNXVC5OT05FKTsNCgkJYnV0dG9uY3JlZXJh bGVydGUuc2V0VGV4
dCgiQ3LDqWVyIHVuZSBBbGVydGUvVG9kbyIpOyAgLy8gR2VuZXJhdGVkDQoJ CWJ1dHRvbmNyZWVy
YWxlcnRlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5z d3QuZXZlbnRzLlNl
bGVjdGlvbkFkYXB0ZXIoKSB7DQoJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxl Y3RlZChvcmcuZWNs
aXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCgkJCQkJCU1l ZGNsaXBzZV9Db25z
dWx0YXRpb25fQ29uc3VsdGF0aW9uX1BvcFVwX0FsZXJ0ZXMgdGhpc0NsYXNz ID0gbmV3IE1lZGNs
aXBzZV9Db25zdWx0YXRpb25fQ29uc3VsdGF0aW9uX1BvcFVwX0FsZXJ0ZXMg KCk7DQoJCQkJCQl0
aGlzQ2xhc3MuY3JlYXRlU1NoZWxsKCk7DQoJCQkJCQl0aGlzQ2xhc3Muc1No ZWxsLm9wZW4oKTsN
CgkJCQkJfQ0KCQkJCX0pOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgbWV0aG9k IGluaXRpYWxpemVz
IGNvbWJvZGF0ZWF1dHJlcwkNCgkgKg0KCSAqLw0KCXByaXZhdGUgdm9pZCBj cmVhdGVDb21ib2Rh
dGVhdXRyZXMoKSB7DQoJCUdyaWREYXRhIGdyaWREYXRhNTYgPSBuZXcgR3Jp ZERhdGEoKTsNCgkJ
Z3JpZERhdGE1Ni53aWR0aEhpbnQgPSA4MDsNCgkJY29tYm9kYXRlYXV0cmVz ID0gbmV3IENvbWJv
KGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZWF1dHJlcy5z ZXRJdGVtcyAobmV3
IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1cmdlbmNlcyIsICJE w6hzIHF1ZSBwb3Nz
aWJsZSIsICJEYW5zIDEgam91ciIsIkRhbnMgMiBqb3VycyIsIkRhbnMgMyBq b3VycyIsIkRhbnMg
NCBqb3VycyIsIkRhbnMgNSBqb3VycyIsIkRhbnMgNiBqb3VycyIsIkRhbnMg MSBzZW1haW5lIiwi
RGFucyAyIHNlbWFpbmVzIiwiRGFucyAzIHNlbWFpbmVzIiwiRGFucyAxIG1v aXMiLCJEYW5zIDIg
bW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFucyA0IG1vaXMiLCJEYW5zIDUgbW9p cyIsIkRhbnMgNiBt
b2lzIiwiRGFucyA3IG1vaXMiLCJEYW5zIDggbW9pcyIsIkRhbnMgOSBtb2lz IiwiRGFucyAxMCBt
b2lzIiwiRGFucyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIsICJEYW5zIDIgYW5z IiwgIkRhbnMgMyBh
bnMiLCAiRGFucyA0IGFucyIsICJEYW5zIDUgYW5zIn0pOw0KCQljb21ib2Rh dGVhdXRyZXMuc2V0
TGF5b3V0RGF0YShncmlkRGF0YTU2KTsNCgl9DQoNCgkvKioNCgkgKiBUaGlz IG1ldGhvZCBpbml0
aWFsaXplcyBjb21ib2xpZXVhdXRyZXMJDQoJICoNCgkgKi8NCglwcml2YXRl IHZvaWQgY3JlYXRl
Q29tYm9saWV1YXV0cmVzKCkgew0KCQlHcmlkRGF0YSBncmlkRGF0YTU1ID0g bmV3IEdyaWREYXRh
KCk7DQoJCWdyaWREYXRhNTUud2lkdGhIaW50ID0gMTIwOw0KCQljb21ib2xp ZXVhdXRyZXMgPSBu
ZXcgQ29tYm8oZ3JvdXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJY29tYm9saWV1 YXV0cmVzLnNldFRl
eHQoIkNob2lzaXIiKTsNCgkJY29tYm9saWV1YXV0cmVzLnNldExheW91dERh dGEoZ3JpZERhdGE1
NSk7DQoJfQ0KDQp9DQo=
------=_Part_2302_13448963.1140156433895--
Re: Parse Error and partial solution [message #118293 is a reply to message #118211] Fri, 17 February 2006 15:20 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

What line is actually in error? Is it the popupCal.addSelectionListener()?

If it is, then the problem is popupCal is null. This would happen
because where you put the popupCal = new .... has not yet been called.
The best place to put it is immediately after the new Shell() for which
the popupCal is for. Assuming you are trying to access it after that
shell has been created and not before.

Buenzli wrote:
> The error comes from here:
> // **// finally add the selection listener for pop-up calendar
> popupCal.addSelectionListener(new SelectionAdapter() {
> public void widgetSelected(SelectionEvent e) {
> if (popupCal.getDate() != null) {
> textdatelabo.setText(new SimpleDateFormat("EEE dd/MM/yy").format(
> popupCal.getDate().getTime()));
> }
> }
> });
>
> I attached the full code.

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #118303 is a reply to message #118293] Fri, 17 February 2006 17:45 Go to previous message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
It works if I put popupCal.addSelectionListener(new SelectionAdapter() just after the sShell = new Shell.
Thanks very much again for all your help.
Re: Parse Error and partial solution [message #612127 is a reply to message #118091] Thu, 16 February 2006 14:34 Go to previous message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

What version of Eclipse, GEF, EMF, and VE do you have installed?

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #612129 is a reply to message #118091] Thu, 16 February 2006 14:48 Go to previous message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

I downloaded the source and no where does it do:

>
> final PopupCalendar popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
>

So I can't debug it. I need to have the code this was in so that I can
see why you are getting the error. Often the parser is sensitive to all
of the code, not just one line of code.
--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #612130 is a reply to message #118133] Thu, 16 February 2006 16:14 Go to previous message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
------=_Part_2151_8167228.1140106564225
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Thanks for your reply,

I am using Eclipse 3.2M4, VE1.2M1, EMF2.2M3, GEF3,2M3 on Mac OS X 10.4.5 with java 1.5 (it is actually the same problem on a windows xp machine with java 1.4.2 and the same eclipse configuration).

Concerning the code, I installed the package net.cwroethel.swt.popupcalendar and then used the SimpleExample2 to produce the attached source.
------=_Part_2151_8167228.1140106564225
Content-Type: application/octet-stream;
name=Medclipse_Consultation_Consultation_PopUp_RDV.java
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=Medclipse_Consultation_Consultation_PopUp_RDV.java

package ch.medclipse.application;

import java.util.Locale;

import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.layout.GridData;
import net.cwroethel.swt.popupcalendar.*;

import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.SWT;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Medclipse_Consultation_Consultation_PopUp_RDV {

Shell sShell = null; // @jve:decl-index=0:visual-constraint="10,10"
private ScrolledComposite scrolledComposite = null;
private Composite composite = null;
private Combo combodans = null;
private Button radioButtondans = null;
private Button radioButtontousles = null;
private Combo combotousles = null;
private Button radioButtondate = null;

private Button buttonajouter = null;
//* Pop-Up Calendar
private Text textdate = null;
private Button buttondatepop = null;
//**


/**
* This method initializes sShell
*/
void createSShell() {
sShell = new Shell(SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
sShell.setText("PROCHAIN RENDEZ-VOUS");
sShell.setLayout(new FillLayout()); // Generated
sShell.setLocation(new Point(300, 300));
createScrolledComposite();
sShell.setSize(new Point(302, 172));
}


/**
* This method initializes scrolledComposite
*
*/
private void createScrolledComposite() {
scrolledComposite = new ScrolledComposite(sShell, SWT.NONE);
scrolledComposite.setExpandHorizontal(true); // Generated
createComposite();
scrolledComposite.setExpandVertical(true); // Generated
scrolledComposite.setContent(composite); // Generated
}

//* create the popup calendar.
final PopupCalendar popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
//**

/**
* This method initializes composite
*
*/
private void createComposite() {
GridData gridData = new GridData();
gridData.widthHint = 100; // Generated
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3; // Generated
composite = new Composite(scrolledComposite, SWT.NONE);
composite.setLayout(gridLayout); // Generated
radioButtondate = new Button(composite, SWT.RADIO);
radioButtondate.setText("Date"); // Generated

//* Pop-Up Calendar
//create the Calendar Text widget.
textdate = new Text(composite, SWT.CENTER | SWT.READ_ONLY);
GridData data = new GridData();
data.widthHint = 80;
data.heightHint = 20;
textdate.setLayoutData(data);
textdate.setBackground(Display.getCurrent().getSystemColor(S WT.COLOR_WHITE));
//create the Calendar button and pop-up, listener
buttondatepop = new Button(composite, SWT.NONE);
buttondatepop
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
Control comp = (Control)event.getSource();
popupCal.open(comp, PopupCalendar.RIGHT);
buttondatepop.setFocus();
// a little trick to speed up opening the window
popupCal.getDateChooser().paint();
}
});
// finally add the selection listener for pop-up calendar
popupCal.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (popupCal.getDate() != null) {
textdate.setText(new SimpleDateFormat("EEE dd/MM/yy").format(
popupCal.getDate().getTime()));
}
}
});
//** End Pop-Up Calendar
radioButtondans = new Button(composite, SWT.RADIO);
radioButtondans.setText("Dans"); // Generated
createCombodans();
Label filler3 = new Label(composite, SWT.NONE);
radioButtontousles = new Button(composite, SWT.RADIO);
radioButtontousles.setText("Tous les"); // Generated
createCombotousles();
Label filler = new Label(composite, SWT.NONE);
Label filler1 = new Label(composite, SWT.NONE);
Label filler2 = new Label(composite, SWT.NONE);
buttonajouter = new Button(composite, SWT.NONE);
buttonajouter.setText("Ajouter"); // Generated
}

/**
* This method initializes combodans
*
*/
private void createCombodans() {
GridData gridData1 = new GridData();
gridData1.widthHint = 100;
combodans = new Combo(composite, SWT.NONE);
combodans.setItems (new String []{"","1 jour","2 jours","3 jours","4 jours","5 jours","6 jours","1 semaine", "2 semaines","3 semaines","1 mois","2 mois","3 mois","4 mois", "5 mois","6 mois","7 mois","8 mois", "9 mois","10 mois","11 mois","1 an"});
combodans.setLayoutData(gridData1);
}

/**
* This method initializes combotousles
*
*/
private void createCombotousles() {
GridData gridData2 = new GridData();
gridData2.widthHint = 100;
combotousles = new Combo(composite, SWT.NONE);
combotousles.setItems (new String []{"","1 jour","2 jours","3 jours","4 jours","5 jours","1 semaine", "2 semaines","3 semaines","1 mois","2 mois","3 mois","4 mois", "5 mois","6 mois","7 mois","8 mois", "9 mois","10 mois","11 mois","1 an"});
combotousles.setLayoutData(gridData2);
}}

------=_Part_2151_8167228.1140106564225--
Re: Parse Error and partial solution [message #612132 is a reply to message #118144] Thu, 16 February 2006 17:01 Go to previous message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

Thanks.

I've opened

https://bugs.eclipse.org/bugs/show_bug.cgi?id=128247

to address this problem. But for now what you need to do is change to:

PopupCalendar popupCal;

createShell() {
sShell = ...
popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL,
Locale.FRENCH);
}

You will get some exceptions in the error log, but you can ignore them.
The problem with this new pattern is that we don't realize that
PopupCalendar is an SWT wrapper so we don't call the constructor on the
SWT UI thread. But the rest of your class will show.

Buenzli wrote:
> Thanks for your reply,
>
> I am using Eclipse 3.2M4, VE1.2M1, EMF2.2M3, GEF3,2M3 on Mac OS X 10.4.5 with java 1.5 (it is actually the same problem on a windows xp machine with java 1.4.2 and the same eclipse configuration).
>
> Concerning the code, I installed the package net.cwroethel.swt.popupcalendar and then used the SimpleExample2 to produce the attached source.

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #612133 is a reply to message #118166] Thu, 16 February 2006 21:23 Go to previous message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
Thanks for trying to solve that out.

Ok here is the code:

// *Create the popup calendar first part
PopupCalendar popupCal;
PopupCalendar popupCal2;
// **
/**
* This method initializes sShell
*/
void createSShell() {
sShell = new Shell(SWT.SHELL_TRIM | SWT.APPLICATION_MODAL);
sShell.setText("DEMANDES");
sShell.setLayout(new FillLayout()); // Generated
sShell.setLocation(new Point(75, 100));
createScrolledComposite();
sShell.setSize(new Point(1013, 640));
// * Create the popup calendar second part
popupCal = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
popupCal2 = new PopupCalendar(sShell , PopupCalendar.SHOWALL, Locale.FRENCH);
//**
}

When I try to launch via "java beans" I receive this message in the console:
IWAV0056I Java Bean ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes started with the createSShell method
IWAV0052E Invocation Target Exception creating ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce ssorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe thodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.SWTLaunch er.runShell(SWTLauncher.java:467)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.SWTLaunch er.launch(SWTLauncher.java:181)
at org.eclipse.ve.internal.java.vce.launcher.remotevm.JavaBeans Launcher.main(JavaBeansLauncher.java:70)
Caused by: java.lang.NullPointerException
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createGrouplaboratoire(Medclipse_Consultatio n_Consultation_PopUp_Demandes.java:314)
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createComposite(Medclipse_Consultation_Consu ltation_PopUp_Demandes.java:223)
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createScrolledComposite(Medclipse_Consultati on_Consultation_PopUp_Demandes.java:186)
at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createSShell(Medclipse_Consultation_Consulta tion_PopUp_Demandes.java:172)
... 7 more

MMmmfff what does it mean ? Am I doing something wrong ?
Re: Parse Error and partial solution [message #612134 is a reply to message #118177] Thu, 16 February 2006 22:43 Go to previous message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

The error is happening in your code:

> Caused by: java.lang.NullPointerException
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createGrouplaboratoire(Medclipse_Consultatio n_Consultation_PopUp_Demandes.java:314)
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createComposite(Medclipse_Consultation_Consu ltation_PopUp_Demandes.java:223)
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createScrolledComposite(Medclipse_Consultati on_Consultation_PopUp_Demandes.java:186)
> at ch.medclipse.application.Medclipse_Consultation_Consultation _PopUp_Demandes.createSShell(Medclipse_Consultation_Consulta tion_PopUp_Demandes.java:172)
> ... 7 more
>
> MMmmfff what does it mean ? Am I doing something wrong ?

You need to see why you would get an NPE at line 314 of the class
Medclipse_Consultation_Consultation_PopUp_Demandes.

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #612136 is a reply to message #118187] Fri, 17 February 2006 06:06 Go to previous message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
------=_Part_2302_13448963.1140156433895
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

The error comes from here:
// **// finally add the selection listener for pop-up calendar
popupCal.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (popupCal.getDate() != null) {
textdatelabo.setText(new SimpleDateFormat("EEE dd/MM/yy").format(
popupCal.getDate().getTime()));
}
}
});

I attached the full code.
------=_Part_2302_13448963.1140156433895
Content-Type: application/octet-stream;
name=Medclipse_Consultation_Consultation_PopUp_Demandes.java
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename=Medclipse_Consultation_Consultation_PopUp_Demandes. java

cGFja2FnZSBjaC5tZWRjbGlwc2UuYXBwbGljYXRpb247DQoNCmltcG9ydCBq YXZhLnRleHQuU2lt
cGxlRGF0ZUZvcm1hdDsNCmltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOw0KDQpp bXBvcnQgbmV0LmN3
cm9ldGhlbC5zd3QucG9wdXBjYWxlbmRhci5Qb3B1cENhbGVuZGFyOw0KDQpp bXBvcnQgb3JnLmVj
bGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KaW1wb3J0IG9yZy5lY2xp cHNlLnN3dC5ldmVu
dHMuU2VsZWN0aW9uQWRhcHRlcjsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qu ZXZlbnRzLlNlbGVj
dGlvbkV2ZW50Ow0KaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Q b2ludDsNCmltcG9y
dCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsNCmltcG9ydCBvcmcu ZWNsaXBzZS5zd3Qu
Y3VzdG9tLlNjcm9sbGVkQ29tcG9zaXRlOw0KaW1wb3J0IG9yZy5lY2xpcHNl LnN3dC5TV1Q7DQpp
bXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5GaWxsTGF5b3V0Ow0KaW1w b3J0IG9yZy5lY2xp
cHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCmltcG9ydCBvcmcuZWNsaXBz ZS5zd3Qud2lkZ2V0
cy5Hcm91cDsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRE YXRhOw0KaW1wb3J0
IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7DQppbXBvcnQgb3Jn LmVjbGlwc2Uuc3d0
LndpZGdldHMuRGlzcGxheTsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lk Z2V0cy5MYWJlbDsN
CmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247DQppbXBv cnQgb3JnLmVjbGlw
c2Uuc3d0LndpZGdldHMuQ29tYm87DQppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0 LndpZGdldHMuVGV4
dDsNCg0KcHVibGljIGNsYXNzIE1lZGNsaXBzZV9Db25zdWx0YXRpb25fQ29u c3VsdGF0aW9uX1Bv
cFVwX0RlbWFuZGVzIHsNCg0KCVNoZWxsIHNTaGVsbCA9IG51bGw7ICAvLyAg QGp2ZTpkZWNsLWlu
ZGV4PTA6dmlzdWFsLWNvbnN0cmFpbnQ9IjE5LDkiDQoJcHJpdmF0ZSBTY3Jv bGxlZENvbXBvc2l0
ZSBzY3JvbGxlZENvbXBvc2l0ZSA9IG51bGw7DQoJcHJpdmF0ZSBDb21wb3Np dGUgY29tcG9zaXRl
ID0gbnVsbDsNCglwcml2YXRlIEdyb3VwIGdyb3VwbGFib3JhdG9pcmUgPSBu dWxsOw0KCXByaXZh
dGUgTGFiZWwgbGFiZWx0eXBlID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxh YmVsZGV0YWlscyA9
IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJlbGRhdGVkZXNpcmVlID0gbnVs bDsNCglwcml2YXRl
IExhYmVsIGZpbGxlcjkgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgZmlsbGVy MTAgPSBudWxsOw0K
CXByaXZhdGUgTGFiZWwgbGFiZWxsaWV1ID0gbnVsbDsNCglwcml2YXRlIExh YmVsIGZpbGxlcjUg
PSBudWxsOw0KCXByaXZhdGUgTGFiZWwgZmlsbGVyNyA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBs
YWJlbHJlbWFycXVlMSA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gY2hlY2tC b3hsYWJvcmF0b2ly
ZSA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RhdGVsYWJvID0gbnVs bDsNCglwcml2YXRl
IExhYmVsIGxhYmVsb3UgPSBudWxsOw0KCXByaXZhdGUgVGV4dCB0ZXh0ZGF0 ZWxhYm8gPSBudWxs
Ow0KCXByaXZhdGUgTGFiZWwgZmlsbGVyMyA9IG51bGw7DQoJcHJpdmF0ZSBM YWJlbCBmaWxsZXI0
ID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGZpbGxlcjYgPSBudWxsOw0KCXBy aXZhdGUgVGV4dCB0
ZXh0cmVtYXJxdWVsYWJvID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVj a0JveHJhZGlvID0g
bnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvZGF0ZXJhZGlvID0gbnVsbDsN Cglwcml2YXRlIExh
YmVsIGxhYmVsb3UxID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dGRhdGVy YWRpbyA9IG51bGw7
DQoJcHJpdmF0ZSBDb21ibyBjb21ib2xpZXVyYWRpbyA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBs
YWJlbG91MiA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1cmFkaW8g PSBudWxsOw0KCXBy
aXZhdGUgVGV4dCB0ZXh0cmVtYXJxdWVyYWRpbyA9IG51bGw7DQoJcHJpdmF0 ZSBCdXR0b24gY2hl
Y2tCb3hlY2cgPSBudWxsOw0KCXByaXZhdGUgQ29tYm8gY29tYm9kZXRhaWxl Y2cgPSBudWxsOw0K
CXByaXZhdGUgQ29tYm8gY29tYm9kYXRlZWNnID0gbnVsbDsNCglwcml2YXRl IExhYmVsIGxhYmVs
b3UzID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dGRhdGVlY2cgPSBudWxs Ow0KCXByaXZhdGUg
TGFiZWwgZmlsbGVyID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGZpbGxlcjIg PSBudWxsOw0KCXBy
aXZhdGUgTGFiZWwgZmlsbGVyOCA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRl eHRyZW1hcnF1ZWVj
ZyA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gY2hlY2tCb3h0ZXN0ZGVmZm9y dCA9IG51bGw7DQoJ
cHJpdmF0ZSBDb21ibyBjb21ib2RldGFpbGVyZ29tZXRyaWUgPSBudWxsOw0K CXByaXZhdGUgQ29t
Ym8gY29tYm9kYXRlZXJnb21ldHJpZSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJl bCBsYWJlbG91NCA9
IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRkYXRlZXJnb21ldHJpZSA9IG51 bGw7DQoJcHJpdmF0
ZSBDb21ibyBjb21ib2xpZXVlcmdvbWV0cmllID0gbnVsbDsNCglwcml2YXRl IExhYmVsIGxhYmVs
b3UyMSA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1ZXJnb21ldHJp ZSA9IG51bGw7DQoJ
cHJpdmF0ZSBUZXh0IHRleHRyZW1hcnF1ZWVyZ28gPSBudWxsOw0KCXByaXZh dGUgR3JvdXAgZ3Jv
dXBjb25zdWx0YXRpb25zID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVs dHlwZTEgPSBudWxs
Ow0KCXByaXZhdGUgTGFiZWwgbGFiZWxkZXRhaWxzMSA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBs
YWJlbGRhdGVkZXNpcmVlMSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBmaWxs ZXIxNCA9IG51bGw7
DQoJcHJpdmF0ZSBMYWJlbCBmaWxsZXIxID0gbnVsbDsNCglwcml2YXRlIExh YmVsIGxhYmVsbGll
dTEgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgZmlsbGVyMTIgPSBudWxsOw0K CXByaXZhdGUgTGFi
ZWwgZmlsbGVyMTMgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgbGFiZWxyZW1h cnF1ZTIgPSBudWxs
Ow0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94Y29uc3VsdGF0aW9uc3BlYyA9 IG51bGw7DQoJcHJp
dmF0ZSBDb21ibyBjb21ib2RldGFpbGNvbnN1bHRlc3BlY2lhbGlzZWUgPSBu dWxsOw0KCXByaXZh
dGUgQ29tYm8gY29tYm9kYXRlY29uc3VsdGVzcGVjID0gbnVsbDsNCglwcml2 YXRlIExhYmVsIGxh
YmVsb3U1ID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dGRhdGVjb25zdWx0 YXRpb25zcGVjID0g
bnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvbGlldWNvbnN1bHRhdGlvbnNw ZWMgPSBudWxsOw0K
CXByaXZhdGUgTGFiZWwgbGFiZWxvdTIyID0gbnVsbDsNCglwcml2YXRlIFRl eHQgdGV4dGxpZXVj
b25zdWx0YXRpb25zcGVjID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dHJl bWFycXVlY29uc3Vs
dGVzcGVjID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGNvbnN1 bHRldGVsc3BlYyA9
IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RldGFpbGNvbnN1bHRldGVs c3BlYyA9IG51bGw7
DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RhdGVjb25zdWx0ZXRlbHNwZWMgPSBu dWxsOw0KCXByaXZh
dGUgTGFiZWwgbGFiZWxvdTUxID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4 dGRhdGVjb25zdWx0
YXRldGVsc3BlYyA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2xpZXVj b25zdWx0ZXRlbHNw
ZWMgPSBudWxsOw0KCXByaXZhdGUgTGFiZWwgbGFiZWxvdTIyMSA9IG51bGw7 DQoJcHJpdmF0ZSBU
ZXh0IHRleHRsaWV1Y29uc3VsdGV0ZWxzcGVjID0gbnVsbDsNCglwcml2YXRl IFRleHQgdGV4dHJl
bWFycXVlY29uc3VsdGV0ZWxzcGVjID0gbnVsbDsNCglwcml2YXRlIEJ1dHRv biBjaGVja0JveGhv
c3BpdGFsaXNhdGlvbiA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2Rl dGFpbGhvc3BpdGFs
aXNhdGlvbiA9IG51bGw7DQoJcHJpdmF0ZSBDb21ibyBjb21ib2RhdGVob3Nw aXRhbGlzYXRpb24g
PSBudWxsOw0KCXByaXZhdGUgTGFiZWwgbGFiZWxvdTUxMSA9IG51bGw7DQoJ cHJpdmF0ZSBUZXh0
IHRleHRkYXRlaG9zcGl0YWxpc2F0aW9uID0gbnVsbDsNCglwcml2YXRlIENv bWJvIGNvbWJvbGll
dWhvc3BpdGFsaXNhdGlvbiA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJl bG91MjIxMSA9IG51
bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1aG9zcGl0YWxpc2F0aW9uID0g bnVsbDsNCglwcml2
YXRlIFRleHQgdGV4dHJlbWFycXVlaG9zcGl0ID0gbnVsbDsNCglwcml2YXRl IEdyb3VwIGdyb3Vw
ZGl2ZXJzID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVsdHlwZTExID0g bnVsbDsNCglwcml2
YXRlIExhYmVsIGxhYmVsZGV0YWlsczExID0gbnVsbDsNCglwcml2YXRlIExh YmVsIGxhYmVsZGF0
ZWRlc2lyZWUxMSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBmaWxsZXIxOCA9 IG51bGw7DQoJcHJp
dmF0ZSBMYWJlbCBmaWxsZXIxMSA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBs YWJlbGxpZXUxMSA9
IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBmaWxsZXIxNiA9IG51bGw7DQoJcHJp dmF0ZSBMYWJlbCBm
aWxsZXIxNyA9IG51bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJlbHJlbWFycXVl MyA9IG51bGw7DQoJ
cHJpdmF0ZSBCdXR0b24gY2hlY2tCb3h2YWNjaW4gPSBudWxsOw0KCXByaXZh dGUgQ29tYm8gY29t
Ym9kZXRhaWx2YWNjaW4gPSBudWxsOw0KCXByaXZhdGUgQ29tYm8gY29tYm9k YXRldmFjY2luID0g
bnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVsb3U1MiA9IG51bGw7DQoJcHJp dmF0ZSBUZXh0IHRl
eHRkYXRldmFjY2luID0gbnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvbGll dXZhY2NpbiA9IG51
bGw7DQoJcHJpdmF0ZSBMYWJlbCBsYWJlbG91MjIyID0gbnVsbDsNCglwcml2 YXRlIFRleHQgdGV4
dGxpZXV2YWNjaW4gPSBudWxsOw0KCXByaXZhdGUgVGV4dCB0ZXh0cmVtYXJx dWV2YWNjaW4gPSBu
dWxsOw0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94cHJvY2hyZHYgPSBudWxs Ow0KCXByaXZhdGUg
TGFiZWwgZmlsbGVyMTUxID0gbnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJv ZGF0ZXByb2NocmR2
ID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGxhYmVsb3U1MjEgPSBudWxsOw0K CXByaXZhdGUgVGV4
dCB0ZXh0ZGF0ZXByb2NocmR2ID0gbnVsbDsNCglwcml2YXRlIExhYmVsIGZp bGxlcjE1ID0gbnVs
bDsNCglwcml2YXRlIExhYmVsIGZpbGxlcjE5ID0gbnVsbDsNCglwcml2YXRl IExhYmVsIGZpbGxl
cjIwID0gbnVsbDsNCglwcml2YXRlIFRleHQgdGV4dHJlbWFycXVlcHJvY2hy ZHYgPSBudWxsOw0K
CXByaXZhdGUgQ29tcG9zaXRlIGNvbXBvc2l0ZTEgPSBudWxsOw0KCXByaXZh dGUgQnV0dG9uIGJ1
dHRvbmVudm95ZXJkZW1hbmRlID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBi dXR0b25jcmVlcmFs
ZXJ0ZSA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9ub3V2cmlybGFi byA9IG51bGw7DQoJ
cHJpdmF0ZSBCdXR0b24gYnV0dG9ub3V2cmlycmFkaW8gPSBudWxsOw0KCXBy aXZhdGUgVGV4dCB0
ZXh0bGFibyA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRyYWRpbyA9IG51 bGw7DQoJcHJpdmF0
ZSBCdXR0b24gY2hlY2tCb3hhdXRyZXMgPSBudWxsOw0KCXByaXZhdGUgVGV4 dCB0ZXh0YXV0cmVz
ID0gbnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvZGF0ZWF1dHJlcyA9IG51 bGw7DQoJcHJpdmF0
ZSBMYWJlbCBsYWJlbG91NiA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRk YXRlYXV0cmVzID0g
bnVsbDsNCglwcml2YXRlIENvbWJvIGNvbWJvbGlldWF1dHJlcyA9IG51bGw7 DQoJcHJpdmF0ZSBM
YWJlbCBsYWJlbG91NyA9IG51bGw7DQoJcHJpdmF0ZSBUZXh0IHRleHRsaWV1 YXV0cmVzID0gbnVs
bDsNCglwcml2YXRlIFRleHQgdGV4dHJlbWFycXVlYXV0cmVzID0gbnVsbDsN Ci8vCSogUG9wLVVw
IENhbGVuZGFyDQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9uZGF0ZXBvcCA9IG51 bGw7DQovLyoqDQoJ
DQovLwkqQ3JlYXRlIHRoZSBwb3B1cCBjYWxlbmRhciBmaXJzdCBwYXJ0DQoJ UG9wdXBDYWxlbmRh
ciBwb3B1cENhbDsNCglQb3B1cENhbGVuZGFyIHBvcHVwQ2FsMjsNCi8vICoq DQoJLyoqDQoJICog
VGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgc1NoZWxsDQoJICovDQoJdm9pZCBj cmVhdGVTU2hlbGwo
KSB7DQoJCXNTaGVsbCA9IG5ldyBTaGVsbChTV1QuU0hFTExfVFJJTSB8IFNX VC5BUFBMSUNBVElP
Tl9NT0RBTCk7DQoJCXNTaGVsbC5zZXRUZXh0KCJERU1BTkRFUyIpOw0KCQlz U2hlbGwuc2V0TGF5
b3V0KG5ldyBGaWxsTGF5b3V0KCkpOyAgLy8gR2VuZXJhdGVkDQoJCXNTaGVs bC5zZXRMb2NhdGlv
bihuZXcgUG9pbnQoNzUsIDEwMCkpOw0KCQljcmVhdGVTY3JvbGxlZENvbXBv c2l0ZSgpOw0KCQlz
U2hlbGwuc2V0U2l6ZShuZXcgUG9pbnQoMTAxMywgNjQwKSk7DQovLyAqIENy ZWF0ZSB0aGUgcG9w
dXAgY2FsZW5kYXIgc2Vjb25kIHBhcnQNCgkJcG9wdXBDYWwgPSBuZXcgUG9w dXBDYWxlbmRhcihz
U2hlbGwgLCBQb3B1cENhbGVuZGFyLlNIT1dBTEwsIExvY2FsZS5GUkVOQ0gp Ow0KCQlwb3B1cENh
bDIgPSBuZXcgUG9wdXBDYWxlbmRhcihzU2hlbGwgLCBQb3B1cENhbGVuZGFy LlNIT1dBTEwsIExv
Y2FsZS5GUkVOQ0gpOw0KLy8qKg0KCX0NCgkvKioNCgkgKiBUaGlzIG1ldGhv ZCBpbml0aWFsaXpl
cyBzY3JvbGxlZENvbXBvc2l0ZQkNCgkgKg0KCSAqLw0KCXByaXZhdGUgdm9p ZCBjcmVhdGVTY3Jv
bGxlZENvbXBvc2l0ZSgpIHsNCgkJc2Nyb2xsZWRDb21wb3NpdGUgPSBuZXcg U2Nyb2xsZWRDb21w
b3NpdGUoc1NoZWxsLCBTV1QuTk9ORSk7DQoJCXNjcm9sbGVkQ29tcG9zaXRl LnNldEV4cGFuZEhv
cml6b250YWwodHJ1ZSk7ICAvLyBHZW5lcmF0ZWQNCgkJY3JlYXRlQ29tcG9z aXRlKCk7DQoJCXNj
cm9sbGVkQ29tcG9zaXRlLnNldEV4cGFuZFZlcnRpY2FsKHRydWUpOyAgLy8g R2VuZXJhdGVkDQoJ
CXNjcm9sbGVkQ29tcG9zaXRlLnNldENvbnRlbnQoY29tcG9zaXRlKTsgIC8v IEdlbmVyYXRlZA0K
CX0NCgkNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGRhdGVsYWJvID0gbnVs bDsNCglwcml2YXRl
IEJ1dHRvbiBjaGVja0JveGRhdGVyYWRpbyA9IG51bGw7DQoJcHJpdmF0ZSBC dXR0b24gY2hlY2tC
b3hkYXRlZWNnID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGRh dGV0ZXN0ZWZmb3J0
ID0gbnVsbDsNCglwcml2YXRlIEJ1dHRvbiBjaGVja0JveGRhdGVjb25zdWx0 ZXNwZWMgPSBudWxs
Ow0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94ZGF0ZXRlbHNwZWMgPSBudWxs Ow0KCXByaXZhdGUg
QnV0dG9uIGNoZWNrQm94ZGF0ZWhvc3AgPSBudWxsOw0KCXByaXZhdGUgQnV0 dG9uIGNoZWNrQm94
ZGF0ZXZhY2NpbiA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gY2hlY2tCb3hk YXRlcHJvY2hhaW5y
ZHYgPSBudWxsOw0KCXByaXZhdGUgQnV0dG9uIGNoZWNrQm94ZGF0ZWF1dHJl cyA9IG51bGw7DQoJ
cHJpdmF0ZSBCdXR0b24gYnV0dG9uZGF0ZWxhYm8gPSBudWxsOw0KCXByaXZh dGUgQnV0dG9uIGJ1
dHRvbmRhdGVyYWRpbyA9IG51bGw7DQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9u ZGF0ZWVjZyA9IG51
bGw7DQoJcHJpdmF0ZSBCdXR0b24gYnV0dG9uZGF0ZXRlc3RlZmZvcnQgPSBu dWxsOw0KCXByaXZh
dGUgQnV0dG9uIGJ1dHRvbmRhdGVjb25zdWx0c3BlYyA9IG51bGw7DQoJcHJp dmF0ZSBCdXR0b24g
YnV0dG9uZGF0ZXRlbHNwZWMgPSBudWxsOw0KCXByaXZhdGUgQnV0dG9uIGJ1 dHRvbmRhdGVob3Nw
aXQgPSBudWxsOw0KCXByaXZhdGUgQnV0dG9uIGJ1dHRvbmRhdGV2YWNjaW4g PSBudWxsOw0KCXBy
aXZhdGUgQnV0dG9uIGJ1dHRvbmRhdGVwcm9jaGFpbnJkdiA9IG51bGw7DQoJ cHJpdmF0ZSBCdXR0
b24gYnV0dG9uZGF0ZWF1dHJlcyA9IG51bGw7DQoNCiAgICANCgkNCgkvKioN CgkgKiBUaGlzIG1l
dGhvZCBpbml0aWFsaXplcyBjb21wb3NpdGUJDQoJICoNCgkgKi8NCglwcml2 YXRlIHZvaWQgY3Jl
YXRlQ29tcG9zaXRlKCkgew0KCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQgPSBu ZXcgR3JpZExheW91
dCgpOw0KCQlncmlkTGF5b3V0Lm51bUNvbHVtbnMgPSAxOyAgLy8gR2VuZXJh dGVkDQoJCWNvbXBv
c2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsZWRDb21wb3NpdGUsIFNXVC5O T05FKTsNCgkJY29t
cG9zaXRlLnNldExheW91dChncmlkTGF5b3V0KTsgIC8vIEdlbmVyYXRlZA0K CQljcmVhdGVHcm91
cGxhYm9yYXRvaXJlKCk7DQoJCWNyZWF0ZUdyb3VwY29uc3VsdGF0aW9ucygp Ow0KCQljcmVhdGVH
cm91cGRpdmVycygpOw0KCQljcmVhdGVDb21wb3NpdGUxKCk7DQoJfQ0KDQoJ LyoqDQoJICogVGhp
cyBtZXRob2QgaW5pdGlhbGl6ZXMgZ3JvdXBsYWJvcmF0b2lyZQkNCgkgKg0K CSAqLw0KCXByaXZh
dGUgdm9pZCBjcmVhdGVHcm91cGxhYm9yYXRvaXJlKCkgew0KCQlHcmlkRGF0 YSBncmlkRGF0YTYg
PSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGE2LndpZHRoSGludCA9IDEy MDsNCgkJR3JpZERh
dGEgZ3JpZERhdGEgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGEud2lk dGhIaW50ID0gMTIw
Ow0KCQlHcmlkRGF0YSBncmlkRGF0YTM1ID0gbmV3IEdyaWREYXRhKCk7DQoJ CWdyaWREYXRhMzUu
d2lkdGhIaW50ID0gMTUwOyAgLy8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdy aWREYXRhOCA9IG5l
dyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTgud2lkdGhIaW50ID0gMTMwOyAg Ly8gR2VuZXJhdGVk
DQoJCUdyaWREYXRhIGdyaWREYXRhMTAgPSBuZXcgR3JpZERhdGEoKTsNCgkJ Z3JpZERhdGExMC53
aWR0aEhpbnQgPSA1MDsgIC8vIEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlk RGF0YTM0ID0gbmV3
IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMzQud2lkdGhIaW50ID0gMTUwOyAg Ly8gR2VuZXJhdGVk
DQoJCUdyaWREYXRhIGdyaWREYXRhNyA9IG5ldyBHcmlkRGF0YSgpOw0KCQln cmlkRGF0YTcud2lk
dGhIaW50ID0gNTA7ICAvLyBHZW5lcmF0ZWQNCgkJR3JpZERhdGEgZ3JpZERh dGEzMyA9IG5ldyBH
cmlkRGF0YSgpOw0KCQlncmlkRGF0YTMzLndpZHRoSGludCA9IDE1MDsgIC8v IEdlbmVyYXRlZA0K
CQlHcmlkRGF0YSBncmlkRGF0YTIgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3Jp ZERhdGEyLndpZHRo
SGludCA9IDEzMDsgIC8vIEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlkRGF0 YTQgPSBuZXcgR3Jp
ZERhdGEoKTsNCgkJZ3JpZERhdGE0LndpZHRoSGludCA9IDcwOyAgLy8gR2Vu ZXJhdGVkDQoJCUdy
aWREYXRhIGdyaWREYXRhMzIgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERh dGEzMi53aWR0aEhp
bnQgPSAxNTA7ICAvLyBHZW5lcmF0ZWQNCgkJR3JpZERhdGEgZ3JpZERhdGEx ID0gbmV3IEdyaWRE
YXRhKCk7DQoJCWdyaWREYXRhMS53aWR0aEhpbnQgPSA3MDsgIC8vIEdlbmVy YXRlZA0KCQlHcmlk
TGF5b3V0IGdyaWRMYXlvdXQxID0gbmV3IEdyaWRMYXlvdXQoKTsNCgkJZ3Jp ZExheW91dDEubnVt
Q29sdW1ucyA9IDEyOyAgLy8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWRE YXRhMTYgPSBuZXcg
R3JpZERhdGEoKTsNCgkJZ3JpZERhdGExNi5oZWlnaHRIaW50ID0gMTcwOyAg Ly8gR2VuZXJhdGVk
DQoJCWdyaWREYXRhMTYud2lkdGhIaW50ID0gOTkwOyAgLy8gR2VuZXJhdGVk DQoJCWdyb3VwbGFi
b3JhdG9pcmUgPSBuZXcgR3JvdXAoY29tcG9zaXRlLCBTV1QuTk9ORSk7DQoJ CWdyb3VwbGFib3Jh
dG9pcmUuc2V0VGV4dCgiRVhBTUVOUyIpOyAgLy8gR2VuZXJhdGVkDQoJCWdy b3VwbGFib3JhdG9p
cmUuc2V0TGF5b3V0RGF0YShncmlkRGF0YTE2KTsgIC8vIEdlbmVyYXRlZA0K CQlncm91cGxhYm9y
YXRvaXJlLnNldExheW91dChncmlkTGF5b3V0MSk7ICAvLyBHZW5lcmF0ZWQN CgkJbGFiZWx0eXBl
ID0gbmV3IExhYmVsKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJ bGFiZWx0eXBlLnNl
dFRleHQoIlR5cGUiKTsgIC8vIEdlbmVyYXRlZA0KCQlMYWJlbCBmaWxsZXIy OCA9IG5ldyBMYWJl
bChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsZGV0YWls cyA9IG5ldyBMYWJl
bChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsZGV0YWls cy5zZXRUZXh0KCJE
w6l0YWlscyIpOyAgLy8gR2VuZXJhdGVkDQoJCWxhYmVsZGF0ZWRlc2lyZWUg PSBuZXcgTGFiZWwo
Z3JvdXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlsYWJlbGRhdGVkZXNp cmVlLnNldFRleHQo
IkRhdGUgZMOpc2lyw6llIik7ICAvLyBHZW5lcmF0ZWQNCgkJZmlsbGVyOSA9 IG5ldyBMYWJlbChn
cm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCUxhYmVsIGZpbGxlcjMw ID0gbmV3IExhYmVs
KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJZmlsbGVyMTAgPSBu ZXcgTGFiZWwoZ3Jv
dXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlMYWJlbCBmaWxsZXIzMyA9 IG5ldyBMYWJlbChn
cm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsbGlldSA9IG5l dyBMYWJlbChncm91
cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVsbGlldS5zZXRUZXh0 KCJMaWV1Iik7ICAv
LyBHZW5lcmF0ZWQNCgkJZmlsbGVyNSA9IG5ldyBMYWJlbChncm91cGxhYm9y YXRvaXJlLCBTV1Qu
Tk9ORSk7DQoJCWZpbGxlcjcgPSBuZXcgTGFiZWwoZ3JvdXBsYWJvcmF0b2ly ZSwgU1dULk5PTkUp
Ow0KCQlsYWJlbHJlbWFycXVlMSA9IG5ldyBMYWJlbChncm91cGxhYm9yYXRv aXJlLCBTV1QuTk9O
RSk7DQoJCWxhYmVscmVtYXJxdWUxLnNldFRleHQoIlJlbWFycXVlIik7ICAv LyBHZW5lcmF0ZWQN
CgkJY2hlY2tCb3hsYWJvcmF0b2lyZSA9IG5ldyBCdXR0b24oZ3JvdXBsYWJv cmF0b2lyZSwgU1dU
LkNIRUNLKTsNCgkJY2hlY2tCb3hsYWJvcmF0b2lyZS5zZXRUZXh0KCJMYWJv cmF0b2lyZSIpOyAg
Ly8gR2VuZXJhdGVkDQoJCWJ1dHRvbm91dnJpcmxhYm8gPSBuZXcgQnV0dG9u KGdyb3VwbGFib3Jh
dG9pcmUsIFNXVC5OT05FKTsNCgkJYnV0dG9ub3V2cmlybGFiby5hZGRTZWxl Y3Rpb25MaXN0ZW5l
cihuZXcgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVy KCkgew0KCQkJCQlw
dWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChvcmcuZWNsaXBzZS5zd3QuZXZl bnRzLlNlbGVjdGlv
bkV2ZW50IGUpIHsNCgkJCQkJCU1lZGNsaXBzZV9Db25zdWx0YXRpb25fQ29u c3VsdGF0aW9uX1Bv
cFVwX0RlbWFuZGVzX0xhYm8gdGhpc0NsYXNzID0gbmV3IE1lZGNsaXBzZV9D b25zdWx0YXRpb25f
Q29uc3VsdGF0aW9uX1BvcFVwX0RlbWFuZGVzX0xhYm8gKCk7DQoJCQkJCQl0 aGlzQ2xhc3MuY3Jl
YXRlU1NoZWxsKCk7DQoJCQkJCQl0aGlzQ2xhc3Muc1NoZWxsLm9wZW4oKTsg Ly8gVE9ETyBBdXRv
LWdlbmVyYXRlZCBFdmVudCBzdHViIHdpZGdldFNlbGVjdGVkKCkNCgkJCQkJ fQ0KCQkJCX0pOw0K
CQl0ZXh0bGFibyA9IG5ldyBUZXh0KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5C T1JERVIpOw0KCQl0
ZXh0bGFiby5zZXRMYXlvdXREYXRhKGdyaWREYXRhNik7DQoJCWNyZWF0ZUNv bWJvZGF0ZWxhYm8o
KTsNCgkJbGFiZWxvdSA9IG5ldyBMYWJlbChncm91cGxhYm9yYXRvaXJlLCBT V1QuTk9ORSk7DQoJ
CWxhYmVsb3Uuc2V0VGV4dCgib3UiKTsgIC8vIEdlbmVyYXRlZA0KCQljaGVj a0JveGRhdGVsYWJv
ID0gbmV3IEJ1dHRvbihncm91cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0K Ly8JCSogUG9wLVVw
IENhbGVuZGFyDQoJCS8vY3JlYXRlIHRoZSBDYWxlbmRhciBUZXh0IHdpZGdl dC4NCgkJdGV4dGRh
dGVsYWJvID0gbmV3IFRleHQoZ3JvdXBsYWJvcmF0b2lyZSwgU1dULkJPUkRF UiB8IFNXVC5SRUFE
X09OTFkpOw0KCQl0ZXh0ZGF0ZWxhYm8uc2V0TGF5b3V0RGF0YShncmlkRGF0 YTEpOyAgLy8gR2Vu
ZXJhdGVkDQoJCXRleHRkYXRlbGFiby5zZXRCYWNrZ3JvdW5kKERpc3BsYXku Z2V0Q3VycmVudCgp
LmdldFN5c3RlbUNvbG9yKFNXVC5DT0xPUl9XSElURSkpOw0KCQkvLyBDcmVh dGUgdGhlIEJ1dHRv
biBQb3AtVXAgQ2FsZW5kYXINCgkJYnV0dG9uZGF0ZWxhYm8gPSBuZXcgQnV0 dG9uKGdyb3VwbGFi
b3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJYnV0dG9uZGF0ZWxhYm8uYWRkU2Vs ZWN0aW9uTGlzdGVu
ZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRl cigpIHsNCgkJCXB1
YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGV2ZW50 KSB7DQoJCSAgICAg
ICAgQ29udHJvbCBjb21wID0gKENvbnRyb2wpZXZlbnQuZ2V0U291cmNlKCk7 DQoJCSAgICAgICAg
cG9wdXBDYWwub3Blbihjb21wLCBQb3B1cENhbGVuZGFyLlJJR0hUKTsNCgkJ ICAgICAgfQ0KCQl9
KTsNCi8vCQkgIGZpbmFsbHkgYWRkIHRoZSBzZWxlY3Rpb24gbGlzdGVuZXIg Zm9yIHBvcC11cCBj
YWxlbmRhcg0KICAgICAgICBwb3B1cENhbC5hZGRTZWxlY3Rpb25MaXN0ZW5l cihuZXcgU2VsZWN0
aW9uQWRhcHRlcigpIHsNCiAgCSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNl bGVjdGVkKFNlbGVj
dGlvbkV2ZW50IGUpIHsNCiAgCSAgICAgICAgaWYgKHBvcHVwQ2FsLmdldERh dGUoKSAhPSBudWxs
KSB7DQogIAkgICAgICAgICAgdGV4dGRhdGVsYWJvLnNldFRleHQobmV3IFNp bXBsZURhdGVGb3Jt
YXQoIkVFRSBkZC9NTS95eSIpLmZvcm1hdCgNCiAgCSAgICAgICAgICAgICAg cG9wdXBDYWwuZ2V0
RGF0ZSgpLmdldFRpbWUoKSkpOw0KICAJICAgICAgICB9DQogIAkgICAgICB9 DQogIAkgICAgfSk7
DQovLyoqIEVuZCBQb3AtVXAgQ2FsZW5kYXINCgkJZmlsbGVyMyA9IG5ldyBM YWJlbChncm91cGxh
Ym9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWZpbGxlcjQgPSBuZXcgTGFiZWwo Z3JvdXBsYWJvcmF0
b2lyZSwgU1dULk5PTkUpOw0KCQlmaWxsZXI2ID0gbmV3IExhYmVsKGdyb3Vw bGFib3JhdG9pcmUs
IFNXVC5OT05FKTsNCgkJdGV4dHJlbWFycXVlbGFibyA9IG5ldyBUZXh0KGdy b3VwbGFib3JhdG9p
cmUsIFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVsYWJvLnNldExheW91 dERhdGEoZ3JpZERh
dGEzMik7ICAvLyBHZW5lcmF0ZWQNCgkJY2hlY2tCb3hyYWRpbyA9IG5ldyBC dXR0b24oZ3JvdXBs
YWJvcmF0b2lyZSwgU1dULkNIRUNLKTsNCgkJY2hlY2tCb3hyYWRpby5zZXRU ZXh0KCJSYWRpb2dy
YXBoaWUiKTsgIC8vIEdlbmVyYXRlZA0KCQlidXR0b25vdXZyaXJyYWRpbyA9 IG5ldyBCdXR0b24o
Z3JvdXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlidXR0b25vdXZyaXJy YWRpbw0KCQkuYWRk
U2VsZWN0aW9uTGlzdGVuZXIobmV3IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMu U2VsZWN0aW9uQWRh
cHRlcigpIHsNCgkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKG9yZy5l Y2xpcHNlLnN3dC5l
dmVudHMuU2VsZWN0aW9uRXZlbnQgZSkgew0KCQkJCU1lZGNsaXBzZV9Db25z dWx0YXRpb25fQ29u
c3VsdGF0aW9uX1BvcFVwX0RlbWFuZGVzX1JhZGlvIHRoaXNDbGFzcyA9IG5l dyBNZWRjbGlwc2Vf
Q29uc3VsdGF0aW9uX0NvbnN1bHRhdGlvbl9Qb3BVcF9EZW1hbmRlc19SYWRp byAoKTsNCgkJCQl0
aGlzQ2xhc3MuY3JlYXRlU1NoZWxsKCk7DQoJCQkJdGhpc0NsYXNzLnNTaGVs bC5vcGVuKCk7IC8v
IFRPRE8gQXV0by1nZW5lcmF0ZWQgRXZlbnQgc3R1YiB3aWRnZXRTZWxlY3Rl ZCgpDQoJCQl9DQoJ
CX0pOw0KCQl0ZXh0cmFkaW8gPSBuZXcgVGV4dChncm91cGxhYm9yYXRvaXJl LCBTV1QuQk9SREVS
KTsNCgkJdGV4dHJhZGlvLnNldExheW91dERhdGEoZ3JpZERhdGEpOw0KCQlj cmVhdGVDb21ib2Rh
dGVyYWRpbygpOw0KCQlsYWJlbG91MSA9IG5ldyBMYWJlbChncm91cGxhYm9y YXRvaXJlLCBTV1Qu
Tk9ORSk7DQoJCWxhYmVsb3UxLnNldFRleHQoIm91Iik7ICAvLyBHZW5lcmF0 ZWQNCgkJY2hlY2tC
b3hkYXRlcmFkaW8gPSBuZXcgQnV0dG9uKGdyb3VwbGFib3JhdG9pcmUsIFNX VC5DSEVDSyk7DQov
LwkJKiBQb3AtVXAgQ2FsZW5kYXINCgkJLy9jcmVhdGUgdGhlIENhbGVuZGFy IFRleHQgd2lkZ2V0
Lg0KCQl0ZXh0ZGF0ZXJhZGlvID0gbmV3IFRleHQoZ3JvdXBsYWJvcmF0b2ly ZSwgU1dULkJPUkRF
UiB8IFNXVC5SRUFEX09OTFkpOw0KCQl0ZXh0ZGF0ZXJhZGlvLnNldExheW91 dERhdGEoZ3JpZERh
dGE0KTsgIC8vIEdlbmVyYXRlZA0KCQl0ZXh0ZGF0ZXJhZGlvLnNldEJhY2tn cm91bmQoRGlzcGxh
eS5nZXRDdXJyZW50KCkuZ2V0U3lzdGVtQ29sb3IoU1dULkNPTE9SX1dISVRF KSk7DQovLwkJIENy
ZWF0ZSB0aGUgQnV0dG9uIFBvcC1VcCBDYWxlbmRhcg0KCQlidXR0b25kYXRl cmFkaW8gPSBuZXcg
QnV0dG9uKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJYnV0dG9u ZGF0ZXJhZGlvLmFk
ZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5zd3QuZXZlbnRz LlNlbGVjdGlvbkFk
YXB0ZXIoKSB7DQoJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChTZWxl Y3Rpb25FdmVudCBl
dmVudCkgew0KCQkgICAgICAgIENvbnRyb2wgY29tcCA9IChDb250cm9sKWV2 ZW50LmdldFNvdXJj
ZSgpOw0KCQkgICAgICAgIHBvcHVwQ2FsMi5vcGVuKGNvbXAsIFBvcHVwQ2Fs ZW5kYXIuUklHSFQp
Ow0KCQkgICAgICB9DQoJCX0pOw0KLy8JCSAgZmluYWxseSBhZGQgdGhlIHNl bGVjdGlvbiBsaXN0
ZW5lciBmb3IgcG9wLXVwIGNhbGVuZGFyDQogICAgICAgIHBvcHVwQ2FsMi5h ZGRTZWxlY3Rpb25M
aXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsNCiAgCSAgICAgIHB1 YmxpYyB2b2lkIHdp
ZGdldFNlbGVjdGVkKFNlbGVjdGlvbkV2ZW50IGUpIHsNCiAgCSAgICAgICAg aWYgKHBvcHVwQ2Fs
Mi5nZXREYXRlKCkgIT0gbnVsbCkgew0KICAJICAgICAgICAgIHRleHRkYXRl cmFkaW8uc2V0VGV4
dChuZXcgU2ltcGxlRGF0ZUZvcm1hdCgiRUVFIGRkL01NL3l5IikuZm9ybWF0 KA0KICAJICAgICAg
ICAgICAgICBwb3B1cENhbDIuZ2V0RGF0ZSgpLmdldFRpbWUoKSkpOw0KICAJ ICAgICAgICB9DQog
IAkgICAgICB9DQogIAkgICAgfSk7DQovLyoqIEVuZCBQb3AtVXAgQ2FsZW5k YXINCgkJY3JlYXRl
Q29tYm9saWV1cmFkaW8oKTsNCgkJbGFiZWxvdTIgPSBuZXcgTGFiZWwoZ3Jv dXBsYWJvcmF0b2ly
ZSwgU1dULk5PTkUpOw0KCQlsYWJlbG91Mi5zZXRUZXh0KCJvdSIpOyAgLy8g R2VuZXJhdGVkDQoJ
CXRleHRsaWV1cmFkaW8gPSBuZXcgVGV4dChncm91cGxhYm9yYXRvaXJlLCBT V1QuQk9SREVSKTsN
CgkJdGV4dGxpZXVyYWRpby5zZXRUZXh0KCIiKTsgIC8vIEdlbmVyYXRlZA0K CQl0ZXh0bGlldXJh
ZGlvLnNldExheW91dERhdGEoZ3JpZERhdGEyKTsgIC8vIEdlbmVyYXRlZA0K CQl0ZXh0cmVtYXJx
dWVyYWRpbyA9IG5ldyBUZXh0KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5CT1JE RVIpOw0KCQl0ZXh0
cmVtYXJxdWVyYWRpby5zZXRMYXlvdXREYXRhKGdyaWREYXRhMzMpOyAgLy8g R2VuZXJhdGVkDQoJ
CWNoZWNrQm94ZWNnID0gbmV3IEJ1dHRvbihncm91cGxhYm9yYXRvaXJlLCBT V1QuQ0hFQ0spOw0K
CQljaGVja0JveGVjZy5zZXRUZXh0KCJFQ0ciKTsgIC8vIEdlbmVyYXRlZA0K CQlMYWJlbCBmaWxs
ZXIyNSA9IG5ldyBMYWJlbChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7 DQoJCWNyZWF0ZUNv
bWJvZGV0YWlsZWNnKCk7DQoJCWNyZWF0ZUNvbWJvZGF0ZWVjZygpOw0KCQls YWJlbG91MyA9IG5l
dyBMYWJlbChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWxhYmVs b3UzLnNldFRleHQo
Im91Iik7ICAvLyBHZW5lcmF0ZWQNCgkJY2hlY2tCb3hkYXRlZWNnID0gbmV3 IEJ1dHRvbihncm91
cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0KCQl0ZXh0ZGF0ZWVjZyA9IG5l dyBUZXh0KGdyb3Vw
bGFib3JhdG9pcmUsIFNXVC5CT1JERVIpOw0KCQl0ZXh0ZGF0ZWVjZy5zZXRM YXlvdXREYXRhKGdy
aWREYXRhNyk7ICAvLyBHZW5lcmF0ZWQNCgkJYnV0dG9uZGF0ZWVjZyA9IG5l dyBCdXR0b24oZ3Jv
dXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlmaWxsZXIgPSBuZXcgTGFi ZWwoZ3JvdXBsYWJv
cmF0b2lyZSwgU1dULk5PTkUpOw0KCQlmaWxsZXIyID0gbmV3IExhYmVsKGdy b3VwbGFib3JhdG9p
cmUsIFNXVC5OT05FKTsNCgkJZmlsbGVyOCA9IG5ldyBMYWJlbChncm91cGxh Ym9yYXRvaXJlLCBT
V1QuTk9ORSk7DQoJCXRleHRyZW1hcnF1ZWVjZyA9IG5ldyBUZXh0KGdyb3Vw bGFib3JhdG9pcmUs
IFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVlY2cuc2V0TGF5b3V0RGF0 YShncmlkRGF0YTM0
KTsgIC8vIEdlbmVyYXRlZA0KCQljaGVja0JveHRlc3RkZWZmb3J0ID0gbmV3 IEJ1dHRvbihncm91
cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0KCQljaGVja0JveHRlc3RkZWZm b3J0LnNldFRleHQo
IlRlc3QgZCdFZmZvcnQiKTsgIC8vIEdlbmVyYXRlZA0KCQlMYWJlbCBmaWxs ZXIyNCA9IG5ldyBM
YWJlbChncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWNyZWF0ZUNv bWJvZGV0YWlsZXJn
b21ldHJpZSgpOw0KCQljcmVhdGVDb21ib2RhdGVlcmdvbWV0cmllKCk7DQoJ CWxhYmVsb3U0ID0g
bmV3IExhYmVsKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJbGFi ZWxvdTQuc2V0VGV4
dCgib3UiKTsgIC8vIEdlbmVyYXRlZA0KCQljaGVja0JveGRhdGV0ZXN0ZWZm b3J0ID0gbmV3IEJ1
dHRvbihncm91cGxhYm9yYXRvaXJlLCBTV1QuQ0hFQ0spOw0KCQl0ZXh0ZGF0 ZWVyZ29tZXRyaWUg
PSBuZXcgVGV4dChncm91cGxhYm9yYXRvaXJlLCBTV1QuQk9SREVSKTsNCgkJ dGV4dGRhdGVlcmdv
bWV0cmllLnNldExheW91dERhdGEoZ3JpZERhdGExMCk7ICAvLyBHZW5lcmF0 ZWQNCgkJYnV0dG9u
ZGF0ZXRlc3RlZmZvcnQgPSBuZXcgQnV0dG9uKGdyb3VwbGFib3JhdG9pcmUs IFNXVC5OT05FKTsN
CgkJY3JlYXRlQ29tYm9saWV1ZXJnb21ldHJpZSgpOw0KCQlsYWJlbG91MjEg PSBuZXcgTGFiZWwo
Z3JvdXBsYWJvcmF0b2lyZSwgU1dULk5PTkUpOw0KCQlsYWJlbG91MjEuc2V0 VGV4dCgib3UiKTsg
IC8vIEdlbmVyYXRlZA0KCQl0ZXh0bGlldWVyZ29tZXRyaWUgPSBuZXcgVGV4 dChncm91cGxhYm9y
YXRvaXJlLCBTV1QuQk9SREVSKTsNCgkJdGV4dGxpZXVlcmdvbWV0cmllLnNl dFRleHQoIiIpOyAg
Ly8gR2VuZXJhdGVkDQoJCXRleHRsaWV1ZXJnb21ldHJpZS5zZXRMYXlvdXRE YXRhKGdyaWREYXRh
OCk7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4dHJlbWFycXVlZXJnbyA9IG5ldyBU ZXh0KGdyb3VwbGFi
b3JhdG9pcmUsIFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVlcmdvLnNl dExheW91dERhdGEo
Z3JpZERhdGEzNSk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkvKioNCgkgKiBU aGlzIG1ldGhvZCBp
bml0aWFsaXplcyBjb21ib2RhdGVsYWJvCQ0KCSAqDQoJICovDQoJcHJpdmF0 ZSB2b2lkIGNyZWF0
ZUNvbWJvZGF0ZWxhYm8oKSB7DQoJCUdyaWREYXRhIGdyaWREYXRhNDIgPSBu ZXcgR3JpZERhdGEo
KTsNCgkJZ3JpZERhdGE0Mi53aWR0aEhpbnQgPSA4MDsgIC8vIEdlbmVyYXRl ZA0KCQljb21ib2Rh
dGVsYWJvID0gbmV3IENvbWJvKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05F KTsNCgkJY29tYm9k
YXRlbGFiby5zZXRJdGVtcyAobmV3IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdo dWkiLCJFbiB1cmdl
bmNlcyIsICJEw6hzIHF1ZSBwb3NzaWJsZSIsICJEYW5zIDEgam91ciIsIkRh bnMgMiBqb3VycyIs
IkRhbnMgMyBqb3VycyIsIkRhbnMgNCBqb3VycyIsIkRhbnMgNSBqb3VycyIs IkRhbnMgNiBqb3Vy
cyIsIkRhbnMgMSBzZW1haW5lIiwiRGFucyAyIHNlbWFpbmVzIiwiRGFucyAz IHNlbWFpbmVzIiwi
RGFucyAxIG1vaXMiLCJEYW5zIDIgbW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFu cyA0IG1vaXMiLCJE
YW5zIDUgbW9pcyIsIkRhbnMgNiBtb2lzIiwiRGFucyA3IG1vaXMiLCJEYW5z IDggbW9pcyIsIkRh
bnMgOSBtb2lzIiwiRGFucyAxMCBtb2lzIiwiRGFucyAxMSBtb2lzIiwgIkRh bnMgMSBhbiIsICJE
YW5zIDIgYW5zIiwgIkRhbnMgMyBhbnMiLCAiRGFucyA0IGFucyIsICJEYW5z IDUgYW5zIn0pOw0K
CQljb21ib2RhdGVsYWJvLnNldExheW91dERhdGEoZ3JpZERhdGE0Mik7ICAv LyBHZW5lcmF0ZWQN
Cgl9DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21i b2RhdGVyYWRpbwkN
CgkgKg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVyYWRp bygpIHsNCgkJR3Jp
ZERhdGEgZ3JpZERhdGE0MyA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0 YTQzLndpZHRoSGlu
dCA9IDgwOyAgLy8gR2VuZXJhdGVkDQoJCWNvbWJvZGF0ZXJhZGlvID0gbmV3 IENvbWJvKGdyb3Vw
bGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJY29tYm9kYXRlcmFkaW8uc2V0 SXRlbXMgKG5ldyBT
dHJpbmcgW117IiIsIkF1am91cmQnaHVpIiwiRW4gdXJnZW5jZXMiLCAiRMOo cyBxdWUgcG9zc2li
bGUiLCAiRGFucyAxIGpvdXIiLCJEYW5zIDIgam91cnMiLCJEYW5zIDMgam91 cnMiLCJEYW5zIDQg
am91cnMiLCJEYW5zIDUgam91cnMiLCJEYW5zIDYgam91cnMiLCJEYW5zIDEg c2VtYWluZSIsIkRh
bnMgMiBzZW1haW5lcyIsIkRhbnMgMyBzZW1haW5lcyIsIkRhbnMgMSBtb2lz IiwiRGFucyAyIG1v
aXMiLCJEYW5zIDMgbW9pcyIsIkRhbnMgNCBtb2lzIiwiRGFucyA1IG1vaXMi LCJEYW5zIDYgbW9p
cyIsIkRhbnMgNyBtb2lzIiwiRGFucyA4IG1vaXMiLCJEYW5zIDkgbW9pcyIs IkRhbnMgMTAgbW9p
cyIsIkRhbnMgMTEgbW9pcyIsICJEYW5zIDEgYW4iLCAiRGFucyAyIGFucyIs ICJEYW5zIDMgYW5z
IiwgIkRhbnMgNCBhbnMiLCAiRGFucyA1IGFucyJ9KTsNCgkJY29tYm9kYXRl cmFkaW8uc2V0TGF5
b3V0RGF0YShncmlkRGF0YTQzKTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8q Kg0KCSAqIFRoaXMg
bWV0aG9kIGluaXRpYWxpemVzIGNvbWJvbGlldXJhZGlvCQ0KCSAqDQoJICov DQoJcHJpdmF0ZSB2
b2lkIGNyZWF0ZUNvbWJvbGlldXJhZGlvKCkgew0KCQlHcmlkRGF0YSBncmlk RGF0YTMgPSBuZXcg
R3JpZERhdGEoKTsNCgkJZ3JpZERhdGEzLndpZHRoSGludCA9IDEyMDsgIC8v IEdlbmVyYXRlZA0K
CQljb21ib2xpZXVyYWRpbyA9IG5ldyBDb21ibyhncm91cGxhYm9yYXRvaXJl LCBTV1QuTk9ORSk7
DQoJCWNvbWJvbGlldXJhZGlvLnNldFRleHQoIkNob2lzaXIiKTsgIC8vIEdl bmVyYXRlZA0KCQlj
b21ib2xpZXVyYWRpby5zZXRMYXlvdXREYXRhKGdyaWREYXRhMyk7ICAvLyBH ZW5lcmF0ZWQNCgl9
DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2Rl dGFpbGVjZwkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RldGFpbGVjZygp IHsNCgkJR3JpZERh
dGEgZ3JpZERhdGE1ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhNS53 aWR0aEhpbnQgPSAx
MzA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRhaWxlY2cgPSBuZXcgQ29t Ym8oZ3JvdXBsYWJv
cmF0b2lyZSwgU1dULk5PTkUpOw0KCQljb21ib2RldGFpbGVjZy5zZXRUZXh0 KCJDaG9pc2lyIik7
ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRhaWxlY2cuc2V0SXRlbXMgKG5l dyBTdHJpbmcgW117
IiIsIkNvdXJ0IiwiTG9uZyJ9KTsNCgkJY29tYm9kZXRhaWxlY2cuc2V0TGF5 b3V0RGF0YShncmlk
RGF0YTUpOyAgLy8gR2VuZXJhdGVkDQoJfQ0KDQoJLyoqDQoJICogVGhpcyBt ZXRob2QgaW5pdGlh
bGl6ZXMgY29tYm9kYXRlZWNnCQ0KCSAqDQoJICovDQoJcHJpdmF0ZSB2b2lk IGNyZWF0ZUNvbWJv
ZGF0ZWVjZygpIHsNCgkJR3JpZERhdGEgZ3JpZERhdGE0NiA9IG5ldyBHcmlk RGF0YSgpOw0KCQln
cmlkRGF0YTQ2LndpZHRoSGludCA9IDgwOyAgLy8gR2VuZXJhdGVkDQoJCWNv bWJvZGF0ZWVjZyA9
IG5ldyBDb21ibyhncm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWNv bWJvZGF0ZWVjZy5z
ZXRJdGVtcyAobmV3IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1 cmdlbmNlcyIsICJE
w6hzIHF1ZSBwb3NzaWJsZSIsICJEYW5zIDEgam91ciIsIkRhbnMgMiBqb3Vy cyIsIkRhbnMgMyBq
b3VycyIsIkRhbnMgNCBqb3VycyIsIkRhbnMgNSBqb3VycyIsIkRhbnMgNiBq b3VycyIsIkRhbnMg
MSBzZW1haW5lIiwiRGFucyAyIHNlbWFpbmVzIiwiRGFucyAzIHNlbWFpbmVz IiwiRGFucyAxIG1v
aXMiLCJEYW5zIDIgbW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFucyA0IG1vaXMi LCJEYW5zIDUgbW9p
cyIsIkRhbnMgNiBtb2lzIiwiRGFucyA3IG1vaXMiLCJEYW5zIDggbW9pcyIs IkRhbnMgOSBtb2lz
IiwiRGFucyAxMCBtb2lzIiwiRGFucyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIs ICJEYW5zIDIgYW5z
IiwgIkRhbnMgMyBhbnMiLCAiRGFucyA0IGFucyIsICJEYW5zIDUgYW5zIn0p Ow0KCQljb21ib2Rh
dGVlY2cuc2V0TGF5b3V0RGF0YShncmlkRGF0YTQ2KTsgIC8vIEdlbmVyYXRl ZA0KCX0NCg0KCS8q
Kg0KCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGV0YWlsZXJn b21ldHJpZQkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RldGFpbGVyZ29t ZXRyaWUoKSB7DQoJ
CUdyaWREYXRhIGdyaWREYXRhMTEgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3Jp ZERhdGExMS53aWR0
aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRhaWxlcmdv bWV0cmllID0gbmV3
IENvbWJvKGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJY29tYm9k ZXRhaWxlcmdvbWV0
cmllLnNldFRleHQoIkNob2lzaXIiKTsgIC8vIEdlbmVyYXRlZA0KCQljb21i b2RldGFpbGVyZ29t
ZXRyaWUuc2V0SXRlbXMgKG5ldyBTdHJpbmcgW117IiIsIkVyZ29tw6l0cmll IiwiVVMgZGUgc3Ry
ZXNzIiwgIlNjaW50aWdyYXBoaWUgYXUgVGhhbGxpdW0ifSk7DQoJCWNvbWJv ZGV0YWlsZXJnb21l
dHJpZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhMTEpOyAgLy8gR2VuZXJhdGVk DQoJfQ0KDQoJLyoq
DQoJICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgY29tYm9kYXRlZXJnb21l dHJpZQkNCgkgKg0K
CSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVlcmdvbWV0cmll KCkgew0KCQlHcmlk
RGF0YSBncmlkRGF0YTQ3ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRh NDcud2lkdGhIaW50
ID0gODA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kYXRlZXJnb21ldHJpZSA9 IG5ldyBDb21ibyhn
cm91cGxhYm9yYXRvaXJlLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZWVyZ29t ZXRyaWUuc2V0SXRl
bXMgKG5ldyBTdHJpbmcgW117IiIsIkF1am91cmQnaHVpIiwiRW4gdXJnZW5j ZXMiLCAiRMOocyBx
dWUgcG9zc2libGUiLCAiRGFucyAxIGpvdXIiLCJEYW5zIDIgam91cnMiLCJE YW5zIDMgam91cnMi
LCJEYW5zIDQgam91cnMiLCJEYW5zIDUgam91cnMiLCJEYW5zIDYgam91cnMi LCJEYW5zIDEgc2Vt
YWluZSIsIkRhbnMgMiBzZW1haW5lcyIsIkRhbnMgMyBzZW1haW5lcyIsIkRh bnMgMSBtb2lzIiwi
RGFucyAyIG1vaXMiLCJEYW5zIDMgbW9pcyIsIkRhbnMgNCBtb2lzIiwiRGFu cyA1IG1vaXMiLCJE
YW5zIDYgbW9pcyIsIkRhbnMgNyBtb2lzIiwiRGFucyA4IG1vaXMiLCJEYW5z IDkgbW9pcyIsIkRh
bnMgMTAgbW9pcyIsIkRhbnMgMTEgbW9pcyIsICJEYW5zIDEgYW4iLCAiRGFu cyAyIGFucyIsICJE
YW5zIDMgYW5zIiwgIkRhbnMgNCBhbnMiLCAiRGFucyA1IGFucyJ9KTsNCgkJ Y29tYm9kYXRlZXJn
b21ldHJpZS5zZXRMYXlvdXREYXRhKGdyaWREYXRhNDcpOyAgLy8gR2VuZXJh dGVkDQoJfQ0KDQoJ
LyoqDQoJICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgY29tYm9saWV1ZXJn b21ldHJpZQkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2xpZXVlcmdvbWV0 cmllKCkgew0KCQlH
cmlkRGF0YSBncmlkRGF0YTkgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERh dGE5LndpZHRoSGlu
dCA9IDEyMDsgIC8vIEdlbmVyYXRlZA0KCQljb21ib2xpZXVlcmdvbWV0cmll ID0gbmV3IENvbWJv
KGdyb3VwbGFib3JhdG9pcmUsIFNXVC5OT05FKTsNCgkJY29tYm9saWV1ZXJn b21ldHJpZS5zZXRU
ZXh0KCJDaG9pc2lyIik7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9saWV1ZXJn b21ldHJpZS5zZXRM
YXlvdXREYXRhKGdyaWREYXRhOSk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkv KioNCgkgKiBUaGlz
IG1ldGhvZCBpbml0aWFsaXplcyBncm91cGNvbnN1bHRhdGlvbnMJDQoJICoN CgkgKi8NCglwcml2
YXRlIHZvaWQgY3JlYXRlR3JvdXBjb25zdWx0YXRpb25zKCkgew0KCQlHcmlk RGF0YSBncmlkRGF0
YTM4ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMzgud2lkdGhIaW50 ID0gMTAwOyAgLy8g
R2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMjMgPSBuZXcgR3JpZERh dGEoKTsNCgkJZ3Jp
ZERhdGEyMy53aWR0aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJR3Jp ZERhdGEgZ3JpZERh
dGEyMiA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTIyLndpZHRoSGlu dCA9IDUwOyAgLy8g
R2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMzcgPSBuZXcgR3JpZERh dGEoKTsNCgkJZ3Jp
ZERhdGEzNy53aWR0aEhpbnQgPSAxMDA7ICAvLyBHZW5lcmF0ZWQNCgkJR3Jp ZERhdGEgZ3JpZERh
dGEyMCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTIwLndpZHRoSGlu dCA9IDEzMDsgIC8v
IEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlkRGF0YTE5ID0gbmV3IEdyaWRE YXRhKCk7DQoJCWdy
aWREYXRhMTkud2lkdGhIaW50ID0gNTA7ICAvLyBHZW5lcmF0ZWQNCgkJR3Jp ZERhdGEgZ3JpZERh
dGEzNiA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTM2LndpZHRoSGlu dCA9IDEwMDsgIC8v
IEdlbmVyYXRlZA0KCQlHcmlkRGF0YSBncmlkRGF0YTE3ID0gbmV3IEdyaWRE YXRhKCk7DQoJCWdy
aWREYXRhMTcud2lkdGhIaW50ID0gMTMwOyAgLy8gR2VuZXJhdGVkDQoJCUdy aWREYXRhIGdyaWRE
YXRhMTQgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGExNC53aWR0aEhp bnQgPSA1MDsgIC8v
IEdlbmVyYXRlZA0KCQlHcmlkTGF5b3V0IGdyaWRMYXlvdXQyID0gbmV3IEdy aWRMYXlvdXQoKTsN
CgkJZ3JpZExheW91dDIubnVtQ29sdW1ucyA9IDEyOyAgLy8gR2VuZXJhdGVk DQoJCUdyaWREYXRh
IGdyaWREYXRhMTIgPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGExMi5o ZWlnaHRIaW50ID0g
MTIwOyAgLy8gR2VuZXJhdGVkDQoJCWdyaWREYXRhMTIud2lkdGhIaW50ID0g OTkwOyAgLy8gR2Vu
ZXJhdGVkDQoJCWdyb3VwY29uc3VsdGF0aW9ucyA9IG5ldyBHcm91cChjb21w b3NpdGUsIFNXVC5O
T05FKTsNCgkJZ3JvdXBjb25zdWx0YXRpb25zLnNldFRleHQoIkNPTlNVTFRB VElPTlMiKTsgIC8v
IEdlbmVyYXRlZA0KCQlncm91cGNvbnN1bHRhdGlvbnMuc2V0TGF5b3V0RGF0 YShncmlkRGF0YTEy
KTsgIC8vIEdlbmVyYXRlZA0KCQlncm91cGNvbnN1bHRhdGlvbnMuc2V0TGF5 b3V0KGdyaWRMYXlv
dXQyKTsgIC8vIEdlbmVyYXRlZA0KCQlsYWJlbHR5cGUxID0gbmV3IExhYmVs KGdyb3VwY29uc3Vs
dGF0aW9ucywgU1dULk5PTkUpOw0KCQlsYWJlbHR5cGUxLnNldFRleHQoIlR5 cGUiKTsgIC8vIEdl
bmVyYXRlZA0KCQlsYWJlbGRldGFpbHMxID0gbmV3IExhYmVsKGdyb3VwY29u c3VsdGF0aW9ucywg
U1dULk5PTkUpOw0KCQlsYWJlbGRldGFpbHMxLnNldFRleHQoIkTDqXRhaWxz Iik7ICAvLyBHZW5l
cmF0ZWQNCgkJbGFiZWxkYXRlZGVzaXJlZTEgPSBuZXcgTGFiZWwoZ3JvdXBj b25zdWx0YXRpb25z
LCBTV1QuTk9ORSk7DQoJCWxhYmVsZGF0ZWRlc2lyZWUxLnNldFRleHQoIkRh dGUgZMOpc2lyw6ll
Iik7ICAvLyBHZW5lcmF0ZWQNCgkJZmlsbGVyMTQgPSBuZXcgTGFiZWwoZ3Jv dXBjb25zdWx0YXRp
b25zLCBTV1QuTk9ORSk7DQoJCUxhYmVsIGZpbGxlcjI5ID0gbmV3IExhYmVs KGdyb3VwY29uc3Vs
dGF0aW9ucywgU1dULk5PTkUpOw0KCQlmaWxsZXIxID0gbmV3IExhYmVsKGdy b3VwY29uc3VsdGF0
aW9ucywgU1dULk5PTkUpOw0KCQlMYWJlbCBmaWxsZXIzMiA9IG5ldyBMYWJl bChncm91cGNvbnN1
bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJbGFiZWxsaWV1MSA9IG5ldyBMYWJl bChncm91cGNvbnN1
bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJbGFiZWxsaWV1MS5zZXRUZXh0KCJM aWV1Iik7ICAvLyBH
ZW5lcmF0ZWQNCgkJZmlsbGVyMTIgPSBuZXcgTGFiZWwoZ3JvdXBjb25zdWx0 YXRpb25zLCBTV1Qu
Tk9ORSk7DQoJCWZpbGxlcjEzID0gbmV3IExhYmVsKGdyb3VwY29uc3VsdGF0 aW9ucywgU1dULk5P
TkUpOw0KCQlsYWJlbHJlbWFycXVlMiA9IG5ldyBMYWJlbChncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5OT05FKTsNCgkJbGFiZWxyZW1hcnF1ZTIuc2V0VGV4dCgiUmVtYXJxdWUi KTsgIC8vIEdlbmVy
YXRlZA0KCQlMYWJlbCBmaWxsZXIyMyA9IG5ldyBMYWJlbChncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5OT05FKTsNCgkJY2hlY2tCb3hjb25zdWx0YXRpb25zcGVjID0gbmV3IEJ1 dHRvbihncm91cGNv
bnN1bHRhdGlvbnMsIFNXVC5DSEVDSyk7DQoJCWNoZWNrQm94Y29uc3VsdGF0 aW9uc3BlYy5zZXRU
ZXh0KCJDb25zdWx0YXRpb24gc3DDqWNpYWxpc8OpZSIpOyAgLy8gR2VuZXJh dGVkDQoJCWNyZWF0
ZUNvbWJvZGV0YWlsY29uc3VsdGVzcGVjaWFsaXNlZSgpOw0KCQljcmVhdGVD b21ib2RhdGVjb25z
dWx0ZXNwZWMoKTsNCgkJbGFiZWxvdTUgPSBuZXcgTGFiZWwoZ3JvdXBjb25z dWx0YXRpb25zLCBT
V1QuTk9ORSk7DQoJCWxhYmVsb3U1LnNldFRleHQoIm91Iik7ICAvLyBHZW5l cmF0ZWQNCgkJY2hl
Y2tCb3hkYXRlY29uc3VsdGVzcGVjID0gbmV3IEJ1dHRvbihncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5DSEVDSyk7DQoJCXRleHRkYXRlY29uc3VsdGF0aW9uc3BlYyA9IG5ldyBU ZXh0KGdyb3VwY29u
c3VsdGF0aW9ucywgU1dULkJPUkRFUik7DQoJCXRleHRkYXRlY29uc3VsdGF0 aW9uc3BlYy5zZXRM
YXlvdXREYXRhKGdyaWREYXRhMTQpOyAgLy8gR2VuZXJhdGVkDQoJCWJ1dHRv bmRhdGVjb25zdWx0
c3BlYyA9IG5ldyBCdXR0b24oZ3JvdXBjb25zdWx0YXRpb25zLCBTV1QuTk9O RSk7DQoJCWNyZWF0
ZUNvbWJvbGlldWNvbnN1bHRhdGlvbnNwZWMoKTsNCgkJbGFiZWxvdTIyID0g bmV3IExhYmVsKGdy
b3VwY29uc3VsdGF0aW9ucywgU1dULk5PTkUpOw0KCQlsYWJlbG91MjIuc2V0 VGV4dCgib3UiKTsg
IC8vIEdlbmVyYXRlZA0KCQl0ZXh0bGlldWNvbnN1bHRhdGlvbnNwZWMgPSBu ZXcgVGV4dChncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0bGlldWNvbnN1 bHRhdGlvbnNwZWMu
c2V0VGV4dCgiIik7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4dGxpZXVjb25zdWx0 YXRpb25zcGVjLnNl
dExheW91dERhdGEoZ3JpZERhdGExNyk7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4 dHJlbWFycXVlY29u
c3VsdGVzcGVjID0gbmV3IFRleHQoZ3JvdXBjb25zdWx0YXRpb25zLCBTV1Qu Qk9SREVSKTsNCgkJ
dGV4dHJlbWFycXVlY29uc3VsdGVzcGVjLnNldExheW91dERhdGEoZ3JpZERh dGEzNik7ICAvLyBH
ZW5lcmF0ZWQNCgkJTGFiZWwgZmlsbGVyMjIgPSBuZXcgTGFiZWwoZ3JvdXBj b25zdWx0YXRpb25z
LCBTV1QuTk9ORSk7DQoJCWNoZWNrQm94Y29uc3VsdGV0ZWxzcGVjID0gbmV3 IEJ1dHRvbihncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5DSEVDSyk7DQoJCWNoZWNrQm94Y29uc3Vs dGV0ZWxzcGVjLnNl
dFRleHQoIkNvbnN1bHQuIHTDqWwuIHNww6ljaWFsaXPDqWUiKTsgIC8vIEdl bmVyYXRlZA0KCQlj
cmVhdGVDb21ib2RldGFpbGNvbnN1bHRldGVsc3BlYygpOw0KCQljcmVhdGVD b21ib2RhdGVjb25z
dWx0ZXRlbHNwZWMoKTsNCgkJbGFiZWxvdTUxID0gbmV3IExhYmVsKGdyb3Vw Y29uc3VsdGF0aW9u
cywgU1dULk5PTkUpOw0KCQlsYWJlbG91NTEuc2V0VGV4dCgib3UiKTsgIC8v IEdlbmVyYXRlZA0K
CQljaGVja0JveGRhdGV0ZWxzcGVjID0gbmV3IEJ1dHRvbihncm91cGNvbnN1 bHRhdGlvbnMsIFNX
VC5DSEVDSyk7DQoJCXRleHRkYXRlY29uc3VsdGF0ZXRlbHNwZWMgPSBuZXcg VGV4dChncm91cGNv
bnN1bHRhdGlvbnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0ZGF0ZWNvbnN1bHRh dGV0ZWxzcGVjLnNl
dExheW91dERhdGEoZ3JpZERhdGExOSk7ICAvLyBHZW5lcmF0ZWQNCgkJYnV0 dG9uZGF0ZXRlbHNw
ZWMgPSBuZXcgQnV0dG9uKGdyb3VwY29uc3VsdGF0aW9ucywgU1dULk5PTkUp Ow0KCQljcmVhdGVD
b21ib2xpZXVjb25zdWx0ZXRlbHNwZWMoKTsNCgkJbGFiZWxvdTIyMSA9IG5l dyBMYWJlbChncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJbGFiZWxvdTIyMS5zZXRU ZXh0KCJvdSIpOyAg
Ly8gR2VuZXJhdGVkDQoJCXRleHRsaWV1Y29uc3VsdGV0ZWxzcGVjID0gbmV3 IFRleHQoZ3JvdXBj
b25zdWx0YXRpb25zLCBTV1QuQk9SREVSKTsNCgkJdGV4dGxpZXVjb25zdWx0 ZXRlbHNwZWMuc2V0
VGV4dCgiIik7ICAvLyBHZW5lcmF0ZWQNCgkJdGV4dGxpZXVjb25zdWx0ZXRl bHNwZWMuc2V0TGF5
b3V0RGF0YShncmlkRGF0YTIwKTsgIC8vIEdlbmVyYXRlZA0KCQl0ZXh0cmVt YXJxdWVjb25zdWx0
ZXRlbHNwZWMgPSBuZXcgVGV4dChncm91cGNvbnN1bHRhdGlvbnMsIFNXVC5C T1JERVIpOw0KCQl0
ZXh0cmVtYXJxdWVjb25zdWx0ZXRlbHNwZWMuc2V0TGF5b3V0RGF0YShncmlk RGF0YTM3KTsgIC8v
IEdlbmVyYXRlZA0KCQlMYWJlbCBmaWxsZXIyMSA9IG5ldyBMYWJlbChncm91 cGNvbnN1bHRhdGlv
bnMsIFNXVC5OT05FKTsNCgkJY2hlY2tCb3hob3NwaXRhbGlzYXRpb24gPSBu ZXcgQnV0dG9uKGdy
b3VwY29uc3VsdGF0aW9ucywgU1dULkNIRUNLKTsNCgkJY2hlY2tCb3hob3Nw aXRhbGlzYXRpb24u
c2V0VGV4dCgiSG9zcGl0YWxpc2F0aW9uIik7ICAvLyBHZW5lcmF0ZWQNCgkJ Y3JlYXRlQ29tYm9k
ZXRhaWxob3NwaXRhbGlzYXRpb24oKTsNCgkJY3JlYXRlQ29tYm9kYXRlaG9z cGl0YWxpc2F0aW9u
KCk7DQoJCWxhYmVsb3U1MTEgPSBuZXcgTGFiZWwoZ3JvdXBjb25zdWx0YXRp b25zLCBTV1QuTk9O
RSk7DQoJCWxhYmVsb3U1MTEuc2V0VGV4dCgib3UiKTsgIC8vIEdlbmVyYXRl ZA0KCQljaGVja0Jv
eGRhdGVob3NwID0gbmV3IEJ1dHRvbihncm91cGNvbnN1bHRhdGlvbnMsIFNX VC5DSEVDSyk7DQoJ
CXRleHRkYXRlaG9zcGl0YWxpc2F0aW9uID0gbmV3IFRleHQoZ3JvdXBjb25z dWx0YXRpb25zLCBT
V1QuQk9SREVSKTsNCgkJdGV4dGRhdGVob3NwaXRhbGlzYXRpb24uc2V0TGF5 b3V0RGF0YShncmlk
RGF0YTIyKTsgIC8vIEdlbmVyYXRlZA0KCQlidXR0b25kYXRlaG9zcGl0ID0g bmV3IEJ1dHRvbihn
cm91cGNvbnN1bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJY3JlYXRlQ29tYm9s aWV1aG9zcGl0YWxp
c2F0aW9uKCk7DQoJCWxhYmVsb3UyMjExID0gbmV3IExhYmVsKGdyb3VwY29u c3VsdGF0aW9ucywg
U1dULk5PTkUpOw0KCQlsYWJlbG91MjIxMS5zZXRUZXh0KCJvdSIpOyAgLy8g R2VuZXJhdGVkDQoJ
CXRleHRsaWV1aG9zcGl0YWxpc2F0aW9uID0gbmV3IFRleHQoZ3JvdXBjb25z dWx0YXRpb25zLCBT
V1QuQk9SREVSKTsNCgkJdGV4dGxpZXVob3NwaXRhbGlzYXRpb24uc2V0VGV4 dCgiIik7ICAvLyBH
ZW5lcmF0ZWQNCgkJdGV4dGxpZXVob3NwaXRhbGlzYXRpb24uc2V0TGF5b3V0 RGF0YShncmlkRGF0
YTIzKTsgIC8vIEdlbmVyYXRlZA0KCQl0ZXh0cmVtYXJxdWVob3NwaXQgPSBu ZXcgVGV4dChncm91
cGNvbnN1bHRhdGlvbnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0cmVtYXJxdWVo b3NwaXQuc2V0TGF5
b3V0RGF0YShncmlkRGF0YTM4KTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8q Kg0KCSAqIFRoaXMg
bWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGV0YWlsY29uc3VsdGVzcGVjaWFs aXNlZQkNCgkgKg0K
CSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RldGFpbGNvbnN1bHRl c3BlY2lhbGlzZWUo
KSB7DQoJCUdyaWREYXRhIGdyaWREYXRhMTMgPSBuZXcgR3JpZERhdGEoKTsN CgkJZ3JpZERhdGEx
My53aWR0aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kZXRh aWxjb25zdWx0ZXNw
ZWNpYWxpc2VlID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dU Lk5PTkUpOw0KCQlj
b21ib2RldGFpbGNvbnN1bHRlc3BlY2lhbGlzZWUuc2V0SXRlbXMgKG5ldyBT dHJpbmcgW117IiIs
IkFzc2lzdGFudCBTb2NpYWwiLCJBbGNvb2xnaWUvRMOpcGVuZGFuY2VzIiwg IkNhcmRpb2xvZ2ll
IiwgIkNoaXJ1cmdpZSIsIkRlcm1hdG9sb2dpZSIsIkRlbnRpc3RlIiwiRGlh YsOpdGlvbG9naWUi
LCAiR2FzdHJvLUVudMOpcm9sb2dpZSIsICJHeW7DqWNvbG9naWUiLCJIw6lt YXRvbG9naWUiLCJJ
bW11bm9sb2dpZS9BbGxlcmdvbG9naWUiLCJJbmZlY3Rpb2xvZ2llIiwiTcOp ZGVjaW5lIEludGVy
bmUiLCAiTsOpcGhyb2xvZ2llIiwiTmV1cm9sb2dpZSIsIk9ydGhvcMOpZGll IiwgIk9STCIsIlDD
qWRpYXRyaWUiLCJQbmV1bW9sb2dpZSIsIlBzeWNoaWF0cmllIiwiUGh5c2lv dGjDqXJhcGllIiwg
IlJ1bWF0b2xvZ2llIn0pOw0KCQljb21ib2RldGFpbGNvbnN1bHRlc3BlY2lh bGlzZWUuc2V0TGF5
b3V0RGF0YShncmlkRGF0YTEzKTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8q Kg0KCSAqIFRoaXMg
bWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGF0ZWNvbnN1bHRlc3BlYwkNCgkg Kg0KCSAqLw0KCXBy
aXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVjb25zdWx0ZXNwZWMoKSB7DQoJ CUdyaWREYXRhIGdy
aWREYXRhNDggPSBuZXcgR3JpZERhdGEoKTsNCgkJZ3JpZERhdGE0OC53aWR0 aEhpbnQgPSA4MDsg
IC8vIEdlbmVyYXRlZA0KCQljb21ib2RhdGVjb25zdWx0ZXNwZWMgPSBuZXcg Q29tYm8oZ3JvdXBj
b25zdWx0YXRpb25zLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZWNvbnN1bHRl c3BlYy5zZXRJdGVt
cyAobmV3IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1cmdlbmNl cyIsICJEw6hzIHF1
ZSBwb3NzaWJsZSIsICJEYW5zIDEgam91ciIsIkRhbnMgMiBqb3VycyIsIkRh bnMgMyBqb3VycyIs
IkRhbnMgNCBqb3VycyIsIkRhbnMgNSBqb3VycyIsIkRhbnMgNiBqb3VycyIs IkRhbnMgMSBzZW1h
aW5lIiwiRGFucyAyIHNlbWFpbmVzIiwiRGFucyAzIHNlbWFpbmVzIiwiRGFu cyAxIG1vaXMiLCJE
YW5zIDIgbW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFucyA0IG1vaXMiLCJEYW5z IDUgbW9pcyIsIkRh
bnMgNiBtb2lzIiwiRGFucyA3IG1vaXMiLCJEYW5zIDggbW9pcyIsIkRhbnMg OSBtb2lzIiwiRGFu
cyAxMCBtb2lzIiwiRGFucyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIsICJEYW5z IDIgYW5zIiwgIkRh
bnMgMyBhbnMiLCAiRGFucyA0IGFucyIsICJEYW5zIDUgYW5zIn0pOw0KCQlj b21ib2RhdGVjb25z
dWx0ZXNwZWMuc2V0TGF5b3V0RGF0YShncmlkRGF0YTQ4KTsgIC8vIEdlbmVy YXRlZA0KCX0NCg0K
CS8qKg0KCSAqIFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbWJvbGlldWNv bnN1bHRhdGlvbnNw
ZWMJDQoJICoNCgkgKi8NCglwcml2YXRlIHZvaWQgY3JlYXRlQ29tYm9saWV1 Y29uc3VsdGF0aW9u
c3BlYygpIHsNCgkJR3JpZERhdGEgZ3JpZERhdGExNSA9IG5ldyBHcmlkRGF0 YSgpOw0KCQlncmlk
RGF0YTE1LndpZHRoSGludCA9IDEyMDsgIC8vIEdlbmVyYXRlZA0KCQljb21i b2xpZXVjb25zdWx0
YXRpb25zcGVjID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dU Lk5PTkUpOw0KCQlj
b21ib2xpZXVjb25zdWx0YXRpb25zcGVjLnNldFRleHQoIkNob2lzaXIiKTsg IC8vIEdlbmVyYXRl
ZA0KCQljb21ib2xpZXVjb25zdWx0YXRpb25zcGVjLnNldExheW91dERhdGEo Z3JpZERhdGExNSk7
ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkvKioNCgkgKiBUaGlzIG1ldGhvZCBp bml0aWFsaXplcyBj
b21ib2RldGFpbGNvbnN1bHRldGVsc3BlYwkNCgkgKg0KCSAqLw0KCXByaXZh dGUgdm9pZCBjcmVh
dGVDb21ib2RldGFpbGNvbnN1bHRldGVsc3BlYygpIHsNCgkJR3JpZERhdGEg Z3JpZERhdGEyMSA9
IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTIxLndpZHRoSGludCA9IDEz MDsgIC8vIEdlbmVy
YXRlZA0KCQljb21ib2RldGFpbGNvbnN1bHRldGVsc3BlYyA9IG5ldyBDb21i byhncm91cGNvbnN1
bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJY29tYm9kZXRhaWxjb25zdWx0ZXRl bHNwZWMuc2V0SXRl
bXMgKG5ldyBTdHJpbmcgW117IiIsIkFzc2lzdGFudCBTb2NpYWwiLCJBbGNv b2xnaWUvRMOpcGVu
ZGFuY2VzIiwgIkNhcmRpb2xvZ2llIiwgIkNoaXJ1cmdpZSIsIkRlcm1hdG9s b2dpZSIsIkRlbnRp
c3RlIiwiRGlhYsOpdGlvbG9naWUiLCAiR2FzdHJvLUVudMOpcm9sb2dpZSIs ICJHeW7DqWNvbG9n
aWUiLCJIw6ltYXRvbG9naWUiLCJJbW11bm9sb2dpZS9BbGxlcmdvbG9naWUi LCJJbmZlY3Rpb2xv
Z2llIiwiTcOpZGVjaW5lIEludGVybmUiLCAiTsOpcGhyb2xvZ2llIiwiTmV1 cm9sb2dpZSIsIk9y
dGhvcMOpZGllIiwgIk9STCIsIlDDqWRpYXRyaWUiLCJQbmV1bW9sb2dpZSIs IlBzeWNoaWF0cmll
IiwiUGh5c2lvdGjDqXJhcGllIiwiUnVtYXRvbG9naWUifSk7DQoJCWNvbWJv ZGV0YWlsY29uc3Vs
dGV0ZWxzcGVjLnNldExheW91dERhdGEoZ3JpZERhdGEyMSk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2RhdGVj b25zdWx0ZXRlbHNw
ZWMJDQoJICoNCgkgKi8NCglwcml2YXRlIHZvaWQgY3JlYXRlQ29tYm9kYXRl Y29uc3VsdGV0ZWxz
cGVjKCkgew0KCQlHcmlkRGF0YSBncmlkRGF0YTQ5ID0gbmV3IEdyaWREYXRh KCk7DQoJCWdyaWRE
YXRhNDkud2lkdGhIaW50ID0gODA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9k YXRlY29uc3VsdGV0
ZWxzcGVjID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dULk5P TkUpOw0KCQljb21i
b2RhdGVjb25zdWx0ZXRlbHNwZWMuc2V0SXRlbXMgKG5ldyBTdHJpbmcgW117 IiIsIkF1am91cmQn
aHVpIiwiRW4gdXJnZW5jZXMiLCAiRMOocyBxdWUgcG9zc2libGUiLCAiRGFu cyAxIGpvdXIiLCJE
YW5zIDIgam91cnMiLCJEYW5zIDMgam91cnMiLCJEYW5zIDQgam91cnMiLCJE YW5zIDUgam91cnMi
LCJEYW5zIDYgam91cnMiLCJEYW5zIDEgc2VtYWluZSIsIkRhbnMgMiBzZW1h aW5lcyIsIkRhbnMg
MyBzZW1haW5lcyIsIkRhbnMgMSBtb2lzIiwiRGFucyAyIG1vaXMiLCJEYW5z IDMgbW9pcyIsIkRh
bnMgNCBtb2lzIiwiRGFucyA1IG1vaXMiLCJEYW5zIDYgbW9pcyIsIkRhbnMg NyBtb2lzIiwiRGFu
cyA4IG1vaXMiLCJEYW5zIDkgbW9pcyIsIkRhbnMgMTAgbW9pcyIsIkRhbnMg MTEgbW9pcyIsICJE
YW5zIDEgYW4iLCAiRGFucyAyIGFucyIsICJEYW5zIDMgYW5zIiwgIkRhbnMg NCBhbnMiLCAiRGFu
cyA1IGFucyJ9KTsNCgkJY29tYm9kYXRlY29uc3VsdGV0ZWxzcGVjLnNldExh eW91dERhdGEoZ3Jp
ZERhdGE0OSk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoNCgkvKioNCgkgKiBUaGlz IG1ldGhvZCBpbml0
aWFsaXplcyBjb21ib2xpZXVjb25zdWx0ZXRlbHNwZWMJDQoJICoNCgkgKi8N Cglwcml2YXRlIHZv
aWQgY3JlYXRlQ29tYm9saWV1Y29uc3VsdGV0ZWxzcGVjKCkgew0KCQlHcmlk RGF0YSBncmlkRGF0
YTE4ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMTgud2lkdGhIaW50 ID0gMTIwOyAgLy8g
R2VuZXJhdGVkDQoJCWNvbWJvbGlldWNvbnN1bHRldGVsc3BlYyA9IG5ldyBD b21ibyhncm91cGNv
bnN1bHRhdGlvbnMsIFNXVC5OT05FKTsNCgkJY29tYm9saWV1Y29uc3VsdGV0 ZWxzcGVjLnNldFRl
eHQoIkNob2lzaXIiKTsgIC8vIEdlbmVyYXRlZA0KCQljb21ib2xpZXVjb25z dWx0ZXRlbHNwZWMu
c2V0TGF5b3V0RGF0YShncmlkRGF0YTE4KTsgIC8vIEdlbmVyYXRlZA0KCX0N Cg0KCS8qKg0KCSAq
IFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIGNvbWJvZGV0YWlsaG9zcGl0YWxp c2F0aW9uCQ0KCSAq
DQoJICovDQoJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbWJvZGV0YWlsaG9zcGl0 YWxpc2F0aW9uKCkg
ew0KCQlHcmlkRGF0YSBncmlkRGF0YTI1ID0gbmV3IEdyaWREYXRhKCk7DQoJ CWdyaWREYXRhMjUu
d2lkdGhIaW50ID0gMTMwOyAgLy8gR2VuZXJhdGVkDQoJCWNvbWJvZGV0YWls aG9zcGl0YWxpc2F0
aW9uID0gbmV3IENvbWJvKGdyb3VwY29uc3VsdGF0aW9ucywgU1dULk5PTkUp Ow0KCQljb21ib2Rl
dGFpbGhvc3BpdGFsaXNhdGlvbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMjUp OyAgLy8gR2VuZXJh
dGVkDQoJfQ0KDQoJLyoqDQoJICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMg Y29tYm9kYXRlaG9z
cGl0YWxpc2F0aW9uCQ0KCSAqDQoJICovDQoJcHJpdmF0ZSB2b2lkIGNyZWF0 ZUNvbWJvZGF0ZWhv
c3BpdGFsaXNhdGlvbigpIHsNCgkJR3JpZERhdGEgZ3JpZERhdGE1MCA9IG5l dyBHcmlkRGF0YSgp
Ow0KCQlncmlkRGF0YTUwLndpZHRoSGludCA9IDgwOyAgLy8gR2VuZXJhdGVk DQoJCWNvbWJvZGF0
ZWhvc3BpdGFsaXNhdGlvbiA9IG5ldyBDb21ibyhncm91cGNvbnN1bHRhdGlv bnMsIFNXVC5OT05F
KTsNCgkJY29tYm9kYXRlaG9zcGl0YWxpc2F0aW9uLnNldEl0ZW1zIChuZXcg U3RyaW5nIFtdeyIi
LCJBdWpvdXJkJ2h1aSIsIkVuIHVyZ2VuY2VzIiwgIkTDqHMgcXVlIHBvc3Np YmxlIiwgIkRhbnMg
MSBqb3VyIiwiRGFucyAyIGpvdXJzIiwiRGFucyAzIGpvdXJzIiwiRGFucyA0 IGpvdXJzIiwiRGFu
cyA1IGpvdXJzIiwiRGFucyA2IGpvdXJzIiwiRGFucyAxIHNlbWFpbmUiLCJE YW5zIDIgc2VtYWlu
ZXMiLCJEYW5zIDMgc2VtYWluZXMiLCJEYW5zIDEgbW9pcyIsIkRhbnMgMiBt b2lzIiwiRGFucyAz
IG1vaXMiLCJEYW5zIDQgbW9pcyIsIkRhbnMgNSBtb2lzIiwiRGFucyA2IG1v aXMiLCJEYW5zIDcg
bW9pcyIsIkRhbnMgOCBtb2lzIiwiRGFucyA5IG1vaXMiLCJEYW5zIDEwIG1v aXMiLCJEYW5zIDEx
IG1vaXMiLCAiRGFucyAxIGFuIiwgIkRhbnMgMiBhbnMiLCAiRGFucyAzIGFu cyIsICJEYW5zIDQg
YW5zIiwgIkRhbnMgNSBhbnMifSk7DQoJCWNvbWJvZGF0ZWhvc3BpdGFsaXNh dGlvbi5zZXRMYXlv
dXREYXRhKGdyaWREYXRhNTApOyAgLy8gR2VuZXJhdGVkDQoJfQ0KDQoJLyoq DQoJICogVGhpcyBt
ZXRob2QgaW5pdGlhbGl6ZXMgY29tYm9saWV1aG9zcGl0YWxpc2F0aW9uCQ0K CSAqDQoJICovDQoJ
cHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbWJvbGlldWhvc3BpdGFsaXNhdGlvbigp IHsNCgkJR3JpZERh
dGEgZ3JpZERhdGEyNCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTI0 LndpZHRoSGludCA9
IDEyMDsgIC8vIEdlbmVyYXRlZA0KCQljb21ib2xpZXVob3NwaXRhbGlzYXRp b24gPSBuZXcgQ29t
Ym8oZ3JvdXBjb25zdWx0YXRpb25zLCBTV1QuTk9ORSk7DQoJCWNvbWJvbGll dWhvc3BpdGFsaXNh
dGlvbi5zZXRUZXh0KCJDaG9pc2lyIik7ICAvLyBHZW5lcmF0ZWQNCgkJY29t Ym9saWV1aG9zcGl0
YWxpc2F0aW9uLnNldExheW91dERhdGEoZ3JpZERhdGEyNCk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBncm91cGRpdmVy cwkNCgkgKg0KCSAq
Lw0KCXByaXZhdGUgdm9pZCBjcmVhdGVHcm91cGRpdmVycygpIHsNCgkJR3Jp ZERhdGEgZ3JpZERh
dGE1NCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTU0LndpZHRoSGlu dCA9IDEzMDsNCgkJ
R3JpZERhdGEgZ3JpZERhdGE1MyA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlk RGF0YTUzLndpZHRo
SGludCA9IDE1MDsNCgkJR3JpZERhdGEgZ3JpZERhdGE1MiA9IG5ldyBHcmlk RGF0YSgpOw0KCQln
cmlkRGF0YTUyLndpZHRoSGludCA9IDUwOw0KCQlHcmlkRGF0YSBncmlkRGF0 YTUxID0gbmV3IEdy
aWREYXRhKCk7DQoJCWdyaWREYXRhNTEud2lkdGhIaW50ID0gMTIwOw0KCQlH cmlkRGF0YSBncmlk
RGF0YTQwID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhNDAud2lkdGhI aW50ID0gMTUwOyAg
Ly8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMzEgPSBuZXcgR3Jp ZERhdGEoKTsNCgkJ
Z3JpZERhdGEzMS53aWR0aEhpbnQgPSA1MDsgIC8vIEdlbmVyYXRlZA0KCQlH cmlkRGF0YSBncmlk
RGF0YTM5ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhMzkud2lkdGhI aW50ID0gMTUwOyAg
Ly8gR2VuZXJhdGVkDQoJCUdyaWREYXRhIGdyaWREYXRhMjcgPSBuZXcgR3Jp ZERhdGEoKTsNCgkJ
Z3JpZERhdGEyNy53aWR0aEhpbnQgPSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJ R3JpZERhdGEgZ3Jp
ZERhdGEyOSA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTI5LndpZHRo SGludCA9IDUwOyAg
Ly8gR2VuZXJhdGVkDQoJCUdyaWRMYXlvdXQgZ3JpZExheW91dDMgPSBuZXcg R3JpZExheW91dCgp
Ow0KCQlncmlkTGF5b3V0My5udW1Db2x1bW5zID0gMTE7ICAvLyBHZW5lcmF0 ZWQNCgkJR3JpZERh
dGEgZ3JpZERhdGEyNiA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0YTI2 LmhlaWdodEhpbnQg
PSAxMzA7ICAvLyBHZW5lcmF0ZWQNCgkJZ3JpZERhdGEyNi53aWR0aEhpbnQg PSA5OTA7ICAvLyBH
ZW5lcmF0ZWQNCgkJZ3JvdXBkaXZlcnMgPSBuZXcgR3JvdXAoY29tcG9zaXRl LCBTV1QuTk9ORSk7
DQoJCWdyb3VwZGl2ZXJzLnNldFRleHQoIkRJVkVSUyIpOyAgLy8gR2VuZXJh dGVkDQoJCWdyb3Vw
ZGl2ZXJzLnNldExheW91dERhdGEoZ3JpZERhdGEyNik7ICAvLyBHZW5lcmF0 ZWQNCgkJZ3JvdXBk
aXZlcnMuc2V0TGF5b3V0KGdyaWRMYXlvdXQzKTsgIC8vIEdlbmVyYXRlZA0K CQlsYWJlbHR5cGUx
MSA9IG5ldyBMYWJlbChncm91cGRpdmVycywgU1dULk5PTkUpOw0KCQlsYWJl bHR5cGUxMS5zZXRU
ZXh0KCJUeXBlIik7ICAvLyBHZW5lcmF0ZWQNCgkJbGFiZWxkZXRhaWxzMTEg PSBuZXcgTGFiZWwo
Z3JvdXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJbGFiZWxkZXRhaWxzMTEuc2V0 VGV4dCgiRMOpdGFp
bHMiKTsgIC8vIEdlbmVyYXRlZA0KCQlsYWJlbGRhdGVkZXNpcmVlMTEgPSBu ZXcgTGFiZWwoZ3Jv
dXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJbGFiZWxkYXRlZGVzaXJlZTExLnNl dFRleHQoIkRhdGUg
ZMOpc2lyw6llIik7ICAvLyBHZW5lcmF0ZWQNCgkJZmlsbGVyMTggPSBuZXcg TGFiZWwoZ3JvdXBk
aXZlcnMsIFNXVC5OT05FKTsNCgkJTGFiZWwgZmlsbGVyMzEgPSBuZXcgTGFi ZWwoZ3JvdXBkaXZl
cnMsIFNXVC5OT05FKTsNCgkJZmlsbGVyMTEgPSBuZXcgTGFiZWwoZ3JvdXBk aXZlcnMsIFNXVC5O
T05FKTsNCgkJTGFiZWwgZmlsbGVyMzUgPSBuZXcgTGFiZWwoZ3JvdXBkaXZl cnMsIFNXVC5OT05F
KTsNCgkJbGFiZWxsaWV1MTEgPSBuZXcgTGFiZWwoZ3JvdXBkaXZlcnMsIFNX VC5OT05FKTsNCgkJ
bGFiZWxsaWV1MTEuc2V0VGV4dCgiTGlldSIpOyAgLy8gR2VuZXJhdGVkDQoJ CWZpbGxlcjE2ID0g
bmV3IExhYmVsKGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWZpbGxlcjE3 ID0gbmV3IExhYmVs
KGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWxhYmVscmVtYXJxdWUzID0g bmV3IExhYmVsKGdy
b3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWxhYmVscmVtYXJxdWUzLnNldFRl eHQoIlJlbWFycXVl
Iik7ICAvLyBHZW5lcmF0ZWQNCgkJY2hlY2tCb3h2YWNjaW4gPSBuZXcgQnV0 dG9uKGdyb3VwZGl2
ZXJzLCBTV1QuQ0hFQ0spOw0KCQljaGVja0JveHZhY2Npbi5zZXRUZXh0KCJW YWNjaW4iKTsgIC8v
IEdlbmVyYXRlZA0KCQljcmVhdGVDb21ib2RldGFpbHZhY2NpbigpOw0KCQlj cmVhdGVDb21ib2Rh
dGV2YWNjaW4oKTsNCgkJbGFiZWxvdTUyID0gbmV3IExhYmVsKGdyb3VwZGl2 ZXJzLCBTV1QuTk9O
RSk7DQoJCWxhYmVsb3U1Mi5zZXRUZXh0KCJvdSIpOyAgLy8gR2VuZXJhdGVk DQoJCWNoZWNrQm94
ZGF0ZXZhY2NpbiA9IG5ldyBCdXR0b24oZ3JvdXBkaXZlcnMsIFNXVC5DSEVD Syk7DQoJCXRleHRk
YXRldmFjY2luID0gbmV3IFRleHQoZ3JvdXBkaXZlcnMsIFNXVC5CT1JERVIp Ow0KCQl0ZXh0ZGF0
ZXZhY2Npbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMjkpOyAgLy8gR2VuZXJh dGVkDQoJCWJ1dHRv
bmRhdGV2YWNjaW4gPSBuZXcgQnV0dG9uKGdyb3VwZGl2ZXJzLCBTV1QuTk9O RSk7DQoJCWNyZWF0
ZUNvbWJvbGlldXZhY2NpbigpOw0KCQlsYWJlbG91MjIyID0gbmV3IExhYmVs KGdyb3VwZGl2ZXJz
LCBTV1QuTk9ORSk7DQoJCWxhYmVsb3UyMjIuc2V0VGV4dCgib3UiKTsgIC8v IEdlbmVyYXRlZA0K
CQl0ZXh0bGlldXZhY2NpbiA9IG5ldyBUZXh0KGdyb3VwZGl2ZXJzLCBTV1Qu Qk9SREVSKTsNCgkJ
dGV4dGxpZXV2YWNjaW4uc2V0VGV4dCgiIik7ICAvLyBHZW5lcmF0ZWQNCgkJ dGV4dGxpZXV2YWNj
aW4uc2V0TGF5b3V0RGF0YShncmlkRGF0YTI3KTsgIC8vIEdlbmVyYXRlZA0K CQl0ZXh0cmVtYXJx
dWV2YWNjaW4gPSBuZXcgVGV4dChncm91cGRpdmVycywgU1dULkJPUkRFUik7 DQoJCXRleHRyZW1h
cnF1ZXZhY2Npbi5zZXRMYXlvdXREYXRhKGdyaWREYXRhMzkpOyAgLy8gR2Vu ZXJhdGVkDQoJCWNo
ZWNrQm94cHJvY2hyZHYgPSBuZXcgQnV0dG9uKGdyb3VwZGl2ZXJzLCBTV1Qu Q0hFQ0spOw0KCQlj
aGVja0JveHByb2NocmR2LnNldFRleHQoIlByb2NoYWluIFJEViIpOyAgLy8g R2VuZXJhdGVkDQoJ
CWZpbGxlcjE1MSA9IG5ldyBMYWJlbChncm91cGRpdmVycywgU1dULk5PTkUp Ow0KCQljcmVhdGVD
b21ib2RhdGVwcm9jaHJkdigpOw0KCQlsYWJlbG91NTIxID0gbmV3IExhYmVs KGdyb3VwZGl2ZXJz
LCBTV1QuTk9ORSk7DQoJCWxhYmVsb3U1MjEuc2V0VGV4dCgib3UiKTsgIC8v IEdlbmVyYXRlZA0K
CQljaGVja0JveGRhdGVwcm9jaGFpbnJkdiA9IG5ldyBCdXR0b24oZ3JvdXBk aXZlcnMsIFNXVC5D
SEVDSyk7DQoJCXRleHRkYXRlcHJvY2hyZHYgPSBuZXcgVGV4dChncm91cGRp dmVycywgU1dULkJP
UkRFUik7DQoJCXRleHRkYXRlcHJvY2hyZHYuc2V0TGF5b3V0RGF0YShncmlk RGF0YTMxKTsgIC8v
IEdlbmVyYXRlZA0KCQlidXR0b25kYXRlcHJvY2hhaW5yZHYgPSBuZXcgQnV0 dG9uKGdyb3VwZGl2
ZXJzLCBTV1QuTk9ORSk7DQoJCWZpbGxlcjE1ID0gbmV3IExhYmVsKGdyb3Vw ZGl2ZXJzLCBTV1Qu
Tk9ORSk7DQoJCWZpbGxlcjE5ID0gbmV3IExhYmVsKGdyb3VwZGl2ZXJzLCBT V1QuTk9ORSk7DQoJ
CWZpbGxlcjIwID0gbmV3IExhYmVsKGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7 DQoJCXRleHRyZW1h
cnF1ZXByb2NocmR2ID0gbmV3IFRleHQoZ3JvdXBkaXZlcnMsIFNXVC5CT1JE RVIpOw0KCQl0ZXh0
cmVtYXJxdWVwcm9jaHJkdi5zZXRMYXlvdXREYXRhKGdyaWREYXRhNDApOyAg Ly8gR2VuZXJhdGVk
DQoJCWNoZWNrQm94YXV0cmVzID0gbmV3IEJ1dHRvbihncm91cGRpdmVycywg U1dULkNIRUNLKTsN
CgkJY2hlY2tCb3hhdXRyZXMuc2V0VGV4dCgiQXV0cmVzIik7DQoJCXRleHRh dXRyZXMgPSBuZXcg
VGV4dChncm91cGRpdmVycywgU1dULkJPUkRFUik7DQoJCXRleHRhdXRyZXMu c2V0TGF5b3V0RGF0
YShncmlkRGF0YTUxKTsNCgkJY3JlYXRlQ29tYm9kYXRlYXV0cmVzKCk7CgkJ bGFiZWxvdTYgPSBu
ZXcgTGFiZWwoZ3JvdXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJbGFiZWxvdTYu c2V0VGV4dCgib3Ui
KTsNCgkJY2hlY2tCb3hkYXRlYXV0cmVzID0gbmV3IEJ1dHRvbihncm91cGRp dmVycywgU1dULkNI
RUNLKTsNCgkJdGV4dGRhdGVhdXRyZXMgPSBuZXcgVGV4dChncm91cGRpdmVy cywgU1dULkJPUkRF
Uik7DQoJCXRleHRkYXRlYXV0cmVzLnNldExheW91dERhdGEoZ3JpZERhdGE1 Mik7DQoJCWJ1dHRv
bmRhdGVhdXRyZXMgPSBuZXcgQnV0dG9uKGdyb3VwZGl2ZXJzLCBTV1QuTk9O RSk7DQoJCWNyZWF0
ZUNvbWJvbGlldWF1dHJlcygpOwoJCWxhYmVsb3U3ID0gbmV3IExhYmVsKGdy b3VwZGl2ZXJzLCBT
V1QuTk9ORSk7DQoJCWxhYmVsb3U3LnNldFRleHQoIm91Iik7DQoJCXRleHRs aWV1YXV0cmVzID0g
bmV3IFRleHQoZ3JvdXBkaXZlcnMsIFNXVC5CT1JERVIpOw0KCQl0ZXh0bGll dWF1dHJlcy5zZXRM
YXlvdXREYXRhKGdyaWREYXRhNTQpOw0KCQl0ZXh0cmVtYXJxdWVhdXRyZXMg PSBuZXcgVGV4dChn
cm91cGRpdmVycywgU1dULkJPUkRFUik7DQoJCXRleHRyZW1hcnF1ZWF1dHJl cy5zZXRMYXlvdXRE
YXRhKGdyaWREYXRhNTMpOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgbWV0aG9k IGluaXRpYWxpemVz
IGNvbWJvZGV0YWlsdmFjY2luCQ0KCSAqDQoJICovDQoJcHJpdmF0ZSB2b2lk IGNyZWF0ZUNvbWJv
ZGV0YWlsdmFjY2luKCkgew0KCQlHcmlkRGF0YSBncmlkRGF0YTMwID0gbmV3 IEdyaWREYXRhKCk7
DQoJCWdyaWREYXRhMzAud2lkdGhIaW50ID0gMTMwOyAgLy8gR2VuZXJhdGVk DQoJCWNvbWJvZGV0
YWlsdmFjY2luID0gbmV3IENvbWJvKGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7 DQoJCWNvbWJvZGV0
YWlsdmFjY2luLnNldExheW91dERhdGEoZ3JpZERhdGEzMCk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2RhdGV2 YWNjaW4JDQoJICoN
CgkgKi8NCglwcml2YXRlIHZvaWQgY3JlYXRlQ29tYm9kYXRldmFjY2luKCkg ew0KCQlHcmlkRGF0
YSBncmlkRGF0YTQ1ID0gbmV3IEdyaWREYXRhKCk7DQoJCWdyaWREYXRhNDUu d2lkdGhIaW50ID0g
ODA7ICAvLyBHZW5lcmF0ZWQNCgkJY29tYm9kYXRldmFjY2luID0gbmV3IENv bWJvKGdyb3VwZGl2
ZXJzLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZXZhY2Npbi5zZXRJdGVtcyAo bmV3IFN0cmluZyBb
XXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1cmdlbmNlcyIsICJEw6hzIHF1ZSBw b3NzaWJsZSIsICJE
YW5zIDEgam91ciIsIkRhbnMgMiBqb3VycyIsIkRhbnMgMyBqb3VycyIsIkRh bnMgNCBqb3VycyIs
IkRhbnMgNSBqb3VycyIsIkRhbnMgNiBqb3VycyIsIkRhbnMgMSBzZW1haW5l IiwiRGFucyAyIHNl
bWFpbmVzIiwiRGFucyAzIHNlbWFpbmVzIiwiRGFucyAxIG1vaXMiLCJEYW5z IDIgbW9pcyIsIkRh
bnMgMyBtb2lzIiwiRGFucyA0IG1vaXMiLCJEYW5zIDUgbW9pcyIsIkRhbnMg NiBtb2lzIiwiRGFu
cyA3IG1vaXMiLCJEYW5zIDggbW9pcyIsIkRhbnMgOSBtb2lzIiwiRGFucyAx MCBtb2lzIiwiRGFu
cyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIsICJEYW5zIDIgYW5zIiwgIkRhbnMg MyBhbnMiLCAiRGFu
cyA0IGFucyIsICJEYW5zIDUgYW5zIn0pOw0KCQljb21ib2RhdGV2YWNjaW4u c2V0TGF5b3V0RGF0
YShncmlkRGF0YTQ1KTsgIC8vIEdlbmVyYXRlZA0KCX0NCg0KCS8qKg0KCSAq IFRoaXMgbWV0aG9k
IGluaXRpYWxpemVzIGNvbWJvbGlldXZhY2NpbgkNCgkgKg0KCSAqLw0KCXBy aXZhdGUgdm9pZCBj
cmVhdGVDb21ib2xpZXV2YWNjaW4oKSB7DQoJCUdyaWREYXRhIGdyaWREYXRh MjggPSBuZXcgR3Jp
ZERhdGEoKTsNCgkJZ3JpZERhdGEyOC53aWR0aEhpbnQgPSAxMjA7ICAvLyBH ZW5lcmF0ZWQNCgkJ
Y29tYm9saWV1dmFjY2luID0gbmV3IENvbWJvKGdyb3VwZGl2ZXJzLCBTV1Qu Tk9ORSk7DQoJCWNv
bWJvbGlldXZhY2Npbi5zZXRUZXh0KCJDaG9pc2lyIik7ICAvLyBHZW5lcmF0 ZWQNCgkJY29tYm9s
aWV1dmFjY2luLnNldExheW91dERhdGEoZ3JpZERhdGEyOCk7ICAvLyBHZW5l cmF0ZWQNCgl9DQoN
CgkvKioNCgkgKiBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21ib2RhdGVw cm9jaHJkdgkNCgkg
Kg0KCSAqLw0KCXByaXZhdGUgdm9pZCBjcmVhdGVDb21ib2RhdGVwcm9jaHJk digpIHsNCgkJR3Jp
ZERhdGEgZ3JpZERhdGE0NCA9IG5ldyBHcmlkRGF0YSgpOw0KCQlncmlkRGF0 YTQ0LndpZHRoSGlu
dCA9IDgwOyAgLy8gR2VuZXJhdGVkDQoJCWNvbWJvZGF0ZXByb2NocmR2ID0g bmV3IENvbWJvKGdy
b3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZXByb2NocmR2LnNl dEl0ZW1zIChuZXcg
U3RyaW5nIFtdeyIiLCJBdWpvdXJkJ2h1aSIsIkVuIHVyZ2VuY2VzIiwgIkTD qHMgcXVlIHBvc3Np
YmxlIiwgIkRhbnMgMSBqb3VyIiwiRGFucyAyIGpvdXJzIiwiRGFucyAzIGpv dXJzIiwiRGFucyA0
IGpvdXJzIiwiRGFucyA1IGpvdXJzIiwiRGFucyA2IGpvdXJzIiwiRGFucyAx IHNlbWFpbmUiLCJE
YW5zIDIgc2VtYWluZXMiLCJEYW5zIDMgc2VtYWluZXMiLCJEYW5zIDEgbW9p cyIsIkRhbnMgMiBt
b2lzIiwiRGFucyAzIG1vaXMiLCJEYW5zIDQgbW9pcyIsIkRhbnMgNSBtb2lz IiwiRGFucyA2IG1v
aXMiLCJEYW5zIDcgbW9pcyIsIkRhbnMgOCBtb2lzIiwiRGFucyA5IG1vaXMi LCJEYW5zIDEwIG1v
aXMiLCJEYW5zIDExIG1vaXMiLCAiRGFucyAxIGFuIiwgIkRhbnMgMiBhbnMi LCAiRGFucyAzIGFu
cyIsICJEYW5zIDQgYW5zIiwgIkRhbnMgNSBhbnMifSk7DQoJCWNvbWJvZGF0 ZXByb2NocmR2LnNl
dExheW91dERhdGEoZ3JpZERhdGE0NCk7ICAvLyBHZW5lcmF0ZWQNCgl9DQoN CgkvKioNCgkgKiBU
aGlzIG1ldGhvZCBpbml0aWFsaXplcyBjb21wb3NpdGUxCQ0KCSAqDQoJICov DQoJcHJpdmF0ZSB2
b2lkIGNyZWF0ZUNvbXBvc2l0ZTEoKSB7DQoJCUdyaWRMYXlvdXQgZ3JpZExh eW91dDQgPSBuZXcg
R3JpZExheW91dCgpOw0KCQlncmlkTGF5b3V0NC5udW1Db2x1bW5zID0gMTsg IC8vIEdlbmVyYXRl
ZA0KCQlHcmlkRGF0YSBncmlkRGF0YTQxID0gbmV3IEdyaWREYXRhKCk7DQoJ CWdyaWREYXRhNDEu
aGVpZ2h0SGludCA9IDEwMDsgIC8vIEdlbmVyYXRlZA0KCQlncmlkRGF0YTQx LndpZHRoSGludCA9
IDk5OTsgIC8vIEdlbmVyYXRlZA0KCQljb21wb3NpdGUxID0gbmV3IENvbXBv c2l0ZShjb21wb3Np
dGUsIFNXVC5OT05FKTsNCgkJY29tcG9zaXRlMS5zZXRMYXlvdXREYXRhKGdy aWREYXRhNDEpOyAg
Ly8gR2VuZXJhdGVkDQoJCWNvbXBvc2l0ZTEuc2V0TGF5b3V0KGdyaWRMYXlv dXQ0KTsgIC8vIEdl
bmVyYXRlZA0KCQlidXR0b25lbnZveWVyZGVtYW5kZSA9IG5ldyBCdXR0b24o Y29tcG9zaXRlMSwg
U1dULk5PTkUpOw0KCQlidXR0b25lbnZveWVyZGVtYW5kZS5zZXRUZXh0KCJF bnZveWVyIGxhL2xl
cyBkZW1hbmRlKHMpIik7ICAvLyBHZW5lcmF0ZWQNCgkJYnV0dG9uY3JlZXJh bGVydGUgPSBuZXcg
QnV0dG9uKGNvbXBvc2l0ZTEsIFNXVC5OT05FKTsNCgkJYnV0dG9uY3JlZXJh bGVydGUuc2V0VGV4
dCgiQ3LDqWVyIHVuZSBBbGVydGUvVG9kbyIpOyAgLy8gR2VuZXJhdGVkDQoJ CWJ1dHRvbmNyZWVy
YWxlcnRlLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBvcmcuZWNsaXBzZS5z d3QuZXZlbnRzLlNl
bGVjdGlvbkFkYXB0ZXIoKSB7DQoJCQlwdWJsaWMgdm9pZCB3aWRnZXRTZWxl Y3RlZChvcmcuZWNs
aXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50IGUpIHsNCgkJCQkJCU1l ZGNsaXBzZV9Db25z
dWx0YXRpb25fQ29uc3VsdGF0aW9uX1BvcFVwX0FsZXJ0ZXMgdGhpc0NsYXNz ID0gbmV3IE1lZGNs
aXBzZV9Db25zdWx0YXRpb25fQ29uc3VsdGF0aW9uX1BvcFVwX0FsZXJ0ZXMg KCk7DQoJCQkJCQl0
aGlzQ2xhc3MuY3JlYXRlU1NoZWxsKCk7DQoJCQkJCQl0aGlzQ2xhc3Muc1No ZWxsLm9wZW4oKTsN
CgkJCQkJfQ0KCQkJCX0pOw0KCX0NCg0KCS8qKg0KCSAqIFRoaXMgbWV0aG9k IGluaXRpYWxpemVz
IGNvbWJvZGF0ZWF1dHJlcwkNCgkgKg0KCSAqLw0KCXByaXZhdGUgdm9pZCBj cmVhdGVDb21ib2Rh
dGVhdXRyZXMoKSB7DQoJCUdyaWREYXRhIGdyaWREYXRhNTYgPSBuZXcgR3Jp ZERhdGEoKTsNCgkJ
Z3JpZERhdGE1Ni53aWR0aEhpbnQgPSA4MDsNCgkJY29tYm9kYXRlYXV0cmVz ID0gbmV3IENvbWJv
KGdyb3VwZGl2ZXJzLCBTV1QuTk9ORSk7DQoJCWNvbWJvZGF0ZWF1dHJlcy5z ZXRJdGVtcyAobmV3
IFN0cmluZyBbXXsiIiwiQXVqb3VyZCdodWkiLCJFbiB1cmdlbmNlcyIsICJE w6hzIHF1ZSBwb3Nz
aWJsZSIsICJEYW5zIDEgam91ciIsIkRhbnMgMiBqb3VycyIsIkRhbnMgMyBq b3VycyIsIkRhbnMg
NCBqb3VycyIsIkRhbnMgNSBqb3VycyIsIkRhbnMgNiBqb3VycyIsIkRhbnMg MSBzZW1haW5lIiwi
RGFucyAyIHNlbWFpbmVzIiwiRGFucyAzIHNlbWFpbmVzIiwiRGFucyAxIG1v aXMiLCJEYW5zIDIg
bW9pcyIsIkRhbnMgMyBtb2lzIiwiRGFucyA0IG1vaXMiLCJEYW5zIDUgbW9p cyIsIkRhbnMgNiBt
b2lzIiwiRGFucyA3IG1vaXMiLCJEYW5zIDggbW9pcyIsIkRhbnMgOSBtb2lz IiwiRGFucyAxMCBt
b2lzIiwiRGFucyAxMSBtb2lzIiwgIkRhbnMgMSBhbiIsICJEYW5zIDIgYW5z IiwgIkRhbnMgMyBh
bnMiLCAiRGFucyA0IGFucyIsICJEYW5zIDUgYW5zIn0pOw0KCQljb21ib2Rh dGVhdXRyZXMuc2V0
TGF5b3V0RGF0YShncmlkRGF0YTU2KTsNCgl9DQoNCgkvKioNCgkgKiBUaGlz IG1ldGhvZCBpbml0
aWFsaXplcyBjb21ib2xpZXVhdXRyZXMJDQoJICoNCgkgKi8NCglwcml2YXRl IHZvaWQgY3JlYXRl
Q29tYm9saWV1YXV0cmVzKCkgew0KCQlHcmlkRGF0YSBncmlkRGF0YTU1ID0g bmV3IEdyaWREYXRh
KCk7DQoJCWdyaWREYXRhNTUud2lkdGhIaW50ID0gMTIwOw0KCQljb21ib2xp ZXVhdXRyZXMgPSBu
ZXcgQ29tYm8oZ3JvdXBkaXZlcnMsIFNXVC5OT05FKTsNCgkJY29tYm9saWV1 YXV0cmVzLnNldFRl
eHQoIkNob2lzaXIiKTsNCgkJY29tYm9saWV1YXV0cmVzLnNldExheW91dERh dGEoZ3JpZERhdGE1
NSk7DQoJfQ0KDQp9DQo=
------=_Part_2302_13448963.1140156433895--
Re: Parse Error and partial solution [message #612144 is a reply to message #118211] Fri, 17 February 2006 15:20 Go to previous message
Eclipse UserFriend
Originally posted by: richkulp.us.NO_SPAM.ibm.com

What line is actually in error? Is it the popupCal.addSelectionListener()?

If it is, then the problem is popupCal is null. This would happen
because where you put the popupCal = new .... has not yet been called.
The best place to put it is immediately after the new Shell() for which
the popupCal is for. Assuming you are trying to access it after that
shell has been created and not before.

Buenzli wrote:
> The error comes from here:
> // **// finally add the selection listener for pop-up calendar
> popupCal.addSelectionListener(new SelectionAdapter() {
> public void widgetSelected(SelectionEvent e) {
> if (popupCal.getDate() != null) {
> textdatelabo.setText(new SimpleDateFormat("EEE dd/MM/yy").format(
> popupCal.getDate().getTime()));
> }
> }
> });
>
> I attached the full code.

--
Thanks,
Rich Kulp
Re: Parse Error and partial solution [message #612145 is a reply to message #118293] Fri, 17 February 2006 17:45 Go to previous message
Dominique Buenzli is currently offline Dominique BuenzliFriend
Messages: 59
Registered: July 2009
Member
It works if I put popupCal.addSelectionListener(new SelectionAdapter() just after the sShell = new Shell.
Thanks very much again for all your help.
Previous Topic:Parse Error
Next Topic:Mustang (java 1.6)
Goto Forum:
  


Current Time: Thu Apr 25 17:00:09 GMT 2024

Powered by FUDForum. Page generated in 0.08705 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top