Return-Path: Delivered-To: apmail-jakarta-taglibs-dev-archive@apache.org Received: (qmail 2093 invoked from network); 7 Aug 2002 12:24:47 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 7 Aug 2002 12:24:47 -0000 Received: (qmail 20042 invoked by uid 97); 7 Aug 2002 12:25:00 -0000 Delivered-To: qmlist-jakarta-archive-taglibs-dev@jakarta.apache.org Received: (qmail 20007 invoked by uid 97); 7 Aug 2002 12:24:58 -0000 Mailing-List: contact taglibs-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Tag Libraries Developers List" Reply-To: "Tag Libraries Developers List" Delivered-To: mailing list taglibs-dev@jakarta.apache.org Received: (qmail 19983 invoked by uid 98); 7 Aug 2002 12:24:58 -0000 X-Antivirus: nagoya (v4198 created Apr 24 2002) Message-ID: <3D511182.4010609@sun.com> Date: Wed, 07 Aug 2002 15:24:34 +0300 From: orhan alkan User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1b) Gecko/20020722 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Tag Libraries Developers List , alkanayhan@bnet.net.tr Subject: Re: New Proposal References: <7382FCA44E27D411BD4A00508BD68F9504BB0A75@pigeon.tumbleweed.com> Content-Type: multipart/mixed; boundary="------------040208070708090807010809" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N --------------040208070708090807010809 Content-Type: multipart/alternative; boundary="------------090604060208010803070806" --------------090604060208010803070806 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Hi Martin, Our plugin won't be commercialized. We want to me member of jakarta taglib family and contribute to the projects. So our affords can reach more people. And we are sure we can learn lots of thing by working with you. These are our motivations. You can find the source code as enclosed. Please don't forget that the code is not revised according to jakarta taglib project name space. We'll do that as soon as the proposal accepted. Regards Orhan Alkan Martin Cooper wrote: >What is the motivation behind bringing this tag library to Jakarta Taglibs? >It seems that it already has a healthy existence where it is, with plenty of >downloads, and existing developers. > >The existing taglib does not appear to be open source, or at least the >source code does not appear to be available from the web site. Is the source >code available somewhere, so that taglibs-dev people can review it? > >-- >Martin Cooper > > > > >>-----Original Message----- >>From: orhan alkan [mailto:orhan.alkan@sun.com] >>Sent: Monday, August 05, 2002 3:45 AM >>To: taglibs-dev >>Cc: Ayhan Alkan >>Subject: New Proposal >> >> >>I'm really sorry. This the 3th email. I think there is problem with >>submitting attachments. >>Here is our proposal; >> >> >>1- Motivation >> >>Searching on LDAP servers, presenting retrieved items and their >>attributes (including binary data such as images), and performing >>essential data manipulation (add, remove, update) operations. >>There is a generic JNDI tag in Jakarta Taglibs that supports only the >>search operation. It is possible to extend it to cover the data >>manipulation while still keeping the generic way. In our practice, >>however, we noticed that it is better to develop an LDAP specific >>library to handle LDAP objects easier. >>Simya ldap taglib v1.1 is available at http://www.simya.net >>site. It has >>been downloaded by more than 1000 developers so far and has received >>very positive feedbacks. We woud like to integrate join our product's >>revised and adopted 1.2 version to Jakarta Taglibs. >> >>2 - Overview >> >>In order to keep tags as simple as possible, we tried to select most >>common LDAP operations that JSP developers need. The >>developers are also >>free to apply unsupported operations to objects which are >>handled by taglib. >>Following tag listing demonstrates our ldap taglib's >>functionality and >>hierarchy at a glance. >> >> >>> [dn="loginDN"] >> [password="loginPassword"] >> [ssl="{on|off}"] >> [referral="{ignore|follow|throw}"] >> [authtype="{none|simple|CRAM-MD5|DIGEST-MD5}" ] > >> >> > filter="filter" >> [scope="{base|one|sub}"] >> [limit="limit"] > >> >> >> >> > [delimiter="delimiter"] >> [index="index"] >> [id="ID"] >> [default="defaultValue"] >> >>[mimeType="mimeType"] /> >> >> >> >> >> >> >> >> >[type="type"] /> >> >> >> >> >>Despite self descriptive tags and attributes, we would better point a >>couple of tricky capabilities: >>- Instances of tag store the connection parameters >>alternatively to attributes of tag. This approach >>increases performance when the page has more than one >>connection as well >>as making flexible connection parameters. >>- "mimeType" attribute of tag handles non-text >>output. There is a utility servlet attached to taglib which stores >>binary attributes temporarily to allow client applications to >>retrieve >>their contents. >> >>3- Requirements >> >>JDK 1.1 or higher >>Servlet 2.2 and JSP 1.1 compatible servlet engine >>Sun's JNDI API and LDAP implementation (included JDK 1.2 and >>above, it >>is available at http://java.sun.com/products/jndi for JDK 1.1 users). >>We would like to have your recommendation on whether we >>should continue >>to support JSP 1.1 or switch to JSP 1.2 in the new release. >> >>4- Commitment >> >>We, Orhan Alkan and Ayhan Alkan, are committed to assume ownership of >>this tag library to ensure its quality and appropriate support. If we >>become unable to assume this responsibility, I will make sure that a >>replacement is found. >> >> >>We are looking for hearing your comments >>Regards >>Orhan Alkan >> >> >> >>-- >>To unsubscribe, e-mail: >> >>For additional commands, e-mail: >> >> >> >> >> > > >-- >To unsubscribe, e-mail: >For additional commands, e-mail: > > > --------------090604060208010803070806 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit Hi Martin,

Our plugin won't be commercialized. We want to me member of jakarta taglib family and contribute to the projects. So our affords can reach more people. And we are sure we can learn lots of thing by working with you. These are our motivations.

You can find the source code as enclosed. Please don't forget that the code is not revised according to jakarta taglib project name space. We'll do that as soon as the proposal accepted.

Regards
Orhan Alkan

Martin Cooper wrote:
What is the motivation behind bringing this tag library to Jakarta Taglibs?
It seems that it already has a healthy existence where it is, with plenty of
downloads, and existing developers.

The existing taglib does not appear to be open source, or at least the
source code does not appear to be available from the web site. Is the source
code available somewhere, so that taglibs-dev people can review it?

--
Martin Cooper


  
-----Original Message-----
From: orhan alkan [mailto:orhan.alkan@sun.com]
Sent: Monday, August 05, 2002 3:45 AM
To: taglibs-dev
Cc: Ayhan Alkan
Subject: New Proposal


I'm really sorry. This the 3th email. I think there is problem with 
submitting attachments.
Here is our proposal;


1- Motivation

Searching on LDAP servers, presenting retrieved items and their 
attributes (including binary data such as images), and performing 
essential data manipulation (add, remove, update) operations.
There is a generic JNDI tag in Jakarta Taglibs that supports only the 
search operation. It is possible to extend it to cover the data 
manipulation while still keeping the generic way. In our practice, 
however, we noticed that it is better to develop an LDAP specific 
library to handle LDAP objects easier.
Simya ldap taglib v1.1 is available at http://www.simya.net 
site. It has 
been downloaded by more than 1000 developers so far and has received 
very positive feedbacks. We woud like to integrate join our product's 
revised and adopted 1.2 version to Jakarta Taglibs.

2 - Overview

In order to keep tags as simple as possible, we tried to select most 
common LDAP operations that JSP developers need. The 
developers are also 
free to apply unsupported operations to objects which are 
handled by taglib.
Following tag listing demonstrates our ldap taglib's 
functionality and 
hierarchy at a glance.
<ldap:property name="name" value="value" />

