Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » B3 » b3 DSL revsion 2
b3 DSL revsion 2 [message #582077] Sat, 17 October 2009 03:13
Henrik Lindberg is currently offline Henrik LindbergFriend
Messages: 2509
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------060302060609010707000904
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hi,
I just checked in a major revision of the b3 DSL (SVN revision 80315).
You can check it out from Buckminster's SVN (org.eclipse.b3.beelang.*)
if you want to play with the editor (and get syntax coloring).

The sample file has been updated to showcase all syntax. I have included
it here (this time in ISO 8859-1 format ;) )

The sample file contains more descriptions of how the b3 language works,
and I hope it is possible to understand the examples, even if many are
just syntax tests with unrealistic data.

Changes in brief:
- The syntax for action was getting too complex with too many advanced
features supported with very little for the user in terms of clues as to
order of evaluation. (I had a strong sense of reading an inverse BASIC
program...)

10 $x = "HELLO"
20 COMEFROM 90
30 STOP
20 COMEFROM 60
30 $X = "WORLD"
50 COMEFROM 10
60 PRINT $X
80 COMEFROM 30
90 PRINT $X


- There were to many ways of stating the same thing. All property
statements are now made in a compund 'properties {}' clause.

- The term property was overused. It became confusing when what is now
called annotations (that are properties :) set on resulting path
groups), was defined with the "property/properties keyword" - completely
impossible to understand the scope of what was defined.