<ldap:connect [url="ldap://your.server"]
              [dn="loginDN"]
              [password="loginPassword"]
              [ssl="{on|off}"]
                           [referral="{ignore|follow|throw}"]
              [authtype="{none|simple|CRAM-MD5|DIGEST-MD5}" ] >
   
    <ldap:query [id="ID" basedn="baseDN"
                     filter="filter"
                     [scope="{base|one|sub}"]
                [limit="limit"] >

        <ldap:getDN [id="ID"] />

        <ldap:getAttribute name="name"
                                    [delimiter="delimiter"]
                           [index="index"]
                                                    [id="ID"]
                           [default="defaultValue"]
                                                    
[mimeType="mimeType"] />
    </ldap:query>

    <ldap:add dn="dn">
        <ldap:addAttribute name="name" value="value"/>
    </ldap:add>

    <ldap:modify dn="dn">
        <ldap:modifyAttribute name="name" value="value" 
[type="type"] />
    </ldap:modify>

    <ldap:delete dn="dn" />
</ldap:connect>
Despite self descriptive tags and attributes, we would better point a 
couple of tricky capabilities:
- Instances of <ldap:property/> tag store the connection parameters 
alternatively to attributes of <ldap:connect/> tag. This approach 
increases performance when the page has more than one 
connection as well 
as making flexible connection parameters.
- "mimeType" attribute of <ldap:getAttribute/> tag handles non-text 
output. There is a utility servlet attached to taglib which stores 
binary attributes temporarily to allow client applications to 
retrieve 
their contents.

3- Requirements

JDK 1.1 or higher
Servlet 2.2 and JSP 1.1 compatible servlet engine
Sun's JNDI API and LDAP implementation (included JDK 1.2 and 
above, it 
is available at http://java.sun.com/products/jndi for JDK 1.1 users).
We would like to have your recommendation on whether we 
should continue 
to support JSP 1.1 or switch to JSP 1.2 in the new release.

4- Commitment

We, Orhan Alkan and Ayhan Alkan, are committed to assume ownership of 
this tag library to ensure its quality and appropriate support. If we 
become unable to assume this responsibility, I will make sure that a 
replacement is found.


We are looking for hearing your comments
Regards
Orhan Alkan



--
To unsubscribe, e-mail:   
<mailto:taglibs-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: 
<mailto:taglibs-dev-help@jakarta.apache.org>


    


--
To unsubscribe, e-mail:   <mailto:taglibs-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:taglibs-dev-help@jakarta.apache.org>

  
--------------090604060208010803070806-- --------------040208070708090807010809 Content-Type: application/x-tar; name="ldap-taglib-1.1-src.tar" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="ldap-taglib-1.1-src.tar" bmV0LwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwNDA1NTUA MDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAwADA3MzE1MjA1MTIyADAxMDM0MQAgNQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvQ1ZTLwAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDA0MDU1NQAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDAwMDAA MDczMTUyMDUyMjAAMDEwNzczACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5l dC9DVlMvRW50cmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAw MDAwMDAAMDAwMDAwMAAwMDAwMDAwMDAxNQAwNzMxNTIwNTIyMAAwMTIzMjAAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARC9zaW15YS8vLy8NCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQv Q1ZTL1JlcG9zaXRvcnkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAw MDAwADAwMDAwMDAAMDAwMDAwMDAwMzAAMDczMTUyMDUxMjIAMDEzMDY0ACAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGxkYXB0YWdsaWIvc291cmNlcy9uZXQNCgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L0NW Uy9Sb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAw MAAwMDAwMDAwADAwMDAwMDAwMDUwADA3MzE1MjA1MTIyADAxMTYzMgAgMAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAA6cHNlcnZlcjpvcmhhbkB3d3cuc2lteWEubmV0Oi9ob21l L2N2cw0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15 YS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDQwNTU1ADAwMDAwMDAA MDAwMDAwMAAwMDAwMDAwMDAwMAAwNzMxNTIwNTEyMgAwMTE0NjMAIDUAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL0NWUy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwNDA1NTUAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAwADA3MzE1MjA1 MjIwADAxMjExNQAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEv Q1ZTL0VudHJpZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAw MDAwMDAAMDAwMDAwMDAwMTQAMDczMTUyMDUyMjAAMDEzNDQxACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAEQvbGRhcC8vLy8NCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL0NW Uy9SZXBvc2l0b3J5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAw MDAwADAwMDAwMDAwMDM2ADA3MzE1MjA1MTIyADAxNDIxNAAgMAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABsZGFwdGFnbGliL3NvdXJjZXMvbmV0L3NpbXlhDQoAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15YS9DVlMv Um9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAAMDAwMDAw MAAwMDAwMDAwMDA1MAAwNzMxNTIwNTEyMgAwMTI3NTQAIDAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAOnBzZXJ2ZXI6b3JoYW5Ad3d3LnNpbXlhLm5ldDovaG9tZS9jdnMNCgAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC8A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDA0MDU1NQAwMDAwMDAwADAwMDAwMDAA MDAwMDAwMDAwMDAAMDczMTUyMDUxMjQAMDEyNDA1ACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL2JlYW5zLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDQwNTU1ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDAwMAAwNzMzNDc2NzE3NgAwMTM1 MjIAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0 YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvYmVh bnMvLm5iYXR0cnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAw MDAwMDAxMDcxADA3MzM0NzY2MDIzADAxNTE2MgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4NCjxhdHRy aWJ1dGVzIHZlcnNpb249IjEuMCI+DQogICA8ZmlsZW9iamVjdCBuYW1lPSJMZGFwTW9kaWZ5 RG5CZWFuLmphdmEiPg0KICAgICAgPGF0dHIgbmFtZT0iTmV0QmVhbnNBdHRyRGF0YU9iamVj dENvbXBpbGVyTWFuYWdlciIgc2VyaWFsdmFsdWU9ImFjZWQwMDA1NzM3MjAwMWU2ZjcyNjcy ZTZmNzA2NTZlNjk2NDY1MmU1MzY1NzI3NjY5NjM2NTU0Nzk3MDY1MjQ0ODYxNmU2NDZjNjU2 NDYxMmFjYzg3MWI4MTA4MDMwMDAyNGMwMDA5NjM2YzYxNzM3MzRlNjE2ZDY1NzQwMDEyNGM2 YTYxNzY2MTJmNmM2MTZlNjcyZjUzNzQ3MjY5NmU2NzNiNGMwMDA0NmU2MTZkNjU3MTAwN2Uw MDAxNzg3MDc0MDAxNDQ1Nzg3NDY1NzI2ZTYxNmMyMDQzNmY2ZDcwNjk2YzYxNzQ2OTZmNmU3 NDAwMzI2ZjcyNjcyZTZlNjU3NDYyNjU2MTZlNzMyZTZkNmY2NDc1NmM2NTczMmU2YTYxNzY2 MTJlNGE2MTc2NjE0NTc4NzQ2NTcyNmU2MTZjNDM2ZjZkNzA2OTZjNjU3MjU0Nzk3MDY1Nzgi Lz4NCiAgIDwvZmlsZW9iamVjdD4NCjwvYXR0cmlidXRlcz4NCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAbmV0L3NpbXlhL2xkYXAvYmVhbnMvQ1ZTLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw NDA1NTUAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAwADA3MzIwNzEzNzcxADAxNDE0MAAg NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC9iZWFucy9D VlMvRW50cmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAw MDA2MzMAMDczMjA3MTM3NzEAMDE1NDczACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAC9MZGFwQWRkRW50cnlCZWFuLmphdmEvMS4xLjEuMS9Nb24gTWF5IDE0IDA4OjM1OjQ3 IDIwMDEvLw0KL0xkYXBBdXRoZW50aWNhdGVCZWFuLmphdmEvMS4xLjEuMS9Nb24gTWF5IDE0 IDA4OjM1OjQ3IDIwMDEvLw0KL0xkYXBEZWxldGVFbnRyeUJlYW4uamF2YS8xLjEuMS4xL01v biBNYXkgMTQgMDg6MzU6NDcgMjAwMS8vDQovTGRhcE1vZGlmeUVudHJ5QmVhbi5qYXZhLzEu MS4xLjEvTW9uIE1heSAxNCAwODozNTo0NyAyMDAxLy8NCi9MZGFwU2VhcmNoQmVhbi5qYXZh LzEuMi9TYXQgSnVuIDIzIDIxOjQ4OjA1IDIwMDEvLw0KL0xkYXBDb25uZWN0QmVhbi5qYXZh LzEuMi9XZWQgSnVsIDA0IDIxOjUzOjU4IDIwMDEvLw0KL0xkYXBNb2RpZnlEbkJlYW4uamF2 YS8xLjEvV2VkIEp1bCAwNCAyMTo1NDozOSAyMDAxLy8NCkQNCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvYmVhbnMvQ1ZT L1JlcG9zaXRvcnkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAw MDUxADA3MzE1MjA1MTIyADAxNjIyMQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABsZGFwdGFnbGliL3NvdXJjZXMvbmV0L3NpbXlhL2xkYXAvYmVhbnMNCgAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL2JlYW5zL0NWUy9S b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDA1 MAAwNzMxNTIwNTEyMgAwMTQ3NjQAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA OnBzZXJ2ZXI6b3JoYW5Ad3d3LnNpbXlhLm5ldDovaG9tZS9jdnMNCgAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC9iZWFucy9MZGFwQWRk RW50cnlCZWFuLmphdmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDMwNjQA MDcyNzc3MTQzNDMAMDE3NDYwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBh Y2thZ2UgbmV0LnNpbXlhLmxkYXAuYmVhbnM7DQoNCmltcG9ydCBqYXZheC5uYW1pbmcuKjsN CmltcG9ydCBqYXZheC5uYW1pbmcuZGlyZWN0b3J5Lio7DQppbXBvcnQgamF2YS51dGlsLkVu dW1lcmF0aW9uOw0KaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7DQoNCi8qKg0KICogVGhp cyBjb2RlIGFkZHMgdGhlIGVudHJ5IGludG8gdGhlIGxkYXANCiAqDQogKiBuZXh0IHZlcnNp b24gd2lsbCBwcm92aWRlIDogYmluYXJ5IGF0dHJpYnV0ZXMNCiAqLw0KcHVibGljIGNsYXNz IExkYXBBZGRFbnRyeUJlYW4gew0KCQ0KCXByaXZhdGUgRGlyQ29udGV4dCBjdHggPSBudWxs Ow0KCQ0KCXByaXZhdGUgQXR0cmlidXRlcyBhdHRyTGlzdCA9IG5ldyBCYXNpY0F0dHJpYnV0 ZXModHJ1ZSk7IC8vIG90aGVyIGF0dHJpYnV0ZXMNCgkgICAgICAgIA0KCXByaXZhdGUgSGFz aHRhYmxlIGF0dHJUYWJsZSA9IG5ldyBIYXNodGFibGUoKTsNCgkNCglwcml2YXRlIFN0cmlu ZyAJRE47DQoJCQkNCgkNCglwdWJsaWMgdm9pZCBzZXRDb250ZXh0IChEaXJDb250ZXh0IGN0 eCkNCgl7DQoJCXRoaXMuY3R4ID0gY3R4Ow0KCX0NCgkNCgkJDQoJcHVibGljIHZvaWQgc2V0 RE4gKCBTdHJpbmcgZG4pDQoJew0KCQl0aGlzLkROID0gZG4gOw0KCX0NCgkJDQoJDQoJcHVi bGljIHZvaWQgc2V0QWRkQXR0cmlidXRlICggU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSkN Cgl7DQoJCS8vIGdldCBhdHRyaWJ1dGUgZnJvbSBoYXNodGFibGUNCgkJQXR0cmlidXRlIHRt cCA9IChBdHRyaWJ1dGUpIGF0dHJUYWJsZS5nZXQobmFtZSk7DQoJCS8vIGlmIGF0dHJpYnV0 ZSBkb2Vzbid0IGV4aXN0LCBhZGQgaXQNCgkJaWYgKHRtcCA9PSBudWxsKSANCgkJew0KCQkJ YXR0clRhYmxlLnB1dCAoIG5hbWUsIG5ldyBCYXNpY0F0dHJpYnV0ZShuYW1lKSk7DQoJCQ0K CQkJdG1wID0gKEF0dHJpYnV0ZSkgYXR0clRhYmxlLmdldChuYW1lKTsNCgkJCXRtcC5hZGQg KCB2YWx1ZSk7DQoJCQ0KCQkJYXR0clRhYmxlLnB1dCAobmFtZSwgdG1wKTsNCgkJfQ0KCQkv LyBpZiBleGlzdHMsIGFkZCB2YWx1ZQ0KCQllbHNlDQoJCXsNCgkJCXRtcCA9IChBdHRyaWJ1 dGUpIGF0dHJUYWJsZS5nZXQobmFtZSk7DQoJCQl0bXAuYWRkICggdmFsdWUpOw0KCQl9DQoJ fQ0KCQ0KCXB1YmxpYyB2b2lkIGFkZEVudHJ5ICgpDQoJdGhyb3dzIE5hbWluZ0V4Y2VwdGlv bg0KCXsNCgkJLy8gY3JlYXRlIGF0dHJpYnV0ZSBsaXN0DQoJCUVudW1lcmF0aW9uIGVuPSBh dHRyVGFibGUua2V5cygpOw0KCQkvLyBnZXQgYXR0cmlidXRlcyBmcm9tIGhhc2ggdGFibGUN CgkJd2hpbGUgKGVuLmhhc01vcmVFbGVtZW50cygpKQ0KCQl7DQoJCQlTdHJpbmcgbmFtZSA9 IChTdHJpbmcpIGVuLm5leHRFbGVtZW50KCk7DQoJCQkvLyBnZXQgYXR0cmlidXRlIGFuZCBw dXQgaW50byBBdHRyaWJ1dGVzIGFycmF5DQoJCQlhdHRyTGlzdC5wdXQoKEF0dHJpYnV0ZSkg YXR0clRhYmxlLmdldChuYW1lKSk7DQoJCX0NCgkJDQoJCS8vIGFkZCBlbnRyeSBpbnRvIGxk YXAJDQoJCWN0eC5jcmVhdGVTdWJjb250ZXh0KEROLCBhdHRyTGlzdCk7DQoJfQ0KICAgIA0K fS8vIGVuZCBvZiBjbGFzcw0KDQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3Np bXlhL2xkYXAvYmVhbnMvTGRhcEF1dGhlbnRpY2F0ZUJlYW4uamF2YQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAw MAAwMDAwMDAwADAwMDAwMDAyNDc3ADA3Mjc3NzE0MzQzADAyMDM3MwAgMAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIG5ldC5zaW15YS5sZGFwLmJlYW5zOw0KDQpp bXBvcnQgamF2YXgubmFtaW5nLio7DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVjdG9yeS4q Ow0KDQovL2ltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOw0KDQovKioNCiAqIFRoaXMgY29k ZSBhdXRoZW50aWNhdGVzIHVzZXJzIGFnYWludHMgbGRhcA0KICoNCiAqIGFzc3VtcHRpb24x OiB1c2VyIG9ubHkgc2V0cyBETiA7DQogKi8NCnB1YmxpYyBjbGFzcyBMZGFwQXV0aGVudGlj YXRlQmVhbiANCnsNCgkNCglwcml2YXRlIERpckNvbnRleHQgY3R4ID0gbnVsbDsNCgkNCglw cml2YXRlIFN0cmluZyAJYXV0aFR5cGU9InNpbXBsZSIsDQoJCQlETiwNCgkJCXBhc3N3b3Jk OwkJCQ0KCQ0KCXB1YmxpYyB2b2lkIHNldENvbnRleHQgKERpckNvbnRleHQgY3R4KQ0KCXsN CgkJdGhpcy5jdHggPSBjdHg7DQoJfQ0KCQ0KCXB1YmxpYyB2b2lkIHNldEF1dGhUeXBlICgg U3RyaW5nIGF1dGhUeXBlKQ0KCXsNCgkJdGhpcy5hdXRoVHlwZSA9IGF1dGhUeXBlOw0KCX0N CgkNCglwdWJsaWMgdm9pZCBzZXRETiAoU3RyaW5nIGRuKSANCgl7DQoJCXRoaXMuRE4gPSBk bjsNCgl9DQoJDQoJcHVibGljIHZvaWQgc2V0UGFzc3dvcmQgKCBTdHJpbmcgcGFzc3dvcmQp DQoJew0KCQl0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7DQoJfQ0KCQ0KCXB1YmxpYyB2b2lk IGF1dGhlbnRpY2F0ZSAoKSANCgl0aHJvd3MgTmFtaW5nRXhjZXB0aW9uDQoJew0KCQkNCgkJ CS8vIEF1dGhlbnRpY2F0ZSBhcyBTLiBVc2VyIGFuZCBwYXNzd29yZCAibXlzZWNyZXQiDQog ICAgICAgIAljdHguYWRkVG9FbnZpcm9ubWVudChDb250ZXh0LlNFQ1VSSVRZX0FVVEhFTlRJ Q0FUSU9OLCBhdXRoVHlwZSk7DQoJCQkNCgkJCS8vIGlmIHByaW5jaXBhbCBhbmQgY3JlZGVu dGlhbHMgYXJlIGVtcHR5LCB5b3Ugd2lsbCBiaW5kIGFub255bW91c2x5DQogICAgICAgIAlj dHguYWRkVG9FbnZpcm9ubWVudChDb250ZXh0LlNFQ1VSSVRZX1BSSU5DSVBBTCwgRE4pOw0K ICAgICAgICAJY3R4LmFkZFRvRW52aXJvbm1lbnQoQ29udGV4dC5TRUNVUklUWV9DUkVERU5U SUFMUywgcGFzc3dvcmQpOw0KCQkJDQoJCQkvLyB3ZSBoYXZlIHRvIG1ha2Ugc29tZXRoaW5n IGluIG9yZGVyIHRvIGFjdGl2YXRlIG5ldyBhdXRoZW50aWNhdGlvbg0KCQkJLy8gc28gd2Ug YXJlIG9ubHkgbG9va2luZyBwcm92aWRlciB1cmwuDQoJCSAgCVN0cmluZyB0ZW1wdXJsID0g KFN0cmluZykgKGN0eC5nZXRFbnZpcm9ubWVudCgpKS5nZXQoY3R4LlBST1ZJREVSX1VSTCkg Ow0KCQkgIAljdHgubG9va3VwKHRlbXB1cmwpOw0KCQkJDQogIAl9DQoJCQkNCgkNCn0vLyBl bmQgb2YgY2xhc3MNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEv bGRhcC9iZWFucy9MZGFwQ29ubmVjdEJlYW4uamF2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAw MDAwMDAAMDAwMDAwMDMwMTMAMDczMjA3MTAxNjYAMDE3MzE1ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNpbXlhLmxkYXAuYmVhbnM7DQoNCmltcG9y dCBqYXZheC5uYW1pbmcuKjsNCmltcG9ydCBqYXZheC5uYW1pbmcuZGlyZWN0b3J5Lio7DQoN CmltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOw0KDQoNCnB1YmxpYyBjbGFzcyBMZGFwQ29u bmVjdEJlYW4gDQp7DQogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRf RkFDVE9SWSAgICAgICAgPSAiY29tLnN1bi5qbmRpLmxkYXAuTGRhcEN0eEZhY3RvcnkiOw0K ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0FVVEhFTlRJQ0FUSU9O ID0gInNpbXBsZSI7DQoJDQogICAgcHJpdmF0ZSBEaXJDb250ZXh0IGN0eCA9IG51bGw7DQoJ cHJpdmF0ZSBIYXNodGFibGUgZW52ID0gbmV3IEhhc2h0YWJsZSgxMSk7DQogICAgDQoJcHVi bGljIHZvaWQgY29ubmVjdCgpDQogICAgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbg0KCXsNCiAg ICAgICAgLy8gQ3JlYXRlIGluaXRpYWwgY29udGV4dA0KICAgICAgICBpZiAoICFlbnYuY29u dGFpbnNLZXkoIENvbnRleHQuSU5JVElBTF9DT05URVhUX0ZBQ1RPUlkgKSApDQogICAgICAg ICAgICBlbnYucHV0KCBDb250ZXh0LklOSVRJQUxfQ09OVEVYVF9GQUNUT1JZLCBERUZBVUxU X0ZBQ1RPUlkgKTsNCiAgICAgICAgaWYgKCBlbnYuY29udGFpbnNLZXkoIENvbnRleHQuU0VD VVJJVFlfUFJJTkNJUEFMICkgDQogICAgICAgICAgICAgICAgJiYgIWVudi5jb250YWluc0tl eSggQ29udGV4dC5TRUNVUklUWV9BVVRIRU5USUNBVElPTiApICApDQogICAgICAgICAgICBl bnYucHV0KCBDb250ZXh0LlNFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OLCBERUZBVUxUX0FVVEhF TlRJQ0FUSU9OICk7DQoNCgkJY3R4ID0gbmV3IEluaXRpYWxEaXJDb250ZXh0KGVudik7DQoJ fQ0KCQ0KCXB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QgKCkgDQogICAgdGhyb3dzIE5hbWluZ0V4 Y2VwdGlvbg0KCXsNCgkJdHJ5IA0KCQl7DQoJCQljdHguY2xvc2UoKTsNCgkJfQ0KICAgICAg ICANCgkJY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBlKSANCgkJew0KICAgICAgICAgICAgdGhy b3cgZTsNCgkJfQ0KICAgICAgICBmaW5hbGx5DQogICAgICAgIHsNCgkJCWN0eCA9IG51bGw7 DQogICAgICAgIH0NCgl9DQoJDQoJcHVibGljIGJvb2xlYW4gaXNDb25uZWN0ZWQgKCkgDQoJ ew0KCQlyZXR1cm4gKGN0eCAhPSBudWxsKTsNCgl9DQoJDQoJcHVibGljIERpckNvbnRleHQg Z2V0Q29udGV4dCAoKSANCgl7DQoJCXJldHVybiB0aGlzLmN0eDsNCgl9DQogICAgDQogICAg cHVibGljIEhhc2h0YWJsZSBnZXRFbnYoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIGVudjsN CiAgICB9DQoJDQoJcHVibGljIHZvaWQgc2V0UHJvcGVydHkoIFN0cmluZyBuYW1lLCBPYmpl Y3QgdmFsdWUgKQ0KCXsNCgkgICAgZW52LnB1dCggbmFtZSwgdmFsdWUgKTsNCgl9DQogICAg cHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eSggU3RyaW5nIG5hbWUgKQ0KICAgIHsNCiAgICAg ICAgcmV0dXJuIGVudi5nZXQoIG5hbWUgKTsNCiAgICB9DQp9Ly8gZW5kIG9mIGNsYXNzAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvYmVhbnMvTGRhcERlbGV0ZUVudHJ5QmVhbi5q YXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAxMDY2ADA3Mjc3NzE0MzQzADAy MDE3MgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIG5ldC5zaW15 YS5sZGFwLmJlYW5zOw0KDQppbXBvcnQgamF2YXgubmFtaW5nLio7DQppbXBvcnQgamF2YXgu bmFtaW5nLmRpcmVjdG9yeS4qOw0KDQoNCi8qKg0KICogVGhpcyBjb2RlIGRlbGV0ZXMgdGhl IGVudHJ5IGZyb20gdGhlIGxkYXANCiAqDQogKiANCiAqIA0KICogbmV4dCB2ZXJzaW9uIHdp bGwgcHJvdmlkZSA6IG11bHRpZW50cnkgZGVsZXRpb24NCiAqLw0KcHVibGljIGNsYXNzIExk YXBEZWxldGVFbnRyeUJlYW4gDQp7DQoJDQoJcHJpdmF0ZSBEaXJDb250ZXh0IGN0eCA9IG51 bGw7DQoJDQoJcHJpdmF0ZSBTdHJpbmcgCWRuOw0KCQ0KCXB1YmxpYyB2b2lkIHNldENvbnRl eHQgKERpckNvbnRleHQgY3R4KQ0KCXsNCgkJdGhpcy5jdHggPSBjdHg7DQoJfQ0KCQ0KCXB1 YmxpYyB2b2lkIHNldERuICggU3RyaW5nIGRuKQ0KCXsNCgkJdGhpcy5kbiA9IGRuIDsNCgl9 DQoJDQoJcHVibGljIHZvaWQgZGVsZXRlRW50cnkoKQ0KCXRocm93cyBOYW1pbmdFeGNlcHRp b24NCgl7DQoJCWN0eC5kZXN0cm95U3ViY29udGV4dChkbik7DQoJfQ0KICAgIA0KfS8vIGVu ZCBvZiBjbGFzcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvYmVh bnMvTGRhcE1vZGlmeURuQmVhbi5qYXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAw MDAwMDAxMTA2ADA3MzIwNzEwMjM3ADAxNzQzNQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABwYWNrYWdlIG5ldC5zaW15YS5sZGFwLmJlYW5zOw0KDQppbXBvcnQgamF2YXgu bmFtaW5nLio7DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVjdG9yeS4qOw0KDQoNCi8qKg0K ICogVGhpcyBjb2RlIG1ha2VzIG1vZGlmeSBkbiBvcGVyYXRpb24NCiAqDQogKi8NCnB1Ymxp YyBjbGFzcyBMZGFwTW9kaWZ5RG5CZWFuIA0Kew0KCQ0KCXByaXZhdGUgRGlyQ29udGV4dCBj dHggPSBudWxsOw0KCQ0KCXByaXZhdGUgU3RyaW5nIAlvbGRkbjsNCglwcml2YXRlIFN0cmlu ZyAJbmV3ZG47DQoJDQoJcHVibGljIHZvaWQgc2V0Q29udGV4dCAoRGlyQ29udGV4dCBjdHgp CXsJdGhpcy5jdHggPSBjdHg7CX0NCgkNCglwdWJsaWMgdm9pZCBzZXRPbGREbiAoIFN0cmlu ZyBvbGRkbil7dGhpcy5vbGRkbiA9IG9sZGRuIDsJfQ0KCQ0KCXB1YmxpYyB2b2lkIHNldE5l d0RuICggU3RyaW5nIG5ld2RuKXt0aGlzLm5ld2RuID0gbmV3ZG4gOwl9DQoJDQoJDQoJcHVi bGljIHZvaWQgbW9kaWZ5RE4oKQ0KCXRocm93cyBOYW1pbmdFeGNlcHRpb24NCgl7DQoJCWN0 eC5yZW5hbWUob2xkZG4sbmV3ZG4pOw0KCX0NCiAgICANCn0vLyBlbmQgb2YgY2xhc3MAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAbmV0L3NpbXlhL2xkYXAvYmVhbnMvTGRhcE1vZGlmeUVudHJ5QmVhbi5qYXZhAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAx MDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDA0MTEwADA3MzM0NzY1NTcwADAyMDIxMgAg MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCnBhY2thZ2UgbmV0LnNpbXlhLmxk YXAuYmVhbnM7DQoNCmltcG9ydCBqYXZheC5uYW1pbmcuKjsNCmltcG9ydCBqYXZheC5uYW1p bmcuZGlyZWN0b3J5Lio7DQppbXBvcnQgamF2YS51dGlsLio7DQoNCi8qKg0KICogVGhpcyBj b2RlIG1vZGlmaWVzIHRoZSBlbnRyeSBpbiB0aGUgbGRhcA0KICoNCiAqIG5leHQgdmVyc2lv biB3aWxsIHByb3ZpZGUgOnh4IGJpbmFyeSBhdHRyaWJ1dGVzDQogKg0KICovDQpwdWJsaWMg Y2xhc3MgTGRhcE1vZGlmeUVudHJ5QmVhbiB7DQoJDQoJcHJpdmF0ZSBEaXJDb250ZXh0IGN0 eCA9IG51bGw7DQoJCQ0KCXByaXZhdGUgTW9kaWZpY2F0aW9uSXRlbVtdIGl0ZW0gPSBudWxs OyANCgkNCglwcml2YXRlIEF0dHJpYnV0ZXMgYXR0ckxpc3QgPSBuZXcgQmFzaWNBdHRyaWJ1 dGVzKHRydWUpOyAvLyBvdGhlciBhdHRyaWJ1dGVzDQoJICAgICAgICANCglwcml2YXRlIEhh c2h0YWJsZSBhdHRyVGFibGUgPSBuZXcgSGFzaHRhYmxlKCk7ICAgICAgDQoNCglwcml2YXRl IFZlY3RvciB2ZWN0b3IgPSBuZXcgVmVjdG9yKCk7CQ0KCQ0KCXByaXZhdGUgU3RyaW5nIAlE TjsNCgkJCQ0KCQ0KCXB1YmxpYyB2b2lkIHNldENvbnRleHQgKERpckNvbnRleHQgY3R4KQ0K CXsNCgkJdGhpcy5jdHggPSBjdHg7DQoJfQ0KCQ0KCQkNCglwdWJsaWMgdm9pZCBzZXRETiAo IFN0cmluZyBkbikNCgl7DQoJCXRoaXMuRE4gPSBkbiA7DQoJfQ0KCQkNCg0KCXB1YmxpYyB2 b2lkIHNldE1vZGlmeUF0dHJpYnV0ZSAoIFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUsIGlu dCBvcGVyYXRpb25UeXBlKQ0KCXsNCgkJLyogb3BlcmF0aW9uIHBhcmFtZXRlcnMNCgkJKg0K CQkqIERpckNvbnRleHQuQUREX0FUVFJJQlVURQ0KCQkqIERpckNvbnRleHQuUkVQTEFDRV9B VFRSSUJVVEUNCgkJKiBEaXJDb250ZXh0LlJFTU9WRV9BVFRSSUJVVEUNCgkJKg0KCQkqIGFk ZGluZyBtdWx0aXBsZSB2YWx1ZSA6DQoJCSogc2V0TW9kaWZ5QXR0cmlidXRlIChuYW1lLCB2 YWx1ZSwgb3BlcmF0aW9udHlwZSkNCgkJKiBzZXRNb2RpZnlBdHRyaWJ1dGUgKG5hbWUsIHZh bHVlLCAwKQ0KCQkqLw0KCQkvLyBpZiBvcC50eXBlIG5vdCAwICwgdGhhdCBtZWFucyB1c2Vy IGkgY3JlYXRpbmcgbmV3IGF0dHJpYnV0ZQkNCgkJaWYgKG9wZXJhdGlvblR5cGUgIT0gMCAp DQoJCXsNCgkJCUF0dHJpYnV0ZSBhdHRyID0gbmV3IEJhc2ljQXR0cmlidXRlKG5hbWUsdmFs dWUpOw0KCQkJdmVjdG9yLmFkZChuZXcgTW9kaWZpY2F0aW9uSXRlbShvcGVyYXRpb25UeXBl LCBhdHRyKSk7DQoJCX0NCgkJZWxzZSANCgkJLy8gaWYgb3BlcmF0aW9uIHR5cGUgMCAsIHRo YXQgbWVhbnMgdXNlciBhbHJlYWR5IGRlZmluZWQgaXQgYW5kIG5vdyANCgkJLy8gaGUgaXMg dHJ5IHRvIGFkZCBhZGRpdGlvbmFsIHZhbHVlcw0KCQl7DQoJCQlFbnVtZXJhdGlvbiBlbj0g dmVjdG9yLmVsZW1lbnRzKCk7DQoJCQkNCgkJCWZvciAoaW50IGk9MDsgZW4uaGFzTW9yZUVs ZW1lbnRzKCk7IGkrKykNCgkJCXsNCgkJCQ0KCQkJCU1vZGlmaWNhdGlvbkl0ZW0gbW9kaXRl bSA9IChNb2RpZmljYXRpb25JdGVtKSBlbi5uZXh0RWxlbWVudCgpOw0KCQkJCUF0dHJpYnV0 ZSB0bXBhdHRyID0gKEF0dHJpYnV0ZSkgbW9kaXRlbS5nZXRBdHRyaWJ1dGUoKTsNCgkJCQlp ZiAoKHRtcGF0dHIuZ2V0SUQoKSkuZXF1YWxzKG5hbWUpKTsNCgkJCQkJdG1wYXR0ci5hZGQo dmFsdWUpOw0KCQkJDQoJCQl9DQoJCX0NCgkJLy8gc29tZSBvcGVyYXRpb25zIGhhdmUgbm8g dmFsdWUgKGUuZy4gZGVsZXRlKQ0KCQkNCg0KCX0NCgkNCg0KCXB1YmxpYyB2b2lkIG1vZGlm eUVudHJ5ICgpDQoJdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbg0KCXsNCgkJRW51bWVyYXRpb24g ZW49IHZlY3Rvci5lbGVtZW50cygpOw0KCQkNCgkJaXRlbSA9IG5ldyBNb2RpZmljYXRpb25J dGVtW3ZlY3Rvci5zaXplKCldOw0KCQkNCgkJZm9yIChpbnQgaT0wOyBlbi5oYXNNb3JlRWxl bWVudHMoKTsgaSsrKQ0KCQl7DQoJCQkNCgkJCWl0ZW1baV0gPSAoTW9kaWZpY2F0aW9uSXRl bSkgZW4ubmV4dEVsZW1lbnQoKTsNCgkJfQ0KCQkNCgkJY3R4Lm1vZGlmeUF0dHJpYnV0ZXMo RE4sIGl0ZW0pOw0KCQkNCgl9DQogICAgDQp9Ly8gZW5kIG9mIGNsYXNzDQoNCgAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA bmV0L3NpbXlhL2xkYXAvYmVhbnMvTGRhcFNlYXJjaEJlYW4uamF2YQAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQA MDAwMDAwMAAwMDAwMDAwADAwMDAwMDA2NDEyADA3MzE1MjA3MjI1ADAxNzE0MAAgMAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIG5ldC5zaW15YS5sZGFwLmJlYW5z Ow0KDQppbXBvcnQgamF2YXgubmFtaW5nLio7DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVj dG9yeS4qOw0KaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQppbXBvcnQgamF2 YS5sYW5nLkludGVnZXI7DQoNCi8qKg0KICogVGhpcyBjb2RlIGF1dGhlbnRpY2F0ZXMgdXNl cnMgYWdhaW50cyBsZGFwDQogKg0KICogYXNzdW1wdGlvbjE6IHVzZXIgZG9uJ3Qgc2V0IGJv dGggRE4gYW5kIHVzZXJOYW1lOw0KICovDQpwdWJsaWMgY2xhc3MgTGRhcFNlYXJjaEJlYW4g DQp7DQoNCiAgICBwcml2YXRlIFNlYXJjaENvbnRyb2xzIGN0bHMgICAgICA9IG5ldyBTZWFy Y2hDb250cm9scygpOw0KICAgIHByaXZhdGUgTmFtaW5nRW51bWVyYXRpb24gYW5zd2VyID0g bnVsbDsNCiAgICBwcml2YXRlIEF0dHJpYnV0ZXMgYXR0cmlidXRlcyAgICA9IG51bGw7DQoJ cHJpdmF0ZSBTZWFyY2hSZXN1bHQgc3IJCQkgPSBudWxsOw0KCXByaXZhdGUgU3RyaW5nIERO CQkJCSA9IG51bGw7DQogICAgDQogICAgcHJpdmF0ZSBTdHJpbmcgZmlsdGVyICAgICA9IG51 bGw7DQogICAgcHJpdmF0ZSBTdHJpbmcgc2VhcmNoQmFzZSA9IG51bGw7DQogICAgcHJpdmF0 ZSBTdHJpbmcgc2NvcGUgPSBudWxsOw0KDQogICAgcHVibGljIHZvaWQgc2VhcmNoKCBEaXJD b250ZXh0IGN0eCApDQogICAgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbg0KICAgIHsNCiAgICAg ICAgLy8gU2V0IHNlYXJjaCBzY29wZQ0KCQlpZiAoc2NvcGUgPT0gbnVsbCB8fCBzY29wZS5l cXVhbHNJZ25vcmVDYXNlKCJzdWIiKSkgDQogICAgICAgICAgICAgY3Rscy5zZXRTZWFyY2hT Y29wZShTZWFyY2hDb250cm9scy5TVUJUUkVFX1NDT1BFKTsgLy8gc2VhcmNoIHdob2xlIHRy ZWUNCgkJZWxzZSBpZiAoIHNjb3BlLmVxdWFsc0lnbm9yZUNhc2UoIm9uZSIpKQ0KCQkJIGN0 bHMuc2V0U2VhcmNoU2NvcGUoU2VhcmNoQ29udHJvbHMuT05FTEVWRUxfU0NPUEUpOyAvLyBz ZWFyY2ggb25lIGxldmVsIHRyZWUNCgkJZWxzZSBpZiAoIHNjb3BlLmVxdWFsc0lnbm9yZUNh c2UoImJhc2UiKSkNCgkJIAkgY3Rscy5zZXRTZWFyY2hTY29wZShTZWFyY2hDb250cm9scy5P QkpFQ1RfU0NPUEUpOyAvLyBzZWFyY2ggb25lIGxldmVsIHRyZWUNCgkJDQogICAgICAgIC8v IFNlYXJjaCBmb3Igb2JqZWN0cyB0aGF0IGhhdmUgdGhvc2UgbWF0Y2hpbmcgYXR0cmlidXRl cw0KICAgICAgICBhbnN3ZXIgPSBjdHguc2VhcmNoKHNlYXJjaEJhc2UsIGZpbHRlciwgY3Rs cyk7DQogICAgfQ0KDQogICAgcHVibGljIGJvb2xlYW4gbmV4dCgpDQogICAgdGhyb3dzIE5h bWluZ0V4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgaWYgKCBhbnN3ZXIuaGFzTW9yZUVsZW1l bnRzKCkgKQ0KICAgICAgICB7DQogICAgICAgICAgICBzciA9IChTZWFyY2hSZXN1bHQpYW5z d2VyLm5leHQoKTsNCgkJCS8vIGdldCBETg0KCQkJRE4gPSBzci5nZXROYW1lKCk7DQogICAg ICAgICAgICBhdHRyaWJ1dGVzID0gc3IuZ2V0QXR0cmlidXRlcygpOw0KICAgICAgICAgICAg cmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0N CiAgICANCiAgICBwdWJsaWMgdm9pZCBzZXRSZXR1cm5pbmdBdHRyaWJ1dGVzKCBTdHJpbmcg bGlzdCApDQogICAgew0KICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5n VG9rZW5pemVyKCBsaXN0LCAiLCIgKTsNCiAgICAgICAgU3RyaW5nW10gYXR0TGlzdCA9IG5l dyBTdHJpbmdbIHN0LmNvdW50VG9rZW5zKCkgXTsNCiAgICAgICAgZm9yICggaW50IGk9MDsg c3QuaGFzTW9yZVRva2VucygpOyBpKysgKQ0KICAgICAgICAgICAgYXR0TGlzdFtpXSA9IHN0 Lm5leHRUb2tlbigpLnRyaW0oKTsNCiAgICAgICAgY3Rscy5zZXRSZXR1cm5pbmdBdHRyaWJ1 dGVzKCBhdHRMaXN0ICk7DQogICAgfQ0KDQogICAgcHVibGljIEF0dHJpYnV0ZSBnZXRBdHRy aWJ1dGUgKFN0cmluZyBhdHRyTmFtZSkNCiAgICB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uDQog ICAgew0KICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5nZXQoYXR0ck5hbWUpOw0KICAgIH0N Cg0KICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nQXR0cmlidXRlIChTdHJpbmcgYXR0ck5h bWUpDQogICAgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgQXR0cmli dXRlIGF0dHIgPSBhdHRyaWJ1dGVzLmdldChhdHRyTmFtZSk7DQogICAgICAgIHJldHVybiBh dHRyICE9IG51bGwgPyAoU3RyaW5nKSBhdHRyLmdldCgpIDogIiI7DQogICAgfQ0KDQogICAg cHVibGljIFN0cmluZyBnZXRTdHJpbmdBdHRyaWJ1dGUgKFN0cmluZyBhdHRyTmFtZSwgU3Ry aW5nIGlkeCApDQogICAgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAg QXR0cmlidXRlIGF0dHIgPSBhdHRyaWJ1dGVzLmdldChhdHRyTmFtZSk7DQogICAgICAgIHJl dHVybiBhdHRyICE9IG51bGwgPyAoU3RyaW5nKSBhdHRyLmdldChuZXcgSW50ZWdlcihpZHgp LmludFZhbHVlKCkpIDogIiI7DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBpbnQgZ2V0QXR0 cmlidXRlU2l6ZSAoIFN0cmluZyBhdHRyTmFtZSApDQogICAgdGhyb3dzIE5hbWluZ0V4Y2Vw dGlvbg0KICAgIHsNCiAgICAgICAgQXR0cmlidXRlIGF0dHIgPSBhdHRyaWJ1dGVzLmdldChh dHRyTmFtZSk7DQogICAgICAgIHJldHVybiBhdHRyICE9IG51bGwgPyBhdHRyLnNpemUoKSA6 IDA7DQogICAgfQ0KDQoJcHVibGljIFN0cmluZyBnZXRGaWx0ZXIoKSAgICAgICAgICAgICAg ICAgICAgeyByZXR1cm4gdGhpcy5maWx0ZXI7IH0NCglwdWJsaWMgdm9pZCBzZXRGaWx0ZXIo U3RyaW5nIGZpbHRlcikgICAgICAgICB7IHRoaXMuZmlsdGVyID0gZmlsdGVyOyB9DQoNCglw dWJsaWMgU3RyaW5nIGdldFNlYXJjaEJhc2UoKSAgICAgICAgICAgICAgICB7IHJldHVybiB0 aGlzLnNlYXJjaEJhc2U7IH0NCglwdWJsaWMgdm9pZCBzZXRTZWFyY2hCYXNlKFN0cmluZyBz ZWFyY2hCYXNlKSB7IHRoaXMuc2VhcmNoQmFzZSA9IHNlYXJjaEJhc2U7IH0NCiAgICANCglw dWJsaWMgU3RyaW5nIGdldFNjb3BlKCkgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuc2NvcGU7 IH0NCglwdWJsaWMgdm9pZCBzZXRTY29wZShTdHJpbmcgc2NvcGUpIHsgdGhpcy5zY29wZSA9 IHNjb3BlOyB9DQogICAgDQogICAgcHVibGljIHZvaWQgc2V0TGltaXQoU3RyaW5nIGxpbWl0 KSB7IA0KCSAgIGN0bHMuc2V0Q291bnRMaW1pdCggbmV3IEludGVnZXIobGltaXQpLmludFZh bHVlKCkgKTsgDQoJfQ0KCQ0KICAgIHB1YmxpYyBTdHJpbmcgZ2V0RE4gKCkgeyByZXR1cm4g RE47fQ0KCQ0KICAgIA0KfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15 YS9sZGFwL0NWUy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDQwNTU1ADAwMDAwMDAA MDAwMDAwMAAwMDAwMDAwMDAwMAAwNzMxNTU3NTI2NQAwMTMwNjAAIDUAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvQ1ZTL0VudHJpZXMAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDUyADA3MzE1NTc1 MjY1ADAxNDQwNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEL2JlYW5zLy8v Lw0KRC9zZXJ2bGV0Ly8vLw0KRC90YWdsaWIvLy8vDQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL0NWUy9SZXBvc2l0b3J5AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDA0MwAwNzMxNTIwNTEy MgAwMTUxMzIAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAdXN0YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGRhcHRhZ2xpYi9z b3VyY2VzL25ldC9zaW15YS9sZGFwDQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC9DVlMvUm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDAwNTAAMDczMTUyMDUxMjIA MDEzNjc0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADpwc2VydmVyOm9yaGFu QHd3dy5zaW15YS5uZXQ6L2hvbWUvY3ZzDQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvc2VydmxldC8AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAwNDA1NTUAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDAwADA3MzM0NzY1NDMyADAx NDEwNwAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC9z ZXJ2bGV0L0NhY2hlT2JqZWN0LmNsYXNzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAA MDAwMDAwMDEzNjcAMDczMzQ3NjU0MzIAMDE3Mjc0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAMr+ur4AAwAtACsKAAkAHwoAIAAhCQAIACIJAAgAIwkACAAkBQAAAAAAAr8g BwAlBwAmAQAFREVMQVkBAAFKAQANQ29uc3RhbnRWYWx1ZQEABm9iamVjdAEAEkxqYXZhL2xh bmcvT2JqZWN0OwEACG1pbWVUeXBlAQASTGphdmEvbGFuZy9TdHJpbmc7AQAJdGltZVN0YW1w AQAGPGluaXQ+AQAnKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvU3RyaW5nOylWAQAE Q29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACRM bmV0L3NpbXlhL2xkYXAvc2VydmxldC9DYWNoZU9iamVjdDsBAAdfb2JqZWN0AQAJX21pbWVU eXBlAQAJaXNFeHBpcmVkAQADKClaAQAKU291cmNlRmlsZQEAFExkYXBHbG9iYWxDYWNoZS5q YXZhDAASACcHACgMACkAKgwAEQALDAANAA4MAA8AEAEAIm5ldC9zaW15YS9sZGFwL3NlcnZs ZXQvQ2FjaGVPYmplY3QBABBqYXZhL2xhbmcvT2JqZWN0AQADKClWAQAQamF2YS9sYW5nL1N5 c3RlbQEAEWN1cnJlbnRUaW1lTWlsbGlzAQADKClKACAACAAJAAAABAAaAAoACwABAAwAAAAC AAYAAAANAA4AAAAAAA8AEAAAAAAAEQALAAAAAgAAABIAEwABABQAAABkAAMAAwAAABYqtwAB KrgAArUAAyortQAEKiy1AAWxAAAAAgAVAAAAFgAFAAAAhgAEAIMACwCHABAAiAAVAIkAFgAA ACAAAwAAABYAFwAYAAAAAAAWABkADgABAAAAFgAaABAAAgAAABsAHAABABQAAAA/AAQAAQAA ABW4AAIqtAADZRQABpSeAAcEpwAEA6wAAAACABUAAAAGAAEAAACNABYAAAAMAAEAAAAVABcA GAAAAAEAHQAAAAIAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABuZXQvc2lteWEvbGRhcC9zZXJ2bGV0L0NWUy8AAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA MDA0MDU1NQAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDAwMDAAMDczMTUyMDUxMjQAMDE0NTI0 ACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy ICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL3NlcnZs ZXQvQ1ZTL0VudHJpZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAw MDAwMDA3MQAwNzMxNTIwNTEyNAAwMTYwNTMAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAL0xkYXBHbG9iYWxDYWNoZS5qYXZhLzEuMi9TdW4gTWF5IDI3IDEyOjA1OjA5IDIw MDEvLw0KRA0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC9zZXJ2bGV0 L0NWUy9SZXBvc2l0b3J5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAw MDAwNTMAMDczMTUyMDUxMjMAMDE2NjIwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAGxkYXB0YWdsaWIvc291cmNlcy9uZXQvc2lteWEvbGRhcC9zZXJ2bGV0DQoAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvc2VydmxldC9D VlMvUm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAw MDUwADA3MzE1MjA1MTIzADAxNTM2MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA6cHNlcnZlcjpvcmhhbkB3d3cuc2lteWEubmV0Oi9ob21lL2N2cw0KAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL3NlcnZsZXQvTGRh cEdsb2JhbENhY2hlLmNsYXNzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwNzM3 NQAwNzMzNDc2NTQzMgAwMjAwNzQAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA yv66vgADAC0AwQoAMABoCQAvAGkHAGoKAAMAawoAAwBsCABECwBtAG4IAG8KACMAcAsAcQBy CABzCgB0AHUIAHYJAC8AdwoALQB4CgB0AHkIAHoHAHsKAC0AfAcAfQsAcQB+CQAUAH8LAHEA gAkAFACBBwBVCgCCAIMKAC0AhAoALwCFCgAtAIYKABQAhwoALQCIBwCJCgAgAGgKACAAigcA iwoAIwCMBQAAAAAAAHUwCgADAI0HAI4KAC0AjwsAkACRCgAUAJILAJAAkwcAlAoALQBoBwCV BwCWBwCXAQAHb2JqZWN0cwEAFUxqYXZhL3V0aWwvSGFzaHRhYmxlOwEACGlzQWN0aXZlAQAB WgEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlh YmxlVGFibGUBAAR0aGlzAQAoTG5ldC9zaW15YS9sZGFwL3NlcnZsZXQvTGRhcEdsb2JhbENh Y2hlOwEABGluaXQBAAVkb0dldAEAUihMamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0 UmVxdWVzdDtMamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVzcG9uc2U7KVYBAANy ZXEBACdMamF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVxdWVzdDsBAANyZXMBAChM amF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0UmVzcG9uc2U7AQACaWQBABJMamF2YS9s YW5nL1N0cmluZzsBAANvdXQBABVMamF2YS9pby9QcmludFdyaXRlcjsBAAJleAEAFUxqYXZh L2lvL0lPRXhjZXB0aW9uOwEABmNhY2hlZAEAJExuZXQvc2lteWEvbGRhcC9zZXJ2bGV0L0Nh Y2hlT2JqZWN0OwEAI0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRPdXRwdXRTdHJlYW07AQAIYWRk Q2FjaGUBADgoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xh bmcvU3RyaW5nOwEABm9iamVjdAEAEkxqYXZhL2xhbmcvT2JqZWN0OwEACG1pbWVUeXBlAQAN Z2VuZXJhdGVSbmRJZAEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQABYgEAAltCAQABYwEAAltD AQABcgEAEkxqYXZhL3V0aWwvUmFuZG9tOwEAAWkBAAFJAQAHZGVzdHJveQEAA3J1bgEAC1NF RUtfUEVSSU9EAQABSgEAIExqYXZhL2xhbmcvSW50ZXJydXB0ZWRFeGNlcHRpb247AQABZQEA F0xqYXZhL3V0aWwvRW51bWVyYXRpb247AQADa2V5AQABbwEACDxjbGluaXQ+AQAKU291cmNl RmlsZQEAFExkYXBHbG9iYWxDYWNoZS5qYXZhDAA2ADcMADQANQEAEGphdmEvbGFuZy9UaHJl YWQMADYAmAwAmQA3BwCaDACbAJwBAAdNQU5BR0VSDACdAJ4HAJ8MAKAAoQEAMjxodG1sPjxo ZWFkPjx0aXRsZT5MREFQIFRhZ2xpYiBJbmZvPC90aXRsZT48L2hlYWQ+BwCiDACjAKQBADc8 Ym9keT48Yj5Ub3RhbCBvYmplY3Qocykgd2FpdGluZyBpbiBjYWNoZSBidWZmZXIgOiA8L2I+ DAAyADMMAKUApgwAowCnAQAOPC9ib2R5PjwvaHRtbD4BABNqYXZhL2lvL0lPRXhjZXB0aW9u DACoAKkBACJuZXQvc2lteWEvbGRhcC9zZXJ2bGV0L0NhY2hlT2JqZWN0DACqAKsMAFEARQwA rACkDABPAFAHAK0MAK4ArwwAsACpDABSAFMMALEAngwANgCyDACzALQBABBqYXZhL3V0aWwv UmFuZG9tDAC1AK8BABBqYXZhL2xhbmcvU3RyaW5nDAA2ALYMALcAuAEAHmphdmEvbGFuZy9J bnRlcnJ1cHRlZEV4Y2VwdGlvbgwAuQC6BwC7DAC8AL0MAL4AvwwAwAC/AQATamF2YS91dGls L0hhc2h0YWJsZQEAJm5ldC9zaW15YS9sZGFwL3NlcnZsZXQvTGRhcEdsb2JhbENhY2hlAQAe amF2YXgvc2VydmxldC9odHRwL0h0dHBTZXJ2bGV0AQASamF2YS9sYW5nL1J1bm5hYmxlAQAX KExqYXZhL2xhbmcvUnVubmFibGU7KVYBAAVzdGFydAEAHGphdmF4L3NlcnZsZXQvU2Vydmxl dFJlcXVlc3QBAAxnZXRQYXJhbWV0ZXIBACYoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xh bmcvU3RyaW5nOwEABmVxdWFscwEAFShMamF2YS9sYW5nL09iamVjdDspWgEAHWphdmF4L3Nl cnZsZXQvU2VydmxldFJlc3BvbnNlAQAJZ2V0V3JpdGVyAQAXKClMamF2YS9pby9QcmludFdy aXRlcjsBABNqYXZhL2lvL1ByaW50V3JpdGVyAQAHcHJpbnRsbgEAFShMamF2YS9sYW5nL1N0 cmluZzspVgEABHNpemUBAAMoKUkBAAQoSSlWAQADZ2V0AQAmKExqYXZhL2xhbmcvT2JqZWN0 OylMamF2YS9sYW5nL09iamVjdDsBAA9nZXRPdXRwdXRTdHJlYW0BACUoKUxqYXZheC9zZXJ2 bGV0L1NlcnZsZXRPdXRwdXRTdHJlYW07AQAOc2V0Q29udGVudFR5cGUBABRqYXZhL2lvL091 dHB1dFN0cmVhbQEABXdyaXRlAQAFKFtCKVYBAAZyZW1vdmUBAAtjb250YWluc0tleQEAJyhM amF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL1N0cmluZzspVgEAA3B1dAEAOChMamF2YS9s YW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7AQAJbmV4 dEJ5dGVzAQAFKFtDKVYBAAVzbGVlcAEABChKKVYBAARrZXlzAQAZKClMamF2YS91dGlsL0Vu dW1lcmF0aW9uOwEAFWphdmEvdXRpbC9FbnVtZXJhdGlvbgEAC25leHRFbGVtZW50AQAUKClM amF2YS9sYW5nL09iamVjdDsBAAlpc0V4cGlyZWQBAAMoKVoBAA9oYXNNb3JlRWxlbWVudHMA IQAvADAAAQAxAAIACgAyADMAAAACADQANQAAAAgAAQA2ADcAAQA4AAAAPAACAAEAAAAKKrcA ASoEtQACsQAAAAIAOQAAAA4AAwAAAAoABAAQAAkACgA6AAAADAABAAAACgA7ADwAAAABAD0A NwABADgAAAA6AAMAAQAAAAy7AANZKrcABLYABbEAAAACADkAAAAKAAIAAAAUAAsAFQA6AAAA DAABAAAADAA7ADwAAAABAD4APwABADgAAAGQAAIACgAAAKorEga5AAcCAE4txwAEsS0SCLYA CZkAMSy5AAoBADoEGQQSC7YADBkEEg22AAwZBLIADrYAD7YAEBkEEhG2AAynAAU6BLGyAA4t tgATwAAUOgQsuQAVAQA6BSwZBLQAFrkAFwIAGQUZBLQAGMAAGbYAGqgAFqcANToFqAAOpwAt OgaoAAYZBr86B7IADjoIGQjCsgAOLbYAG1cZCMOnAAs6CRkIwxkJv6kHsQAEABcAPwBCABIA UQBxAHcAEgBRAH8AfwAAAJEAnwCfAAAAAgA5AAAAUgAUAAAAGQAJABoADQAbAA4AHAAXACAA HwAhACYAIgAtACMAOAAkAEIAJgBEACgARQArAFEALwBZADAAZAAxAHcAMwB/ADcAkQA5AJ8A OgCpADwAOgAAAFwACQAAAKoAOwA8AAAAAACqAEAAQQABAAAAqgBCAEMAAgAJAKAARABFAAMA HwAgAEYARwAEAEIAAgBIAEkABABRAFgASgBLAAQAWQAYAEYATAAFAHcAMgBIAEkABQAJAE0A TgABADgAAACTAAYABQAAADUBTbgAHE2yAA4stgAdmv/1sgAOTi3CsgAOLLsAFFkqK7cAHrYA H1ctw6cACjoELcMZBL8ssAABABYALAAsAAAAAgA5AAAAHgAHAAAAQAACAEMABgBFABAARgAW AEgALABJADMASgA6AAAAIAADAAAANQBPAFAAAAAAADUAUQBFAAEAAgAzAEQARQACAAkAUgBT AAEAOAAAAPMABAAEAAAAdxAUvAhLEBS8BUy7ACBZtwAhTSwqtgAiAz6nAE8rHSodMxEA/34Q e3CSVSsdNBBBogAQKx0rHTQQCnAQMGCSVSsdNBBhogAQKx00EFqkAAgrHRBfVSsDNBBBogAM KwNcNBASYJJVhAMBHSq+of+xuwAjWSu3ACSwAAAAAgA5AAAAOgAOAAAATwAFAFAACgBRABIA UgAXAFMAHABVACoAVgAyAFcAPwBYAE8AWQBUAFoAXABbAGUAUwBuAF0AOgAAACoABAAFAHIA VABVAAAACgBtAFYAVwABABIAZQBYAFkAAgAZAF4AWgBbAAMAAQBcADcAAQA4AAAANAACAAEA AAAGKgO1AAKxAAAAAgA5AAAACgACAAAAYgAFAGMAOgAAAAwAAQAAAAYAOwA8AAAAAQBdADcA AQA4AAABBQACAAgAAABlFAAlQKcAWR+4ACenAAROsgAOTi3CsgAOtgApOgSnACoZBLkAKgEA OgWyAA4ZBbYAE8AAFDoGGQa2ACuZAAyyAA4ZBbYAG1cZBLkALAEAmv/SLcOnAAo6By3DGQe/ KrQAApr/prEAAgAHAAsADgAoABUAVgBWAAAAAgA5AAAAOgAOAAAAZwAEAGkABwBtAA4AbgAP AG8AFQBxACAAcwApAHQANgB1AD4AdgBHAHEAVgB4AF0AaQBkAHoAOgAAAD4ABgAAAGUAOwA8 AAAABABgAF4AXwABAA4AAQBIAGAAAwAdADQAYQBiAAQAKQAeAGMAUAAFADYAEQBkAEsABgAI AGUANwABADgAAAAjAAIAAAAAAAu7AC1ZtwAuswAOsQAAAAEAOQAAAAYAAQAAAA4AAQBmAAAA AgBnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15 YS9sZGFwL3NlcnZsZXQvTGRhcEdsb2JhbENhY2hlLmphdmEAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAA MDAwMDAwMAAwMDAwMDAwNzMwNwAwNzMwNDE2NjU2NQAwMTc3MDIAIDAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAcGFja2FnZSBuZXQuc2lteWEubGRhcC5zZXJ2bGV0Ow0KDQpp bXBvcnQgamF2YXguc2VydmxldC5odHRwLio7DQppbXBvcnQgamF2YXguc2VydmxldC4qOw0K aW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7DQppbXBvcnQgamF2YS51dGlsLlJhbmRvbTsN CmltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247DQoNCnB1YmxpYw0KICAgIGNsYXNzICAg ICAgTGRhcEdsb2JhbENhY2hlDQogICAgZXh0ZW5kcyAgICBIdHRwU2VydmxldA0KICAgIGlt cGxlbWVudHMgUnVubmFibGUNCnsNCiAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgb2Jq ZWN0cyA9IG5ldyBIYXNodGFibGUoKTsNCiAgICANCiAgICBwcml2YXRlIGJvb2xlYW4gaXNB Y3RpdmUgPSB0cnVlOw0KICAgIA0KICAgIHB1YmxpYyB2b2lkIGluaXQoKQ0KICAgIHsNCiAg ICAgICAgbmV3IFRocmVhZCggdGhpcyApLnN0YXJ0KCk7DQogICAgfQ0KICAgIA0KICAgIHB1 YmxpYyB2b2lkIGRvR2V0KCBIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJl c3BvbnNlIHJlcyApDQogICAgew0KICAgICAgICBTdHJpbmcgaWQgPSByZXEuZ2V0UGFyYW1l dGVyKCAiaWQiICk7DQogICAgICAgIGlmICggaWQgPT0gbnVsbCApDQogICAgICAgICAgICBy ZXR1cm47DQogICAgICAgIGlmICggaWQuZXF1YWxzKCAiTUFOQUdFUiIgKSApDQogICAgICAg IHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGph dmEuaW8uUHJpbnRXcml0ZXIgb3V0ID0gcmVzLmdldFdyaXRlcigpOw0KICAgICAgICAgICAg ICAgIG91dC5wcmludGxuKCAiPGh0bWw+PGhlYWQ+PHRpdGxlPkxEQVAgVGFnbGliIEluZm88 L3RpdGxlPjwvaGVhZD4iICk7DQogICAgICAgICAgICAgICAgb3V0LnByaW50bG4oICI8Ym9k eT48Yj5Ub3RhbCBvYmplY3Qocykgd2FpdGluZyBpbiBjYWNoZSBidWZmZXIgOiA8L2I+IiAp Ow0KICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCBvYmplY3RzLnNpemUoKSApOw0KICAg ICAgICAgICAgICAgIG91dC5wcmludGxuKCAiPC9ib2R5PjwvaHRtbD4iICk7DQogICAgICAg ICAgICB9IGNhdGNoICggamF2YS5pby5JT0V4Y2VwdGlvbiBleCApDQogICAgICAgICAgICB7 DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAg ICAgDQogICAgICAgIENhY2hlT2JqZWN0IGNhY2hlZCA9IChDYWNoZU9iamVjdCkgb2JqZWN0 cy5nZXQoIGlkICk7DQogICAgICAgIA0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAg ICAgICAgU2VydmxldE91dHB1dFN0cmVhbSBvdXQgPSByZXMuZ2V0T3V0cHV0U3RyZWFtKCk7 DQogICAgICAgICAgICByZXMuc2V0Q29udGVudFR5cGUoIGNhY2hlZC5taW1lVHlwZSApOw0K ICAgICAgICAgICAgb3V0LndyaXRlKCAoYnl0ZVtdKSBjYWNoZWQub2JqZWN0ICk7DQogICAg ICAgIH0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZXgpDQogICAgICAgIHsNCiAgICAg ICAgfQ0KICAgICAgICBmaW5hbGx5DQogICAgICAgIHsNCiAgICAgICAgICAgIHN5bmNocm9u aXplZCggb2JqZWN0cyApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgb2JqZWN0 cy5yZW1vdmUoIGlkICk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAg DQogICAgcHVibGljIHN0YXRpYyBTdHJpbmcgYWRkQ2FjaGUoIE9iamVjdCBvYmplY3QsIFN0 cmluZyBtaW1lVHlwZSApDQogICAgew0KICAgICAgICBTdHJpbmcgaWQgPSBudWxsOw0KICAg ICAgICBkbw0KICAgICAgICB7DQogICAgICAgICAgICBpZCA9IGdlbmVyYXRlUm5kSWQoKTsN CiAgICAgICAgfQ0KICAgICAgICB3aGlsZSggb2JqZWN0cy5jb250YWluc0tleSggaWQgKSAp Ow0KICAgICAgICBzeW5jaHJvbml6ZWQoIG9iamVjdHMgKQ0KICAgICAgICB7DQogICAgICAg ICAgICBvYmplY3RzLnB1dCggaWQsIG5ldyBDYWNoZU9iamVjdChvYmplY3QsIG1pbWVUeXBl KSApOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBpZDsNCiAgICB9DQogICAgDQogICAg cHVibGljIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVSbmRJZCgpDQogICAgew0KICAgICAgICBi eXRlW10gYiA9IG5ldyBieXRlWyAyMCBdOw0KICAgICAgICBjaGFyW10gYyA9IG5ldyBjaGFy WyAyMCBdOw0KICAgICAgICBSYW5kb20gciA9IG5ldyBSYW5kb20oKTsNCiAgICAgICAgci5u ZXh0Qnl0ZXMoIGIgKTsNCiAgICAgICAgZm9yICggaW50IGkgPSAwOyBpIDwgYi5sZW5ndGg7 IGkrKyApDQogICAgICAgIHsNCiAgICAgICAgICAgIGNbIGkgXSA9IChjaGFyKSAoKGJbIGkg XSAmIDB4ZmYpICUgMTIzKTsNCiAgICAgICAgICAgIGlmICggIGNbIGkgXSA8IDY1ICkNCiAg ICAgICAgICAgICAgICBjWyBpIF0gPSAoY2hhcikgKGNbIGkgXSAlIDEwICsgNDgpIDsNCiAg ICAgICAgICAgIGlmICggIGNbIGkgXSA8IDk3ICYmIGNbIGkgXSA+IDkwICkNCiAgICAgICAg ICAgICAgICBjWyBpIF0gPSA5NTsNCiAgICAgICAgICAgIGlmICggY1sgMCBdIDwgNjUgKQ0K ICAgICAgICAgICAgICAgIGNbIDAgXSArPSAxODsNCiAgICAgICAgfQ0KICAgICAgICByZXR1 cm4gbmV3IFN0cmluZyggYyApOw0KICAgIH0NCg0KICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3ko KQ0KICAgIHsNCiAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTsNCiAgICB9DQogICAgDQogICAg cHVibGljIHZvaWQgcnVuKCkNCiAgICB7DQogICAgICAgIGxvbmcgU0VFS19QRVJJT0QgPSAz MDAwMDsNCiAgICAgICAgDQogICAgICAgIHdoaWxlICggaXNBY3RpdmUgKQ0KICAgICAgICB7 DQogICAgICAgICAgICB0cnkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBUaHJl YWQuc2xlZXAoIFNFRUtfUEVSSU9EICk7DQogICAgICAgICAgICB9IGNhdGNoICggSW50ZXJy dXB0ZWRFeGNlcHRpb24gZXggKSB7fQ0KICAgICAgICAgICAgc3luY2hyb25pemVkKCBvYmpl Y3RzICkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBmb3IgKCBFbnVtZXJhdGlv biBlID0gb2JqZWN0cy5rZXlzKCk7IGUuaGFzTW9yZUVsZW1lbnRzKCk7ICkNCiAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIE9iamVjdCBrZXkgPSBlLm5leHRFbGVt ZW50KCk7DQogICAgICAgICAgICAgICAgICAgIENhY2hlT2JqZWN0IG8gPSAoQ2FjaGVPYmpl Y3QpIG9iamVjdHMuZ2V0KCBrZXkgKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCBvLmlz RXhwaXJlZCgpICkNCiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMucmVtb3ZlKCBr ZXkgKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAg ICB9DQogICAgDQp9DQoNCmNsYXNzIENhY2hlT2JqZWN0DQp7DQogICAgcHJpdmF0ZSBzdGF0 aWMgZmluYWwgbG9uZyBERUxBWSA9IDE4MDAwMDsgICAvLyAzIG1pbnV0dWVzDQogICAgT2Jq ZWN0IG9iamVjdDsNCiAgICBTdHJpbmcgbWltZVR5cGU7DQogICAgbG9uZyAgIHRpbWVTdGFt cCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KICAgIA0KICAgIENhY2hlT2JqZWN0 KCBPYmplY3QgX29iamVjdCwgU3RyaW5nIF9taW1lVHlwZSApDQogICAgew0KICAgICAgICB0 aGlzLm9iamVjdCA9IF9vYmplY3Q7DQogICAgICAgIHRoaXMubWltZVR5cGUgPSBfbWltZVR5 cGU7DQogICAgfQ0KICAgIA0KICAgIGJvb2xlYW4gaXNFeHBpcmVkKCkNCiAgICB7DQogICAg ICAgIHJldHVybiAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSB0aW1lU3RhbXApID4g REVMQVk7DQogICAgfQ0KfQ0KICAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL3RhZ2xpYi8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDQwNTU1ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDAwMAAwNzM3NTU2MDExMwAwMTM2 NTcAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0 YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvdGFn bGliL0FkZC5qYXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAw MDAwMDAzMDA0ADA3Mzc1NTU3NjU2ADAxNTIyNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABwYWNrYWdlIG5ldC5zaW15YS5sZGFwLnRhZ2xpYjsNCg0KaW1wb3J0IGphdmF4 LnNlcnZsZXQuanNwLnRhZ2V4dC4qOw0KaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7DQpp bXBvcnQgamF2YXgubmFtaW5nLkNvbnRleHQ7DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVj dG9yeS5EaXJDb250ZXh0Ow0KaW1wb3J0IGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb247 DQppbXBvcnQgbmV0LnNpbXlhLmxkYXAuYmVhbnMuKjsNCg0KcHVibGljIGNsYXNzICAgQWRk DQogICAgICAgZXh0ZW5kcyBCb2R5VGFnU3VwcG9ydA0Kew0KICAgIHByaXZhdGUgU3RyaW5n IGRuID0gbnVsbDsNCglwcml2YXRlIFN0cmluZyBuYW1lID0gbnVsbDsNCglwcml2YXRlIFN0 cmluZyB2YWx1ZT0gbnVsbDsNCiAgICBwcml2YXRlIExkYXBBZGRFbnRyeUJlYW4gYWRkQmVh biA9IG5ldyBMZGFwQWRkRW50cnlCZWFuKCk7DQoNCiAgICBwdWJsaWMgaW50IGRvU3RhcnRU YWcoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAgICAgIENvbm5lY3Qg Y29ubmVjdFRhZyA9IChDb25uZWN0KSBnZXRQYXJlbnQoKTsNCiAgICAgICAgaWYgKCBjb25u ZWN0VGFnID09IG51bGwgKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlv biggIjxhZGQ+IHRhZyBzaG91bGQgYmUgY2hpbGQgbm9kZSBvZiA8Y29ubmVjdD4gdGFnLiIg KTsNCg0KICAgICAgICBhZGRCZWFuLnNldEROKCBkbiApOw0KICAgICAgICBhZGRCZWFuLnNl dENvbnRleHQoIGNvbm5lY3RUYWcuZ2V0Q29udGV4dCgpICk7DQoNCiAgICAgICAgaWYgKCBp ZCAhPSBudWxsICkNCiAgICAgICAgCXBhZ2VDb250ZXh0LnNldEF0dHJpYnV0ZSggaWQsIGFk ZEJlYW4gKTsNCg0KICAgICAgICByZXR1cm4gRVZBTF9CT0RZX1RBRzsNCiAgICB9DQoNCiAg ICBwdWJsaWMgaW50IGRvQWZ0ZXJCb2R5KCkNCiAgICB0aHJvd3MgSnNwRXhjZXB0aW9uDQog ICAgew0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgYWRkQmVhbi5hZGRF bnRyeSgpOw0KDQogICAgICAgIH0gY2F0Y2ggKCBOYW1pbmdFeGNlcHRpb24gZXggKQ0KICAg ICAgICB7DQogICAgICAgICAgICB0aHJvdyBuZXcgTGRhcFRhZ2xpYkV4Y2VwdGlvbiggZXgg KTsNCiAgICAgICAgfQ0KICAgICAgICAvL2JvZHkuY2xlYXJCb2R5KCk7DQogICAgICAgIHJl dHVybiBTS0lQX0JPRFk7DQogICAgfQ0KDQogICAgcHVibGljIHZvaWQgcmVsZWFzZSgpDQog ICAgew0KICAgICAgICBkbiA9IG51bGw7DQoJCW5hbWU9IG51bGw7DQoJCXZhbHVlPSBudWxs Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBTdHJpbmcgZ2V0RG4oKSAgICAgICAgICAgICAgICAg ICAgICAgeyByZXR1cm4gdGhpcy5kbjsgfQ0KCXB1YmxpYyB2b2lkIHNldERuKFN0cmluZyBk bikgICAgICAgICAgICAgICAgeyB0aGlzLmRuID0gZG47IH0NCg0KCXB1YmxpYyB2b2lkIHNl dEF0dHJpYnV0ZShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKQ0KCXsNCgkJYWRkQmVhbi5z ZXRBZGRBdHRyaWJ1dGUobmFtZSx2YWx1ZSk7DQoJfQ0KfQ0KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAG5ldC9zaW15YS9sZGFwL3RhZ2xpYi9BZGRBdHRyaWJ1dGUuamF2YQAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAw NDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMzEwMwAwNzI3NzcxNDM0MwAwMTcwNzcAIDAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGFja2FnZSBuZXQuc2lteWEubGRhcC50 YWdsaWI7DQoNCmltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuKjsNCmltcG9ydCBq YXZheC5zZXJ2bGV0LmpzcC4qOw0KaW1wb3J0IGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRp b247DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVjdG9yeS5BdHRyaWJ1dGU7DQppbXBvcnQg bmV0LnNpbXlhLmxkYXAuYmVhbnMuKjsNCmltcG9ydCBuZXQuc2lteWEubGRhcC5zZXJ2bGV0 Lio7DQoNCnB1YmxpYyBjbGFzcyAgIEFkZEF0dHJpYnV0ZQ0KICAgICAgIGV4dGVuZHMgVGFn U3VwcG9ydA0Kew0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX0RF TElNSVRFUiA9ICIsICI7DQogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFV TFRfTUlNRVRZUEUgID0gInRleHQvcGxhaW4iOw0KICAgIHByaXZhdGUgc3RhdGljIGZpbmFs IFN0cmluZyBERUZBVUxUX01JTUVURVhUICA9ICJ0ZXh0IjsNCiAgICBwcml2YXRlIHN0YXRp YyBmaW5hbCBpbnQgICAgREVGQVVMVF9JTkRFWCAgICAgPSAtMTsNCiAgICBwcml2YXRlIHN0 YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9WQUxVRSAgICAgPSAiIjsNCiAgICANCiAgICBw cml2YXRlIFN0cmluZyBuYW1lICAgICAgPSBudWxsOw0KICAgIHByaXZhdGUgU3RyaW5nIHZh bHVlID0gbnVsbDsNCiAgICBwcml2YXRlIFN0cmluZyBtaW1lVHlwZSAgPSBERUZBVUxUX01J TUVUWVBFOw0KICAgIA0KICAgIHB1YmxpYyBpbnQgZG9TdGFydFRhZygpDQogICAgdGhyb3dz IEpzcEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgQWRkIGFkZFRhZyA9IChBZGQpIGdldFBh cmVudCgpOw0KICANCiAgICAgICAgaWYgKCBhZGRUYWcgPT0gbnVsbCApDQogICAgICAgICAg ICB0aHJvdyBuZXcgSnNwVGFnRXhjZXB0aW9uKCAiPGFkZCBhdHRyaWJ1dGU+IHRhZyBzaG91 bGQgYmUgY2hpbGQgbm9kZSBvZiA8YWRkPiB0YWcuIiApOw0KICAgICAgICANCiAgICAgICAg DQoJCWFkZFRhZy5zZXRBdHRyaWJ1dGUobmFtZSx2YWx1ZSk7DQoJCQ0KICAgICAgICByZXR1 cm4gRVZBTF9CT0RZX0lOQ0xVREU7DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyB2b2lkIHJl bGVhc2UoKQ0KICAgIHsNCiAgICAgICAgbmFtZSA9IG51bGw7DQogICAgICAgIHZhbHVlID0g bnVsbDsNCiAgICAgICAgbWltZVR5cGUgPSBERUZBVUxUX01JTUVUWVBFOw0KICAgIH0NCiAg IA0KCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMu bmFtZTsgfQ0KCXB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpICAgIHsgdGhpcy5u YW1lID0gbmFtZTsgfQ0KDQoJcHVibGljIFN0cmluZyBnZXRWYWx1ZSgpICAgICAgICAgICAg IHsgcmV0dXJuIHRoaXMudmFsdWU7IH0NCglwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcg dmFsdWUpICAgIHsgdGhpcy52YWx1ZSA9IHZhbHVlOyB9DQoNCglwdWJsaWMgU3RyaW5nIGdl dE1pbWVUeXBlKCkgICAgICAgICB7IHJldHVybiB0aGlzLm1pbWVUeXBlOyB9DQoJcHVibGlj IHZvaWQgc2V0TWltZVR5cGUoU3RyaW5nIG1pbWVUeXBlKSB7IHRoaXMubWltZVR5cGUgPSBt aW1lVHlwZTsgfQ0KfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC90YWdsaWIvQWRkVEVJ LmphdmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDEzMzYA MDczNzU1NTEyNDcAMDE1NTY0ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBh Y2thZ2UgbmV0LnNpbXlhLmxkYXAudGFnbGliOwoKaW1wb3J0IGphdmF4LnNlcnZsZXQuanNw LnRhZ2V4dC4qOwoKcHVibGljCiAgICBjbGFzcyAgIEFkZFRFSQogICAgZXh0ZW5kcyBUYWdF eHRyYUluZm8KewogICAgcHVibGljIFZhcmlhYmxlSW5mb1tdIGdldFZhcmlhYmxlSW5mbygg VGFnRGF0YSBkYXRhICkKICAgIHsKICAgICAgICAvL2lmIHVzZXIgZGlkbid0IHByb3ZpZGUg aWQsIHZhcmlhYmxlaW5mbyByZXR1cm5zIG51bGwuCgkJaWYgKGRhdGEuZ2V0SWQoKSAhPSBu dWxsKQoJCXsKCQkJVmFyaWFibGVJbmZvIHJlYyA9IG5ldyBWYXJpYWJsZUluZm8oCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZ2V0SWQoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldC5zaW15YS5sZGFwLmJlYW5zLkxkYXBB ZGRFbnRyeUJlYW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUluZm8uTkVT VEVEICk7CiAgICAgICAgIAlyZXR1cm4gbmV3IFZhcmlhYmxlSW5mb1tdIHsgcmVjIH07CgkJ fQoJCWVsc2UKCQkJcmV0dXJuIG5ldyBWYXJpYWJsZUluZm9bXSB7ICB9OwoJCQogICAgfQog ICAgCiAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCBUYWdEYXRhIGRhdGEgKQogICAgewog ICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9CgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQv c2lteWEvbGRhcC90YWdsaWIvQXV0aGVudGljYXRlLmphdmEAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAw MDAwADAwMDAwMDAAMDAwMDAwMDI3NjYAMDcyNzc3MTQzNDMAMDE3MTU3ACAwAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNpbXlhLmxkYXAudGFnbGliOw0K DQppbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0Lio7DQppbXBvcnQgamF2YXguc2Vy dmxldC5qc3AuKjsNCmltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9uOw0KaW1w b3J0IG5ldC5zaW15YS5sZGFwLmJlYW5zLio7DQoNCnB1YmxpYyBjbGFzcyAgIEF1dGhlbnRp Y2F0ZQ0KICAgICAgIGV4dGVuZHMgVGFnU3VwcG9ydA0Kew0KICAgIHByaXZhdGUgU3RyaW5n IGRuID0gbnVsbDsNCiAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZCA9IG51bGw7DQogICAg cHJpdmF0ZSBTdHJpbmcgYXV0aFR5cGUgPSAic2ltcGxlIjsNCiAgICANCiAgICBwdWJsaWMg aW50IGRvU3RhcnRUYWcoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAg ICAgIENvbm5lY3QgY29ubmVjdFRhZyA9IChDb25uZWN0KSBnZXRQYXJlbnQoKTsNCiAgICAg ICAgaWYgKCBjb25uZWN0VGFnID09IG51bGwgKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IEpz cFRhZ0V4Y2VwdGlvbiggIjxhdXRoZW50aWNhdGU+IHRhZyBzaG91bGQgYmUgY2hpbGQgbm9k ZSBvZiA8Y29ubmVjdD4gdGFnLiIgKTsNCiAgICAgICAgDQogICAgICAgIExkYXBBdXRoZW50 aWNhdGVCZWFuIGF1dGhCZWFuID0gbmV3IExkYXBBdXRoZW50aWNhdGVCZWFuKCk7DQogICAg ICAgIGF1dGhCZWFuLnNldENvbnRleHQoIGNvbm5lY3RUYWcuZ2V0Q29udGV4dCgpICk7DQoJ CWF1dGhCZWFuLnNldEROKCBkbiApOw0KICAgICAgICBhdXRoQmVhbi5zZXRQYXNzd29yZChw YXNzd29yZCk7DQoJCWF1dGhCZWFuLnNldEF1dGhUeXBlKGF1dGhUeXBlKTsNCgkJCQkNCiAg ICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIGF1dGhCZWFuLmF1dGhlbnRpY2F0 ZSgpOw0KICAgICAgICB9IGNhdGNoICggTmFtaW5nRXhjZXB0aW9uIGV4ICkNCiAgICAgICAg ew0KICAgICAgICAgICAgdGhyb3cgbmV3IExkYXBUYWdsaWJFeGNlcHRpb24oIGV4ICk7DQog ICAgICAgIH0NCiAgICAgICAgcmV0dXJuIEVWQUxfUEFHRTsNCiAgICB9DQogICAgDQogICAg cHVibGljIHZvaWQgcmVsZWFzZSgpDQogICAgew0KICAgICAgICBkbiA9IG51bGw7DQogICAg fQ0KDQoJcHVibGljIFN0cmluZyBnZXREbigpICAgICAgICAgICAgICAgeyByZXR1cm4gdGhp cy5kbjsgfQ0KCXB1YmxpYyB2b2lkIHNldERuKFN0cmluZyBkbikgICAgICAgIHsgdGhpcy5k biA9IGRuOyB9DQoNCglwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgICAgICAgICAgICAg ICB7IHJldHVybiB0aGlzLnBhc3N3b3JkOyB9DQoJcHVibGljIHZvaWQgc2V0UGFzc3dvcmQo U3RyaW5nIGRuKSAgICAgICAgeyB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7IH0NCg0KCXB1 YmxpYyBTdHJpbmcgZ2V0QXV0aFR5cGUoKSAgICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMu YXV0aFR5cGU7IH0NCglwdWJsaWMgdm9pZCBzZXRBdXRoVHlwZShTdHJpbmcgZG4pICAgICAg ICB7IHRoaXMuYXV0aFR5cGUgPSBhdXRoVHlwZTsgfQ0KDQp9AAAAAAAAAAAAAG5ldC9zaW15 YS9sZGFwL3RhZ2xpYi9Db25uZWN0LmphdmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAA MDAwMDAwMAAwMDAwMDAwNzM0NAAwNzMyMDcxMDQxNQAwMTYxMTAAIDAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAcGFja2FnZSBuZXQuc2lteWEubGRhcC50YWdsaWI7DQoNCmlt cG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuKjsNCmltcG9ydCBqYXZheC5zZXJ2bGV0 LmpzcC4qOw0KaW1wb3J0IGphdmF4Lm5hbWluZy5Db250ZXh0Ow0KaW1wb3J0IGphdmF4Lm5h bWluZy5kaXJlY3RvcnkuRGlyQ29udGV4dDsNCmltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5n RXhjZXB0aW9uOw0KaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsNCmltcG9ydCBuZXQu c2lteWEubGRhcC5iZWFucy4qOw0KDQpwdWJsaWMgY2xhc3MgICBDb25uZWN0DQogICAgICAg ZXh0ZW5kcyBCb2R5VGFnU3VwcG9ydA0Kew0KICAgIHByaXZhdGUgTGRhcENvbm5lY3RCZWFu IGNvbm5lY3RCZWFuID0gbnVsbDsNCiAgICANCiAgICBwcml2YXRlIFN0cmluZyB1cmwgPSBu dWxsOw0KICAgIHByaXZhdGUgU3RyaW5nIGRuICA9IG51bGw7DQogICAgcHJpdmF0ZSBTdHJp bmcgcGFzc3dvcmQgPSBudWxsOw0KCXByaXZhdGUgU3RyaW5nIHNzbCA9IG51bGw7DQogICAg cHJpdmF0ZSBTdHJpbmcgcmVmZXJyYWwgPSBudWxsOw0KCXByaXZhdGUgU3RyaW5nIGF1dGh0 eXBlID0gbnVsbDsNCgkNCiAgICBwdWJsaWMgaW50IGRvU3RhcnRUYWcoKQ0KICAgIHRocm93 cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAgICAgIGNvbm5lY3RCZWFuID0gbmV3IExkYXBD b25uZWN0QmVhbigpOw0KICAgICAgICAgICAgICAgIA0KCQlmb3IgKCBFbnVtZXJhdGlvbiBl ID0gcGFnZUNvbnRleHQuZ2V0QXR0cmlidXRlTmFtZXNJblNjb3BlKCBwYWdlQ29udGV4dC5Q QUdFX1NDT1BFICk7IGUuaGFzTW9yZUVsZW1lbnRzKCk7ICkNCiAgICAgICAgew0KICAgICAg ICAgICAgU3RyaW5nIHByb3BlcnR5ID0gKFN0cmluZykgZS5uZXh0RWxlbWVudCgpOw0KICAg ICAgICAgICAgY29ubmVjdEJlYW4uc2V0UHJvcGVydHkoIHByb3BlcnR5LCBwYWdlQ29udGV4 dC5nZXRBdHRyaWJ1dGUoIHByb3BlcnR5ICkgKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAg ICAgICAgaWYgKCB1cmwgIT0gbnVsbCApDQogICAgICAgICAgICBjb25uZWN0QmVhbi5zZXRQ cm9wZXJ0eSggQ29udGV4dC5QUk9WSURFUl9VUkwsIHVybCApOw0KICAgICAgICBpZiAoIGRu ICE9IG51bGwgKQ0KICAgICAgICAgICAgY29ubmVjdEJlYW4uc2V0UHJvcGVydHkoIENvbnRl eHQuU0VDVVJJVFlfUFJJTkNJUEFMLCBkbiApOw0KICAgICAgICBpZiAoIHBhc3N3b3JkICE9 IG51bGwgKQ0KICAgICAgICAgICAgY29ubmVjdEJlYW4uc2V0UHJvcGVydHkoIENvbnRleHQu U0VDVVJJVFlfQ1JFREVOVElBTFMsIHBhc3N3b3JkICk7DQogICAgICAgIGlmICggKHNzbCAh PSBudWxsKSAmJiAoc3NsLmVxdWFsc0lnbm9yZUNhc2UoIm9uIikpICkNCiAgICAgICAgICAg CWNvbm5lY3RCZWFuLnNldFByb3BlcnR5KENvbnRleHQuU0VDVVJJVFlfUFJPVE9DT0wsICJz c2wiKTsNCgkJaWYgKCByZWZlcnJhbCAhPSBudWxsICkNCiAgICAgICAgICAgCWNvbm5lY3RC ZWFuLnNldFByb3BlcnR5KENvbnRleHQuUkVGRVJSQUwsIHJlZmVycmFsKTsNCgkJaWYgKCBh dXRodHlwZSAhPSBudWxsICkNCiAgICAgICAgICAgCWNvbm5lY3RCZWFuLnNldFByb3BlcnR5 KENvbnRleHQuUkVGRVJSQUwsIHJlZmVycmFsKTsNCgkJDQoJCXRyeQ0KICAgICAgICB7DQog ICAgICAgICAgICBjb25uZWN0QmVhbi5jb25uZWN0KCk7DQogICAgICAgIH0gY2F0Y2ggKCBO YW1pbmdFeGNlcHRpb24gZXggKQ0KICAgICAgICB7DQogICAgICAgICAgICB0aHJvdyBuZXcg TGRhcFRhZ2xpYkV4Y2VwdGlvbiggZXggKTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAg ICAgcmV0dXJuIEVWQUxfQk9EWV9UQUc7DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBpbnQg ZG9BZnRlckJvZHkoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAgICAg IHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICBjb25uZWN0QmVhbi5kaXNjb25uZWN0KCk7 DQogICAgICAgIH0gY2F0Y2ggKCBOYW1pbmdFeGNlcHRpb24gZXggKQ0KICAgICAgICB7DQog ICAgICAgICAgICB0aHJvdyBuZXcgTGRhcFRhZ2xpYkV4Y2VwdGlvbiggZXggKTsNCiAgICAg ICAgfQ0KICAgICAgICBCb2R5Q29udGVudCBib2R5ID0gZ2V0Qm9keUNvbnRlbnQoKTsNCiAg ICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxu KCAiRXhpdGluZyA6ICIgKyBnZXRQcmV2aW91c091dCgpICk7DQogICAgICAgICAgICBib2R5 LndyaXRlT3V0KCBnZXRQcmV2aW91c091dCgpICk7DQogICAgICAgIH0NCiAgICAgICAgY2F0 Y2ggKCBqYXZhLmlvLklPRXhjZXB0aW9uIGV4ICkNCiAgICAgICAgew0KICAgICAgICAgICAg dGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbiggIklPIEVycm9yIiApOw0KICAgICAgICB9DQog ICAgICAgIC8vYm9keS5jbGVhckJvZHkoKTsNCiAgICAgICAgcmV0dXJuIFNLSVBfQk9EWTsN CiAgICB9ICAgIA0KICAgIA0KICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKQ0KICAgIHsNCiAg ICAgICAgY29ubmVjdEJlYW4gPSBudWxsOw0KICAgICAgICB1cmwgPSBudWxsOw0KICAgICAg ICBwYXNzd29yZCA9IG51bGw7DQogICAgICAgIGRuID0gbnVsbDsNCgkJc3NsID0gbnVsbDsN CgkJcmVmZXJyYWw9bnVsbDsNCgkJYXV0aHR5cGU9bnVsbDsNCiAgICB9DQogICAgDQogICAg cHVibGljIERpckNvbnRleHQgZ2V0Q29udGV4dCgpDQogICAgew0KICAgICAgICByZXR1cm4g Y29ubmVjdEJlYW4uZ2V0Q29udGV4dCgpOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgamF2 YS51dGlsLkhhc2h0YWJsZSBnZXRFbnYoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIGNvbm5l Y3RCZWFuLmdldEVudigpOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgT2JqZWN0IGdldFBy b3BlcnR5KCBTdHJpbmcgbmFtZSApDQogICAgew0KICAgICAgICByZXR1cm4gY29ubmVjdEJl YW4uZ2V0UHJvcGVydHkoIG5hbWUgKTsNCiAgICB9DQoNCglwdWJsaWMgU3RyaW5nIGdldERu KCkgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMuZG47IH0NCglwdWJsaWMg dm9pZCBzZXREbihTdHJpbmcgZG4pICAgICAgICAgICAgICAgIHsgdGhpcy5kbiA9IGRuOyB9 DQoNCglwdWJsaWMgU3RyaW5nIGdldFBhc3N3b3JkKCkgICAgICAgICAgICAgICAgIHsgcmV0 dXJuIHRoaXMucGFzc3dvcmQ7IH0NCglwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChTdHJpbmcg cGFzc3dvcmQpICAgIHsgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOyB9DQoNCglwdWJsaWMg U3RyaW5nIGdldFVybCgpICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMudXJs OyB9DQoJcHVibGljIHZvaWQgc2V0VXJsKFN0cmluZyB1cmwpICAgICAgICAgICAgICB7IHRo aXMudXJsID0gdXJsOyB9DQoJDQoJcHVibGljIFN0cmluZyBnZXRTc2woKSAgICAgICAgICAg ICAgICAgICAgICB7IHJldHVybiB0aGlzLnVybDsgfQ0KCXB1YmxpYyB2b2lkIHNldFNzbChT dHJpbmcgc3NsKQkJCQl7IHRoaXMuc3NsID0gc3NsOyB9DQoJDQoJcHVibGljIFN0cmluZyBn ZXRSZWZlcnJhbCgpCXsJcmV0dXJuIHRoaXMucmVmZXJyYWw7CX0NCg0KCXB1YmxpYyB2b2lk IHNldFJlZmVycmFsKFN0cmluZyByZWZlcnJhbCkJewl0aGlzLnJlZmVycmFsID0gcmVmZXJy YWw7CX0NCg0KCQ0KCXB1YmxpYyBTdHJpbmcgZ2V0QXV0aHR5cGUoKQ0KCXsNCglyZXR1cm4g dGhpcy5hdXRodHlwZTsNCgl9DQoNCglwdWJsaWMgdm9pZCBzZXRBdXRodHlwZShTdHJpbmcg YXV0aHR5cGUpDQoJew0KCXRoaXMuYXV0aHR5cGUgPSBhdXRodHlwZTsNCgl9DQp9DQoAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL3RhZ2xpYi9DVlMvAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAwMDQwNTU1ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDAwMAAwNzMyMDcxMzc3MQAwMTQz MTIAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0 YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvdGFn bGliL0NWUy9FbnRyaWVzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAw MDAwMDAxMzEzADA3MzIwNzEzNzcxADAxNTY0MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAvQWRkLmphdmEvMS4xLjEuMS9Nb24gTWF5IDE0IDA4OjM1OjQ3IDIwMDEvLw0K L0FkZEF0dHJpYnV0ZS5qYXZhLzEuMS4xLjEvTW9uIE1heSAxNCAwODozNTo0NyAyMDAxLy8N Ci9BdXRoZW50aWNhdGUuamF2YS8xLjEuMS4xL01vbiBNYXkgMTQgMDg6MzU6NDcgMjAwMS8v DQovRGVsZXRlLmphdmEvMS4xLjEuMS9Nb24gTWF5IDE0IDA4OjM1OjQ3IDIwMDEvLw0KL0dl dEF0dHJpYnV0ZS5qYXZhLzEuMi9TdW4gSnVuIDE3IDE4OjQ3OjUxIDIwMDEvLw0KL0dldERO LmphdmEvMS4xLjEuMS9Nb24gTWF5IDE0IDA4OjM1OjQ3IDIwMDEvLw0KL0xkYXBUYWdsaWJF eGNlcHRpb24uamF2YS8xLjEuMS4xL01vbiBNYXkgMTQgMDg6MzU6NDcgMjAwMS8vDQovTW9k aWZ5LmphdmEvMS4xLjEuMS9Nb24gTWF5IDE0IDA4OjM1OjQ3IDIwMDEvLw0KL01vZGlmeUF0 dHJpYnV0ZS5qYXZhLzEuMS4xLjEvTW9uIE1heSAxNCAwODozNTo0NyAyMDAxLy8NCi9Qcm9w ZXJ0eS5qYXZhLzEuMS4xLjEvTW9uIE1heSAxNCAwODozNTo0NyAyMDAxLy8NCi9RdWVyeVRF SS5qYXZhLzEuMS4xLjEvTW9uIE1heSAxNCAwODozNTo0NyAyMDAxLy8NCi9RdWVyeS5qYXZh LzEuMy9TYXQgSnVuIDIzIDIxOjUwOjQxIDIwMDEvLw0KL0Nvbm5lY3QuamF2YS8xLjMvV2Vk IEp1bCAwNCAyMTo1NjoyOSAyMDAxLy8NCi9Nb2RpZnlEbi5qYXZhLzEuMS9XZWQgSnVsIDA0 IDIxOjQ1OjQ1IDIwMDEvLw0KRA0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAbmV0L3NpbXlhL2xkYXAvdGFnbGliL0NWUy9SZXBvc2l0b3J5AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAx MDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAwMDUyADA3MzE1MjA1MTI0ADAxNjM3NgAg MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAg AHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsZGFwdGFnbGliL3NvdXJjZXMvbmV0 L3NpbXlhL2xkYXAvdGFnbGliDQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAG5ldC9zaW15YS9sZGFwL3RhZ2xpYi9DVlMvUm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAw NDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMDA1MAAwNzMxNTIwNTEyNAAwMTUxNDAAIDAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABy b290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOnBzZXJ2ZXI6b3JoYW5Ad3d3LnNpbXlh Lm5ldDovaG9tZS9jdnMNCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABuZXQvc2lteWEvbGRhcC90YWdsaWIvRGVsZXRlLmphdmEAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0 NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDIwNTcAMDcyNzc3MTQzNDMAMDE1NzM0ACAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9v dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNpbXlhLmxkYXAudGFn bGliOw0KDQppbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0Lio7DQppbXBvcnQgamF2 YXguc2VydmxldC5qc3AuKjsNCmltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9u Ow0KaW1wb3J0IG5ldC5zaW15YS5sZGFwLmJlYW5zLio7DQoNCnB1YmxpYyBjbGFzcyAgIERl bGV0ZQ0KICAgICAgIGV4dGVuZHMgVGFnU3VwcG9ydA0Kew0KICAgIHByaXZhdGUgU3RyaW5n IGRuID0gbnVsbDsNCiAgICANCiAgICBwdWJsaWMgaW50IGRvU3RhcnRUYWcoKQ0KICAgIHRo cm93cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAgICAgIENvbm5lY3QgY29ubmVjdFRhZyA9 IChDb25uZWN0KSBnZXRQYXJlbnQoKTsNCiAgICAgICAgaWYgKCBjb25uZWN0VGFnID09IG51 bGwgKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbiggIjxkZWxldGU+ IHRhZyBzaG91bGQgYmUgY2hpbGQgbm9kZSBvZiA8Y29ubmVjdD4gdGFnLiIgKTsNCiAgICAg ICAgDQogICAgICAgIExkYXBEZWxldGVFbnRyeUJlYW4gZGVsZXRlQmVhbiA9IG5ldyBMZGFw RGVsZXRlRW50cnlCZWFuKCk7DQogICAgICAgIGRlbGV0ZUJlYW4uc2V0RG4oIGRuICk7DQog ICAgICAgIGRlbGV0ZUJlYW4uc2V0Q29udGV4dCggY29ubmVjdFRhZy5nZXRDb250ZXh0KCkg KTsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIGRlbGV0ZUJlYW4uZGVs ZXRlRW50cnkoKTsNCiAgICAgICAgfSBjYXRjaCAoIE5hbWluZ0V4Y2VwdGlvbiBleCApDQog ICAgICAgIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBMZGFwVGFnbGliRXhjZXB0aW9uKCBl eCApOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBFVkFMX1BBR0U7DQogICAgfQ0KICAg IA0KICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKQ0KICAgIHsNCiAgICAgICAgZG4gPSBudWxs Ow0KICAgIH0NCg0KCXB1YmxpYyBTdHJpbmcgZ2V0RG4oKSAgICAgICAgICAgICAgIHsgcmV0 dXJuIHRoaXMuZG47IH0NCglwdWJsaWMgdm9pZCBzZXREbihTdHJpbmcgZG4pICAgICAgICB7 IHRoaXMuZG4gPSBkbjsgfQ0KfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5l dC9zaW15YS9sZGFwL3RhZ2xpYi9HZXRBdHRyaWJ1dGUuamF2YQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAw MDAwMDAAMDAwMDAwMAAwMDAwMDAwNjU3NAAwNzMxMzE3NTUyNwAwMTcxNDEAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGFja2FnZSBuZXQuc2lteWEubGRhcC50YWdsaWI7 DQoNCmltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdleHQuKjsNCmltcG9ydCBqYXZheC5z ZXJ2bGV0LmpzcC4qOw0KaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC4qOw0KaW1wb3J0IGph dmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb247DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVj dG9yeS5BdHRyaWJ1dGU7DQppbXBvcnQgbmV0LnNpbXlhLmxkYXAuYmVhbnMuKjsNCmltcG9y dCBuZXQuc2lteWEubGRhcC5zZXJ2bGV0Lio7DQoNCnB1YmxpYyBjbGFzcyAgIEdldEF0dHJp YnV0ZQ0KICAgICAgIGV4dGVuZHMgVGFnU3VwcG9ydA0Kew0KICAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIFN0cmluZyBERUZBVUxUX0RFTElNSVRFUiA9ICIsICI7DQogICAgcHJpdmF0ZSBz dGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTUlNRVRZUEUgID0gInRleHQvcGxhaW4iOw0K ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX01JTUVURVhUICA9ICJ0 ZXh0IjsNCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgICAgREVGQVVMVF9JTkRFWCAg ICAgPSAtMTsNCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9WQUxV RSAgICAgPSAiIjsNCg0KICAgIHByaXZhdGUgU3RyaW5nIG5hbWUgICAgICA9IG51bGw7DQog ICAgcHJpdmF0ZSBTdHJpbmcgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVI7DQogICAg cHJpdmF0ZSBTdHJpbmcgbWltZVR5cGUgID0gREVGQVVMVF9NSU1FVFlQRTsNCiAgICBwcml2 YXRlIGludCAgICBpbmRleCAgICAgPSBERUZBVUxUX0lOREVYOw0KICAgIHByaXZhdGUgU3Ry aW5nIGRlZiAgICAgICA9IERFRkFVTFRfVkFMVUU7DQoNCiAgICBwdWJsaWMgaW50IGRvU3Rh cnRUYWcoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAgICAgIFF1ZXJ5 IHF1ZXJ5VGFnID0gbnVsbDsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgCXF1 ZXJ5VGFnID0gKFF1ZXJ5KSBnZXRQYXJlbnQoKTsNCgkJfQ0KCQljYXRjaCAoIEV4Y2VwdGlv biBleCApDQoJCXsNCiAgICAgICAgICAgIHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oICI8 Z2V0QXR0cmlidXRlPiB0YWcgc2hvdWxkIGJlIGNoaWxkIG5vZGUgb2YgPHF1ZXJ5PiB0YWcu IiApOw0KCQl9DQoNCiAgICAgICAgSnNwV3JpdGVyIG91dCAgICA9IHBhZ2VDb250ZXh0Lmdl dE91dCgpOw0KICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgQXR0cmlidXRl IGF0dHIgPSBxdWVyeVRhZy5nZXRBdHRyaWJ1dGUobmFtZSk7DQogICAgICAgICAgICBpZiAo IGF0dHIgPT0gbnVsbCApDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgb3V0LnBy aW50KCBkZWYgKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gRVZBTF9CT0RZX0lOQ0xVREU7 DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoIGluZGV4ICE9IERFRkFVTFRfSU5E RVggKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG91dHB1dCggb3V0LCBhdHRy LmdldCggaW5kZXggKSApOw0KICAgICAgICAgICAgICAgIHJldHVybiBFVkFMX0JPRFlfSU5D TFVERTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG91dHB1dCggb3V0LCBhdHRyLmdl dCgpICk7DQogICAgICAgICAgICBmb3IgKCBpbnQgaT0xOyBpPGF0dHIuc2l6ZSgpOyBpKysg KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIG91dC5wcmludCggZGVsaW1pdGVy ICk7DQogICAgICAgICAgICAgICAgb3V0cHV0KCBvdXQsIGF0dHIuZ2V0KGkpICk7DQogICAg ICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKCBqYXZhLmlvLklPRXhjZXB0aW9uIGV4ICkN CiAgICAgICAgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbiggIklP IEVycm9yIiApOw0KICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZXgpDQogICAg ICAgIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBMZGFwVGFnbGliRXhjZXB0aW9uKCBleCAp Ow0KICAgICAgICB9DQogICAgICAgIHJldHVybiBFVkFMX0JPRFlfSU5DTFVERTsNCiAgICB9 DQoNCiAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkNCiAgICB7DQogICAgICAgIG5hbWUgPSBu dWxsOw0KICAgICAgICBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUjsNCiAgICAgICAg aW5kZXggPSBERUZBVUxUX0lOREVYOw0KICAgICAgICBtaW1lVHlwZSA9IERFRkFVTFRfTUlN RVRZUEU7DQogICAgfQ0KDQogICAgcHJpdmF0ZSB2b2lkIG91dHB1dCggSnNwV3JpdGVyIG91 dCwgT2JqZWN0IGF0dHIgKQ0KICAgIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uDQogICAg ew0KICAgICAgICBpZiAoIG1pbWVUeXBlLnN0YXJ0c1dpdGgoIERFRkFVTFRfTUlNRVRFWFQg KSApDQogICAgICAgICAgICBvdXQucHJpbnQoIGF0dHIgKTsNCiAgICAgICAgZWxzZQ0KICAg ICAgICB7DQogICAgICAgICAgICBTdHJpbmcgaWQgPSBMZGFwR2xvYmFsQ2FjaGUuYWRkQ2Fj aGUoIGF0dHIsIG1pbWVUeXBlICk7DQogICAgICAgICAgICBvdXQucHJpbnQoICgoSHR0cFNl cnZsZXRSZXF1ZXN0KXBhZ2VDb250ZXh0LmdldFJlcXVlc3QoKSkuZ2V0Q29udGV4dFBhdGgo KSApOw0KICAgICAgICAgICAgb3V0LnByaW50KCAnLycgKTsNCiAgICAgICAgICAgIG91dC5w cmludCggIkxkYXBHbG9iYWxDYWNoZT9pZD0iICk7DQogICAgICAgICAgICBvdXQucHJpbnQo IGlkICk7DQogICAgICAgIH0NCiAgICB9DQoNCglwdWJsaWMgU3RyaW5nIGdldG5hbWUoKSAg ICAgICAgICAgICB7IHJldHVybiB0aGlzLm5hbWU7IH0NCglwdWJsaWMgdm9pZCBzZXROYW1l KFN0cmluZyBuYW1lKSAgICB7IHRoaXMubmFtZSA9IG5hbWU7IH0NCg0KCXB1YmxpYyBTdHJp bmcgZ2V0RGVsaW1pdGVyKCkgICAgICAgIHsgcmV0dXJuIHRoaXMuZGVsaW1pdGVyOyB9DQoJ cHVibGljIHZvaWQgc2V0RGVsaW1pdGVyKFN0cmluZyBkZWxpbWl0ZXIpIHsgdGhpcy5kZWxp bWl0ZXIgPSBkZWxpbWl0ZXI7IH0NCg0KCXB1YmxpYyBTdHJpbmcgZ2V0SW5kZXgoKSB7DQoJ IAlyZXR1cm4gbmV3IEludGVnZXIodGhpcy5pbmRleCkudG9TdHJpbmcoKTsNCgl9DQoJcHVi bGljIHZvaWQgc2V0SW5kZXgoU3RyaW5nIGluZGV4KXsNCgkJdGhpcy5pbmRleCA9IG5ldyBJ bnRlZ2VyKGluZGV4KS5pbnRWYWx1ZSgpOw0KCX0NCg0KCXB1YmxpYyBTdHJpbmcgZ2V0TWlt ZVR5cGUoKSAgICAgICAgIHsgcmV0dXJuIHRoaXMubWltZVR5cGU7IH0NCglwdWJsaWMgdm9p ZCBzZXRNaW1lVHlwZShTdHJpbmcgbWltZVR5cGUpIHsgdGhpcy5taW1lVHlwZSA9IG1pbWVU eXBlOyB9DQoNCglwdWJsaWMgU3RyaW5nIGdldERlZmF1bHQoKSAgICAgICAgICB7IHJldHVy biB0aGlzLmRlZjsgfQ0KCXB1YmxpYyB2b2lkIHNldERlZmF1bHQoU3RyaW5nIGRlZikgIHsg dGhpcy5kZWYgPSBkZWY7IH0NCn0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuZXQvc2lteWEv bGRhcC90YWdsaWIvR2V0RE4uamF2YQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAw MDAwMDAAMDAwMDAwMDE1NDUAMDcyNzc3MTQzNDMAMDE1NDc0ACAwAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNpbXlhLmxkYXAudGFnbGliOw0KDQppbXBv cnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0Lio7DQppbXBvcnQgamF2YXguc2VydmxldC5q c3AuKjsNCmltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9uOw0KaW1wb3J0IGph dmF4Lm5hbWluZy5kaXJlY3RvcnkuQXR0cmlidXRlOw0KaW1wb3J0IG5ldC5zaW15YS5sZGFw LmJlYW5zLio7DQppbXBvcnQgbmV0LnNpbXlhLmxkYXAuc2VydmxldC4qOw0KDQpwdWJsaWMg Y2xhc3MgICBHZXRETg0KICAgICAgIGV4dGVuZHMgVGFnU3VwcG9ydA0Kew0KCXB1YmxpYyBp bnQgZG9TdGFydFRhZygpDQogICAgdGhyb3dzIEpzcEV4Y2VwdGlvbg0KICAgIHsNCiAgICAg ICAgUXVlcnkgcXVlcnlUYWcgPSAoUXVlcnkpIGdldFBhcmVudCgpOw0KICAgICAgICBpZiAo IHF1ZXJ5VGFnID09IG51bGwgKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2Vw dGlvbiggIjxHZXRETj4gdGFnIHNob3VsZCBiZSBjaGlsZCBub2RlIG9mIDxRdWVyeT4gdGFn LiIgKTsNCiAgICAgICAgDQogICAgICAgIEpzcFdyaXRlciBvdXQgICAgPSBwYWdlQ29udGV4 dC5nZXRPdXQoKTsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIFN0cmlu ZyBkbiA9IHF1ZXJ5VGFnLmdldEROKCk7DQogICAgICAgICAJb3V0LnByaW50KCBkbiApOw0K ICAgICAgICAgICAgDQogICAgICAgIH0gY2F0Y2ggKCBqYXZhLmlvLklPRXhjZXB0aW9uIGV4 ICkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbigg IklPIEVycm9yIiApOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBFVkFMX0JPRFlfSU5D TFVERTsNCiAgICB9DQogICAgDQp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABuZXQvc2lteWEvbGRhcC90YWdsaWIvTGRhcFRhZ2xpYkV4Y2VwdGlv bi5qYXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAMDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDA3MzUAMDcyNzc3MTQzNDMA MDIwNDE1ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHVzdGFyICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNp bXlhLmxkYXAudGFnbGliOw0KDQppbXBvcnQgamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlv bjsNCmltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BUYWdFeGNlcHRpb247DQoNCnB1Ymxp YyANCiAgICBjbGFzcyAgIExkYXBUYWdsaWJFeGNlcHRpb24NCiAgICBleHRlbmRzIEpzcFRh Z0V4Y2VwdGlvbg0Kew0KICAgIE5hbWluZ0V4Y2VwdGlvbiBuYW1pbmdFeGNlcHRpb24gPSBu dWxsOw0KICAgIA0KICAgIExkYXBUYWdsaWJFeGNlcHRpb24oIE5hbWluZ0V4Y2VwdGlvbiBl eCApDQogICAgew0KICAgICAgICBzdXBlciggZXguZ2V0TWVzc2FnZSgpICk7DQogICAgICAg IHRoaXMubmFtaW5nRXhjZXB0aW9uID0gZXg7DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBO YW1pbmdFeGNlcHRpb24gZ2V0TmFtaW5nRXhjZXB0aW9uKCkNCiAgICB7DQogICAgICAgIHJl dHVybiBuYW1pbmdFeGNlcHRpb247DQogICAgfQ0KfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvdGFnbGliL01vZGlmeS5qYXZhAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAyNzQyADA3Mzc1NTU3NjI2ADAx NTc3MgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIG5ldC5zaW15 YS5sZGFwLnRhZ2xpYjsNCg0KaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC4qOw0K aW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7DQppbXBvcnQgamF2YXgubmFtaW5nLkNvbnRl eHQ7DQppbXBvcnQgamF2YXgubmFtaW5nLmRpcmVjdG9yeS5EaXJDb250ZXh0Ow0KaW1wb3J0 IGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb247DQppbXBvcnQgbmV0LnNpbXlhLmxkYXAu YmVhbnMuKjsNCg0KcHVibGljIGNsYXNzICAgTW9kaWZ5DQogICAgICAgZXh0ZW5kcyBCb2R5 VGFnU3VwcG9ydA0Kew0KICAgIHByaXZhdGUgU3RyaW5nIGRuID0gbnVsbDsNCiAgICBwcml2 YXRlIExkYXBNb2RpZnlFbnRyeUJlYW4gbW9kaWZ5QmVhbiA9IG5ldyBMZGFwTW9kaWZ5RW50 cnlCZWFuKCk7DQoNCiAgICBwdWJsaWMgaW50IGRvU3RhcnRUYWcoKQ0KICAgIHRocm93cyBK c3BFeGNlcHRpb24NCiAgICB7DQogICAgICAgIENvbm5lY3QgY29ubmVjdFRhZyA9IChDb25u ZWN0KSBnZXRQYXJlbnQoKTsNCiAgICAgICAgaWYgKCBjb25uZWN0VGFnID09IG51bGwgKQ0K ICAgICAgICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbiggIjxtb2RpZnk+IHRhZyBz aG91bGQgYmUgY2hpbGQgbm9kZSBvZiA8Y29ubmVjdD4gdGFnLiIgKTsNCg0KICAgICAgICBt b2RpZnlCZWFuLnNldEROKCBkbiApOw0KICAgICAgICBtb2RpZnlCZWFuLnNldENvbnRleHQo IGNvbm5lY3RUYWcuZ2V0Q29udGV4dCgpICk7DQoNCiAgICAgICAgaWYgKCBpZCAhPSBudWxs ICkNCiAgICAgICAgCXBhZ2VDb250ZXh0LnNldEF0dHJpYnV0ZSggaWQsIG1vZGlmeUJlYW4g KTsNCg0KICAgICAgICByZXR1cm4gRVZBTF9CT0RZX1RBRzsNCiAgICB9DQoNCiAgICBwdWJs aWMgaW50IGRvQWZ0ZXJCb2R5KCkNCiAgICB0aHJvd3MgSnNwRXhjZXB0aW9uDQogICAgew0K ICAgICAgICB0cnkNCiAgICAgICAgew0KICAgICAgICAgICAgbW9kaWZ5QmVhbi5tb2RpZnlF bnRyeSgpOw0KDQogICAgICAgIH0gY2F0Y2ggKCBOYW1pbmdFeGNlcHRpb24gZXggKQ0KICAg ICAgICB7DQogICAgICAgICAgICB0aHJvdyBuZXcgTGRhcFRhZ2xpYkV4Y2VwdGlvbiggZXgg KTsNCiAgICAgICAgfQ0KICAgICAgICAvL2JvZHkuY2xlYXJCb2R5KCk7DQogICAgICAgIHJl dHVybiBTS0lQX0JPRFk7DQogICAgfQ0KDQogICAgcHVibGljIHZvaWQgcmVsZWFzZSgpDQog ICAgew0KICAgICAgICBkbiA9IG51bGw7DQogICAgfQ0KDQogICAgcHVibGljIFN0cmluZyBn ZXREbigpICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiB0aGlzLmRuOyB9DQoJcHVi bGljIHZvaWQgc2V0RG4oU3RyaW5nIGRuKSAgICAgICAgICAgICAgICB7IHRoaXMuZG4gPSBk bjsgfQ0KDQoJcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKFN0cmluZyBuYW1lLCBTdHJpbmcg dmFsdWUsIGludCBtb2RUeXBlKQ0KCXsNCgkJbW9kaWZ5QmVhbi5zZXRNb2RpZnlBdHRyaWJ1 dGUobmFtZSx2YWx1ZSxtb2RUeXBlKTsNCgl9DQp9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAABuZXQvc2lteWEvbGRhcC90YWdsaWIvTW9kaWZ5QXR0cmlidXRlLmphdmEAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA MDEwMDQ0NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDQxNDAAMDcyNzc3MTQzNDMAMDE3NjQw ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy ICAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNpbXlhLmxk YXAudGFnbGliOw0KDQppbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0Lio7DQppbXBv cnQgamF2YXguc2VydmxldC5qc3AuKjsNCmltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhj ZXB0aW9uOw0KaW1wb3J0IGphdmF4Lm5hbWluZy5kaXJlY3RvcnkuRGlyQ29udGV4dDsNCmlt cG9ydCBqYXZheC5uYW1pbmcuZGlyZWN0b3J5LkF0dHJpYnV0ZTsNCmltcG9ydCBuZXQuc2lt eWEubGRhcC5iZWFucy4qOw0KaW1wb3J0IG5ldC5zaW15YS5sZGFwLnNlcnZsZXQuKjsNCg0K cHVibGljIGNsYXNzICAgTW9kaWZ5QXR0cmlidXRlDQogICAgICAgZXh0ZW5kcyBUYWdTdXBw b3J0DQp7DQogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfREVMSU1J VEVSID0gIiwgIjsNCiAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9N SU1FVFlQRSAgPSAidGV4dC9wbGFpbiI7DQogICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry aW5nIERFRkFVTFRfTUlNRVRFWFQgID0gInRleHQiOw0KICAgIHByaXZhdGUgc3RhdGljIGZp bmFsIGludCAgICBERUZBVUxUX0lOREVYICAgICA9IC0xOw0KICAgIHByaXZhdGUgc3RhdGlj IGZpbmFsIFN0cmluZyBERUZBVUxUX1ZBTFVFICAgICA9ICIiOw0KICAgIA0KICAgIHByaXZh dGUgU3RyaW5nIG5hbWUgICAgICA9IG51bGw7DQogICAgcHJpdmF0ZSBTdHJpbmcgdmFsdWUg PSBudWxsOw0KCXByaXZhdGUgU3RyaW5nIG1vZFR5cGU9IG51bGw7DQogICAgcHJpdmF0ZSBT dHJpbmcgbWltZVR5cGUgID0gREVGQVVMVF9NSU1FVFlQRTsNCiAgICANCiAgICBwdWJsaWMg aW50IGRvU3RhcnRUYWcoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRpb24NCiAgICB7DQogICAg ICAgIE1vZGlmeSBtb2RpZnlUYWcgPSAoTW9kaWZ5KSBnZXRQYXJlbnQoKTsNCiAgDQogICAg ICAgIGlmICggbW9kaWZ5VGFnID09IG51bGwgKQ0KICAgICAgICAgICAgdGhyb3cgbmV3IEpz cFRhZ0V4Y2VwdGlvbiggIjxtb2RpZnkgYXR0cmlidXRlPiB0YWcgc2hvdWxkIGJlIGNoaWxk IG5vZGUgb2YgPG1vZGlmeT4gdGFnLiIgKTsNCiAgICAgICAgDQogICAgICAgIGlmIChtb2RU eXBlLmVxdWFsc0lnbm9yZUNhc2UoImFkZCIpKQ0KCQkJbW9kaWZ5VGFnLnNldEF0dHJpYnV0 ZShuYW1lLHZhbHVlLCBEaXJDb250ZXh0LkFERF9BVFRSSUJVVEUpOw0KCQlpZiAobW9kVHlw ZS5lcXVhbHNJZ25vcmVDYXNlKCJyZXBsYWNlIikpDQoJCQltb2RpZnlUYWcuc2V0QXR0cmli dXRlKG5hbWUsdmFsdWUsIERpckNvbnRleHQuUkVQTEFDRV9BVFRSSUJVVEUpOw0KCQlpZiAo bW9kVHlwZS5lcXVhbHNJZ25vcmVDYXNlKCJyZW1vdmUiKSkNCgkJCW1vZGlmeVRhZy5zZXRB dHRyaWJ1dGUobmFtZSx2YWx1ZSwgRGlyQ29udGV4dC5SRU1PVkVfQVRUUklCVVRFKTsNCgkJ DQogICAgICAgIHJldHVybiBFVkFMX0JPRFlfSU5DTFVERTsNCiAgICB9DQogICAgDQogICAg cHVibGljIHZvaWQgcmVsZWFzZSgpDQogICAgew0KICAgICAgICBuYW1lID0gbnVsbDsNCiAg ICAgICAgdmFsdWUgPSBudWxsOw0KCQltb2RUeXBlID0gbnVsbDsNCiAgICAgICAgbWltZVR5 cGUgPSBERUZBVUxUX01JTUVUWVBFOw0KICAgIH0NCiAgIA0KCXB1YmxpYyBTdHJpbmcgZ2V0 TmFtZSgpICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMubmFtZTsgfQ0KCXB1YmxpYyB2b2lk IHNldE5hbWUoU3RyaW5nIG5hbWUpICAgIHsgdGhpcy5uYW1lID0gbmFtZTsgfQ0KDQoJcHVi bGljIFN0cmluZyBnZXRWYWx1ZSgpICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMudmFsdWU7 IH0NCglwdWJsaWMgdm9pZCBzZXRWYWx1ZShTdHJpbmcgdmFsdWUpICAgIHsgdGhpcy52YWx1 ZSA9IHZhbHVlOyB9DQoNCglwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSAgICAgICAgICAgICB7 IHJldHVybiB0aGlzLm1vZFR5cGU7IH0NCglwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyBt b2RUeXBlKSAgICB7IHRoaXMubW9kVHlwZSA9IG1vZFR5cGU7IH0NCg0KCXB1YmxpYyBTdHJp bmcgZ2V0TWltZVR5cGUoKSAgICAgICAgIHsgcmV0dXJuIHRoaXMubWltZVR5cGU7IH0NCglw dWJsaWMgdm9pZCBzZXRNaW1lVHlwZShTdHJpbmcgbWltZVR5cGUpIHsgdGhpcy5taW1lVHlw ZSA9IG1pbWVUeXBlOyB9DQp9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABuZXQvc2lteWEvbGRhcC90YWdsaWIvTW9kaWZ5RG4uamF2YQAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDQ0 NAAwMDAwMDAwADAwMDAwMDAAMDAwMDAwMDI0NzUAMDczMjA3MDcyMTEAMDE2MjMwACAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAcm9v dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBhY2thZ2UgbmV0LnNpbXlhLmxkYXAudGFn bGliOw0KDQppbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0Lio7DQppbXBvcnQgamF2 YXguc2VydmxldC5qc3AuKjsNCmltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9u Ow0KaW1wb3J0IG5ldC5zaW15YS5sZGFwLmJlYW5zLio7DQoNCnB1YmxpYyBjbGFzcyAgIE1v ZGlmeURuDQogICAgICAgZXh0ZW5kcyBUYWdTdXBwb3J0DQp7DQogICAgcHJpdmF0ZSBTdHJp bmcgb2xkZG4gPSBudWxsOw0KICAgIHByaXZhdGUgU3RyaW5nIG5ld2RuID0gbnVsbDsNCiAg ICANCiAgICBwdWJsaWMgaW50IGRvU3RhcnRUYWcoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRp b24NCiAgICB7DQogICAgICAgIENvbm5lY3QgY29ubmVjdFRhZyA9IChDb25uZWN0KSBnZXRQ YXJlbnQoKTsNCiAgICAgICAgaWYgKCBjb25uZWN0VGFnID09IG51bGwgKQ0KICAgICAgICAg ICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbiggIjxtb2RpZnlkbj4gdGFnIHNob3VsZCBi ZSBjaGlsZCBub2RlIG9mIDxjb25uZWN0PiB0YWcuIiApOw0KICAgICAgICANCiAgICAgICAg TGRhcE1vZGlmeURuQmVhbiBtb2RpZnlkbkJlYW4gPSBuZXcgTGRhcE1vZGlmeURuQmVhbigp Ow0KICAgICAgICBtb2RpZnlkbkJlYW4uc2V0T2xkRG4oIG9sZGRuICk7DQogICAgICAgIG1v ZGlmeWRuQmVhbi5zZXROZXdEbiggbmV3ZG4gKTsNCiAgICAgICAgbW9kaWZ5ZG5CZWFuLnNl dENvbnRleHQoIGNvbm5lY3RUYWcuZ2V0Q29udGV4dCgpICk7DQogICAgICAgIHRyeQ0KICAg ICAgICB7DQogICAgICAgICAgICBtb2RpZnlkbkJlYW4ubW9kaWZ5RE4oKTsNCgkJCQ0KICAg ICAgICB9IGNhdGNoICggTmFtaW5nRXhjZXB0aW9uIGV4ICkNCiAgICAgICAgew0KICAgICAg ICAgICAgdGhyb3cgbmV3IExkYXBUYWdsaWJFeGNlcHRpb24oIGV4ICk7DQogICAgICAgIH0N CiAgICAgICAgcmV0dXJuIEVWQUxfUEFHRTsNCiAgICB9DQogICAgDQogICAgcHVibGljIHZv aWQgcmVsZWFzZSgpDQogICAgew0KICAgICAgICBvbGRkbiA9IG51bGw7DQogICAgICAgIG5l d2RuID0gbnVsbDsNCiAgICB9DQoNCglwdWJsaWMgU3RyaW5nIGdldE9sZGRuKCkgICAgICAg ICAgICAgICB7IHJldHVybiB0aGlzLm9sZGRuOyB9DQoJcHVibGljIHZvaWQgc2V0T2xkZG4o U3RyaW5nIG9sZGRuKSAgICAgICAgeyB0aGlzLm9sZGRuID0gb2xkZG47IH0NCg0KCXB1Ymxp YyBTdHJpbmcgZ2V0TmV3ZG4oKSAgICAgICAgICAgICAgIHsgcmV0dXJuIHRoaXMubmV3ZG47 IH0NCglwdWJsaWMgdm9pZCBzZXROZXdkbihTdHJpbmcgbmV3ZG4pICAgICAgICB7IHRoaXMu bmV3ZG4gPSBuZXdkbjsgfQ0KfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5l dC9zaW15YS9sZGFwL3RhZ2xpYi9Nb2RpZnlURUkuamF2YQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAw MDAwMDAAMDAwMDAwMAAwMDAwMDAwMTM0NAAwNzM3NTU1MTY1MQAwMTYzMjEAIDAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIAByb290AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGFja2FnZSBuZXQuc2lteWEubGRhcC50YWdsaWI7 CgppbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0Lio7CgpwdWJsaWMKICAgIGNsYXNz ICAgTW9kaWZ5VEVJCiAgICBleHRlbmRzIFRhZ0V4dHJhSW5mbwp7CiAgICBwdWJsaWMgVmFy aWFibGVJbmZvW10gZ2V0VmFyaWFibGVJbmZvKCBUYWdEYXRhIGRhdGEgKQogICAgewogICAg ICAgIC8vaWYgdXNlciBkaWRuJ3QgcHJvdmlkZSBpZCwgdmFyaWFibGVpbmZvIHJldHVybnMg bnVsbC4KCQlpZiAoZGF0YS5nZXRJZCgpICE9IG51bGwpCgkJewoJCQlWYXJpYWJsZUluZm8g cmVjID0gbmV3IFZhcmlhYmxlSW5mbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YS5nZXRJZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAibmV0LnNpbXlhLmxkYXAuYmVhbnMuTGRhcE1vZGlmeUVudHJ5QmVhbiIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZhcmlhYmxlSW5mby5ORVNURUQgKTsKICAgICAgICAgCXJldHVy biBuZXcgVmFyaWFibGVJbmZvW10geyByZWMgfTsKCQl9CgkJZWxzZQoJCQlyZXR1cm4gbmV3 IFZhcmlhYmxlSW5mb1tdIHsgIH07CgkJCiAgICB9CiAgICAKICAgIHB1YmxpYyBib29sZWFu IGlzVmFsaWQoIFRhZ0RhdGEgZGF0YSApCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAg ICB9Cn0KCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAG5ldC9zaW15YS9sZGFwL3RhZ2xpYi9Qcm9wZXJ0eS5q YXZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAwMTAwNDQ0ADAwMDAwMDAAMDAwMDAwMAAwMDAwMDAwMjc2NgAwNzI3 NzcxNDM0MwAwMTYzNjUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAdXN0YXIgIAByb290AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJvb3QA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcGFja2Fn ZSBuZXQuc2lteWEubGRhcC50YWdsaWI7DQoNCmltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50 YWdleHQuKjsNCmltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOw0KaW1wb3J0IGphdmF4Lm5h bWluZy5Db250ZXh0Ow0KaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7DQoNCnB1YmxpYyBj bGFzcyAgIFByb3BlcnR5DQogICAgICAgZXh0ZW5kcyBUYWdTdXBwb3J0DQp7DQogICAgcHJp dmF0ZSBTdHJpbmcgbmFtZSAgPSBudWxsOw0KICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlID0g bnVsbDsNCiAgICBwcml2YXRlIHN0YXRpYyBIYXNodGFibGUgcHJlRGVmaW5lZE5hbWVzID0g bmV3IEhhc2h0YWJsZSgpOw0KICAgIA0KICAgIHN0YXRpYw0KICAgIHsNCiAgICAgICAgcHJl RGVmaW5lZE5hbWVzLnB1dCggImZhY3RvcnkiLCBDb250ZXh0LklOSVRJQUxfQ09OVEVYVF9G QUNUT1JZICk7DQogICAgICAgIHByZURlZmluZWROYW1lcy5wdXQoICJ1cmwiLCBDb250ZXh0 LlBST1ZJREVSX1VSTCApOw0KICAgICAgICBwcmVEZWZpbmVkTmFtZXMucHV0KCAiZG4iLCBD b250ZXh0LlNFQ1VSSVRZX1BSSU5DSVBBTCApOw0KICAgICAgICBwcmVEZWZpbmVkTmFtZXMu cHV0KCAicGFzc3dvcmQiLCBDb250ZXh0LlNFQ1VSSVRZX0NSRURFTlRJQUxTICk7DQogICAg ICAgIHByZURlZmluZWROYW1lcy5wdXQoICJzc2wiLCBDb250ZXh0LlNFQ1VSSVRZX1BST1RP Q09MICk7DQogICAgICAgIHByZURlZmluZWROYW1lcy5wdXQoICJyZWZlcnJhbCIsIENvbnRl eHQuUkVGRVJSQUwgKTsNCiAgICAgICAgcHJlRGVmaW5lZE5hbWVzLnB1dCggImF1dGh0eXBl IiwgQ29udGV4dC5TRUNVUklUWV9BVVRIRU5USUNBVElPTiApOw0KICAgIH0NCiAgICANCiAg ICBwdWJsaWMgaW50IGRvU3RhcnRUYWcoKQ0KICAgIHRocm93cyBKc3BFeGNlcHRpb24NCiAg ICB7DQoJICAgICBpZiAoIHByZURlZmluZWROYW1lcy5jb250YWluc0tleSggbmFtZSApICkN CiAgICAgICAgICAgIHBhZ2VDb250ZXh0LnNldEF0dHJpYnV0ZSggKFN0cmluZylwcmVEZWZp bmVkTmFtZXMuZ2V0KCBuYW1lICksIHZhbHVlICk7DQogICAgICAgIGVsc2UNCiAgICAgICAg ICAgIHBhZ2VDb250ZXh0LnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKTsNCiAgICAgICBy ZXR1cm4gRVZBTF9QQUdFOw0KICAgIH0NCiAgICANCiAgICBwdWJsaWMgdm9pZCByZWxlYXNl KCkNCiAgICB7DQogICAgICAgIG5hbWUgID0gbnVsbDsNCiAgICAgICAgdmFsdWUgPSBudWxs Ow0KICAgIH0NCg0KCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpICAgICAgICAgICAgICAgICB7 IHJldHVybiB0aGlzLm5hbWU7IH0NCglwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1l KSAgICAgICAgeyB0aGlzLm5hbWUgPSBuYW1lOyB9DQoNCglwdWJsaWMgU3RyaW5nIGdldFZh bHVlKCkgICAgICAgICAgICAgICAgeyByZXR1cm4gdGhpcy52YWx1ZTsgfQ0KCXB1YmxpYyB2 b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSkgICAgICB7IHRoaXMudmFsdWUgPSB2YWx1ZTsg fQ0KfSAgICAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvdGFnbGliL1F1ZXJ5LmphdmEAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDA0NzM2ADA3NDAwMDI0 NzQyADAxNTYyNgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIG5l dC5zaW15YS5sZGFwLnRhZ2xpYjsNCg0KaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4 dC4qOw0KaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLio7DQppbXBvcnQgamF2YXgubmFtaW5n LmRpcmVjdG9yeS5EaXJDb250ZXh0Ow0KaW1wb3J0IGphdmF4Lm5hbWluZy5kaXJlY3Rvcnku QXR0cmlidXRlOw0KaW1wb3J0IGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb247DQppbXBv cnQgbmV0LnNpbXlhLmxkYXAuYmVhbnMuKjsNCg0KcHVibGljIGNsYXNzICAgUXVlcnkNCiAg ICAgICBleHRlbmRzIEJvZHlUYWdTdXBwb3J0DQp7DQogICAgcHJpdmF0ZSBMZGFwU2VhcmNo QmVhbiBzZWFyY2hCZWFuID0gbmV3IExkYXBTZWFyY2hCZWFuKCk7DQoNCiAgICAvL3ByaXZh dGUgU3RyaW5nIGlkID0gbnVsbDsNCg0KCXB1YmxpYyBpbnQgZG9TdGFydFRhZygpDQogICAg dGhyb3dzIEpzcEV4Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgQ29ubmVjdCBjb25uZWN0VGFn ID0gKENvbm5lY3QpIGdldFBhcmVudCgpOw0KICAgICAgICBpZiAoIGNvbm5lY3RUYWcgPT0g bnVsbCApDQogICAgICAgICAgICB0aHJvdyBuZXcgSnNwVGFnRXhjZXB0aW9uKCAiPHF1ZXJ5 PiB0YWcgc2hvdWxkIGJlIGNoaWxkIG5vZGUgb2YgPGNvbm5lY3Q+IHRhZy4iICk7DQoNCiAg ICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHNlYXJjaEJlYW4uc2VhcmNoKCBj b25uZWN0VGFnLmdldENvbnRleHQoKSApOw0KICAgICAgICAgICAgaWYgKCAhc2VhcmNoQmVh bi5uZXh0KCkgKQ0KICAgICAgICAgICAgICAgIHJldHVybiBTS0lQX0JPRFk7DQogICAgICAg IH0gY2F0Y2ggKE5hbWluZ0V4Y2VwdGlvbiBleCkNCiAgICAgICAgew0KICAgICAgICAgICAg dGhyb3cgbmV3IExkYXBUYWdsaWJFeGNlcHRpb24oIGV4ICk7DQogICAgICAgIH0NCiAgICAg ICAgaWYgKCBpZCAhPSBudWxsICkNCiAgICAgICAgCXBhZ2VDb250ZXh0LnNldEF0dHJpYnV0 ZSggaWQsIHNlYXJjaEJlYW4gKTsNCiAgICAgICAgcmV0dXJuIEVWQUxfQk9EWV9UQUc7DQog ICAgfQ0KDQogICAgcHVibGljIGludCBkb0FmdGVyQm9keSgpDQogICAgdGhyb3dzIEpzcEV4 Y2VwdGlvbg0KICAgIHsNCiAgICAgICAgQm9keUNvbnRlbnQgYm9keSA9IGdldEJvZHlDb250 ZW50KCk7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICBib2R5LndyaXRl T3V0KCBnZXRQcmV2aW91c091dCgpICk7DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2ggKCBq YXZhLmlvLklPRXhjZXB0aW9uIGV4ICkNCiAgICAgICAgew0KICAgICAgICAgICAgdGhyb3cg bmV3IEpzcFRhZ0V4Y2VwdGlvbiggIklPIEVycm9yIiApOw0KICAgICAgICB9DQoNCiAgICAg ICAgYm9keS5jbGVhckJvZHkoKTsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAg ICAgIGlmICggc2VhcmNoQmVhbi5uZXh0KCkgKQ0KICAgICAgICAgICAgICAgIHJldHVybiBF VkFMX0JPRFlfVEFHOw0KICAgICAgICB9IGNhdGNoIChOYW1pbmdFeGNlcHRpb24gZXgpDQog ICAgICAgIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBMZGFwVGFnbGliRXhjZXB0aW9uKCBl eCApOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBTS0lQX0JPRFk7DQogICAgfQ0KDQog ICAgcHVibGljIEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUoIFN0cmluZyBuYW1lICkNCiAgICB0 aHJvd3MgTmFtaW5nRXhjZXB0aW9uDQogICAgew0KICAgICAgICByZXR1cm4gc2VhcmNoQmVh bi5nZXRBdHRyaWJ1dGUoIG5hbWUgKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCByZWxl YXNlKCkNCiAgICB7DQogICAgICAgIHNlYXJjaEJlYW4gPSBuZXcgTGRhcFNlYXJjaEJlYW4o KTsNCgkJaWQ9bnVsbDsNCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCBzZXRGaWx0ZXIoIFN0 cmluZyBmaWx0ZXIgKXsgc2VhcmNoQmVhbi5zZXRGaWx0ZXIoIGZpbHRlciApO30NCg0KICAg IHB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZXMoIFN0cmluZyBhdHRyaWJ1dGVzICl7IHNlYXJj aEJlYW4uc2V0UmV0dXJuaW5nQXR0cmlidXRlcyggYXR0cmlidXRlcyApO30NCg0KICAgIHB1 YmxpYyB2b2lkIHNldExpbWl0KCBTdHJpbmcgbGltaXQgKXsgc2VhcmNoQmVhbi5zZXRMaW1p dCggbGltaXQgKTsgfQ0KDQogICAgcHVibGljIHZvaWQgc2V0QmFzZWRuKCBTdHJpbmcgYmFz ZWRuICl7IHNlYXJjaEJlYW4uc2V0U2VhcmNoQmFzZSggYmFzZWRuICk7fQ0KDQoJcHVibGlj IFN0cmluZyBnZXRETiAoKXsgcmV0dXJuIHNlYXJjaEJlYW4uZ2V0RE4oKTt9DQoNCglwdWJs aWMgdm9pZCBzZXRTY29wZSAoU3RyaW5nIHNjb3BlKSB7IHNlYXJjaEJlYW4uc2V0U2NvcGUo c2NvcGUpO30NCglwdWJsaWMgU3RyaW5nIGdldFNjb3BlICgpeyByZXR1cm4gc2VhcmNoQmVh bi5nZXRTY29wZSgpO30NCg0KCS8qDQoJcHVibGljIFN0cmluZyBnZXRJZCgpDQoJew0KCQly ZXR1cm4gdGhpcy5pZDsNCgl9DQoNCglwdWJsaWMgdm9pZCBzZXRJZChTdHJpbmcgaWQpDQoJ ew0KCQl0aGlzLmlkID0gaWQ7DQoJfQ0KCSovDQp9DQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAbmV0L3NpbXlhL2xkYXAvdGFnbGliL1F1ZXJ5VEVJLmphdmEAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAADAxMDA0NDQAMDAwMDAwMAAwMDAwMDAwADAwMDAwMDAxMzcwADA3Mjc3NzE0MzQzADAx NjE3NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1 c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwYWNrYWdlIG5ldC5zaW15 YS5sZGFwLnRhZ2xpYjsNCg0KaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC4qOw0K DQpwdWJsaWMNCiAgICBjbGFzcyAgIFF1ZXJ5VEVJDQogICAgZXh0ZW5kcyBUYWdFeHRyYUlu Zm8NCnsNCiAgICBwdWJsaWMgVmFyaWFibGVJbmZvW10gZ2V0VmFyaWFibGVJbmZvKCBUYWdE YXRhIGRhdGEgKQ0KICAgIHsNCiAgICAgICAgLy9pZiB1c2VyIGRpZG4ndCBwcm92aWRlIGlk LCB2YXJpYWJsZWluZm8gcmV0dXJucyBudWxsLg0KCQlpZiAoZGF0YS5nZXRJZCgpICE9IG51 bGwpDQoJCXsNCgkJCVZhcmlhYmxlSW5mbyByZWMgPSBuZXcgVmFyaWFibGVJbmZvKA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5nZXRJZCgpLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldC5zaW15YS5sZGFwLmJlYW5zLkxk YXBTZWFyY2hCZWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy dWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUluZm8u TkVTVEVEICk7DQogICAgICAgICAJcmV0dXJuIG5ldyBWYXJpYWJsZUluZm9bXSB7IHJlYyB9 Ow0KCQl9DQoJCWVsc2UNCgkJCXJldHVybiBuZXcgVmFyaWFibGVJbmZvW10geyAgfTsNCgkJ DQogICAgfQ0KICAgIA0KICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoIFRhZ0RhdGEgZGF0 YSApDQogICAgew0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQp9AAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAA== --------------040208070708090807010809 Content-Type: text/plain; charset=us-ascii -- To unsubscribe, e-mail: For additional commands, e-mail: --------------040208070708090807010809--