- The term "result" in action was changed to "layout", as the
declaration really is an input to the actor asking it to "lay out" the
result in accordance with the declared layout (i.e. former "result).

- The specification of multiple results with different nested input
groups was simply too complex. If something like that is needed, it can
be constructed out of regular groups and use of filters.

- Language changes include using ":" as member/feature operator. Use of
'.' is not possible since b3 has variables with fully qualified names.
The previously used "->" looked ugly and was replaced by the much more
handsome ":".

- whitespace is no longer allowed in Qualified names and paths. (Thanks
to someone explaining what the XText hidden bug is doing wrong).

- The term "void" was replaced with "hidden" (as explained in a separate
post).

- Expression statements are now allowed in the declarative scopes where
paths are declared in artifacts and layout, and where parts are declared
in groups (and actions). This means that it is possible to perform
advanced operations on returned results via utility classes.

- Expression statements got more power as it is now possible to describe
calls, chained calls a:b:c():d(), and it is possible to pass
a variable number of arguments in calls (without having to name each
parameter).

- The ^ escape to turn keywords into non reserved words was removed.

- preconditions and postconditions are now allowed in several places.
These consists of a sequence of assert statements that are made up of a
boolean expression and a message if the assert fails.

- The term "syncronized" was replaced with "parallel" or "sequential" as
synchronized is a java concept very different from sequential operation.

So, what is left to do in terms of defining the language?
- feedback - the more the better
- define the syntax and architecture for inclusion of pieces from other
b3 files (and models).
- investigate idea of handling a .properties file as a translation into
a path group where properties become annotations.
- revisit advice - the use of / in paths is similar to the use of : in
member/feature expressions - x:y is essentially the same as x/y.
Unifying the two concepts would make it possible to write very powerful
expressions - the only difference between advice and other expressions
is really binding time and order of evaluation. Armed with XPath like
expressions, it would for instance be easy to find every license.txt
file in the built result, to for instance compute the unique set of
licenses and output them to a folder or zip file. Other examples could
be to find all the parts involved in the build that have "test" parts -
a build result could be produced that includes all the tests.

- then of course - the real implementation (validation, better syntax
coloring, linking, better code completion, use of a real model rather
than the experimental now used, and there are several known bugs,
shortcuts taken, and missing support inside the DSL wrt. creating the
real editor and model.

Looking forward to your input.
- henrik

--------------060302060609010707000904
Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0";
name="sample.b3"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="sample.b3"

LyoKKiogU3ludGF4IGFzIG9mIDE2LzEwIDIwMDkgLSBleHBlcmltZW50YWwg dmVyc2lvbiAy
CioqCioqIEEgLmIzIGZpbGUKKiogY29uc2lzdHMgb2YgaW1wb3J0IHN0YXRl bWVudHMgZm9s
bG93ZWQgYnkgYSBzaW5nbGUgInVuaXQiLiBUaGlzIGlzIGFuYWxvZ291cyB3 aXRoIGEgLmph
dmEgZmlsZSBoYXZpbmcgaW1wb3J0cwoqKiBhbmQgYSBzaW5nbGUgbGFuZ3Vh Z2UgZWxlbWVu
dCAoY2xhc3MsIGludGVyZmFjZSkuCioqCioqIFRoaXMgZmlsZSBpcyBhIHNh bXBsZXIgdXNl
ZCB0byB0ZXN0IHN5bnRheC4gVGhlIGV4YW1wbGVzIGFyZSBub3QgcmVhbGlz dGljICh5b3Ug
d2lsbCBmaW5kIHBsZW50eSBvZiBhLCBiLCBjLCBmZWUgYW5kIGZvby4uLikK Ki8KCi8qCioq
IENPTU1FTlRTCioqIEJvdGggc2luZ2xlIGxpbmUgYW5kIG11bHRpIGxpbmUg Y29tbWVudHMg
YXJlIHN1cHBvcnRlZC4KKi8KCS8vIFNpbmdsZSBsaW5lIGNvbW1lbnQKCS8q IE11bHRpIGxp
bmUgY29tbWVudAoJICovCgkKLyogCioqIElNUE9SVAoqKiBJcyB1c2VkIHRv IGltcG9ydCBj
bGFzc2VzIChqdXN0IGxpa2UgaW4gamF2YSkuIFRoaXMgaXMgZG9uZSBzbyBu b24gcXVhbGlm
aWVkIG5hbWVzIGNhbiBiZSB1c2VkIGZvciBjbGFzc2VzCioqIERJU0NVU1M6 IEltcG9ydHMg
YXJlIHByb2JhYmx5IHRyYW5zbGF0ZWQgdG8gbWV0YSByZXF1aXJlbWVudHMg d2hlbiByZXNv
bHZpbmcuIEFzIHRoZXkgYXJlIHJlcXVpcmVtZW50cyBvbiB0aGUgZW52aXJv bm1lbnQuCioq
IElNUExFTUVOVEFUSU9OOiBUaGUgYjMgJ3RhcmdldCBwbGF0Zm9ybScgaXMg cHJvYmFibHkg
Y29uc3RydWN0ZWQgYnkgcmVnaXN0ZXJpbmcgcGFja2FnZXMvY2xhc3NlcyB2 aWEgZXh0ZW5z
aW9uIHBvaW50cy4KKiogSXQgaXMgbm90IHRoZSBpbnRlbnRpb24gdG8gb2Zm ZXIgYWNjZXNz
IHRvIGFsbCBqYXZhIGNsYXNzZXMgZGlyZWN0bHkgZnJvbSBiMyBhcyB0aGlz IG1ha2VzIGl0
IHZpcnR1YWxseSBpbXBvc3NpYmxlIHRvCioqIGdlbmVyYXRlIGFsdGVybmF0 aXZlIGV4ZWN1
dGlvbiBmcm9tIGEgYjMgbW9kZWwuIAoqLwppbXBvcnQgb3JnLmVjbGlwc2Uu YjMuZGVmYXVs
dC5SZXNvbHZlcnMuKjsKCi8qCioqIFVOSVQKKiogQSBVbml0IGlzIGEgQnVp bGQgVW5pdC4g
SXQgaXMgdXNlZCBmb3Igc2V2ZXJhbCBwdXJwb3NlczoKKiogLSBhcyBhIGZp bGUgdGhhdCBk
ZXNjcmliZXMgInRvcCBsZXZlbCIgcmVxdWlyZW1lbnRzICh3aGF0IHRvIGlt cG9ydCBpbnRv
IGEgd29ya3NwYWNlLCByZXBvc2l0b3JpZXMgdG8gdXNlIGV0Yy4pCioqIC0g YXMgYWR2aWNl
IHRoYXQgZXh0ZW5kcyBtZXRhIGRhdGEgdHJhbnNsYXRpb24KKiogLSBhcyB0 aGUgbWV0YSBk
YXRhIHRoYXQgZGVzY3JpYmVzIGEgdW5pdCwgd2hlbiB0aGVyZSBpcyBubyBv dGhlciBtZXRh
IGRhdGEKKioKKiogVEhFIFVOSVQgREVDTEFSQVRJT04KKiogLS0tLS0KKiog UEFSQUxMRUwg
b3IgU0VRVUVOVElBTAoqKiBBIHVuaXQgY2FuIG9wdGlvbmFsbHkgYmUgbWFy a2VkIGFzIHNl
cXVlbnRhbCBvciBwYXJhbGxlbCAodGhlIGRlZmF1bHQpLiBTZXF1ZW50aWFs IG1lYW5zIHRo
YXQgcmVxdWVzdHMgCioqIHRvIGl0cyBwYXJ0cyBtdXN0IGJlIHNlcmlhbGl6 ZWQuIEluIGFk
ZGl0aW9uLCBhbGwgZXhlY3V0aW9uIGlzIGFsd2F5cyBzeW5jaHJvbml6ZWQg LSBpLmUuIGlm
IHBhcmFsbGVsCioqIGV4ZWN1dGlvbiBpcyBpbiBlZmZlY3QsIHR3byB0aHJl YWRzIHdpbGwg
bmV2ZXIgYmUgYWJsZSB0byBldmFsdWF0ZSBhIHBhcnQgYXQgdGhlIHNhbWUg dGltZS4gU2Vx
dWVudGlhbCBzaG91bGQKKiogdGhlcmVmb3JlIG9ubHkgYmUgdXNlZCB3aGVu IGl0IGlzIGtu
b3duIHRoYXQgdGhlIHVuaXQvcGFydCBpbnZva2VzIGNvZGUgdGhhdCBjYW4g bm90IHJ1biBp
biBwYXJhbGxlbCB3aXRoCioqIG90aGVyIHRoaW5ncyAtIGV4YW1wbGUsIGEg Y29tcGlsZXIg
dGhhdCB1c2VzIGEgZml4ZWQgbmFtZSBmb3IgYSB0ZW1wZmlsZSwgY29tbWFu ZHMgdGhhdCBh
bHRlcnMgdGhlIHNhbWUgZmlsZS4KKiogSU1QTEVNRU5UQVRJT04gTk9URTog SW4gaXMgbm90
IHJlcXVpcmVkIHRvIHJ1biBpbiBwYXJhbGxlbCBqdXN0IGJlY2F1c2UgdGhl IHVuaXQgaXMg
bWFya2VkIHRvIHN1cHBvcnQgdGhpcy4KKioKKiogVU5JVCBOQU1FCioqIFRo ZSBuYW1lIG9m
IGEgdW5pdCBpcyBhIHF1YWxpZmllZCBpZGVudGlmaWVyIChJRCAoLiBJRCkq KSB3aGVyZSBJ
RCBpcyBhbiBhbHBoYW51bWVyaWNhbCBzZXF1ZW5jZSB0aGF0CioqIG11c3Qg c3RhcnQgd2l0
aCAiXyIgb3IgYSBsZXR0ZXIuIElmIGEgbmFtZSBuZWVkcyB0byBjb250YWlu IGFueSBvdGhl
ciBjaGFyYWN0ZXIsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4KKiogIiAiIC0g ZS5nLiAiUHJv
Z3JhbSBGaWxlcyIuCioqCioqIFZFUlNJT04KKiogQSBVbml0IGhhcyBhIHZl cnNpb24sIGl0
IGNhbiBiZSBlbnRlcmVkIHdpdGhvdXQgc3BlY2lhbCBxdW90ZXMgYXMgYSBz ZXJpZXMgb2Yg
Jy4nIHNlcGFyYXRlZCBzZWdtZW50cyB3aGVyZSBlYWNoCioqIHNlZ21lbnQg aXMgIChJRHwo
SU5UIElEPykpIC0gaS5lLiBudW1lcmljYWwsIG9yIGFscGhhbnVtZXJpY2Fs LiBJZiBhIHNl
Z21lbnQgbXVzdCBjb250YWluIHNvbWV0aGluZyBlbHNlLCB0aGUKKiogdmVy c2lvbiBtdXN0
IGJlIHF1b3RlZCB3aXRoaW4gIiAiLgoqKgoqKiBJTVBMRU1FTlRTIElOVEVS RkFDRVMKKiog
QSB1bml0IGNhbiBpbXBsZW1lbnQgaW50ZXJmYWNlcy4gVGhlc2UgaW50ZXJm YWNlcyBhcmUg
ImJ1aWxkIHRpbWUgaW50ZXJmYWNlcyIgYW5kIHRlbGxzIGIzIGFib3V0IAoq KiBwYXJ0cyBp
dCBjYW4gZXhwZWN0IHRvIGJlIHByZXNlbnQuIFRoaXMgYWxzbyBoZWxwcyBh biBhdXRob3Ig
b2YgZXh0ZW5kZWQgY29tcG9uZW50cywgYW5kIAoqKiBmcmVzaGx5IGNyZWF0 ZWQgY29tcG9u
ZW50cyBjb21wbHkgd2l0aCBrbm93biBidWlsZCBpbnRlcmZhY2VzIC0gaS5l LiB0aGlzIHRo
aW5nIGJ1aWxkcyBsaWtlIGFuIG9zZ2kuYnVuZGxlLgoqKgoqKiBUSEUgVU5J VCBCT0RZCioq
IC0tLS0KKiogVGhlIHVuaXQgYm9keSBpcyBlbmNsb3NlZCBpbiB7IH0uIFdp dGhpbmcgaW4g
dGhlIFVuaXQgYm9keSwgdGhlIGZvbGxvd2luZyBjbGF1c2VzIGFyZSBhbGxv d2VkOgoqKiAt
IFByb3BlcnRpZXMKKiogLSBQcm92aWRlZCBDYXBhYmlsaXRpZXMKKiogLSBS ZXF1aXJlZCBD
YXBhYmlsaXRpZXMgKGFuZCBNZXRhIFJlcXVpcmVkIENhcGFiaWxpdGllcykK KiogLSBQYXJ0
cyAoYW5hbG9nb3VzIHdpdGggbWVtYmVycyBpbiBhIGNsYXNzKS4gVGhlcmUg YXJlIHRocmVl
IGtpbmRzIG9mIHBhcnRzOiAKKioJCS0gQXJ0aWZhY3RzIChleGlzdGluZyBm aWxlcykKKioJ
CS0gR3JvdXAgKEFnZ3JlZ2F0aW9uIG9mIG90aGVyIHBhcnRzKQoqKgkJLSBB Y3Rpb24gKFBy
b2R1Y3Rpb24gb2YgbmV3IGZpbGVzIChvciBzaWRlIGVmZmVjdCkKKiogLSBB ZHZpY2UgKFBh
dGgvUHJlZGljYXRlIGJhc2VkIGFjY2VzcyB0byBlbGVtZW50cyB0aGF0IGRv IG5vdCB5ZXQg
ZXhpc3QgaW4gdGhlIG1vZGVsKS4gVXNlZCB0byBzZXQgb3B0aW9ucywgbWFr ZQoqKgkgb3Zl
cnJpZGVzLCBldGMuCioqIC0gUmVwb3NpdG9yaWVzIC0gYSBjb25maWd1cmF0 aW9uIHRoYXQg
aXMgdXNlZCB0byByZXNvbHZlIChsb29rIHVwKSB1bml0cy4KKiogLSBTeW5j aHJvbml6YXRp
b24gLSBkZWZpbmVzIG1vbml0b3JzIGFjcm9zcyB1bml0cyB0aGF0IGhlbHAg c29sdmUgaXNz
dWVzIGluIHBhcmFsbGVsIGJ1aWxkcwoqLwpzZXF1ZW50aWFsIHVuaXQgIm15 LnVuaXQiIHZl
cnNpb24gMi4zICBpbXBsZW1lbnRzIG9zZ2kuYnVuZGxlLCBlY2xpcHNlLmVj b3JlLm1vZGVs
IHsKCgkvKiBQUk9QRVJUSUVTIAoJKiogUHJvcGVydGllcyBhcmUgdGhlIHZh cmlhYmxlcyBp
biB0aGUgYjMgc3lzdGVtLgoJKiogVGhleSBjYW4gcmVmZXIgdG8gc2ltcGxl IGRhdGEgdHlw
ZXMgbGlrZSBTdHJpbmcsIEludGVnZXIsIGFuZCBCb29sZWFuLCBidXQgYWxz bwoJKiogUGFy
dHMsIFBhdGhzLCBldGMuCgkqKiBXaGVuZXZlciBwcm9wZXJ0aWVzIGFyZSBk ZWZpbmVkLCB0
aGV5IG11c3QgYmUgZGVjbGFyZWQgZmlyc3QgaW4gdGhlIGNvbnRleHQgdGhl eSBhcHBlYXIu
CgkqKgoJKiogUFJPUEVSVFkgU0VUCgkqKiBUaGUgdW5pdCBkZWNsYXJhdGlv biBhbGxvd3Mg
YSBzZXQgb2YgcHJvcGVydGllcyB0byBiZSBuYW1lZC4gVGhpcyBtYWtlcyBp dCBwb3NzaWJs
ZQoJKiogdG8gaW5jbHVkZSBhbiBpbmRpdmlkdWFsIHNldCBvZiBwcm9wZXJ0 aWVzIGZyb20g
YSBkaWZmZXJlbnQgYnVpbGQgZmlsZS4KCSoqCgkqKiBBQk9VVCBQUk9QRVJU SUVTIEFTIFZB
UklBQmxFUwoJKiogQnkgZGVmYXVsdCB2YXJpYWJsZXMgYXJlIHZpc2libGUs IGFuZCBjYW4g
YmUgbWFza2VkIGluIGRvd25zdHJlYW0gY29udGV4dHMuIFRoZSBrZXl3b3Jk CgkqKiAnaW1t
dXRhYmxlJyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIG1hc2sgYSB2YXJpYWJs ZSAobm9yIGNh
biBpdCBiZSBhc3NpZ25lZCksIAoJKiogYW5kIHRoZSBrZXl3b3JkICdsb2Nh bCcgaGlkZXMg
dGhlIHZhcmlhYmxlIGZyb20gZG93bnN0cmVhbSBjb250ZXh0cy4KCSoqCgkq KiBBbGwgdmFy
aWFibGVzIG11c3QgYmUgaW5pdGlhbGl6ZWQgKGV2ZW4gaWYgaW5pdGlhbGl6 ZWQgdG8gbnVs
bCkuIAoJKiogSXQgaXMgYW4gZXJyb3IgdG8gaW5pdGlhbGl6ZSBhbiBpbW11 dGFibGUgcHJv
cGVydHkgdG8gbnVsbC4KCSoqCgkqKiBBIHByZXZpb3VzbHkgZGVjbGFyZWQg KHJlZGVjbGFy
ZWFibGUpIHZhcmlhYmxlIGNhbiBiZSByZXN0YXRlZCBhcyBpbW11dGFibGUu IEl0IGlzIHRo
ZW4KCSoqIGltbXV0YmxlIGluIGRvd25zdHJlYW0gY29udGV4dHMuCgkqKgoJ KiogRVhQUkVT
U0lPTlMKCSoqIGIzIHN1cHBvcnRzIGV4cHJlc3Npb25zIHdpdGg6CgkqKiAg ICArIC0gKiAv
CgkqKiAgICBjb21wYXJpc29ucyB3aXRoIDwgPiA8PSA+PSA9PSB+PQoJKiog ICAgbG9naWNh
bCAhICYmIHx8CgkqKiAgICBwcm9wZXJ0aWVzIGFzIHZhcmlhYmxlcwoJKiog ICAgbWVtYmVy
IGFjY2VzcyA6IAoJKiogICAgY2FsbCAoKSwgd2l0aCBuYW1lZCBwYXJhbWV0 ZXJzIChlLmcu
ICJjb3B5KGZyb209c3JjLCB0bz1kZXN0aW5hdGlvbikiKQoJKiogICAgY2Fs bCB3aXRoIHZh
cmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMgZm9ybWF0KHRlbXBsYXRlPXNy YyAuLi4gYSwg
YiwgYyk7CgkqKiAgICAKCSoqICAgIGNhbGwgc2VxdWVuY2UgKGUuZy4gU3Ry aW5nOmZvcm1h
dCh0ZW1wbGF0ZT0iaGVsbG8gezB9IiAuLi4id29ybGQiKTp0b1VwcGVyKCkg KQoJKioKCSoq
IElNUExFTUVOQVRBVElPTiBOT1RFOiBTaW5jZSAiYjMgZmVhdHVyZXMiIGNh biBoYXZlIG5h
bWVzIGNvbnRhaW5pbmcgIi4iIGl0IHdhcyBkZWNpZGVkIHRvIHVzZSAiOiIg dG8gYWNjZXNz
CgkqKiBhIGZlYXR1cmUgb2YgdGhlIExIUyBleHByZXNzaW9uLgoJKioKCSoq IFRZUEVELCBV
TlRZUEVELCBvciBTRU1JX1RZUEVEPwoJKiogYjMgdXNlcyBzZW1pdHlwaW5n LiBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byB0eXBlIHZhcmlhYmxlcyBh bmQgYXV0b21h
dGljIGNvbnZlcnRpb24gd2lsbCB0YWtlIHBsYWNlCgkqKiBiZXR3ZWVuIHR5 cGVzIGluIG9y
ZGVyIG9mIGdlbmVyYWxpdHkuIFN0cmluZyBpcyB0aGUgbW9zdCBnZW5lcmFs LCBmb2xsd2Vk
IGJ5IEludGVnZXIsIEJvb2xlYW4sIGFuZCB0aGVuIGFsbCBvdGhlciB0eXBl cy4KCSoqIAoJ
KiogSW4gb3BlcmF0aW9ucyBvZiBtaXhlZCB0eXBlLCB0aGUgbGVzcyBnZW5l cmFsIHR5cGUg
aXMgY29udmVydGVkIHRvIHRoZSBtb3JlIGdlbmVyYWwgdHlwZSBiZWZvcmUg dGhlIG9wZXJh
dGlvbiB0YWtlcwoJKiogcGxhY2UuIFRodXMgIjQiICsgMiB5aWVsZHMgIjQy IiwgYW5kIHNv
IGRvZXMgNCArICIyIi4KCSoqCgkqKiBUeXBlIGNvbnZlcnNpb24gaXMgcG9z c2libGUgdmlh
IHV0aWxpdHkgY2xhc3Nlcy4gQSB0eXBpY2FsIGV4YW1wbGUgaXMgdG8gbWFr ZSBhIGZpbGUg
cGF0aCBvdXQgb2YgYSBzdHJpbmcsIGZvciBpbnN0YW5jZQoJKiogdG8gY2hl Y2sgaWYgYSBm
aWxlIGV4aXN0cyBlLmcuIFBhdGgoIi9Vc2Vycy9mb28vYmFyLnR4dCIpOmV4 aXN0cygpLiAK
CSoqIElNUExFTUVOQVRBVElPTiBOT1RFOiBUaGUgY29udmVyc2lvbiBpcyBw ZXJmb3JtZWQg
dXNpbmcgRWNsaXBzZSBhZGFwdC4KCSoqCgkqKiBOT1RFOgoJKiogYjMgaXMg bm90IGEgZ2Vu
ZXJhbCBwcm9ncmFtbWluZyBsYW5ndWFnZSwgYnV0IHdlIGZlbHQgaXQgd2Fz IG1vcmUgY29u
dmVudGllbnQgdG8gaW5jbHVkZSBVdGlsaXRpZXMKCSoqIGZvciBoYW5kbGlu ZyBmaWxlcywg
c3RyaW5nIGZ1bmN0aW9ucywgYW5kIGFzc2VydHMgcmF0aGVyIHRoYW4gaGFy ZHdpcmluZyB0
aGVtIGludG8gdGhlIG1vZGVsIGFuZCBsYW5ndWFnZS4KCSoqCgkqKiBDT05E SVRJT05BTCBT
RVRUSU5HCgkqKiBDb25kaXRpb25hbCBkZWNsYXJhdGlvbiBpbiBiMyBpcyBk b25lIHdpdGgg
YSAid2hlbiIgY2xhdXNlIG9uIHRoZSBmb3JtICgnd2hlbicgJygnIEJvb2xl YW4gRXhwcmVz
c2lvbiAnKScgKQoJKiogICAgZS5nLiB3aGVuKCEgc2tpcE9wdGltaXphdGlv bikgb3B0aW1p
emVGbGFncyA9ICIiOwoJKiogQ29uZGl0aW9uYWwgcHJvcGVydHkgc2V0dGlu Z3MgY2FuIGJl
IGNvbXBvdW5kIAoJKiogICAgZS5nLiB3aGVuIChmdWxseU9wdGltaXplKSB7 IG9wdGltaXph
dGlvbj10cnVlOyBmbGFncz0iLU80IC1zdHJpcCAtdXNlRnBIdyIgfQoJKioK CSoqIERJU0NV
U1M6IFNob3VsZCB0aGVyZSBiZSBhbiAiZWxzZSIgY2xhdXNlPywgYW5kIHNo b3VsZCB3ZSBy
ZW5hbWUgIndoZW4iIHRvICJpZiIgPyBUaGUgcmF0aW9uYWxlIGZvciAiZWxz ZSIgaXMgdGhh
dAoJKiogdGhlIHNhbWUgY2FuIGJlIGFjaGVpdmVkIGJ5IHJldmVyc2luZyB0 aGUgQm9vbGVh
biBleHByZXNzaW9uIGluIHRoZSBwcmVjZWRpbmcgd2hlbiBjbGF1c2UsIGJ1 dCBpdCBwdXRz
IHRoZSBidXJkZW4KCSoqIG9uIHRoZSBkZXZlbG9wZXIuIFRoZXJlIGlzIG5v IGhhcm0gaW4g
aGF2aW5nIGFuIGVsc2UgY2xhdXNlIGlmIHdlIGFsbG93IGEgd2hlbi9pZiBj bGF1c2UuCgkq
KgoJKiogVU5TRVQKCSoqIFZhcmlhYmxlcyBkZWNsYXJlZCBpbiBhIGNvbnRl eHQgY2FuIGJl
IHVuc2V0IChpbmNsdWRpbmcgaW1tdXRhYmxlIGFuZCBsb2NhbCB2YXJpYWJs ZXMpLgoJKiog
VGhpcyBtYWtlcyB0aGUgc2FtZSB2YXJpYWJsZSBmcm9tIGFuIG91dGVyIHNj b3BlIHZpc2li
bGUgKGlmIGl0IHdhcyB2aXNpYmxlIGJlZm9yZSkuIEl0IGlzIGFuIGVycm9y IHRvCgkqKiB1
bnNldCBhIHZhcmlhYmxlIGRlY2xhcmVkIGluIGFuIHVwc3RyZWFtIGNvbnRl eHQgZS5nLiB1
bnNldCBub3REZWNsYXJlZEluVGhpc0NvbnRleHQuCgkqKiAKCSovCglwcm9w ZXJ0aWVzIGEg
ewoJCS8vIGEgcHJvcGVydHkgY2FuIGJlIGluaXRpYWxpemVkIHRvIG51bGwJ CQoJCWZvbyA9
IG51bGw7CgkJaW1tdXRhYmxlICBiYXIgPSAzMjsKCQlpbW11dGFibGUgIGJh ciA9IDMyKzEw
OwoJCWJhciA9ICI0IiArIDI7CgkJYmFyID0gNCArICIyIjsKCQkKCQkvLyBt YWtlIHRoZSBw
cm9wZXJ0eSAibm90UHJldmlvdXNseUltbXV0YWJsZSIgaW1tdXRhYmxlIGlu IHRoaXMgY29u
dGV4dCBhbmQKCQkvLyBkb3duc3RyZWFtLiBXaGVuIHJldHVybmluZyBmcm9t IHRoaXMgc2Nv
cGUsIHRoZSBwcm9wZXJ0eSBpcyBhZ2FpbiBtdXRhYmxlLgoJCS8vCgkJaW1t dXRhYmxlIG5v
dFByZXZpb3VzbHlJbW11dGFibGUgPSBub3RQcmV2aW91c2x5SW1tdXRhYmxl OwoJCQoJCS8v
IGNoZWNrcyBpZiBhIGNhbGN1bGF0aW9uIGhhcyB0aGUgc2FtZSB2YWx1ZSBh cyBhIHByb3Bl
cnR5CgkJaW1tdXRhYmxlICBtZWFuaW5nZnVsID0gMzIrMTAgPT0gdGhlLm1l YW5pbmcub2Yu
bGlmZTsKCQkKCQkvLyBhIHByb3BlcnR5IGNhbiBiZSAidW5zZXQiLCB0aGF0 IG1lYW5zIHRo
YXQgaWYgaXQgd2FzIHNldCBpbiB0aGlzIGNvbnRleHQsIGl0IHdpbGwgcmV2 ZXJ0IHRvCgkJ
Ly8gaXRzIHZhbHVlIChpZiBhbnkpIGluIGFuIGVuY2xvc2luZyBjb250ZXh0 LgoJCS8vCgkJ
dW5zZXQgIHllbGxvdy5iYW5hbmE7Cgl9CgkvLyBTZXZlcmFsIHNldHMgb2Yg cHJvcGVydGll
cyBjYW4gYmUgZGVjbGFyZWQsIGFuZCB0aGV5IGNhbiBiZSBuYW1lZC4gTmFt ZWQgcHJvcGVy
dHkgc2V0cyBjYW4gYmUgCgkvLyBpbmNsdWRlZCBmcm9tIG90aGVyIC5iMyBm aWxlcy4KCS8v
IAoJcHJvcGVydGllcyBhbkluY2x1ZGFibGVTZXQgewoJCWJhciA9ICJiYXIi OwoJCWltbXV0
YWJsZSBwb2xpdGljaWFuID0gIm94eW1vcm9uIjsKCQl1bnNldCB5ZWxsb3cu YmFuYW5hOwoJ
CX0KCQoJLy8gUHJvcGVydGllcyBjYW4gYmUgY29uZGl0aW9uYWxseSBzZXQK CS8vCglwcm9w
ZXJ0aWVzIHsKCQkvLyBmb3IgYSBzaW5nbGUgcHJvcGVydHkgc3RhdGVtZW50 CgkJd2hlbihh
ID09IGIpIGIgPSBiICsgMTsJCQoJCXdoZW4oYiA9PSBiKzEpIGIgPSBiICsg MTsKCQkKCQkv
LyBmb3IgdW5zZXQKCQl3aGVuKGIgPT0gYykgdW5zZXQgYzsKCQkKCQkvLyBh bmQgZm9yIGEg
c2VxdWVuY2Ugb2YgcHJvcGVydHkgc3RhdGVtZW50cwkKCQl3aGVuKGEgPT0g YikKCQkJewoJ
CQlhID0gMTA7CgkJCWltbXV0YWJsZSBjID0gMjA7CgkJCX0KCX0KCS8vIEV4 cHJlc3Npb24g
ZXhhbXBsZXMKCXByb3BlcnRpZXMgewoJCWxvY2FsIHRtcCA9IFN0cmluZzpm b3JtYXQodGVt
cGxhdGU9IkkgYW0gYnVpbGRpbmcgZm9yIHswfSwgezF9Ii4uLiB0YXJnZXQu cGxhdGZvcm0s
IHRhcmdldC53cyk7CgkJbG9jYWwgcGF0aCA9IFBhdGgoYWRhcHQ9cGF0aEZy b21Db21tYW5k
TGluZSk7CgkJbG9jYWwgZmxhZyA9IHBhdGg6ZXhpc3RzKCk7Cgl9CgkKCS8q IFBST1ZJREVT
CgkqKiBQcm92aWRlcyBjbGF1c2UgaXMgdXNlZCB0byBkZWNsYXJlIHRoYXQg dGhlIEJ1aWxk
VW5pdCBwcm92aWRlcyBjYXBhYmlsaXRpZXMuCgkqKiBBIGNhcGFiaWxpdHkg Y29uc2lzdHMg
b2YgaW50ZXJmYWNlL3VuaXRuYW1lIGFuZCBhbiBvcHRpb25hbCAvdmVyc2lv biBhdCB0aGUg
ZW5kLgoJKiogSWYgYW4gaW50ZXJmYWNlLCB1bml0bmFtZSBvciB2ZXJzaW9u IHJlcXVpcmVz
IHVzZSBvZiByZXNlcnZlZCB3b3JkcyBvciBjaGFyYWN0ZXJzLCB0aGUgY29y cmVzcG9uZGlu
ZwoJKiogcGFydCBpcyBlbnRlcmVkIGFzIGEgc3RyaW5nIChpLmUuIHdpdGhp biAiICIpLgoJ
KiogVGhlcmUgaXMgYSBjb21wb3VuZCBwcm92aWRlcyBjbGF1c2UgaWYgc2V2 ZXJhbCBjYXBh
YmlsaXRpZXMgYXJlIHRvIGJlIHByb3ZpZGVkLgoJKiogCgkqKiBQcm92aWRl IENhcGFiaWxp
dGllcyBjYW4gYmUgZmlsdGVyZWQgLSBzb21lIGNhcGFiaWxpdGllcyBtYXkg b25seSBiZSBw
cm92aWRlZCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCgkqKiBUaGlz IGlzIGRlY2xh
cmVkIHdpdGggYSBsZWFkaW5nIHdoZW4oQm9vbGVhbkV4cHJlc3Npb24pLgoJ Ki8KCXByb3Zp
ZGVzIG9zZ2kuYnVuZGxlL2J1bmRsZWJhcjsKCXByb3ZpZGVzIG9zZ2kuYnVu ZGxlL2J1bmRs
ZWJhci8xLjA7Cglwcm92aWRlcyB7CgkJb3NnaS5idW5kbGUvYmFyYmFyYS5i dW5kbGUvMi4w
OwoJCWVjbGlwc2UuZmVhdHVyZS9pbmZsYXRlYWJsZS5wbGVhc3VyZS82LjYu NjsKCQkJd2hl
bih0YXJnZXQucGxhdGZvcm0gPT0gcGxhdGZvcm1zLndpbjMyKSBuYXRpdmUu dGhpbmcvd2lu
ZG93c0luc3RhbGxlci8xMi4yMy5yMTIzNDsKCQl9Cglwcm92aWRlcyB3aGVu KHRhcmdldC5w
bGF0Zm9ybSA9PSBwbGF0Zm9ybXMud2luMzIpICBuYXRpdmUudGhpbmcvd2lu ZG93c0luc3Rh
bGxlci8xMi4yMy5yMTIzNDsKCQoJLyogUkVRVUlSRVMgCgkqKiBSZXF1aXJl cyBjbGF1c2Ug
aXMgdXNlZCB0byBkZWNsYXJlIHRoYXQgdGhlIEJ1aWxkVW5pdCByZXF1aXJl cyBjZXJ0YWlu
IGNhcGFiaWxpdGllcy4gCgkqKiBUaGUgc3ludGF4IGRpZmZlcmVuY2VzIGJl dHdlZW4gcmVx
dWlyZWQgYW5kIHByb3ZpZGVkIGNhcGFiaWxpdGllcyBhcmUgdGhhdDoKCSoq IC0gdGhlIHZl
cnNpb24gaXMgYWx3YXlzIGEgcmFuZ2UgKGFsdGhvdWcgYSBzaW5nbGUgdmVy c2lvbiBtZWFu
cyA+PSB2ZXJzaW9uKQoJKi8KCXJlcXVpcmVzIG9zZ2kuYnVuZGxlL2Fpci8x LjA7CglyZXF1
aXJlcyB3aGVuICghdGFyZ2V0LnBsYXRmb3JtICE9ICJzcGFyYyIgJiYgdGFy Z2V0LnBsYXRm
b3JtIDwgImhwVXgiKSBvc2dpLmJ1bmRsZS9waWxsb3cvMy4wIDsKCXJlcXVp cmVzIHsKCQlv
c2dpLmJ1bmRsZS9waWxsb3cvMS4wOwoJCXdoZW4gKGEgPT0gYikgb3NnaS5i dW5kbGUvYmxh
bmtldC8xLjA7CgkJb3NnaS5idW5kbGUvbWFnaWNzdHVmZi9bMC4wLjAsIDMu NC41LnIxMjM0
NV07CgkJfQoKCS8qIE1FVEEgUkVRVUlSRVMgCgkqKiBXaXRoIGEgbGVhZGlu ZyAnbWV0YScg
a2V5d29yZCwgdGhlIHJlcXVpcmVtZW5zIGFyZSByZXF1aXJlbWVudHMgb24g dGhlIGVudmly
b25tZW50IChpLmUuIG9uIGIzIGl0c2VsZikKCSoqIEFzIGFuIGV4YW1wbGUs IGEgbWV0YSBy
ZXF1aXJlbWVudCBtYXkgYmUgdGhhdCBhIGNlcnRhaW4gbWV0YSBkYXRhIHBy b3ZpZGVyIGlz
IGluc3RhbGxlZCBvciBpdCB3aWxsIGJlIGltcG9zc2libGUgdG8KCSoqIHVz ZSB0aGlzIGRl
ZmluaXRpb24uIAoJKi8KCW1ldGEgcmVxdWlyZXMgb3NnaS5idW5kbGUvYWly L1sxLjAsMi4w
KTsKCW1ldGEgcmVxdWlyZXMgd2hlbiAoNDIgPj0gMzIpIG9zZ2kuYnVuZGxl L3BpbGxvdy8z
LjA7CgkvLyB3aXRoIG9kZCB2ZXJzaW9uIHNjaGVtZXMgaW4gcmFuZ2UKCS8v IFRPRE86IHRo
ZXNlIHZlcnNpb25zIGFyZSBub3QgdmFsaWQgT21uaSBWZXJzaW9ucyAtIHdh bnQgbW9yZSBy
ZWFsaXN0aWMgZXhhbXBsZXMuCgltZXRhIHJlcXVpcmVzIHdoZW4gKDQyID49 IDMyKSBqYXZh
Lmphci9zdHJhbmdlQXR0cmFjdG9yL1siYWxwaGEgZXhwZXJpbWVudCA0Iiwg InJlbGVhc2Ug
KiAxMGIiKTsKCW1ldGEgcmVxdWlyZXMgewoJCW9zZ2kuYnVuZGxlL3BpbGxv dy8xLjA7CgkJ
d2hlbiAobXlvcmcuZm9vIH49ICJbYS16XS4qIikgb3NnaS5idW5kbGUvYmxh bmtldC8xLjA7
CgkJfQoJCgkvKiBBUlRJRkFDVFMKCSoqIEFydGlmYWN0IGlzIGEgdmVjdG9y IG9mIHBhdGgg
Z3JvdXBzLgoJKiogQSBncm91cCBvZiBwYXRocyBtYXkgaGF2ZSBhIGJhc2Ug cGF0aCAtIHRo
ZSByZXN0IG9mIHRoZSBwYXRocyBpbiB0aGUgZ3JvdXAgYXJlIHJlbGF0aXZl IHRvIHRoZQoJ
KiogYmFzZSBwYXRoLgoJKiogRmlsZSBuYW1lcyB0aGF0IGluY2x1ZGUgcmVz ZXJ2ZWQgd29y
ZHMgb3IgcmVzZXJ2ZWQgY2hhcmFjdGVycyBhcmUgZW50ZXJlZCB3aXRoaW4g IiAiCgkqKiBG
aWxlIG5hbWVzIGNvbnRhaW5pbmcgc3BhY2VzIG11c3QgYWx3YXlzIGJlIHF1 b3RlZCwgYXMg
dGhlIGNvbXBpbGVyIHJlbW92ZXMgd2hpdGVzcGFjZSBmcm9tIG5vbiBzdHJp bmdzLgoJKiog
U3RhbmRhcmQgIFhUZXh0IGltcGxlbWVudGF0aW9uIGFsbG93cyBhIHVuYXJ5 IF4gYmVmb3Jl
IGEga2V5d29yZCBhcyBhbiBlc2NhcGUgKFJlbW92ZT8pCgkqKiBJbmNsdXNp b24gb2YgYSB2
ZWN0b3IgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCBhIGxlYWRpbmcgd2hlbihC b29sZWFuRXhw
cmVzc2lvbikuCgkqKgoJKiogRVhQUkVTU0lPTlMKCSoqIEl0IGlzIHBvc3Np YmxlIHRvIGV2
YWx1YXRlIGFuIGV4cHJlc3Npb24gdGhhdCByZXN1bHRzIGluIGEgUGF0aEdy b3VwIGFuZCBp
bmNsdWRlIHRoZSByZXN1bHQgaW4gdGhlIGxpc3QuCgkqKgoJKiogVklTSUJJ TElUWQoJKiog
VmlzaWJpbGl0eSBpcyBlaXRoZXIgcHJpdmF0ZSBvciBwdWJsaWMgKHRoZSBk ZWZhdWx0KS4g
UHJpdmF0ZSBtZWFucyB0aGF0IHRoZSBwYXJ0IGlzIG9ubHkgYWNjZXNhYmxl CgkqKiBmcm9t
IHdpdGhpbiB0aGUgYjMgdW5pdCB3aGVuZSB0aGUgcGFydCBpcyBkZWNsYXJl ZC4KCSoqCgkq
KiBBTk5PVEFUSU9OUwoJKiogSXQgaXMgcG9zc2libGUgdG8gc2V0IChhbmQg dW5zZXQpIGFu
bm90YXRpb25zIGluIHRoZSBsaXN0IHVzaW5nIGFuICdhbm5vdGF0aW9ucycg c3RhdGVtZW50
LgoJKiogVGhlIGFubm90YXRpb25zIGFyZSBzZXQgb24gdGhlIHJlc3VsdGlu ZyBwYXRoIGdy
b3VwIHZlY3RvciBhbmQgYXJlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBvZiB0 aGUKCSoqIHNl
dCBvZiBmaWxlcy4KCSoqIFNpbmNlIGZpbGUgZ3JvdXAgdmVjdG9ycyBhcmUg bWVyZ2VkLCBz
byB3aWxsIHRoZSBhbm5vdGF0aW9ucy4gVXNlIG9mIGltbXV0YWJsZSBhbm5v dGF0aW9ucyB3
aWxsIGd1YXJhbnRlZQoJKiogdGhhdCB0aGUgYW5ub3RhdGlvbiB2YWx1ZXMg c2V0IHdpbGwg
c3VyZmFjZSAob3IgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgaWYgbWVy Z2luZyBjYXVz
ZXMgdGhlIHZhbHVlCgkqKiB0byBjaGFuZ2UpLCBidXQgaXMgb2sgaWYgbXVs dGlwbGUgdmVj
dG9ycyBhcmUgdGFnZ2VkIHRoZSBzYW1lIHdheS4KCSoqCgkqKiBESVNDVVNT OiBEb2VzIGxv
Y2FsIGFubm90YXRpb24gbWFrZSBzZW5zZT8gVGhpcyB3b3VsZCBtZWFuIHRo YXQgdGhlIGFu
bm90YXRpb24gaXMgaGlkZGVuIHdoZW4gdGhlIHJlc3VsdCBpcyBtZXJnZWQu CgkqKiBJdCBp
cyBhIHNvbXdoYXQgbWFnaWNhbCBjb25jZXB0LiAKCSoqIAoJKiogTm90ZSB0 aGF0IGluZGl2
aWR1YWwgYW5ub3RhdGlvbnMgcGVyIHBhdGggaXMgbm90IHN1cHBvcnRlZC4g VG8gZmxhZyBh
biBpbmRpdmlkdWFsIGZpbGUgaXQgaXMKCSoqIHJlY29tbWVuZGVkIHRvIHVz ZSBkb3R0aWVm
aWVkIHByb3BlcnRpZXMgLSBleGFtcGxlIC0gbWFyayB0aGUgcGF0aCAvYS9i IGFzIGJlaW5n
IGxpdHRsZSBlbmRpYW4KCSoqIHByb3BlcnR5IG9yZy5teW9yZy5maWxlaW5m by5lbmRpYW4u
YS5iPWxpdHRsZS4KCSoqCgkqKiBBU1NFUlRTCgkqKiBJdCBpcyBwb3NzaWJl bCB0byBzcGVj
aWZ5IGEgc2VyaWVzIG9mIHBvc3Rjb25kaXRpb24gYXNzZXJ0cy4gQW4gYXNz ZXJ0IGlzIGEg
Ym9vbGVhbiBleHByZXNzaW9uLCBvcgoJKiogYSBjYWxsIHdpdGggYm9vbGVh biByZXN1bHQu
IChJdCBpcyBub3QgbWVhbmluZ2Z1bCB0byBoYXZlIHByZWNvbmRpdGlvbiBv biBhcnRpZmFj
dHMpLgoJKioKCSoqIERJU0NVU1MgLSBpcyBpdCBvZiB2YWx1ZSB0byBoYXZl IHByb3BlcnRp
ZXMvYW5ub3RhdGlvbnMgcGVyIGZpbGU/CgkqKiAKCSovCglwcml2YXRlIGFy dGlmYWN0cyB0
ZXN0LmExIHByb3ZpZGVzIG15b3JnLmZvb2QvZnJ1aXQuc2FsbGFkLzIuMCwg bXlvcmcucHJv
amVjdGlsZXMvZnJ1aXQuc2FsYWQKCXBvc3Rjb25kaXRpb24geyBhc3NlcnQg MiA+IDEsICJU
aGUgaW50ZWdlciBldmFsdWF0aW9uIGlzIHNjcmV3ZWQgdXAiOwoJCQkJCWFz c2VydCBTb21l
QXNzZXJ0UHJvdmlkZXI6Y2hlY2tzdW1WYWxpZGF0aW9uKGZpbGVzPXRlc3Qu YTEpLCAiQ2hl
Y2tzdW0gZmFpbGVkIjsgCgkJCQkJfQoJCXsKCQlhOyAvLyBhIHZlY3RvciB3 aXRoIG9uZSBl
bnRyeQoJCWEsIGI7IC8vIGEgdmVjdG9yIHdpdGggdHdvIGVudHJpZXMKCQlh IFsgYiwgY107
IC8vIGEgYmFzZSBwYXRoIChhKSwgd2l0aCB0d28gcmVsYXRpdmUgcGF0aHMg aW4gYSB2ZWN0
b3IKCQkvYS9iOwoJCS9hIC9iIDsgLy8gaXMgZXF1aXZhbGVudCB0byAvYS9i IC0gbm90IC8i
IGEiLyIgYiIKCQkgCgkJCgkJLy8gbmFtZXMgdGhhdCBtdXN0IGJlIHF1b3Rl ZAoJCSJ1bml0
IjsgLy8gYSBrZXl3b3JkCgkJIjFhIjsgLy8gZG9lcyBub3QgbG9vayBsaWtl IGEgcXVhbGlm
aWVkIG5hbWUKCQkiYSBiIjsgLy8gaGFzIHNwYWNlIGluIG5hbWUKCQkiYYyK miI7IC8vIGhh
cyBOTFMgY2hhcmFjdGVycwoJCSIvL2YiOyAvLyBsb29rcyBsaWtlIGEgY29t bWVudAoJCSIx
MjMiOyAvLyBpcyBhbiBpbnRlZ2VyCgkJCgkJIm15LnVuaXQiLCAibXkudW5p dCI7IC8vIHVu
aXQgaXMgYSBrZXl3b3JkCgkJLy8gZmVhdHVyZSByZW1vdmVkOiBteS5edW5p dDsgLy8gdW5p
dCBpcyBrZXl3b3JkIC0gc3RhbmRhcmQgWFRleHQgZ3JhbW1hciBlc2NhcGUg b2Yga2V5d29y
ZHMgaW4gSUQKCQl3aGVuKHRhcmdldC5wbGF0Zm9ybSA9PSAib3N4IikgIE1h Y0FwcC5hcHAg
OwoJCXdoZW4odHJ1ZSkgYmFuYW5hLnR4dCwgcGluZWFwcGxlLnR4dCwgbWFu Z28udHh0OwoJ
CXdoZW4gKHRydWUpIGV4b3RpYyBbIHJhbWJ1c3Rhbi50eHQsIHRhbWFyaW5k LnR4dCBdOwoJ
CWExIFthcHBsZS50eHQsICJiYW4gYW5hLnR4dCJdOwoJCWZlZS9hcGEuYm9v IFsgYS9iL2Mu
ZCwgYS5iLmMuZCwgby9iL2QgXTsKCQkKCQkvLyBleHByIGlzIHVzZWQgdG8g d3JpdGUgYW4g
ZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgc29tZXRoaW5nIHRoYXQKCQkvLyBj YW4gYmUgaW5j
bHVkZWQgaW4gdGhlIGxpc3QKCQlleHByIFBhdGgoYWRhcHQ9YSk7CgkJZXhw ciBQYXJ0KGFk
YXB0PWEpOnBhdGhzOnNsaWNlQW5kRGljZSgpOwoJCXdoZW4odGhlUG9wZUhh c0FGdW5ueUhh
dCkgCgkJCWV4cHIgc29tZUJhc2VQYXRoICsgIi9zdWJwYXRoIiBbIi9Vc2Vy cy9mcmVkL2J1
aWxkc3R1ZmYiXTsgCgkJCQoJCWFubm90YXRpb25zIHsgbW9ua2V5LmZvb2Q9 ImJhbmFuYSI7
IGE9bnVsbDsgYj1udWxsO30KCQl9CgkKCS8vIEFuIGVtcHR5IGFydGlmYWN0 cyB2ZWN0b3IJ
CglhcnRpZmFjdHMgZW1wdHkgewoJfQoJCgkvKiBBUlRJRkFDVFMgUFJPVklE SU5HIENBUEFC
SUxJVElFUwoJKiogSXQgaXMgcG9zc2libGUgdG8gZGVjbGFyZSB0aGF0IHRo ZSByZXN1bHRp
bmcgcGF0aCBncm91cCB2ZWN0b3IgaXMgYSAnY2FwYWJpbGl0eSBsYXllZCBv dXQgb24gZGlz
aycuCgkqKiBUaGV5IGxheW91dCBjYW4gcmVwcmVzZW50IG1hbnkgY2FwYWJp bGl0aWVzIGF0
IHRoZSBzYW1lIHRpbWUuCgkqLwoJYXJ0aWZhY3RzIHByb3ZpZGVzTWFueSBw cm92aWRlcyAg
YS9iLzEuMCwgYy9kLzIuMCwgeC95LzMuMCB7IAoJCWxvdHNPZlN0dWZmOwoJ CX0KCQoJLyog
R1JPVVAKCSoqIEEgZ3JvdXAgaXMgc2ltaWxhciB0byBhcnRpZmFjdHMgaW4g dGhhdCBpdCBj
cmVhdGVzIGEgcGF0aCBncm91cCB2ZWN0b3IsIGJ1dCBpdCBjcmVhdGVzIHRo aXMKCSoqIGJ5
IGFnZ3JlZ2F0aW5nIHBhdGggZ3JvdXAgdmVjdG9ycyBmcm9tIG90aGVyIHBh cnRzLiAKCSoq
IEp1c3QgYXMgd2l0aCBhcnRpZmFjdHM7IHRoZSByZXN1bHRpbmcgcGF0aCBn cm91cCB2ZWN0
b3IgY2FuIHJlcHJlc2VudCBjYXBhYmlsaXRpZXMsIGFuZCBoYXZlIGFubm90 YXRpb25zLgoJ
KioKCSoqIFRoZSBncm91cCBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgcmVxdWly ZWQgY2FwYWJp
bGl0aWVzLiBUaGUgc3ludGF4IGlzIHRoZSBzYW1lIGFzIGZvcgoJKiogdGhl IHVuaXQncyBy
ZXF1aXJlcyB7IH0gY2xhdXNlLCB3aXRoIHRoZSBmb2xsb3dpbmcgYWRkaXRp b25zOgoJKiog
LSBBIHRyYWlsaW5nICcjcGFydG5hbWUnICBpcyB1c2VkIGFmdGVyIHRoZSBy ZXF1aXJlbWVu
dCB0byBwaWNrIGEgcGFydGljdWxhciBwYXJ0LgoJKiogLSBBIHJlZmVyZW5j ZSBjYW4gYmUg
bWFkZSB0byBwYXJ0cyBpbiB0aGUgc2FtZSBidWlsZCB1bml0IGJ5IHVzaW5n IGEgc2luZ2xl
IGlkZW50aWZpZXIKCSoqIC0gQSByZWZlcmVuY2UgdG8gYSByZXF1aXJlZCBj YXBhYmlsaXR5
IHdpdGhvdXQgYSB0cmFpbGluZyAnI3BhcnRuYW1lJyBpcyB0YWtlbiBhcyBh IHJlZmVyZW5j
ZSB0byAnI3NlbGYnLCBtZWFuaW5nIHRoZQoJKiogICBhZ2dyZWdhdGlvbiBv ZiBhbGwgaXRz
IHB1YmxpYyBwYXJ0cy4KCSoqIC0gSXQgaXMgcG9zc2libGUgdG8gZGVmaW5l IGEgY2xvc3Vy
ZSB3aGVyZSBwcm9wZXJ0aWVzIGFuZCBhZHZpc2UgYXJlIGRlY2xhcmVkLiBU aGV5IGhhdmUg
ZG93bnN0cmVhbSBlZmZlY3QKCSoqICAgKGkuZS4gd2hlbiBldmFsdWF0aW5n IHRoZSBwYXJ0
KS4gVGhlIGNsb3N1cmUgaXMgZGVmaW5lZCB1c2luZyBhIHRyYWlsaW5nIHdp dGggeyB9IHN0
YXRlbWVudC4KCSoqIC0gQSBjbG9zdXJlIGNhbiBiZSBkZWZpbmVkIGZvciBz ZXZlcmFsIHJl
cXVpcmVtZW50cyBhdCB0aGUgc2FtZSB0aW1lIGJ5IGVuY2xvc2luZyB0aGUg cmVxdWlyZW1l
bnRzIGluIGN1cmx5CgkqKiAgIGJyYWNrZXRzIHtyIHIgcn0gd2l0aCB7IH0K CSoqIC0gQSBs
ZWFkaW5nIGhpZGRlbiBrZXl3b3JkIGluZGljYXRlcyB0aGF0IHRoZSByZXN1 bHRpbmcgcGF0
aCBncm91cCB2ZWN0b3IgZnJvbSB0aGUgZXZhbHVhdGlvbiBvZiB0aGUgcGFy dCBzaG91bGQK
CSoqICAgbm90IGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgcGF0aCBn cm91cCB2ZWN0
b3IuCgkqKiAtIFRoZSByZXN1bHQgb2YgaW5kaXZpZHVhbCBwYXJ0IGV2YWx1 YXRpb24sIG9y
IGV2YWx1YXRpb24gb2YgYSBncm91cCBvZiByZXF1aXJlbWVudHMgY2FuIGJl IGFzc2lnbmVk
IHRvIGFuIGFsaWFzLgoJKiogICBUaGUgYWxpYXMgaXMgYSBwcm9wZXJ0eSB0 aGF0IGlzIGlu
Y2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgcGF0aCBncm91cCB2ZWN0b3IuIFRo aXMgbWFrZXMg
aXQgcG9zc2libGUgZm9yIGEgdXNlcgoJKiogICBvZiB0aGUgdmVjdG9yIHRv IHJlZmVyZW5j
ZSBhIHBhcnRpY3VsYXIgcGFydCBvZiB0aGUgc2V0LgoJKiogLSBoaWRkZW4g YW5kIGFsaWFz
IGNhbiBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dCBmb3IgYSBncm91 cCB0aGF0IHJl
cHJlc2VudHMgYSBwYXJ0IChhcyBpbiB0aGlzIGNhc2UpLCBuZWl0aGVyIHRo ZQoJKiogICBw
cm9wZXJ0eSBub3IgaXRzIHZhbHVlIHN1cnZpdmUgdGhlIGdyb3VwJ3MgY29u dGV4dC4gRm9y
IG90aGVyIHR5cGVzIG9mIGdyb3VwaW5nIChpbiBhY3Rpb25zKSwgdGhpcyBp cyB2ZXJ5Cgkq
KiAgIHZhbHVhYmxlLCBidXQgaW4gYSBncm91cCBwYXJ0LCB0aGlzIGNvbnN0 cnVjdCBzaW1w
bHkgaGFzIG5vIGVmZmVjdC4gCgkqKiAtIGFuICdleHByJyBlbnRyeSBhbGxv d3MgaW5jbHVz
aW9uIG9mIGFuIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gYSBQYXJ0 IChpLmUuIHRo
ZSB2YWx1ZSB0eXBlIG9mIGEgUGFydCkuCgkqKiAgIAoJKiogQWR2YW5jZWQg ZXhhbXBsZToK
CSoqICAgICBoaWRkZW4gYSA9IHNvbWVJbnRlcmZhY2UvZ2VuZXJhdG9yLzEu MDsKCSoqICAg
ICBleHByIFBhcnQoYSk6cGF0aHM6ZXhjbHVkZSgib3JnXC5hbGllbm9yZ1wu LioiKTsKCSoq
IFRoaXMgZXZhbHVhdGVzIHRoZSBwYXJ0LCBidXQgZG9lcyBub3QgaW5jbHVk ZSBpdCAiYXMg
aXMiIGluIHRoZSByZXN1bHRpbmcgUGF0aEdyb3VwLCBpbnN0ZWFkLCBhbiBh bGlhcyBpcwoJ
KiogdXNlZCwgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSBQYXJ0IHV0aWxpdHkg d2hlcmUgdGhl
IHBhdGhzIGFyZSBwaWNrZWQgdXAgYW5kIGZpbHRlcmVkLgoJKioKCSoqIFdJ VEggQ0xPU1VS
RQoJKiogSW4gdGhlIHdpdGggY2xvc3VyZSwgcHJvcGVydGllcyBjYW4gYmUg c2V0IHVzaW5n
IHRoZSBzaW5nbGUgb3IgY29tcG91bmQgcHJvcGVydGllcyBzdGF0ZW1lbnRz LgoJKiogQWR2
aWNlIGNhbiBiZSBzZXQgdXNpbmcgYWR2aWNlIHN5bnRheC4KCSoqIAoJKi8K CXByaXZhdGUg
cGFyYWxsZWwgZ3JvdXAgImZvby9iYXIiIHByb3ZpZGVzICBteW9yZy5mb29k L2ZydWl0LmNv
Y3RhaWwvMi4wLCBhIC8gYiAvICIyLjMiCglwcmVjb25kaXRpb24geyBhc3Nl cnQgMiA+IDEs
ICJJbnRlZ2VyIGxvZ2ljIGlzIGZsYXdlZCEiOyB9Cglwb3N0Y29uZGl0aW9u IHsgYXNzZXJ0
IDIgPiAxLCAiSW50ZWdlciBsb2dpYyBpcyBmbGF3ZWQgYWZ0ZXIgdGhlIGdy b3VwIHdhcyBi
dWlsdCEhISI7IH0KCXsKCSAJYTsgLy8gcmVmZXJlbnNlIHRvIHBhcnQgaW4g c2VsZgoJCWZv
by9iYXI7IC8vIHJlZmVyZW5jZSB0byAjc2VsZiBpbiBpbnRlcmZhY2UgZm9v LCBuYW1lIGJh
cgoJCWEvYSNiOyAvLyByZWZlcmVuY2UgdG8gI2IgaW4gaW50ZXJmYWNlIGEs IG5hbWUgYQoJ
CWZ1YmJsYT0gb3NnaS5idW5kbGUvZm9vLmJhci8xLjA7IC8vIHNldHMgdGhl IHByb3BlcnR5
IGZ1YmJsYSB0byB0byB0aGUgcGF0aEdyb3VwIHJlZmVyZW5jZSBpbiBydW50 aW1lIC0gdHlw
aWNhbGx5IG5vdCB1c2VkIGluIGdyb3VwcwoJCW9zZ2kuYnVuZGxlL2ZlZS5m dW0vMS4wI2ph
cnM7CgkJb3NnaS5idW5kbGUvemVCdW5kbGUvMS4wI2phcnM7CgkJaGlkZGVu IGEvYSNiOyAv
LyBvbmx5IHBlcmZvcm1lZCBmb3Igc2lkZSBlZmZlY3QKCQloaWRkZW4gYWxp YXMubmJyMSA9
IGI7IC8vIG9ubHkgcGVyZm9ybWVkIGZvciBzaWRlIGVmZmVjdCwgYnV0IHNl dHMgYSBwcm9w
ZXJ0eSB0byB0aGUgcmVzdWx0ICh0aGF0IGlzIHRoZW4gaWdub3JlZCkKCQlh L2EjYiB3aXRo
IHsgcHJvcGVydGllcyB7IG5pY2UgPSAieWVzIjsgfX07IC8vIHNldHMgYW5k IHBhc3NlcyB0
aGUgcHJvcGVydHkgbmljZSBkb3duc3RlYW0KCQlhL2EjYiB3aXRoIHsgLy8g cGFzc2VzIHNl
dmVyYWwgcHJvcGVydGllcyBkb3duc3RyZWFtLgoJCQlwcm9wZXJ0aWVzIHsK CQkJCWE9IjIi
OyBiPSIyIjsgYz0iMyI7CgkJCQl9CgkJCX07CgkJLy8gaW5jbHVkZXMgcmVz dWx0IG9mIHRo
cmVlIHJlZmVyZW5jZXMsIGFsbCB3aXRoIHRoZSBzYW1lIHNldCBvZiBkb3du c3RyZWFtIHBy
b3BlcnRpZXMJCgkJeyBhL2EjYjsgYS9iI2M7IGEvYyNkOyB9IHdpdGggeyBw cm9wZXJ0aWVz
eyB0YXJnZXQucGxhdGZvcm09InNwYXJjIjsgfX07IAoJCS8vIHNldHMgYW4g YWxpYXMgb24g
YSBub24gaW5jbHVkZWQgcmVzdWx0LCByZXN1bHQgaXMgYSBncm91cCBvZiBp dGVtcyB3aXRo
IGRvd25zdHJlYW0gcHJvcGVydGllcwoJCWhpZGRlbiBhbGlhc2VkQnV0Tm90 SW5jbHVkZWQg
PSB7IGEvYSNiOyBhL2IjYzsgYS9jI2Q7IH0gd2l0aCB7IHByb3BlcnRpZXN7 IGZvbz0iaHB1
eCI7fSB9OwoJCS8vIHNldHMgYW4gYWxpYXMgb24gYW4gaW5jbHVkZWQgaXRl bSwgcmVzdWx0
IGlzIGEgZ3JvdXAgb2YgaXRlbXMgd2l0aCBkb3duc3RyZWFtIHByb3BlcnRp ZXMsIGEgbmVz
dGVkIGFsaWFzIGlzIHNldAoJCWFsaWFzZWRBbmRJbmNsdWRlZCA9IHsgYWxp YXMubmJyMz1h
L2EjYjsgYS9iI2M7IGEvYyNkOyB9IHdpdGggeyBwcm9wZXJ0aWVzIHtmb289 ImhwdXgiOyB9
fTsKCQkKCQkvLyBpbmNsdXNpb24gY2FuIGJlIGZpbHRlcmVkIHdpdGggYSBi b29sZWFuIGV4
cHJlc3Npb24gLSBoZXJlICJ0cnVlIiBtYWtlcyBpdCBhbHdheXMgaW5jbHVk ZWQKCQl3aGVu
ICh0cnVlKSB7IGEvYSNiOyBhL2IjYzsgYS9jI2Q7IH0gd2l0aCB7IHByb3Bl cnRpZXN7IGZv
bz0iejgwIjsgfX07CgkJLy8gZmlsdGVyaW5nIC0gaGVyZSwgbmV2ZXIgZXZl ciBpbmNsdWRl
ZCBiZWNhdXNlIGJvb2xlYW4gdmFsdWUgaXMgZmFsc2UKCQl3aGVuIChmYWxz ZSkgYS9hI2I7
CgkJLy8gYSBub24gaW5jbHVkZWQgYW5kIGZpbHRlcmVkIHJlZmVyZW5jZSB0 byBhL2EjYgoJ
CWhpZGRlbiB3aGVuICh0cnVlKSBhL2EjYjsKCQkKCQkvLyBBZHZhbmNlZCBl eGFtcGxlcwoJ
CQoJCS8vIFVzZSBhbiB1dGlsaXR5IHRvIGZpbHRlciBvdXQgdW53YW50ZWQg dGhpbmdzCgkJ
Ly8KCQlleHByIFBhcnQoYWRhcHQ9YSk6aW5jbHVkZShwYXR0ZXJuPSJecGx1 Z2lucy9vcmdc
XC5teW9yZ1xcLi4qIik7CgkJCgkJLy8gaWYgYWRkaXRpb25hbCBwcm9wZXJ0 aWVzIGRlZmlu
aXRpb25zL3JlZGVmaW5pdGlvbnMgYXJlIHJlcXVpcmVkIHRvIGV2YWx1YXRl IAoJCS8vIHRo
ZSBleHByZXNzaW9uLCB0aGVzZSBjYW4gYmUgc2V0IGluIGEgd2l0aCBjbGF1 c2UgKGVpdGhl
ciBkaXJlY3RseSBvbiB0aGUgZXhwciBzdGF0ZW1lbnQsCgkJLy8gb3Igb24g YW4gZW5jbG91
c2luZyBjb21wb3VuZCBzdGF0ZW1lbnQgdGhhdCBpbmNsdWRlcyB0aGUgZXhw ciBzdGF0ZW1l
bnQgKGFsb25lIG9yIG1peGVkIHdpdGgKCQkvLyByZXF1aXJlbWVudHMpLgoJ CS8vCgkJIGV4
cHIgUGFydChhZGFwdD1hVmFyaWFibGVUaGF0TXVzdEJlRGVmaW5lZCkgd2l0 aCB7IHByb3Bl
cnRpZXMgeyBhVmFyaWFibGVUaGF0TXVzdEJlRGVmaW5lZCA9ICJhL2IiO319 OwoJCQoJCS8v
IGNvb2wgZXhhbXBsZSAtIGlmIHBhcnQgaXMgbm90IHVwIHRvIGRhdGUsIGRv IG5vdCBpbmNs
dWRlIGl0ICh0byBhdm9pZCBhIGxlbmd0aHkgY29tcGlsZSBpZiB0aGUKCQkv LyByZXN1bHQg
aGFzIG5vdCBiZWVuIGJ1aWx0IGJlY2F1c2Ugb3RoZXIgcGFydHMgY2F1c2Ug aXQgdG8gYmUg
YnVpbHQuCgkJLy8KCQkvLyBOT1RFOiB0aGUgcGFydHMgbXVzdCBiZSBzdGF0 ZWQgZGVjbGFy
YXRpdmx5IGluIG9yZGVyIHRvIGJlIHBhcnQgb2YgdGhlIGRlcGVuZGVuY3kg Y2FsY3VsYXRp
b24uCgkJLy8gQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gcmVmZXJlbmNl IGFueSBwYXJ0
IGF0IGFueSB0aW1lIHVzaW5nIGV4cHJlc3Npb25zLCBpdCBtYXkgbm90IGJl IGF2YWlsYWJs
ZSB1bmxlc3MKCQkvLyBoYXZpbmcgYmVlbiByZXNvbHZlZCBhbmQgZXZhbHVh dGVkIGZpcnN0
LgoJCS8vIFRoZSBleGFtcGxlIGFib3ZlIG1ha2VzIHVzZSBvZiB0aGlzIGZh Y3QgLSBoYWQg
aXQgaW5jbHVkZWQgdGhlIGRlcGVuZGVuY3ksIGl0IHdvdWxkIGhhdmUgYmVl biBldmFsdWF0
ZWQKCQkvLyBhbmQgdGh1cyBhdXRvbWF0aWNhbGx5IGJlZW4gYnJvdWdodCB1 cCB0byBkYXRl
LgoJCS8vCgkJeyB3aGVuKFBhcnQoYWRhcHQ9YSk6aXNVcFRvRGF0ZSgpKSAK CQkJZXhwciBQ
YXJ0KGFkYXB0PWEpOyAKCQkJfSB3aXRoIHtwcm9wZXJ0aWVzIHthPSJzb21l dHlwZS9zb21l
bmFtZS8xLjAiOyB9fTsKCQkJCgkJLy8gZXZlbiBjb29sZXIgZXhhbXBsZSAt IGluY2x1ZGUg
dGhlIGludGVyc2VjdGlvbiBvZiB0d28gcmVzdWx0cyB3aXRoIGFsbCAib3Jn Lm15b3JnLioi
IAoJCS8vIGZpbGVzIHN0cmlwcGVkIGZyb20gdGhlIHJlc3VsdC4gKFN1Ympl Y3QgdG8gdGhl
IHVzZWQgbWV0aG9kcyBiZWluZyBhdmFpbGFibGUgb24gUGFydCBuYXR1cmFs bHkgOikpCgkJ
aGlkZGVuIGEgPSBhL2IvMS4wI3g7CgkJaGlkZGVuIGIgPSBjL2QvMi4wI3g7 CgkJaGlkZGVu
IGMgPSBleHByIFBhcnQ6aW50ZXJzZWN0aW9uKC4uLmEsIGIpOwoJCWV4cHIg UGFydChhZGFw
dD1jKTpleGNsdWRlUGF0aHMocGF0dGVybj0iXm9yZ1xcLm15b3JnXFwuKiIp OwoJCQoJCS8v
IHRoZSBsYXN0IGxpbmUgY291bGQgaGF2ZSBiZWVuIHdyaXR0ZW46IChhbmQg dGhlIGFzc2ln
bm1lbnQgdG8gYywgY291bGQgaGF2ZSBiZWVuIHNraXBwZWQpLgoJCWV4cHIg UGFydDppbnRl
cnNlY3Rpb24oLi4uYSwgYik6ZXhjbHVkZVBhdGhzKHBhdHRlcm49Il5vcmdc XC5teW9yZ1xc
LioiKTsKCQkKCQkvLyBvciwgdGhlIHNob3J0ZXN0IGZvcm0KCQloaWRkZW4g YSA9IHsgYS9i
LzEuMCN4OyBjL2QvMi4wI3g7fTsKCQlleHByIFBhcnQ6aW50ZXJzZWN0aW9u KHBhdGhHcm91
cHM9YSk6ZXhjbHVkZVBhdGhzKHBhdHRlcm49Il5vcmdcXC5teW9yZ1xcLioi KTsKCX0gCgoJ
Ly8gVGhlIGtleXdvcmQgJ3NlcXVlbnRpYWwnIGRlY2xhcmVzIHRoYXQgcGFy YWxsZWxsIGV4
ZWN1dGlvbiBvZiB0aGUgcGFydCBpcyBkaXNzYWxsb3dlZAoJcHJpdmF0ZSBz ZXF1ZW50aWFs
IGdyb3VwIGZvbyB7fQoJcHVibGljIHNlcXVlbnRpYWwgZ3JvdXAgZm9vIHt9 Cglwcml2YXRl
IGdyb3VwIGZvbyB7fQoJZ3JvdXAgZm9vIHt9CglzZXF1ZW50aWFsICBncm91 cCBmb28ge30K
CQoJCQoJLyoKCSoqIEFDVElPTgoJKiogQW4gYWN0aW9uIGhhcyBhIGdyb3Vw IGRlY2xhcmF0
aW9uIHRoYXQgZGVmaW5lcyB0aGUgaW5wdXQgdG8gYW4gYWN0b3IuIFRoZSBh Y3RvciBpcyB0
b2xkIHRvCgkqKiBwcm9kdWNlIGEgcmVzdWx0IGJhc2VkIG9uIHRoaXMgaW5w dXQgKG9yIHNl
Y3Rpb25zIHRoZXJlb2YgdXNpbmcgYWxpYXNlcyksIHRoZSBwcm9wZXJ0aWVz LCBhbmQgCgkq
KiBpbmZvcm1hdGlvbiBkZXNjcmliaW5nIHRoZSB3YW50ZWQgbGF5b3V0IG9m IHRoZSByZXN1
bHQuCgkqKgoJKiogVGhlIGFjdG9yIGlzIGRlY2xhcmVkIGluIHRoZSBwcmVh bWJsZSBvZiB0
aGUgYWN0aW9uIHBhcnQgYW5kIGlzIGluc3RhbnRpYXRlZCBvbmNlLgoJKiog UGFyYW1ldGVy
cyB0byB0aGUgYWN0b3IgaW5zdGFudGlhdGlvbiBjYW4gYmUgcGFzc2VkIHdp dGggcGFyZW50
aGVzZXMgdXNpbmcgbmFtZWQgcGFyYW1ldGVycwoJKiogKG9yZGVyIGlzIG5v dCBpbXBvcnRh
bnQpLgoJKioKCSoqIElNUExFTUVOVEFUSU9OIE5PVEU6IElzIGl0IGFsd2F5 cyBwb3NzaWJs
ZSB0byBnZXQgdGhlIG5hbWVzIG9mIHBhcmFtZXRlcnMgaW4gSmF2YSByZWZs ZWN0aW9uPwoJ
KioKCSoqIC0gQW4gYWN0aW9uIGNhbiBwcm92aWRlIHRoZSByZXN1bHRpbmcg cGF0aCBncm91
cCB2ZWN0b3IgYXMgcHJvdmlkZWQgY2FwYWJpbGl0aWVzCgkqKgoJKiogUHJv cGVydGllcwoJ
KiogUHJvcGVydGllcyBhcmUgZGVjbGFyZWQgZmlyc3QuIFRoZSBwcm9wZXJ0 eSB2YWx1ZXMg
Y2FuIHRoZW4gYmUgdXNlZCBpbiB0aGUgcmVzdCBvZiB0aGUgYWN0aW9uJ3Mg Ym9keS4KCSoq
IAoJKiogQWR2aWNlCgkqKiBUaGUgYWR2aWNlIGlzIGFwcGxpZWQgYWZ0ZXIg dGhlIHByb3Bl
cnRpZXMgaGF2ZSBiZWVuIHNldC4KCSoqCgkqKiBHcm91cAoJKiogVGhlIGdy b3VwIGNvbGxl
Y3RzIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBlYWNoIHJlcXVpcmVtZW50 LiBUaGUgY29s
bGVjdGVkIHJlc3VsdCBpcyBhdmFpbGFibGUgdG8gdGhlIGFjdG9yLgoJKiog VGhpcyBpbmNs
dWRlcyBjb2xsZWN0aW5nIHRoZSBhbm5vdGF0aW9ucyBpbiBlYWNoIGdyb3Vw LiBUaGUgYW5u
b3RhdGlvbnMgYXJlIGFsc28gYXZhaWxhYmxlIHRvIHRoZSBhY3Rvci4KCSoq CgkqKiBBbGlh
c2VzCgkqKiBBbGlhc2VzIGZvciBpbnB1dCBwYXJ0cyBoYXZlIGFuIGFkZGl0 aW9uYWwgbWVh
bmluZyBpbiBhY3Rpb25zIGFzIHRoZXNlIHByb3BlcnRpZXMgYXJlIGF2YWls YWJsZSB0byB0
aGUgYWN0b3IuCgkqKiBBIGNvbWJpbmF0aW9uIG9mIGhpZGRlbiBhbGlhcz17 IH0gY2FuIGJl
IHVzZWQgdG8gZmVlZCBzcGVjaWFsIHNlY3Rpb25zIHRvIHRoZSBhY3RvciB2 aWEgc3ltYm9s
aWMgbmFtZXMgd2l0aG91dCBoYXZpbmcKCSoqIHRvIGluY2x1ZGUgdGhlIGVu dGlyZSByZWZl
cmVudmVkIGdyb3VwIGluIHRoZSBhY3RvciBpbnB1dC4gVGhlIHVzZSBvZiBh ZGRpdGlvbmFs
IGFsaWFzIGlzIGFjdG9yIGRlcGVuZGFudCBhbmQgc2hvdWxkCgkqKiBiZSBz cGVjaWZpZWQg
aW4gdGhlIGFjdG9yJ3MgQVBJLgoJKioKCSoqIExheW91dAoJKiogTGF5b3V0 IGNsYXVzZXMg
YmVoYXZlIGxpa2UgYXJ0aWZhY3RzIHBhcnRzLCBidXQgdGhleSBhcmUgZGVz Y3JpcHRpb25z
IG9mIGEgd2FudGVkIGxheW91dCByYXRoZXIgdGhhbiByZWZlcmVuY2VzIHRv CgkqKiAocHJl
KSBleGlzdGluZyBmaWxlcy4gVHlwaWNhbGx5IGEgTGF5b3V0IGRlc2NyaWJl cyB0aGUgdG9w
IGVsZW1lbnRzLCBhbmQgYW55IGNvbW1vbiAiYmFzZSBwYXRocyIuCgkqKgoJ KiogQW5ub3Rh
dGlvbnMKCSoqIEl0IGlzIHBvc3NpYmxlIHRvIHNwZWNpZnkgYW5ub3RhdGlv bnMgaW4gdGhl
IGxheW91dCBjbGF1c2VzICh0aGUgc2FtZSB3YXkgYXMgYW5ub3RhdGlvbnMg YXJlIGRvbmUg
aW4KCSoqIGFydGlmYWN0cywgb3IgZ3JvdXAgY2xhdXNlcykuIFRoZSBkaWZm ZXJlbmNlIGlz
IHRoYXQgdGhlIGFjdG9yIG1heSB1cGRhdGUgbm9uIGltbXV0YWJsZSBhbm5v dGF0aW9ucy4K
CSoqIFRoaXMgbWVhbnMgdGhhdCBhbiBhY3RvciBjYW4gcGFzcyBpbmZvcm1h dGlvbiBiYWNr
IChvdGhlciB0aGFuIHJlc3VsdGluZyBmaWxlcykgLSBzdWNoIGFzCgkqKiBh IHZlcnNpb24g
cXVhbGlmaWVyLCBsb2NhdGlvbiBvZiBjZXJ0YWluIGZpbGVzIG9uIGRpc2sg ZXRjLgoJKioK
CSoqIFlvdSBjYW4gdGhpbmsgb2YgYW5ub3RhdGlvbnMgYXMgcHJvcGVydGll cyB0aGF0IGJ1
YmJsZSB1cHN0cmVhbSB2aWEgdGhlIGFnZ3JlZ2F0aW9uIG9mIGEgcmVzdWx0 IGZyb20gYXJ0
aWZhY3QKCSoqIGxlYWYgbm9kZXMgdmlhIGdyb3VwcyBhbmQgYWN0aW9ucy4g Q2FyZSBoYXMg
dG8gYmUgdGFrZW4gaW4gbmFtaW5nIHRoZXNlIGFzIGFsbCBhbm5vdGF0aW9u cyBhcmUgKHBv
dGVudGlhbGx5KSBwbGFjZWQKCSoqIGluIHRoZSBzYW1lIHNjb3BlIHdoZW4g Y29tYmluZGlu
ZyBwYXJ0cy4KCSoqCgkqKiBBbm5vdGF0aW9ucyBjYW4gYmUgcmVmZXJlbmNl ZCB2aWEgdGhl
IFBhcnQgdXRpbGl0eSwgZS5nLiBpZiB5b3UgbmVlZCBhIHZhbHVlIHRvIG1h a2UgZGVjaXNp
b25zLCBuYW1pbmcgbG9jYXRpb25zCgkqKiBldGMuCgkqKiAgICBhID0gc29t ZXR5cGUvc29t
ZW5hbWUjc29tZXBhcnQ7CgkqKiAgICAuLi4JCQoJKiogICAgbGF5b3V0IHsK CSoqICAgICAg
ICBleHByIFBhcnQoYWRhcHQ9YSk6YW5ub3RhdGlvbjpvcmcubXlvcmcucmV2 aXNpb24gWyBh
OyBiOyBjOyBdCgkqKiAKCSovCglwcml2YXRlIHNlcXVlbnRpYWwgYWN0aW9u IGZvbyAKCWFj
dG9yIFppcEFjdG9yKHNlcnZpY2VLZXk9Ildvb0hvbyAtIHdvb3QiKQoJcHJv dmlkZXMgIG15
b3JnLmZvb2QvZnJ1aXQuY29jdGFpbC8yLjAKCXByZWNvbmRpdGlvbiB7IGFz c2VydCAyID4g
MSwgIkludGVnZXIgbG9naWMgaXMgZmxhd2VkISI7IH0KCXBvc3Rjb25kaXRp b24geyBhc3Nl
cnQgMiA+IDEsICJJbnRlZ2VyIGxvZ2ljIGlzIGZsYXdlZCBhZnRlciB0aGUg YWN0aW9uIHdh
cyBwZXJmb3JtZWQhISEiOyB9Cgl7CgkJcHJvcGVydGllcyB7IGEgPSBiOyB9 CgkJZ3JvdXAK
CQkJcHJlY29uZGl0aW9uIHsgYXNzZXJ0IDIgPiAxLCAiSW50ZWdlciBsb2dp YyBpcyBmbGF3
ZWQhIjsgfQoJCQlwb3N0Y29uZGl0aW9uIHsgYXNzZXJ0IDIgPiAxLCAiSW50 ZWdlciBsb2dp
YyBpcyBmbGF3ZWQgYWZ0ZXIgdGhlIGdyb3VwIHdhcyBldmFsdWF0ZWQhISEi OyB9CgkJewoJ
CQlhOyAvLyBkZWZhdWx0cyB0byAjc2VsZgoJCQl3aGVuIChhcGEgPiAxMSkg YS9hI2I7CgkJ
CW9zZ2kuYnVuZGxlL2Zvby5iYXIvIjEuMi4zLnF1YWxpZmllciMsLi8iI2ph cnM7IC8vIGRl
ZmF1bHRzIHRvICNzZWxmCgkJCQoJCQkKCQkJb3NnaS5idW5kbGUvZmVlLmZ1 bS8xLjAjamFy
czsKCQkJb3NnaS5idW5kbGUvemVCdW5kbGUjamFyczsKCQkJaGlkZGVuIGEv YSNiOyAvLyBv
bmx5IHBlcmZvcm1lZCBmb3Igc2lkZSBlZmZlY3QKCQkJaGlkZGVuIGFsaWFz Lm5icjEgPSBh
L2EjYjsgLy8gb25seSBwZXJmb3JtZWQgZm9yIHNpZGUgZWZmZWN0CgkJCWEv YSNiIHdpdGgg
eyBwcm9wZXJ0aWVzeyBuaWNlID0gInllcyI7IH19OwoJCQlhL2EjYiB3aXRo IHsKCQkJCXBy
b3BlcnRpZXMgewoJCQkJCWE9IjIiOyBiPSIyIjsgYz0iMyI7CgkJCQkJfQoJ CQkJfTsKCQkJ
eyBhL2EjYjsgYS9iI2M7IGEvYyNkOyB9IHdpdGggeyBwcm9wZXJ0aWVzIHsg dGFyZ2V0LnBs
YXRmb3JtPSJzcGFyYyI7IH19OwoJCQloaWRkZW4geyBhL2EjYjsgYS9iI2M7 IGEvYyNkOyB9
IHdpdGggeyBwcm9wZXJ0aWVzIHsgZm9vPSJocHV4IjsgfX07CgkJCWhpZGRl biBhbGlhcy5u
YnIyID0geyBhbGlhcy5uYnIzPWEvYSNiOyBhL2IjYzsgYS9jI2Q7IH0gd2l0 aCB7IHByb3Bl
cnRpZXN7IGZvbz0iaHB1eCI7IH19OwoJCQl3aGVuICh0cnVlKSB7IGEvYSNi OyBhL2IjYzsg
YS9jI2Q7IH0gd2l0aCB7IHByb3BlcnRpZXMgeyBmb289Ino4MCI7IH19OwoJ CQl3aGVuIChm
YWxzZSkgYS9hI2I7CgkJCWhpZGRlbiB3aGVuICh0cnVlKSBhL2EjYjsKCQkJ fQoJCXdoZW4o
c2ltcGxlQSkgbGF5b3V0IGEKCQkJcG9zdGNvbmRpdGlvbiB7IGFzc2VydCAy ID4gMSwgIklu
dGVnZXIgbG9naWMgaXMgZmxhd2VkIGFmdGVyIHRoZSByZXN1bHQgd2FzIHBy b2R1Y2VkISEh
IjsgfQoJCXsgYTsgfQoJCXdoZW4oYWR2YW5jZWRBKSBsYXlvdXQgYQoJCQlw b3N0Y29uZGl0
aW9uIHsgYXNzZXJ0IDIgPiAxLCAiSW50ZWdlciBsb2dpYyBpcyBmbGF3ZWQg YWZ0ZXIgdGhl
IHJlc3VsdCB3YXMgcHJvZHVjZWQhISEiOyB9CgkJeyBhL2E7IGEvYjsKCQkg IGFubm90YXRp
b25zIHsgcmV2aXNpb249InIxMDEwMTAiOyB9IAoJCX0KCgl9CglhY3Rpb24g dGVzdDEgYWN0
b3IgVGVzdCh0ZXN0PSJ0ZXN0IikgcHJvdmlkZXMgYS9iLyIxIgoJewkvLyBu byBkZXBlbmRl
bmNpZXMsIG5vIHNwZWNpYWwgaW5wdXQsIGp1c3QgImRvIGl0IGFuZCBwcm9k dWNlIHJlc3Vs
dCIKCX0KCWFjdGlvbiB0ZXN0MiBhY3RvciBUZXN0KHRlc3Q9InRlc3QiKSBw cm92aWRlcyBh
L2IvIjEiCgl7CS8vIG5vIGRlcGVuZGVuY2llcywgbm8gc3BlY2lhbCBpbnB1 dCwganVzdCAi
ZG8gaXQgYW5kIHByb2R1Y2UgcmVzdWx0IgoJCS8vIGJ1dCBzZXQgYSBwcm9w ZXJ0eQoJCS8v
CgkJcHJvcGVydGllc3sgdGFyZ2V0LnBsYXRmb3JtID0gIndpbjMyIjt9CgkJ bGF5b3V0IHsg
Yi50eHQ7IH0KCX0KCglhY3Rpb24gdGVzdDMgYWN0b3IgVGVzdCh0ZXN0PSJ0 ZXN0IikgcHJv
dmlkZXMgYS9iLyIxIgoJewoJCS8vIGdyb3VwIGlucHV0IHdpdGggYSBzcGVj aWZpZWQgd2Fu
dGVkIGxheW91dAoJCWdyb3VwIHsgYTsgfSAKCQlsYXlvdXQgeyBiLnR4dDsg fQoJfQoJYWN0
aW9uIHRlc3QzIGFjdG9yIFRlc3QodGVzdD0idGVzdCIpIHByb3ZpZGVzIGEv Yi8iMSIKCXsK
CQkvLyBncm91cCBpbnB1dCB3aXRoIHNldmVyYWwgc3BlY2lmaWVkIGxheW91 dHMKCQkvLyB0
aGF0IHRoZSBhY3RvciBrbm93cyBob3cgdG8gaGFuZGxlLgoJCQoJCXByb3Bl cnRpZXN7IGRv
Y0FuZFNvdXJjZVJvb3QgPSAib3V0cHV0Rm9sZGVyIjt9CgkJZ3JvdXAgeyBh OyB9IAoJCWxh
eW91dCBhIHsgYi50eHQ7IH0KCQlsYXlvdXQgYiB7IGEudHh0OyB9Cgl9Cglh Y3Rpb24gdGVz
dDMgYWN0b3IgVGVzdCh0ZXN0PSJ0ZXN0IikgcHJvdmlkZXMgYS9iLyIxIgoJ ewoJCS8vIFBp
Y2sgZGlmZmVyZW50IGxheW91dCBiYXNlZCBvbiB0YXJnZXQgcGxhdGZvcm0K CQlncm91cCB7
IGE7IH0gCgkJd2hlbih0YXJnZXQucGxhdGZvcm09PSJ3aW4zMiIpIAoJCQls YXlvdXQgYSB7
IGIuZXhlOyB9CgkJd2hlbih0YXJnZXQucGxhdGZvcm09PSJtYWNvc3giKSAK CQkJbGF5b3V0
IGEgeyBiLmFwcDsgfQoJCXdoZW4oISh0YXJnZXQucGxhdGZvcm09PSJtYWNv c3gifHx0YXJn
ZXQucGxhdGZvcm09PSJ3aW4zMiIpKSAKCQkJbGF5b3V0IGEgeyBiOyB9Cgl9 CgoJYWN0aW9u
IFdpdGhBbm5vdGF0aW9ucyBhY3RvciBUZXN0IChpbml0aWFsaXplPSJ3aXRo IHRoaXMiKSB7
CgkJCXByb3BlcnRpZXMgeyBhID0gYjsgfQoJCQlhZHZpY2UgeyB9IAoJCQln cm91cCB7IGE7
IGI7IGM7fQoJCQlsYXlvdXQgeyBhLCBiLCBjOyBiYXNlIFt4LCB5LCB6XTsg YW5ub3RhdGlv
bnN7IGEgPSBhK2I7fX0KCX0KCgkKCS8qKiBTZXF1ZW50aWFsIGNsYXVzZXMg YWxsb3dzIHNl
cmlhbGl6ZWQgZXhlY3V0aW9uIHRvIGJlIHNwZWNpZmllZCBhY3Jvc3MgdW5p dHMvYWN0aW9u
cy4KCSoqIFdoZW4gZXhlY3V0aW5nIGEgYnVpbGQgaW4gcGFyYWxsZWxsLCBh biBlbmdpbmUg
c2hvdWxkIHNlcmlhbGl6ZSB0aGUgZXZhbHVhdGlvbiAoYnVpbGQpIG9mIHRo ZQoJKiogc3Bl
Y2lmaWVkIGVsZW1lbnRzLiBTZXJpYWxpemF0aW9uIG9mIGV4ZWN1dGlvbiBt YXkgc2VyaWFs
aXplIG1vcmUgdGhhbiB3aGF0IGlzIHNwZWNpZmllZCBidXQgbmV2ZXIgbGVz cy4KCSoqIEVh
Y2ggc3luY2hyb25pemVkIGxpc3Qgc3BlY2lmaWVzIGEgZ3JvdXAgdGhhdCB3 aWxsIGJlIHNl
cmlhbGl6ZWQuIFJlZmVyZW5jZXMgYXJlIHRvIHBhcnQgbmFtZXMgaW4gdGhp cyB1bml0LCBv
cgoJKiogdG8gcGFydCBuYW1lcyBpbiBvdGhlciB1bml0cy4gCgkqKgoJKiog RElTQ1VTUzog
YWx0aG91Z2ggdmVyeSB1c2VmdWwsIHN0YXRlbWVudHMgdGhhdCBzeW5jaHJv bml6ZWQgb24g
aW50ZXJmYWNlLyosIGFuZCBvbiBhY3RvcnMgYXJlIGFsc28gdXNlZnVsLgoJ KiogU3ludGF4
IHNob3VsZCBwcm9iYWJseSBiZSB4cGF0aC9xdWVyeSBsaWtlLgoJKi8JCglz ZXF1ZW50aWFs
IGEsYixjOwoJc2VxdWVudGlhbCBhL2EjeCxiL2IjeCxjL2M7CgkKCXNlcXVl bnRpYWwgeyBh
LGIsYzsgZCxlLGY7IH0gCgkKCS8qKiBSRVBPU0lUT1JJRVMKCSoqIFRoZSBy ZXBvc2l0b3J5
IGNsYXVzZSBkZWZpbmVzIHRoZSBvcmRlciBpbiB3aGljaCByZXBvc2l0b3Jp ZXMgYXJlIHNl
YXJjaGVkLgoJKiogVGhlcmUgYXJlIHR3byBmb3JtcyBvZiBlbnRyaWVzIC0g dGhlIG1vc3Qg
Y29tbW9uIGlzIGV4cGVjdGVkIHRvIGJlIHRoZSBzaG9ydCBmb3JtLCB3aGVy ZQoJKiogYm90
aCB0aGUgbG9jYXRpb24sIGFuZCByZXBvc2l0b3J5IHR5cGUgaXMgc3BlY2lm aWVkIHdpdGgg
YSBVUkkuIFRoZSBVUkkgc2NoZW1lIGlzIHVzZWQgdG8gc2VsZWN0CgkqKiBh IHJlc29sdmVy
LiBGb3IgY2FzZXMgd2hlcmUgdGhpcyBpcyBub3QgcG9zc2libGUsIHRoZSBs b25nZXIgZm9y
bSBpcyB0byBkZWNsYXJlIHRoYXQgYSByZXNvbHZlciBzaG91bGQgYmUKCSoq IHVzZWQsIGFu
ZCB0aGUgbG9jYXRpb24gKGEgZ2VuZXJhbCBVUkwpIGlzIHRoZW4gc2V0IHVz aW5nIGFkdmlj
ZSAoaWYgaW5kZWVkIHRoZSBzZWxlY3RlZCByZXNvbHZlciBuZWVkcyBhIGxv Y2F0aW9uKS4K
CSoqIAoJKiogCgkqLwoJcmVwb3NpdG9yaWVzIHsKCQkgImh0dHA6Ly9iYXIv ZmVlIiB7IH07
CgkJICJodHRwOi8vYmFyL2ZvbyI7CgkJICJodHRwOi8vYmFyL2Z1bSI7CgkJ IHJlc29sdmVy
IGZvby5iYXIgewoJCSAJLy8gU3RhdGVtZW50cyBoZXJlIGFyZSBhZHZpY2Ug cmVsYXRpdmUg
dG8gYSByZXNvbHZlci4gKGkuZS4gJy4nIGlzIGEgcmVzb2x2ZXIpCgkJIAkv LyAKCQkgCWxv
Y2F0aW9uPSJodHRwOjovL3d3dy5zb21ld2hlcmUuY29tIjsKCQkgCWFwYSA9 IDEwOwoJCSAJ
Ym9vbGVhbkZsYWcgPSAxMDsKCQkgCW9wdGlvbnMvYWR2YW5jZWRbZmVhdHVy ZUEgfj0iW2Et
el0qIl0vP1thPjIzXS9iLz8/IHsKCQkgCQlvcHRpb24xID0gMTA7CgkJIAkJ b3B0aW9uMiA9
IDIwOwoJCSAJCW9wdGlvbjMgPSAiaGVsbG8iOwoJCSAJCX07CgkJIAl9OwoJ CSB9CglhZHZp
Y2UgaW1wb3J0X0FkdmljZSB7CgkgICAgL3JlcXVlc3RzW25hbWV+PSJvcmcu bXlvcmcuKiJd
L29wdGlvbnMgewoJICAgICAgICBzb3VyY2U9dHJ1ZTsKCSAgICAgICAgbXV0 YWJsZT10cnVl
OwoJICAgICAgICB9OwoJICAgIC9yZXNvbHV0aW9uc1tuYW1lfj0ib3JnLmVj bGlwc2UuKiJd
L29wdGlvbnMgewoJICAgICAgICBsb2NhdGlvbiA9ICJwbGF0Zm9ybTovcGx1 Z2luLyI7Cgkg
ICAgICAgIH07Cgl9CSAKfQ==
--------------060302060609010707000904--
Previous Topic:b3 DSL revsion 2
Next Topic:include an "else" statement?
Goto Forum:
  


Current Time: Thu Sep 26 20:26:15 GMT 2024

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

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

Back to the top