Our Logo
WebAsOne
Home
Design
Design Block
Design Patterns
Themes
Design-Marketing
Hero
About
BIO
Contact
CTA
FAQ
Footer
Portfolio
Price
Service
Team
Testimonials
JS Frameworks
ReactJS
SvelteJS
VueJS
Web Apps
OpenSource
Mini-Apps
Common
GroupA
Multi-Cols
Two Columns
Three Columns
Pagination
Panel
image
ImageText
Youtube
Video-mp4
Slider
Bootstrap 5
Bootstrap 5-A
QwlCarousel
Slick
Swiper
Splide
DesignBlock
-> Slider ->
Bootstrap 5
Bootstrap 5-A
QwlCarousel
Slick
Swiper
Splide
Page,idxx-xx,s_slide,
s_slide/id13-33,Click to clipboard
ezIzOiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYicvKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIE1lZGlhIGNvbXBvbmVudC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIE1lZGlhQ29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgLyoqIEBpbnRlcm5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKi9cclxuICAgIHJlZHVjZShyZWR1Y2VkOiBib29sZWFuKTogdm9pZDtcclxuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQob3B0aW9uczogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdGlmeT86IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduKTogdm9pZDtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5pbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQge1xyXG4gICAgcmVzb2x2ZShwcm9wOiBzdHJpbmcsIGF4aXNPbmx5PzogYicKICAgICAgICAgICAgICAgICAgICAgICAgYiJvb2xlYW4sIGRpcmVjdGlvbj86IE9wdGlvbnNbJ2RpcmVjdGlvbiddKTogc3RyaW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInZztcclxuICAgIG9yaWVudCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyO1xyXG59XG5cbi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgZWxlbWVudHMgd2hpY2ggdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgY29uc2lzdHMgb2YuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSBFbGVtZW50Q29sbGVjdGlvbiB7XHJcbiAgICByb290OiBIVE1MRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ7XHJcbiAgICB0cmFjazogSFRNTEVsZW1lbnQ7XHJcbiAgICBsaXN0OiBIVE1MRWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQ7XHJcbiAgICBzbGlkZXM6IEhUTUxFbGVtZW50W107XHJcbiAgICBhcnJvd3M/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFRNTEVsZW1lbnQ7XHJcbiAgICBwYWdpbmF0aW9uPzogSFRNTFVMaXN0RWxlbWVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBwcmV2PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBuZXh0PzogSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCdXR0b25FbGVtZW50O1xyXG4gICAgYmFyPzogSFRNTEVsZW1lbnQ7XHJcbiAgICB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlPzogSFRNTEVsZW1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciB0aGUgRWxlbWVudHMgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAqL1xyXG5pbnRlcmZhY2UgRWxlbWVudHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCwgRWxlbWVudENvbGxlY3Rpb24ge1xyXG59XG5cbi8qKlxyXG4gKiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGludGVyZmFjZSBmb3IgdGhlIFNsaWRlIHN1YiBjb21wb25lbnQuXHJcbiAqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBTbGlkZUNvbXBvbmVudCBleHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVJbmRleDogbnVtYmVyO1xyXG4gICAgc2xpZGU6IEhUTUxFbGVtZW50O1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgICBpc0Nsb25lOiBib29sZWFuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHVwZGF0ZSgpOiB2b2lkO1xyXG4gICAgc3R5bGUocHJvcDogc3RyaW5nLCB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWU6IHN0cmluZyB8IG51bWJlciwgdXNlQ29udGFpbmVyPzogYm9vbGVhbik6IHZvaWQ7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaXNXaXRoaW4oZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyKTogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBMYXlvdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIExheW91dENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxpc3RTaXplKCk6IG51bWJlcjtcclxuICAgIHNsaWRlU2l6ZShpbmRleDogbnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciwgd2l0aG91dEdhcD86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBzbGlkZXJTaScKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSh3aXRob3V0R2FwPzogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIHRvdGFsU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoaW5kZXg/OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuKTogbnVtYmVyO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGdldFBhZGRpbmcocmlnaHQ6IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidPdmVyZmxvdygpOiBib29sZWFuO1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc2l6ZShmb3JjZT86IGJvb2xlYW4pOiB2b2lkO1xyXG59XG5cbi8qKlxyXG4gKiBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGludGVyZmFjZSBmb3IgdGhlIENsb25lIGNvbXBvbmVudC5cclxuICpcclxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIENsb25lc0NvbXBvbmVudCBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBCYXNlQ29tcG9uZW50IHtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIHRoZSBNb3ZlIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxyXG4gKi9cclxuaW50ZXJmYWNlIE1vdmVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudCB7XHJcbiAgICBtb3ZlKGRlc3Q6IG51bWJlciwgaW5kZXg6IG51bWJlciwgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXY6IG51bWJlciwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbik6IHZvaWQ7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicganVtcChpbmRleDogbnVtYmVyKTogdm9pZDtcclxuICAgIHRyYW5zbGF0ZShwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb246IG51bWJlciwgcHJldmVudExvb3A/OiBib29sZWFuKTogdm9pZDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzaGlmdChwb3NpdGlvbjogbnVtYmVyLCBiYWNrd2FyZHM6IGJvb2xlYW4pOiBudW1iZXI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgY2FuY2VsKCk6IHZvaWQ7XHJcbiAgICB0b0luZGV4KHBvc2l0aW9uOiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyKTogbnVtYmVyO1xyXG4gICAgdG9Qb3NpdGlvbihpbmRleDogbnVtYmVyLCB0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW1pbmc/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gICAgZ2V0UG9zaXRpb24oKTogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlcjtcclxuICAgIGdldExpbWl0KG1heDogYm9vbGVhbik6IG51bWJlcjtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlZWRlZExpbWl0KG1heD86IGJvb2xlYW4gfCB1bmRlZmluZWQsIHBvc2l0aW9uPzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcik6IGJvb2xlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICByZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbigpOiB2b2lkO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgdGhlIENvbnRyb2xsZXIgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgYicwXHJcbiAqL1xyXG5pbnRlcmZhY2UgQ29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIEJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ29tcG9uZW50IHtcclxuICAgIGdvKGNvbnRyb2w6IG51bWJlciB8IHN0cmluZywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbG93U2FtZUluZGV4PzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbik6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xyXG4gICAgc2Nyb2xsKGRlc3RpbmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uPzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RnVuY3Rpb24pOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxuICAgIGdldE5leHQoZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmVyOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIGdldFByZXYoZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGdldEVuZCgpOiBudW1iZXI7XHJcbiAgICBzZXRJbmRleChpbmRleDogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQ7XHJcbiAgICBnZXRJbmRleChwcmV2PzogYm9vbGVhbik6IG51bWJlcjtccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0b0luZGV4KHBhZ2U6IG51bWJlcik6IG51bWJlcjtcclxuICAgIHRvUGFnZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXg6IG51bWJlcik6IG51bWJlcjtcclxuICAgIHRvRGVzdChwb3NpdGlvbjogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlcik6IG51bWJlcjtcclxuICAgIGhhc0ZvY3VzKCk6IGJvb2xlYW47XHJcbiAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidCdXN5KCk6IGJvb2xlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RqYWNlbnQocHJldjogYm9vbGVhbiwgZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEFycm93cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgQXJyb3dzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJyb3dzOiB7XHJcbiAgICAgICAgcHJldj86IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICB9O1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAaW50ZXJuYWwgKi9cclxuICAgIHVwZGF0ZSgpOiB2b2lkO1xyXG59XG5cbi8qKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEF1dG9wbGF5IGNvbXBvbmVudC5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEF1dG9wbGF5QycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgcGxheSgpOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxuICAgIHBhdXNlKCk6IHZvaWQ7XHJcbiAgICBpc1BhdXNlZCgpOiBib29sZWFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIENvdmVyIGNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBDb3ZlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG59XG5cbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFNjcm9sbCBjb21wb25lbnQuXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBTY3JvbGxDb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBzY3JvbGwocG9zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uOiBudW1iZXIsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrPzogQW55RnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgY2FuY2VsKCk6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRHJhZyBjb21wb25lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBEcmFnQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgZGlzYWJsZShkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgaXNEcmFnZ2luZygpOiBib29sZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEtleWJvYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBLZXlib2FyZENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGRpc2FibGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xyXG59XG5cbi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIExhenlMb2FkIGNvbXBvbmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIExhenlMbycKICAgICAgICAgICAgICAgICAgICAgICAgYidhZENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgLyoqIEBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJuYWwgKi9cclxuICAgIGNoZWNrKCk6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaW50ZXJmYWNlIGZvciB0aGUgUGFnaW5hdGlvbiBjb21wb25lbnQuXHJcbiAqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBQYWdpbmF0aW9uQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgaXRlbXM6IFBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduSXRlbVtdO1xyXG4gICAgZ2V0QXQoaW5kZXg6IG51bWJlcik6IFBhZ2luYXRpb25JdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbTtcclxuICAgIHVwZGF0ZSgpOiB2b2lkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZSBmb3IgZGF0YSBvZiB0aGUgcGFnaW5hdGlvbi5cclxuICpcclxuICogQHNpbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhIHtcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBsaXN0OiBIVE1MVUxpc3RFbGVtZW50O1xyXG4gICAgaXRlbXM6IFBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSXRlbVtdO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBlYWNoIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdpbmF0aW9uIGl0ZW0uXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSBQYWdpbmF0aW9uSXRlbSB7XHJcbiAgICBsaTogSFRNTExJRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgcGFnZTogbnVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JlcjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFN5bmMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlIFN5bmNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1vdW50KCk6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0aGUgV2hlZWwgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAqL1xyXG5pbnRlcmZhY2UgV2hlZWxDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCB7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBMaXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBMaXZlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBUaGUgY29sbGVjdGlvbiBvZiBpMThuIHN0cmluZ3MuXHJcbiAqXHJcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgSTE4Tjoge1xyXG4gICAgcHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Y6IHN0cmluZztcclxuICAgIG5leHQ6IHN0cmluZztcclxuICAgIGZpcnN0OiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgbGFzdDogc3RyaW5nO1xyXG4gICAgc2xpZGVYOiBzdHJpbmc7XHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcGFnZVg6IHN0cmluZztcclxuICAgIHBsYXk6IHN0cmluZztcclxuICAgIHBhdXNlOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG4gICAgY2Fyb3VzZWw6IHN0cmluZztcclxuICAgIHNsaWRlOiBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nO1xyXG4gICAgc2VsZWN0OiBzdHJpbmc7XHJcbiAgICBzbGlkZUxhYmVsOiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG59O1xuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3Igb3B0aW9ucy5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIE9wdGlvbnMgZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgUmVzcG9uc2l2ZU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiInR5cGUgb2YgdGhlIHNsaWRlci5cclxuICAgICAqIC0gJ3NsaWRlJzogQSBzbGlkZXIgIgogICAgICAgICAgICAgICAgICAgICAgICBiIndpdGggdGhlIHNsaWRlIHRyYW5zaXRpb25cclxuICAgICAqIC0gJ2xvb3AnIDogQSBjIgogICAgICAgICAgICAgICAgICAgICAgICBiImFyb3VzZWwgc2xpZGVyXHJcbiAgICAgKiAtICdmYWRlJyA6IEEgc2xpZGVyIHdpdGggIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBmYWRlIHRyYW5zaXRpb24uIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcGVyUGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2Ugb3B0aW9uLlxyXG4gICAgICovXHJcbiAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxyXG4gICAgICogVGhlIGByb2xlYCBhdHRyaWJ1dGUgZm9yIHRoZSByb290IGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50LlxyXG4gICAgICogSWYgdGhlIHRhZyBpcyBgPHNlY3Rpb24+YCwgdGhpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIidmFsdWUgd2lsbCBub3QgYmUgdXNlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYCdyZWdpbyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuJ2AuXHJcbiAgICAgKi9cclxuICAgIHJvbGU/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzYWJsZSBhbnkgYWN0aW9ucyB3aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgdGhlIHNsaWRlciBpcyB0cmFuc2l0aW9uaW5nLlxyXG4gICAgICogRXZlbiBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYGZhbHNlYCwgdGhlIHNsaWRlciBmb3JjaWJseSB3YWl0cyBmb3IgdHJhbnNpdGlvbiBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGxvb3AgcG9pbnRzLlxyXG4gICAgICovXHJcbiAgICB3YWl0Rm9yVHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGggb2Ygc2xpZGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZWlyIHdpZHRoLlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFRoZSBgcGVyUGFnZWAgYW5kIGBwZXJNb3ZlYCBvcHRpb25zIHNob3VsZCBiZSBgMScKICAgICAgICAgICAgICAgICAgICAgICAgYidgLlxyXG4gICAgICovXHJcbiAgICBhdXRvV2lkdGg/OiBib29sZWFuO1xyXG4gICAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxyXG4gICAgICogSWYgYHRydWVgLCB0aGUgaGVpZ2h0IG9mIHNsaWRlcyBhcmUgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldGVybWluZWQgYnkgdGhlaXIgaGVpZ2h0LlxyXG4gICAgICogVGhlIGBwZXJQYWdlYCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW5kIGBwZXJNb3ZlYCBvcHRpb25zIHNob3VsZCBiZSBgMWAuXHJcbiAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBhdXRvSGVpZ2h0PzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydCBpbmRleC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ/OiBudW1iZXI7XHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBhcnJvdyBTVkcgcGF0aCwgbGlrZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ203LjYxIDAuODA3LTIuMTIuLi4nLlxyXG4gICAgICovXHJcbiAgICBhcnJvd1BhdGg/OiIKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2YXRlIGF1dG9wbGF5IG9yIG5vdC5cclxuICAgICAqIElmIGBwYXVzZWRgLCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgd2lsbCBub3QgYmVnaW4gd2hlbiB0aGUgc2xpZGVyIGJlY29tZXMgYWN0aXZlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIFlvdSBuZWVkIHRvIHByb3ZpZGVkIHBsYXkvcGF1c2UgYnV0dG9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgbWFudWFsbHkgc3RhcnQgaXQgYnkgYEF1dG9wbGF5I3BsYXkoKWAuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICovXHJcbiAgICBhdXRvcGxheT86IGJvb2xlYW4gfCAncGF1c2UnO1xyXG4gICAgLyoqIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogVGhlIGF1dG9wbGF5IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIGludGVydmFsPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHBhdXNlIGF1dG9wbGF5IG9uIG1vdXNlbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlT25Ib3Zlcj86IGJvb2xlYW47XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcGF1c2UgYXV0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5IHdoZW4gdGhlIHNsaWRlciBjb250YWlucyB0aGUgYWN0aXZlIGVsZW1lbnQgKGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c2VkIGVsZW1lbnQpLlxyXG4gICAgICogVGhpcyBzaG91bGQgYmUgYHRydWVgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYWNjZXNzaWJpbGl0eS5cclxuICAgICAqL1xyXG4gICAgcGF1c2VPbkZvY3VzPzogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQgdGhlIGF1dG9wbGF5IHByb2dyZXNzIHdoZW4gaXQgaXMgcmVxdWVzdGVkIHRvIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FydCBhZ2Fpbi5cclxuICAgICAqL1xyXG4gICAgcmVzZXRQcm9ncmVzcz86IGJvb2xlYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIGxhenkgbG9hZGluZy5cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBQcm92aWRlIHRoZSBgc3JjYCBieSB0aGUgYGRhdGEtc3BsaWRlLWxhenlgIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYHNyY3NldGAgYnkgdGhlIGBkYXRhLXNwbGlkZS1sYXp5LXNyY3NldGAuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICogWW91IG1heSBhbHNvIHByb3ZpZGUgYHNyY2AgZm9yIHRoZSBwbGFjZWhvbGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIGJ1dCB0aGUgdmFsdWUgbXVzdCBiZSBkaWZmZXJlbnQgd2l0aCB0aGUgZGF0YScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXHJcbiAgICAgKlxyXG4gICAgICogLSBgZmFsc2VgOiBEaXNhYmxlcyBsYXp5IGxvYWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiIm5nXHJcbiAgICAgKiAtIGAnbmVhcmJ5J2A6IFN0YXJ0cyBsb2FkaW5nIG9ubHkgaW1hIgogICAgICAgICAgICAgICAgICAgICAgICBiImdlcyBhcm91bmQgdGhlIGFjdGl2ZSBzbGlkZSAocGFnZSlcclxuICAgICAqIC0gYCdzIgogICAgICAgICAgICAgICAgICAgICAgICBiImVxdWVudGlhbCdgOiBMb2FkcyBpbWFnZXMgc2VxdWVudGlhbGx5XHJcbiAgICAgKi9cciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcbiAgICBsYXp5TG9hZD86IGJvb2xlYW4gfCAnbmVhcmJ5JyB8ICdzZXF1ZW50aWFsIgogICAgICAgICAgICAgICAgICAgICAgICBiIic7XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSBob3cgbWFueSBwYWdlcyAobm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBzbGlkZXMpIGFyb3VuZCB0aGUgYWN0aXZlIHNsaWRlIHNob3VsZCBiZSBsb2FkZWQgYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZm9yZWhhbmQuXHJcbiAgICAgKiBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgYGxheicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ5TG9hZGAgb3B0aW9uIGlzIGAnbmVhcmJ5J2AuXHJcbiAgICAgKi9cclxuICAgIHByZWxvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkUGFnZXM/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMga2V5Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJkIHNob3J0Y3V0cyBmb3IgdGhlIHNsaWRlciBjb250cm9sLlxyXG4gICAgICogLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYHRydWVgIG9yIGAnZ2xvYmFsJ2A6IExpc3RlbnMgdG8gdGhlIGBrZXlkb3duYCBldmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgb2YgdGhlIGRvY3VtZW50LlxyXG4gICAgICogLSAnZm9jdXNlZCc6IExpc3RlbnMgdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidvIHRoZSBga2V5ZG93bmAgZXZlbnQgb2YgdGhlIHNsaWRlciByb290IGVsZW1lbnQgd2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggYWRkaW5nIGB0YWJpbmRleD0iMCJgIHRvIGl0LlxyXG4gICAgICogLSBgZmFsc2VgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogRGlzYWJsZXMga2V5Ym9hcmQgc2hvcnRjdXRzIChkZWZhdWx0KS5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiIi9cclxuICAgIGtleWJvYXJkPzogYm9vbGVhbiB8ICdnbG9iYWwnIHwgJ2ZvY3VzZWQnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlcyBuYXZpZ2F0aW9uIGJ5IHRoZSBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Ugd2hlZWwuXHJcbiAgICAgKiBTZXQgYHdhaXRGb3JUcmFuc2l0aW9uYCB0byBgdHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVgIG9yIHByb3ZpZGUgdGhlIGB3aGVlbFNsZWVwYCBkdXJhdGlvbi5cclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuICAgIHdoZWVsPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0aHJlc2hvbGQgdG8gY3V0IG9mZiB0aGUgc21hbGwgZGVsdGEgcHJvZHVjZWQgYnkgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJ0aWEgc2Nyb2xsLlxyXG4gICAgICovXHJcbiAgICB3aGVlbE1pblRocmVzaG9sZD86JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGVlcCB0aW1lIGluIG1pbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlY29uZHMgdW50aWwgYWNjZXB0aW5nIG5leHQgd2hlZWwuXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRpbWVyIHN0YXJ0cyB3aGVuIHRoZSB0cmFuc2l0aW9uIGJlZ2lucy5cclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuICAgIHdoZWVsU2xlZXA/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVsZWFzZSB0aGUgd2hlZWwgZXZlbnQgd2hlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHNsaWRlciByZWFjaGVzIHRoZSBmaXJzdCBvciBsYXN0IHNsaWRlLlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xyXG4gICAgcmVsZWFzZVdoZWVsPzogYm9vbGVhbjtcclxuICAgIC8qKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxuICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNsaWRlci5cclxuICAgICAqIC0gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJsdHInOiBMZWZ0IHRvIHJpZ2h0XHJcbiAgICAgKiAtICdydGwnOiBSaWdodCB0byBsZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJmdFxyXG4gICAgICogLSAndHRiJzogVG9wIHRvIGJvdHRvbVxyXG4gICAgICovXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgZGlyZWN0aW9uPzogJ2x0cicgfCAncnRsJyB8ICd0dGInO1xyXG4gICAgLyoqXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogQ29udmVydHMgdGhlIGltYWdlIGBzcmNgIHRvIHRoZSBjc3MgYGJhY2tncm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5kLWltYWdlYCBVUkwgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxyXG4gICAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgcmVxdWlyZXMgYGZpeGVkSGVpZ2h0YCBvciBgaGVpZ2h0UmF0aW9gIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXHJcbiAgICAgKi9cclxuICAgIGNvdmVyPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBhZGQgYHRhYmluZGV4PSIwImAgdG8gdicKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2libGUgc2xpZGVzIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgc2xpZGVGb2N1cz86JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBgdHJ1ZWAsIHRoZSBzbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1ha2VzIHNsaWRlcyBjbGlja2FibGUgdG8gbmF2aWdhdGUgYW5vdGhlciBzbGlkZXIuXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogVXNlIGBTcGxpZGUjc3luYygpYCB0byBzeW5jIG11bHRpcGxlIHNsaWRlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBpc05hdmlnYXRpb24/OiBib29sZWFuO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRyaW0gc3BhY2VzIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZvcmUvYWZ0ZXIgdGhlIHNsaWRlciBpZiB0aGUgYGZvY3VzYCBvcHRpb24gaXMgYXZhaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsYWJsZS5cclxuICAgICAqIC0gYHRydWVgOiBUcmltcyBzcGFjZXMuIFRoZSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG1heSBzdGF5IG9uIHRoZSBzYW1lIGxvY2F0aW9uIGV2ZW4gd2hlbiByZXF1ZXN0ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiInRvIG1vdmUuXHJcbiAgICAgKiAtIGAnbW92ZSdgOiBUcmltcyBzcGFjZXMgYW5kIGZvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjZXMgdG8gbW92ZSB0aGUgc2xpZGVyIHdoZW4gcmVxdWVzdGVkLlxyXG4gICAgICovJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxyXG4gICAgdHJpbVNwYWNlPzogYm9vbGVhbiB8ICdtb3ZlJztcclxuICAgIC8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIElmIGB0cnVlYCBhbmQgdGhlIGBmb2N1c2Agb3B0aW9uIGlzIGF2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGFibGU6XHJcbiAgICAgKiAtIERpc2FibGVzIHRoZSBuZXh0IGFycm93IHdoZW4gYScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWwgcmVhY2hlcyB0aGUgbGFzdCBwYWdlIGV2ZW4gaWYgdGhlIGFjdGl2ZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgaXMgbm90IHRoZSBsYXN0IHNsaWRlLlxyXG4gICAgICogLSBPbWl0cyByZWR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kYW50IHBhZ2luYXRpb24gZG90cyB3aGljaCBqdXN0IGNoYW5nZSB0aGUgYWN0aXZlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBhbmQgZG8gbm90IG1vdmUgYSBjYXJvdXNlbC5cclxuICAgICAqL1xyXG4gICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXRFbmQ/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLWFjdGl2ZWAgc3RhdHVzIG9mIHNsaWRlcyBqdXN0IGJlZm9yZSBtb3ZpbmcgdGhlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXIuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU9uTW92ZT86IGJvb2xlYW47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBgbWluYCwgdGhlIG1lZGlhIHF1ZXJ5IGZvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnJlYWtwb2ludHMgd2lsbCBiZSBgbWluLXdpZHRoYCwgb3Igb3RoZXJ3aXNlLCBgbWF4LScKICAgICAgICAgICAgICAgICAgICAgICAgYiJ3aWR0aGAuXHJcbiAgICAgKi9cclxuICAgIG1lZGlhUXVlcnk/OiAnbWluJyB8ICdtYXgnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlbGVjdG9yIHRvIGZpbmQgZm9jdXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBlbGVtZW50c1xyXG4gICAgICogd2hlcmUgYHRhYmluZGV4PSItMSJgIHdpbGwgYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzc2lnbmVkIHdoZW4gdGhlaXIgYXNjZW5kYW50IHNsaWRlIGlzIGhpZGRlbi5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIGZvY3VzYWJsZU5vZGVzPzogc3RyaW5nO1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogVGhlIHNlbGVjdG9yIGZvciBub2RlcyB0aGF0IGNhbm5vdCBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZHJhZ2dlZC5cclxuICAgICAqL1xyXG4gICAgbm9EcmFnPzogc3RyaW5nO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC8qKlxyXG4gICAgICogRW5hYmxlcyB0aGUgbGl2ZSByZWdpb24gYnkgYGFyaWEtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpdmVgLlxyXG4gICAgICogSWYgYHRydWVgLCBzY3JlZW4gcmVhZGVycyB3aWxsIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkIGEgY29udGVudCBvZiBlYWNoIHNsaWRlIHdoZW5ldmVyIHNsaWRlIGNoYW5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxyXG4gICAgICovXHJcbiAgICBsaXZlPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIFRyYW5zaXRpb24gY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIHVzZVNjcm9sbD86IGJvb2xlYW47XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25zIGZvciBzcGVjaWZpYyBicmVha3BvaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHRzXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICoge1xyXG4gICAgICogICAxMDAwOiB7XHJcbiAgICAgKiAgICAgcGVyUGFnZTogMycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXHJcbiAgICAgKiAgICAgZ2FwICAgIDogMjBcclxuICAgICAqICAgfSxcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiAgIDYwMDoge1xyXG4gICAgICogICAgIHBlclBhZ2U6IDEsXHJcbiAgICAgKiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCAgICA6IDUsXHJcbiAgICAgKiAgIH0sXHJcbiAgICAgKiB9XHJcbiAgICAgKiBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2BgXHJcbiAgICAgKi9cclxuICAgIGJyZWFrcG9pbnRzPzogUmVjb3JkPHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIFJlc3BvbnNpdmVPcHRpb25zPjtcclxuICAgIC8qKlxyXG4gICAgICogT3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMgdXNlZCB3aGVuIHRoZSBgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSlgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBkZXRlY3RlZC5cclxuICAgICAqL1xyXG4gICAgcmVkdWNlZE1vdGlvbj86IE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sbGVjdGlvbiBvZiBjbGFzcyBuYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZXMuXHJcbiAgICAgKi9cclxuICAgIGNsYXNzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgaTE4biBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5ncy5cclxuICAgICAqL1xyXG4gICAgaTE4bj86IFJlY29yZDxrZXlvZiB0eXBlb2YgSScKICAgICAgICAgICAgICAgICAgICAgICAgYicxOE4gfCBzdHJpbmcsIHN0cmluZz47XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIGZvciBvcHRpb25zIHRoYXQgY2FuIGNvcnJlc3BvbmQgd2l0aCBicmVha3BvaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFJlc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zaXZlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIEFjY2VwdHMgYXJiaXRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiJyeSBwcm9wZXJ0aWVzIGZvciBleHRlbnNpb25zLCBhbHRob3VnaCBpdCdzIG5vdCBpZGVhIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgdHlwaW5nLlxyXG4gICAgICovXHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgZm9yIHRoZSByb290IGVsZW1lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogVXNlIGBsYWJlbGxlZGJ5YCBpbnN0ZWFkIGlmIHRoZXJlIGlzIGEgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Zpc2libGUgbGFiZWwuXHJcbiAgICAgKi9cclxuICAgIGxhYmVsPzogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIC8qKlxyXG4gICAgICogVGhlIElEIGZvciB0aGUgZWxlbWVudCB0aGF0IHVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGFzIHRoZSBsYWJlbCBvZiB0aGUgY2Fyb3VzZWwuXHJcbiAgICAgKi9cclxuICAgIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWJlbGxlZGJ5Pzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHJhbnNpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc3BlZWQgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBzcGVlZD86JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kIHRoZSBjYXJvdXNlbCBvciBub3QuXHJcbiAgICAgKiBUaGlzIGlzIGlnbm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmVkIHdoZW4gdGhlIGB0eXBlYCBvcHRpb24gaXMgYCdsb29wJ2AuXHJcbiAgICAgKi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICByZXdpbmQ/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zaXRpb24gc3BlZWQgb24gcmV3aW5kIGluIG1pbGxpc2Vjb25kcy5cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cclxuICAgIHJld2luZFNwZWVkPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogQWxsb3dzIHRvIHJld2luZCBhIGNhcm91c2VsIGJ5IGRyYWcgaWYgdGhlIGByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid3aW5kYCBvcHRpb24gaXMgZW5hYmxlZC5cclxuICAgICAqL1xyXG4gICAgcmV3aW5kQnlEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgbWF4IHdpZHRoLCBhY2NlcHRpbmcgdGhlIENTUyBmb3JtYXQgc3VjaCBhcyAxMGVtLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgODB2dy5cclxuICAgICAqL1xyXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBzbGlkZXIgaGVpZ2h0LCBhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidjZXB0aW5nIHRoZSBDU1MgZm9ybWF0LlxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ/OiBuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyIHwgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBGaXhlcyB3aWR0aCBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzLCBhY2NlcHRpbmcgdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKiBUaGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlciB3aWxsIGlnbm9yZSB0aGUgYHBlclBhZ2VgIG9wdGlvbiBpZiB5b3UgcHJvdmlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcyB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgZml4ZWRXaWR0aD86IG51bWJlciB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIEZpeGVzIGhlaWdodCBvZiBzbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhY2NlcHRpbmcgdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKiBUaGUgc2xpZGVyIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxsIGlnbm9yZSB0aGUgYGhlaWdodFJhdGlvYCBvcHRpb24gaWYgeW91IHByb3ZpZGUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGZpeGVkSGVpZ2h0PzogbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyBoZWlnaHQgb2Ygc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcyBieSB0aGUgcmF0aW8gdG8gdGhlIHNsaWRlciB3aWR0aC5cclxuICAgICAqIEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgZXhhbXBsZSwgd2hlbiB0aGUgc2xpZGVyIHdpZHRoIGlzIGAxMDAwYCBhbmQgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRpbyBpcyBgMC41YCwgdGhlIGhlaWdodCB3aWxsIGJlIGA1MDBgLlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG4gICAgaGVpZ2h0UmF0aW8/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc2xpZGVzIHRvIGRpc3BsYXkgaW4gYSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZS5cclxuICAgICAqL1xyXG4gICAgcGVyUGFnZT86IG51bWJlcjtcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBzbGlkZXMgdG8gbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYXQgb25jZS5cclxuICAgICAqL1xyXG4gICAgcGVyTW92ZT86IG51bWJlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb25lcyBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZWFjaCBzaWRlIG9mIHRoZSBzbGlkZXIuXHJcbiAgICAgKiBJbiBtb3N0IGNhc2VzJwogICAgICAgICAgICAgICAgICAgICAgICBiIiwgeW91IGRvbid0IG5lZWQgdG8gcHJvdmlkZSB0aGlzIHZhbHVlLlxyXG4gICAgICovIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgY2xvbmVzPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JtaW5lcyB3aGV0aGVyIHRvIGNsb25lIHN0YXR1cyBjbGFzc2VzIGZvciBjbG9uZXMgb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5vdC5cclxuICAgICAqL1xyXG4gICAgY2xvbmVTdGF0dXM/OiBib29sZWFuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGljaCBzbGlkZSBzaG91bGQgYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFjdGl2ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc2xpZGVzIGluIGEgcGFnZS5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYiJcbiAgICAgKiBOdW1iZXJzIGFuZCBgJ2NlbnRlcidgIGFyZSBhY2NlcHRhYmxlLlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAqL1xyXG4gICAgZm9jdXM/OiBudW1iZXIgfCAnY2VudGVyJztcclxuICAgIC8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIFRoZSBnYXAgYmV0d2VlbiBzbGlkZXMuIFRoZSBDU1MgZm9ybWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcyBhY2NlcHRhYmxlLCBzdWNoIGFzIGAxZW1gLlxyXG4gICAgICovXHJcbiAgICBnYXA/JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGxlZnQvcmlnaHQgb3IgdG9wL2JvdHRvbSBvZiB0aGUgc2xpZGVyLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoZSBDU1MgZm9ybWF0IGlzIGFjY2VwdGFibGUsIHN1Y2ggYXMgYDFlbWAuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0c1xyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8vIEJ5IG51bWJlclxyXG4gICAgICogcGFkZGluZzogMTAsXHJcbiAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAqIC8vIEJ5IHRoZSBDU1MgZm9ybWF0XHJcbiAgICAgKiBwYWRkaW5nOiAnMXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW0nLFxyXG4gICAgICpcclxuICAgICAqIC8vIFNwZWNpZmllcyBlYWNoIHZhbHVlIGZvciIKICAgICAgICAgICAgICAgICAgICAgICAgYicgYSBob3Jpem9udGFsIHNsaWRlclxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAxMCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIHJpZ2h0OiAyMCB9LFxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAnMXJlbScsICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWdodDogJzJyZW0nIH0sXHJcbiAgICAgKlxyXG4gICAgICogLy8gU3BlY2lmaWVkIGVhIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoIHZhbHVlIGZvciBhIHZlcnRpY2FsIHNsaWRlclxyXG4gICAgICogcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3sgdG9wOiAxMCwgYm90dG9tOiAyMCB9LFxyXG4gICAgICogYGBgXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBwYWRkaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwge1xyXG4gICAgICAgIGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgIHJpZ2h0PzogbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuICAgIH0gfCB7XHJcbiAgICAgICAgdG9wPzogbnVtYmVyIHwgc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZztcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNyZWF0ZS8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmluZCBhcnJvd3Mgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBhcnJvd3M/OiBib29sZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhbjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNyZWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcGFnaW5hdGlvbiAoaW5kaWNhdG9yIGRvdHMpIG9yIG5vdC5cclxuICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBhZ2luYXRpb24/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIHBhZ2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uIHdoZW4gaXQgY29udGFpbnMgZm9jdXMuXHJcbiAgICAgKiBUaGUgZGVmYXVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAgICovXHJcbiAgICBwYWdpbmF0aW9uS2V5Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJkPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogRXhwbGljaXRseSBzZXRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgcGFnaW5hdGlvbiBkaXJlY3Rpb24gdGhhdCBkb2VzIG5vdCBvbmx5IGFmZmVjdCBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZWFyYW5jZSBidXQgYWxzbyBzaG9ydGN1dHMgYW5kIEFSSUEgYXR0cmlidXRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzYW1lIHdpdGggdGhlIGNhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlbCBkaXJlY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHBhZ2luYXRpb25EaXJlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9uPzogT3B0aW9uc1snZGlyZWN0aW9uJ107XHJcbiAgICAvKipcclxuICAgICAqIFRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgQ1NTIHRyYW5zaXRpb24uIEZvciBleGFtcGxlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYGxpbmVhcmAsIGVhc2Ugb3IgYGN1YmljLWJlemllcigpYC5cclxuICAgICAqL1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVhc2luZz86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVhc2luZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZm9yIHRoZSBkcmFnIGZyZWUgbW9kZS5cclxuICAgICAqIFRoZSBkZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXVsdCBmdW5jdGlvbiBpcyB0aGUgYGVhc2VPdXRRdWFydGAgaW50ZXJwb2xhdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXHJcbiAgICAgKi9cclxuICAgIGVhc2luZ0Z1bmM/OiAodDogbnVtYmVyKSA9PiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxvd3MgdG8gZHJhZyB0aGUgc2xpZGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidieSBhIG1vdXNlIG9yIHN3aXBlLlxyXG4gICAgICogSWYgYGZyZWVgLCB0aGUgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciBkb2VzIG5vdCBzbmFwIHRvIGEgc2xpZGUgYWZ0ZXIgZHJhZy5cclxuICAgICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYiJcclxuICAgIGRyYWc/OiBib29sZWFuIHwgJ2ZyZWUnO1xyXG4gICAgLyoqXHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogU25hcHMgdGhlIGNsb3Nlc3Qgc2xpZGUgaW4gdGhlIGRyYWctZnJlZSBtb2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cclxuICAgICAqL1xyXG4gICAgc25hcD86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBUaGUgcmVxdWlyZWQgZGlzdGFuY2UgdG8gc3RhcnQgbW92aW5nIHRoZSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIGJ5IHRoZSB0b3VjaCBhY3Rpb24uXHJcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmaW5lIHRoZSB0aHJlc2hvbGQgZm9yIHRoZSBtb3VzZSwgcHJvdmlkZSBhbiBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBkcmFnTWluVGhyZXNob2xkPzogbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcclxuICAgICAgICBtb3VzZTogbnVtYmVyO1xyXG4gICAgICAgIHRvdWNoOiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIHRoZSBwb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgb2YgImZsaWNrIi4gVGhlIGxhcmdlciBudW1iZXIgdGhpcyBpcywgdGhlIGZhcnRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHRoZSBzbGlkZXIgcnVucy5cclxuICAgICAqIEFyb3VuZCA1MDAgaXMgcmVjb21tZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVkLlxyXG4gICAgICovXHJcbiAgICBmbGlja1Bvd2VyPzogbnVtYmVyO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgYnkgImZsaWNrIi5cclxuICAgICAqL1xyXG4gICAgZmxpY2tNYXhQYWdlcz86IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I7XHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoZSBzbGlkZXIuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICovXHJcbiAgICBkZXN0cm95PzogYm9vbGVhbiB8ICdjb21wbGV0ZWx5JztcclxufVxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuLyoqXHJcbiAqIFRoZSB0eXBlIGZvciBhbnkgZnVuY3Rpb24uXHJcbiAqXHJcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgdHlwZSBBbnlGdW5jdGlvbiA9ICguJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uYXJnczogYW55W10pID0+IGFueTtcclxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvciBhIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSBDb21wb25lbnRDb25zdHJ1Y3RvciA9IChTcGxpZGU6IFNwbGlkZSwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMpID0+IEJhc2VDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgYW55IGNvbXBvbmVudC5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEJhc2VDb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50IHtcclxuICAgIHNldHVwPygpOiB2b2lkO1xyXG4gICAgbW91bnQ/KCk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xyXG4gICAgZGVzdHJveT8oY29tcGxldGVseT86IGJvb2xlYW4pOiB2b2lkO1xyXG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFRyYW5zaXRpb24gY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zaXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGFydChpbmRleDogbnVtYmVyLCBkb25lOiAoKSA9PiB2b2lkKTogdm9pZDtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjYW5jZWwoKTogdm9pZDtcclxufVxyXG4vKipcclxuICogVGhlIGludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIGluZm8gb2YgYSBzcGxpZGUgaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICogQHNpbmNlIDMuMi44XHJcbiAqL1xyXG5pbnRlcmZhY2UgU3luY1RhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xyXG4gICAgc3BsaWRlOiBTcGxpZGU7XHJcbiAgICBpc1BhcmVudD86IGJvb2xlYW47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBhbGwgY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzIHtcclxuICAgIFtrZXk6IHN0cmluZ106IEJhc2VDb21wb25lbnQgfCB1bmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZpbmVkO1xyXG4gICAgTWVkaWE6IE1lZGlhQ29tcG9uZW50O1xyXG4gICAgRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogRGlyZWN0aW9uQ29tcG9uZW50O1xyXG4gICAgRWxlbWVudHM6IEVsZW1lbnRzQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudDtcclxuICAgIFNsaWRlczogU2xpZGVzQ29tcG9uZW50O1xyXG4gICAgTGF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ291dDogTGF5b3V0Q29tcG9uZW50O1xyXG4gICAgQ2xvbmVzOiBDbG9uZXNDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250O1xyXG4gICAgTW92ZTogTW92ZUNvbXBvbmVudDtcclxuICAgIENvbnRyb2xsZXI6IEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb250cm9sbGVyQ29tcG9uZW50O1xyXG4gICAgQXJyb3dzOiBBcnJvd3NDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgQXV0b3BsYXk6IEF1dG9wbGF5Q29tcG9uZW50O1xyXG4gICAgQ292ZXI6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb3ZlckNvbXBvbmVudDtcclxuICAgIFNjcm9sbDogU2Nyb2xsQ29tcG9uZW50O1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIERyYWc6IERyYWdDb21wb25lbnQ7XHJcbiAgICBLZXlib2FyZDogS2V5Ym9hcmRDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50O1xyXG4gICAgTGF6eUxvYWQ6IExhenlMb2FkQ29tcG9uZW50O1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFBhZ2luYXRpb246IFBhZ2luYXRpb25Db21wb25lbnQ7XHJcbiAgICBTeW5jOiBTeW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0NvbXBvbmVudDtcclxuICAgIFdoZWVsOiBXaGVlbENvbXBvbmVudDtcclxuICAgIExpdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBMaXZlQ29tcG9uZW50O1xyXG4gICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbkNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGFsbCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJuYWwgZXZlbnRzLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmluJwogICAgICAgICAgICAgICAgICAgICAgICBiInRlcmZhY2UgRXZlbnRNYXAge1xyXG4gICAgJ21vdW50ZWQnOiAoKSA9PiB2b2lkO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICdyZWFkeSc6ICgpID0+IHZvaWQ7XHJcbiAgICAnY2xpY2snOiAoU2xpZGU6IFMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGlkZUNvbXBvbmVudCwgZTogTW91c2VFdmVudCkgPT4gdm9pZDtcclxuICAgICdtb3YiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSc6IChpbmRleDogbnVtYmVyLCBwcmV2OiBudW1iZXIsIGRlc3Q6IG51bWJlcikgPT4gdiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvaWQ7XHJcbiAgICAnbW92ZWQnOiAoaW5kZXg6IG51bWJlciwgcHJldjogbnVtYmVyLCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgZGVzdDogbnVtYmVyKSA9PiB2b2lkO1xyXG4gICAgJ2FjdGl2ZSc6IChTbGlkZTogUyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJ2luYWN0aXZlJzogKFNsaWRlOiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgU2xpZGVDb21wb25lbnQpID0+IHZvaWQ7XHJcbiAgICAndmlzaWJsZSc6IChTbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJ2hpZGRlbic6IChTbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJ3JlZnJlc2gnOiAoKSA9PiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdm9pZDtcclxuICAgICd1cGRhdGVkJzogKG9wdGlvbnM6IE9wdGlvbnMpID0+IHZvaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJkO1xyXG4gICAgJ3Jlc2l6ZSc6ICgpID0+IHZvaWQ7XHJcbiAgICAncmVzaXplZCc6ICgpIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA9PiB2b2lkO1xyXG4gICAgJ2RyYWcnOiAoKSA9PiB2b2lkO1xyXG4gICAgJ2RyYWdnaW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZyc6ICgpID0+IHZvaWQ7XHJcbiAgICAnZHJhZ2dlZCc6ICgpID0+IHZvaWQ7XHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3Njcm9sbCc6ICgpID0+IHZvaWQ7XHJcbiAgICAnc2Nyb2xsZWQnOiAoKSA9PiB2byIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpZDtcclxuICAgICdvdmVyZmxvdyc6IChvdmVyZmxvdzogYm9vbGVhbikgPT4gdm9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XHJcbiAgICAnZGVzdHJveSc6ICgpID0+IHZvaWQ7XHJcbiAgICAnYXJyb3dzOm1vdW50IgogICAgICAgICAgICAgICAgICAgICAgICBiImVkJzogKHByZXY6IEhUTUxCdXR0b25FbGVtZW50LCBuZXh0OiBIVE1MQnV0dG9uRWxlbWUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnQpID0+IHZvaWQ7XHJcbiAgICAnYXJyb3dzOnVwZGF0ZWQnOiAocHJldjogSFRNTEIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXR0b25FbGVtZW50LCBuZXh0OiBIVE1MQnV0dG9uRWxlbWVudCwgcHJldkluZGV4OiBudScKICAgICAgICAgICAgICAgICAgICAgICAgYiJtYmVyLCBuZXh0SW5kZXg6IG51bWJlcikgPT4gdm9pZDtcclxuICAgICdwYWdpbmF0aSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbjptb3VudGVkJzogKGRhdGE6IFBhZ2luYXRpb25EYXRhLCBpdGVtOiBQYWdpbmF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBiIkl0ZW0pID0+IHZvaWQ7XHJcbiAgICAncGFnaW5hdGlvbjp1cGRhdGVkJzogKGRhdGE6IgogICAgICAgICAgICAgICAgICAgICAgICBiJyBQYWdpbmF0aW9uRGF0YSwgcHJldjogUGFnaW5hdGlvbkl0ZW0sIGN1cnI6IFBhZ2luYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW9uSXRlbSkgPT4gdm9pZDtcclxuICAgICduYXZpZ2F0aW9uOm1vdW50ZWQnOiAoc3AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGlkZXM6IFNwbGlkZVtdKSA9PiB2b2lkO1xyXG4gICAgJ2F1dG9wbGF5OnBsYXknOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCkgPT4gdm9pZDtcclxuICAgICdhdXRvcGxheTpwbGF5aW5nJzogKHJhdGU6IG51bWIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXIpID0+IHZvaWQ7XHJcbiAgICAnYXV0b3BsYXk6cGF1c2UnOiAoKSA9PiB2b2lkO1xyIgogICAgICAgICAgICAgICAgICAgICAgICBiIlxuICAgICdsYXp5bG9hZDpsb2FkZWQnOiAoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCBTbGlkIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG59XG5cbi8qKlxyXG4gKiBDYXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgVCB0byBVLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmRlY2xhcmUgdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGUgQ2FzdDxULCBVPiA9IFQgZXh0ZW5kcyBVID8gVCA6IFU7XHJcbi8qKlxyXG4gKiBNYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrZXMgdGhlIFQgZWFzeSB0byByZWFkLlxyXG4gKi9cclxuZGVjbGFyZSB0eXBlIFJlc29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlPFQ+ID0ge1xyXG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS107XHJcbn0gJiB1bmtub3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcclxuLyoqXHJcbiAqIFB1c2hlcyBVIHRvIHR1cGxlIFQuXHJcbiAqXHJcbiAqIEBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJuYWxcclxuICovXHJcbmRlY2xhcmUgdHlwZSBQdXNoPFQgZXh0ZW5kcyBhbnlbXSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1UgPSBhbnk+ID0gWy4uLlQsIFVdO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgZmlyc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUgb2YgdGhlIHR1cGxlLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIHR5cGUgSGVhZDxUIGV4dGVuZHMgYW55W10+ID0gKCguLi5hcmdzOiBUKSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz4gYW55KSBleHRlbmRzIChhcmc6IGluZmVyIEEsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gQSA6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgZmlyc3QgdHlwZSBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbSB0aGUgdHVwbGUgVC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSB0eXBlIFNoaWZ0PFQgZXh0ZW5kcyBhbnlbXT4gPSAoKC4uLmFyZ3M6IFQpID0+IGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnkpIGV4dGVuZHMgKGFyZzogYW55LCAuLi5hcmdzOiBpbmZlciBBKSA9PiBhbnkgPyBBICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgTiB0eXBlcyBmcm9tIHRoZSB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VwbGUgVC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5kZWNsYXJlIHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNoaWZ0TjxUIGV4dGVuZHMgYW55W10sIE4gZXh0ZW5kcyBudW1iZXIsIEMgZXh0ZW5kcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW55W10gPSBbXT4gPSB7XHJcbiAgICAwOiBUO1xyXG4gICAgMTogU2hpZnROPFNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiIjxUPiwgTiwgUHVzaDxDPj47XHJcbn1bQ1snbGVuZ3RoJ10gZXh0ZW5kcyBOID8gMCA6IgogICAgICAgICAgICAgICAgICAgICAgICBiJyAxXSBleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueVtdPiA6IG5ldmVyO1xuXG4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBTbGlkZXMgY29tcG9uZW50LlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgU2xpZGVzQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgdXBkYXRlKCk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xyXG4gICAgcmVnaXN0ZXIoc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciwgc2xpZGVJbmRleDogbnVtYmVyKTogdm9pZDtcclxuICAgIGdldChleGNsdWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUNsb25lcz86IGJvb2xlYW4pOiBTbGlkZUNvbXBvbmVudFtdO1xyXG4gICAgZ2V0SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHBhZ2U6IG51bWJlcik6IFNsaWRlQ29tcG9uZW50W107XHJcbiAgICBnZXRBdChpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXg6IG51bWJlcik6IFNsaWRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZChzbGlkZTogc3RyaW5nIHwgRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEVsZW1lbnQ+LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXg/OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgcmVtb3ZlKHNlbGVjdG9yOiBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVNYXRjaGVyKTogdm9pZDtcclxuICAgIGZvckVhY2goaXRlcmF0ZWU6IFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidJdGVyYXRlZSwgZXhjbHVkZUNsb25lcz86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihtYXRjaGVyOiBTbGlkZU1hdGNoZXIpOiBTbGlkZUNvbXBvbmVudFtdO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHN0eWxlKHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciwgdXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRhaW5lcj86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgZ2V0TGVuZ3RoKGV4Y2x1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlQ2xvbmVzPzogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIGlzRW5vdWdoKCk6IGJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaXRlcmF0ZWUgZnVuY3Rpb24gZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZXMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZSBTbGlkZXNJdGVyYXRlZSA9IChTbGlkZTogU2xpZGVDb21wb25lbnQsIGluZGV4OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBTbGlkZXM6IFNsaWRlQ29tcG9uZW50W10pID0+IHZvaWQ7XHJcbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICogVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBmb3IgU2xpZGVzLlxyXG4gKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIHR5cGUgU2xpZGVzUHJlZGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSA9IChTbGlkZTogU2xpZGVDb21wb25lbnQsIGluZGV4OiBudW1iZXIsIFNsaWRlczonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlQ29tcG9uZW50W10pID0+IGFueTtcclxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZmlsdGVyaW5nIFNsaWRlQ29tcG9uZW50IG9iamVjdHMuXHJcbiAqXHJcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgdHlwZSBTbGlkZU1hdGNoZXIgPSBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgbnVtYmVyW10gfCBzdHJpbmcgfCBTbGlkZXNQcmVkaWNhdGU7XG5cbi8qKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIHR5cGUgZm9yIGFuIEV2ZW50VGFyZ2V0IG9yIGFuIGFycmF5IHdpdGggRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0IG9iamVjdHMuXHJcbiAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhcmUgdHlwZSBFdmVudFRhcmdldHMgPSBFdmVudFRhcmdldCB8IEV2ZW50VGFyZ2V0WycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEV2ZW50QmluZGVyIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEJpbmRlck9iamVjdCB7XHJcbiAgICBiaW5kKHRhcmdldDogRXZlbnRUYXJnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmJpbmQodGFyZ2V0OiBFdmVudFRhcmdldCB8IEV2ZW50VGFyZ2V0W10sIGV2ZW50czogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjaz86IEFueUZ1bmN0aW9uKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBkaXNwYXRjaDxUPih0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudDogcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZywgZGV0YWlsPzogVCk6IHZvaWQ7XHJcbiAgICBkZXN0cm95KCk6IHZvaWQ7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XHJcbi8qKlxyXG4gKiBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gcHJvdmlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWV0aG9kcyB0byBzdWJzY3JpYmUgbmF0aXZlIGV2ZW50cy5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSA0LjAuMFxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHJldHVybiBBbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnRCaW5kZXIgb2JqZWN0LlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBFdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RCaW5kZXIoKTogRXZlbnRCaW5kZXJPYmplY3Q7XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZSBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWN0IGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIEV2ZW50QmluZGVyT2JqZWN0IHtcclxuICAgIG9uPEsgZXh0ZW5kcyBrZXlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgRXZlbnRNYXA+KGV2ZW50OiBLLCBjYWxsYmFjazogRXZlbnRNYXBbS10pOiB2b2lkO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIG9uKGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24pOiB2b2lkO1xyXG4gICAgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50czogSyB8IEtbXSB8IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlbnQ6IEssIC4uLmFyZ3M6IFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbWV0ZXJzPEV2ZW50TWFwW0tdPik6IHZvaWQ7XHJcbiAgICBlbWl0KGV2ZW50OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbiAgICAvKiogQGludGVybmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCAqL1xyXG4gICAgYnVzOiBEb2N1bWVudEZyYWdtZW50O1xyXG59XHJcbi8qKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgaW50ZXJmYWNlIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaW50ZXJuYWwgYW5kIG5hdGl2ZSBldmVudHMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLjBcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSBTcGxpZGUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSBTcGxpZGUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEByZXR1cm4gQSBjb2xsZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvZiBpbnRlcmZhY2UgZnVuY3Rpb25zLlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UoU3BsaWRlPzogU3BsaWRlKTogRXZlbnRJbnRlcmZhY2VPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHVybmluZyB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgdGhlIFJlcXVlc3RJbnRlcnZhbC5cclxuICpcclxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxyXG4gKi9cclxuaW50ZXJmYWNlIFJlcXVlc3RJbnRlcnZhbEludGVyZmFjZSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgc3RhcnQocmVzdW1lPzogYm9vbGVhbik6IHZvaWQ7XHJcbiAgICBwYXVzZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZDtcclxuICAgIHJld2luZCgpOiB2b2lkO1xyXG4gICAgY2FuY2VsKCk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xyXG4gICAgc2V0KGludGVydmFsOiBudW1iZXIpOiB2b2lkO1xyXG4gICAgaXNQYXVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKCk6IGJvb2xlYW47XHJcbn1cclxuLyoqXHJcbiAqIFJlcXVlc3RzIGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBsaWtlIHRoZSBuYXRpdmUgYHNldEludGVydmFsKClgIHdpdGggdXNpbmcgYHJlcXVlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW5pbWF0aW9uRnJhbWVgLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBpbnRlcnZhbCAgIC0gVGhlIGludGVydmFsIGR1cmF0aW9uIGluIG1pbGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlY29uZHMuXHJcbiAqIEBwYXJhbSBvbkludGVydmFsIC0gVGhlIGNhbGxiYWNrIGZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZCBvbiBldmVyeSBpbnRlcnZhbC5cclxuICogQHBhcmFtIG9uVXBkYXRlICAgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIENhbGxlZCBvbiBldmVyeSBhbmltYXRpb24gZnJhbWUsIHRha2luZyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb2dyZXNzIHJhdGUuXHJcbiAqIEBwYXJhbSBsaW1pdCAgICAgIC0gT3B0aW9uYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiBMaW1pdHMgdGhlIG51bWJlciBvZiBpbnRlcnZhbC5cclxuICovXHJcbmRlY2xhcmUgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIFJlcXVlc3RJbnRlcnZhbChpbnRlcnZhbDogbnVtYmVyLCBvbkludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogKCkgPT4gdm9pZCwgb25VcGRhdGU/OiAocmF0ZTogbnVtYmVyKSA9PiB2b2lkLCBsaW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQ/OiBudW1iZXIpOiBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2U7XG5cbi8qKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGludGVyZmFjZSBmb3IgdGhlIFN0YXRlIG9iamVjdC5cclxuICpcclxuICogQHNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFN0YXRlT2JqZWN0IHtcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQoc3RhdGU6IG51bWJlcik6IHZvaWQ7XHJcbiAgICBpcyhzdGF0ZXM6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgfCBudW1iZXJbXSk6IGJvb2xlYW47XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcHJvdmlkaW5nIGEgc3VwZXIgc2ltcGxlIHN0YXRlIHN5c3RlbS5cclxuICpccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgLSBTcGVjaWZpZXMgdGhlIGluaXRpYWwgc3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBTdGF0ZShpbml0aWFsU3RhdGU6IG51JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIpOiBTdGF0ZU9iamVjdDtcblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgcmV0dXJuaW5nIHZhbHVlIG9mIHRoZSBSZXF1ZXN0SW50ZXJ2YWwuXHJcbiAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBUaHJvdHRsZUluc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxGIGV4dGVuZHMgQW55RnVuY3Rpb24+IGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogdm9pZDtcclxufVxyXG4vKipcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JldHVybnMgdGhlIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jICAgICAtIEEgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXHJcbiAqIEBwYXJhbSBkdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24gLSBPcHRpb25hbC4gVGhyb3R0bGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICpcclxuICogQHJldHVybiBBIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGZ1bmN0aW9uIFRocm90dGxlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmM6IEYsIGR1cmF0aW9uPzogbnVtYmVyKTogVGhyb3R0bGVJbnN0YW5jZTxGPjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbi8qKlxyXG4gKiBUaGUgZnJvbnRlbmQgY2xhc3MgZm9yIHRoZSBTcGxpZGUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIGNsYXNzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBkZWZhdWx0IG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zIGZvciBhbGwgU3BsaWRlIGluc3RhbmNlcy5cclxuICAgICAqL1xyXG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpYyBkZWZhdWx0czogT3B0aW9ucztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0aW9uIG9mIHN0YXRlIG51bWJlcnMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhZG9ubHkgU1RBVEVTOiB7XHJcbiAgICAgICAgQ1JFQVRFRDogbnVtYmVyO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBNT1VOVEVEOiBudW1iZXI7XHJcbiAgICAgICAgSURMRTogbnVtYmVyO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBNT1ZJTkc6IG51bWJlcjtcclxuICAgICAgICBTQ1JPTExJTkc6IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICAgICAgRFJBR0dJTkc6IG51bWJlcjtcclxuICAgICAgICBERVNUUk9ZRUQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm9vdCBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudCB3aGVyZSB0aGUgU3BsaWRlIGlzIGFwcGxpZWQuXHJcbiAgICAgKi9cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZWFkb25seSByb290OiBIVE1MRWxlbWVudDtcclxuICAgIC8qKlxyXG4gICAgICogVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBFdmVudEJ1c09iamVjdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudDogRXZlbnRJbnRlcmZhY2VPYmplY3Q7XHJcbiAgICAvKipcclxuICAgICAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29sbGVjdGlvbiBvZiBhbGwgY29tcG9uZW50IG9iamVjdHMuXHJcbiAgICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICByZWFkb25seSBDb21wb25lbnRzOiBDb21wb25lbnRzO1xyXG4gICAgLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogVGhlIFN0YXRlT2JqZWN0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRvbmx5IHN0YXRlOiBTdGF0ZU9iamVjdDtcclxuICAgIC8qKlxyXG4gICAgICogQW4gYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5IHdpdGggU3luY1RhcmdldCBvYmplY3RzIGZvciBzcGxpZGUgaW5zdGFuY2VzIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzeW5jIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5IHNwbGlkZXM6IFN5bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGFyZ2V0W107XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IG9wdGlvbnMuXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vO1xyXG4gICAgLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgYWxsIGNvbXBvbmVudHMuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbiAgICBwcml2YXRlIF9DO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3Rpb24gb2YgZXh0ZW5zaW9ucy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfRTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX1Q7XHJcbiAgICAvKipcclxuICAgICAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgU3BsaWRlIGNvbnN0cnVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0ICAtIFRoZSBzZWxlY3RvciBmb3IgdGhlIHRhcmdldCBlbGVtZW50LCBvciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZW1lbnQgaXRzZWxmLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wuIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50LCBvcHRpb25zPzogT3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBFeHRlbnNpb25zIC0gT3B0aW9uYWwuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBvYmplY3Qgd2l0aCBleHRlbnNpb25zLlxyXG4gICAgICogQHBhcmFtIFRyYW5zaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIC0gT3B0aW9uYWwuIEEgVHJhbnNpdGlvbiBjb21wb25lbnQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIG1vdW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFeHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgQ29tcG9uZW50Q29uc3RydWN0b3I+LCBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbnNpdGlvbj86IENvbXBvbmVudENvbnN0cnVjdG9yKTogdGhpcztcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIFN5bmNzIHRoZSBzbGlkZXIgd2l0aCB0aGUgcHJvdmlkZWQgb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Btb3VudCgpYC5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2BgYHRzXHJcbiAgICAgKiB2YXIgcHJpbWFyeSAgID0gbmV3IFNwbGlkZSgpO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIHZhciBzZWNvbmRhcnkgPSBuZXcgU3BsaWRlKCk7XHJcbiAgICAgKlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIHByaW1hcnkuc3luYyggc2Vjb25kYXJ5ICk7XHJcbiAgICAgKiBwcmltYXJ5Lm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpO1xyXG4gICAgICogc2Vjb25kYXJ5Lm1vdW50KCk7XHJcbiAgICAgKiBgYGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNwbGlkZSAtIEEgU3BsaWRlIGluc3RhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSB0byBzeW5jIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpc2BccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIHN5bmMoc3BsaWRlOiBTcGxpZGUpOiB0aGlzO1xyXG4gICAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxyXG4gICAgICogTW92ZXMgdGhlIHNsaWRlciB3aXRoIHRoZSBmb2xsb3dpbmcgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRyb2wgcGF0dGVybi5cclxuICAgICAqXHJcbiAgICAgKiB8IFBhdHRlcm4gfCBEZXNjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpcHRpb24gfFxyXG4gICAgICogfC0tLXwtLS18XHJcbiAgICAgKiB8IGBpYCB8IEdvZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRvIHRoZSBzbGlkZSBgaWAgfFxyXG4gICAgICogfCBgJyske2l9J2AgfCBJbmNyZW0iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW50cyB0aGUgc2xpZGUgaW5kZXggYnkgYGlgIHxcclxuICAgICAqIHwgYCctJHtpfSciCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB8IERlY3JlbWVudHMgdGhlIHNsaWRlIGluZGV4IGJ5IGBpYCB8XHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifCBgJz4nYCB8IEdvZXMgdG8gdGhlIG5leHQgcGFnZSB8XHJcbiAgICAgKiB8IGAnPCciCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB8IEdvZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgfFxyXG4gICAgICogfCBgPiR7aX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB8IEdvZXMgdG8gdGhlIHBhZ2UgYGlgIHxcclxuICAgICAqXHJcbiAgICAgKiBJbiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJzdCBjYXNlcywgYCc+J2AgYW5kIGAnPCdgIG5vdGF0aW9ucyBhcmUgZW5vdWdoIHRvIGNvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sIHRoZSBzbGlkZXJcclxuICAgICAqIGJlY2F1c2UgdGhleSByZXNwZWN0IGBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZWAgYW5kIGBwZXJNb3ZlYCBvcHRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhhbXBsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqIHZhciBzcGxpZGUgPSBuZXcgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIHNsaWRlIDE6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogc3BsaWRlLmdvKCAxICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gJwogICAgICAgICAgICAgICAgICAgICAgICBiIkluY3JlbWVudHMgdGhlIGluZGV4OlxyXG4gICAgICogc3BsaWRlLmdvKCAnKzInICk7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIG5leHQgcGFnZTpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgKiBzcGxpZGUuZ28oICc+JyApO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRvIHRoZSBwYWdlIDI6XHJcbiAgICAgKiBzcGxpZGUuZ28oICc+MicgKTtcclxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udHJvbCAtIEEgY29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgcGF0dGVybi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0aGlzYFxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgZ28oY29udHJvbDogbnVtYmVyIHwgc3RyaW5nKTogdGhpcztccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyLlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqIC8vIExpJwogICAgICAgICAgICAgICAgICAgICAgICBiInN0ZW5zIHRvIGEgc2luZ2xlIGV2ZW50OlxyXG4gICAgICogc3BsaWRlLm9uKCAnbW92IgogICAgICAgICAgICAgICAgICAgICAgICBiImUnLCBmdW5jdGlvbigpIHt9ICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gTGlzdGVucyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG8gbXVsdGlwbGUgZXZlbnRzOlxyXG4gICAgICogc3BsaWRlLm9uKCAnbW92ZSByZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaXplJywgZnVuY3Rpb24oKSB7fSApO1xyXG4gICAgICpcclxuICAgICAqIC8vIEFwcGVuZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzIGEgbmFtZXNwYWNlOlxyXG4gICAgICogc3BsaWRlLm9uKCAnbW92ZS5teU5hbWVzcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2UgcmVzaXplLm15TmFtZXNwYWNlJywgZnVuY3Rpb24oKSB7fSApO1xyXG4gICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBuYW1lIG9yIG5hbWVzIHNlcGFyYXRlZCBieSBzcGFjZXMuIFVzZSBhIGRvdCguKSB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwZW5kIGEgbmFtZXNwYWNlLlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidgXHJcbiAgICAgKi9cclxuICAgIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czogSywgY2FsbGJhY2s6IEV2ZW50TWFwW0tdKTogdGhpcztcclxuICAgIG9uKGV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjazogQW55RnVuY3Rpb24pOiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncztcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBhbGwgaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbmRsZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IG9yIGV2ZW50cy5cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBJZiB5b3Ugd2FudCB0byBvbmx5IHJlbW92ZSBhIHBhcnRpY3VsYXIgaGFuZGxlciwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzZSBuYW1lc3BhY2UgdG8gaWRlbnRpZnkgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGFtcGxlXHJcbiAgICAgKiBgYGB0c1xyXG4gICAgICogdmFyIHNwbGlkZSA9IG5ldyBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKCk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gUmVtb3ZlcyBhbGwgaGFuZGxlcnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2lnbmVkIHRvICJtb3ZlIjpcclxuICAgICAqIHNwbGlkZS5vZmYoIFwnbW92ZVwnICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgICpcclxuICAgICAqIC8vIE9ubHkgcmVtb3ZlcyBoYW5kbGVycyB0aGF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2U6XHJcbiAgICAgKiBzcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJlLm9mZiggJ21vdmUubXlOYW1lc3BhY2UnICk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHBhcmFtIGV2ZW50cyAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcGFyYXRlZCBieSBzcGFjZXMuIFVzZSBhIGRvdCguKSB0byBhcHBlbmQgYSBuYW1lc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBvZmY8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPihldmVudHM6IEsgfCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS1tdIHwgc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRW1pdHMgYW4gZXZlbnQgYW5kIHRyaWdnZXJzIHJlZ2lzdGVyZWQgaGFuZGxlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvIGVtaXQuXHJcbiAgICAgKiBAcGFyYW0gYXJncyAgLSBPcHRpb25hbC4gQW55IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8gaGFuZGxlcnMuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIGVtaXQ8SyBleHRlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBrZXlvZiBFdmVudE1hcD4oZXZlbnQ6IEssIC4uLmFyZ3M6IFBhcmFtZXRlcnM8RXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0TWFwW0tdPik6IHRoaXM7XHJcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidzOiBhbnlbXSk6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIEluc2VydHMgYSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW1wbGVcclxuICAgICAqIGBgYHRzXHJcbiAgICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUoKTtcclxuICAgICAqIHNwbGlkZS5tb3VudCgpO1xyXG4gICAgICpcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiAvLyBBZGRzIHRoZSBzbGlkZSBieSB0aGUgSFRNTDpcclxuICAgICAqIHNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIuYWRkKCAnPGxpPjwvbGk+ICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gb3IgYWRkcyB0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGVsZW1lbnQ6XHJcbiAgICAgKiBzcGxpZGUuYWRkKCBkb2N1bWVudC5jcmVhdGVFJwogICAgICAgICAgICAgICAgICAgICAgICBiImxlbWVudCggJ2xpJyApICk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHNsaWRlcyAtIEEgc2xpZGUgZWxlbWVudCwgYW4gSFRNTCBzdHJpbmcgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXQgcmVwcmVzZW50cyBhIHNsaWRlLCBvciBhbiBhcnJheSB3aXRoIHRoZW0uXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogQHBhcmFtIGluZGV4ICAtIE9wdGlvbmFsLiBBbiBpbmRleCB0byBpbnNlcnQgYScKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGUgYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpc2BcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKi9cclxuICAgIGFkZChzbGlkZXM6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgQScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50PiwgaW5kZXg/OiBudW1iZXIpOiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncztcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBzbGlkZXMgdGhhdCBtYXRjaCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIG1hdGNoZXJcclxuICAgICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGFuIGl0ZXJhdGVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlKG1hdGNoZXI6IFNsaWRlTWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXIpOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdGhlIHNsaWRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdHlwZSAtIEEgdHlwZSB0byB0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgdHlwZSBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hlcyB0aGUgY3VycmVudCBvbmUsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgaXModHlwZTogc3RyaW5nKTogYm9vbGVhbjtcclxuICAgIC8qKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqIFJlZnJlc2hlcyB0aGUgc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGB0aGlzYFxyXG4gICAgICovXHJcbiAgICByZWZyZXNoKCk6IHRoaXM7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGUgc2xpZGVyLlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAgICAgKiBAcGFyYW0gY29tcGxldGVseSAtIE9wdGlvbmFsLiBJZiBgdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidgLCBTcGxpZGUgd2lsbCBub3QgcmVtb3VudCB0aGUgc2xpZGVyIGJ5IGJyZWFrcG9pbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0aGlzYFxyXG4gICAgICovXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGVzdHJveShjb21wbGV0ZWx5PzogYm9vbGVhbik6IHRoaXM7XHJcbiAgICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBSZXR1cm5zIG9wdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gQW4gb2JqZWN0IHdpdGggdGhlIGxhdGVzdCBvcHRpb25zLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgZ2V0IG9wdGlvbnMoKTogT3B0aW9ucztcclxuICAgIC8qKlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIE1lcmdlcyBvcHRpb25zIHRvIHRoZSBjdXJyZW50IG9wdGlvbnMgYW5kIGVtaXRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgdXBkYXRlZGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gb2JqZWN0IHdpdGggbmV3IG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyhvcHRpb25zOiBPcHRpb25zKTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgdGhlIG51bWJlciBvZiBzbGlkZXMgd2l0aG91dCBjbG9uZXMuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBzbGlkZXMuXHJcbiAgICAgKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBnZXQgbGVuZ3RoKCk6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgdGhlIGFjdGl2ZSBzbGlkZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBUaGUgYWN0aXZlIHNsaWRlIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZXQgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4KCk6IG51bWJlcjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBjb250ZW50IG9mIGVhY2ggc2xpZGUuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICovXHJcbmludGVyZmFjZSBTbGlkZUNvbnRlbnQge1xyXG4gICAgLyoqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVGhlIEhUTUwgb3IgdGV4dCBmb3IgZWFjaCBzbGlkZS5cclxuICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGh0bWw/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvZiBzdHlsZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3BsaWRlIGlzIGFwcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLlxyXG4gICAgICovXHJcbiAgICBzdHlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgbnVtYmVyPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3BsaWRlIGlzIGFwcGxpZWQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICovXHJcbiAgICBhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIgfCBib29sZWFuPjtcclxufVxyXG4vKipcclxuICogVGhlIGludGVyZmFjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIHRoZSBjb25maWcgb2YgdGhlIHJlbmRlcmVyLlxyXG4gKlxyXG4gKiBAc2luY2UgMycKICAgICAgICAgICAgICAgICAgICAgICAgYicuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgUmVuZGVyZXJDb25maWcge1xyXG4gICAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxyXG4gICAgICogVGhlIHNsaWRlciBJRC5cclxuICAgICAqL1xyXG4gICAgaWQ/OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWRkaXRpb25hbCBjbGFzcyBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIHRoZSByb290IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHJvb3RDbGFzcz86IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0YWcgdXNlZCBmb3IgdGhlIGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGxpc3RUYWc/OiBzdHJpbmc7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLyoqXHJcbiAgICAgKiBUaGUgdGFnIHVzZWQgZm9yIGVhY2ggc2xpZGUuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBzbGlkZVRhZz86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIERldGVybWluZXMgd2hldGhlciB0byByZW5kZXIgYXJyb3dzIG9yIG5vdC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKi9cclxuICAgIGFycm93cz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBLZWVwcyB0aGUgc2xpZGVyIGhpZGRlbi5cclxuICAgICAqL1xyXG4gICAgaGlkZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gd3JhcCB0aGUgdHJhY2sgYnkgdGhlIHNsaWRlciBlbGVtZW50IG9yIG5vdC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKi9cclxuICAgIHNsaWRlcj86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBUaGUgYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkIGJlZm9yZSB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBiZWZvcmVTbGlkZXI/OiBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhZnRlciB0aGUgc2xpZGVyIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGFmdGVyU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcj86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUTUwgcmVuZGVyZWQgYmVmb3JlIHRoZSB0cmFjayBlbGVtZW50LlxyXG4gICAgICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYmVmb3JlVHJhY2s/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkIGFmdGVyIHRoZSB0cmFjayBlbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqL1xyXG4gICAgYWZ0ZXJUcmFjaz86IHN0cmluZztcclxufVxuXG4vKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAqIFRoZSBjbGFzcyB0byBnZW5lcmF0ZSBzdGF0aWMgSFRNTCBvZiB0aGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlciBmb3IgdGhlIGZpcnN0IHZpZXcuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBcclxuICovXHJcbmRlY2xhcmUgY2xhc3MgU3BsaWRlUmVuZGVyZXIge1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHN0eWxlIGVsZW1lbnQgYW5kIGNsb25lcy5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNwbGlkZSAtIEEgU3BsaWRlIGluc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNsZWFuKHNwbGlkZTogU3BsaWRlKTogdicKICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIHNsaWRlIGNvbnRlbnRzLlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50cztcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIFN0b3JlcyBkYXRhIG9mIHNsaWRlcy5cclxuICAgICAqL1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHByaXZhdGUgcmVhZG9ubHkgc2xpZGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIERpcmVjdGlvbiBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmx5IERpcmVjdGlvbjtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgdGhlIFN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBTdHlsZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM7XHJcbiAgICAvKipcclxuICAgICAqIEhvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkcyBvcHRpb25zIGZvciB0aGlzIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmF0ZSByZWFkb25seSBjb25maWc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIElELlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogQW4gYXJyYXkgd2l0aCBvcHRpb25zIGZvciBlYWNoIGJyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidha3BvaW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNwbGlkZVJlbmRlcmVyIGNvbnN0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGVudHMgLSBBbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBzbGlkZSBjb250ZW50cy4gRWFjaCBpdGVtIG11c3QgYmUgYW4gSFRNTCBvciBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZXIgb3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSBjb25maWcgICAtIFN0YXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2MgZGVmYXVsdCBvcHRpb25zLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRzIC0gRGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F1bHQgb3B0aW9ucyBmb3IgdGhlIHNsaWRlci4gUGFzcyBgU3BsaWRlLmRlZmF1bHRzYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgeW91IGFyZSB1c2luZyBpdC5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnRzOiBzdHJpbmdbXSB8IFNsaWRlQ29udGVudFtdLCBvcHRpb25zPzogT3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGNvbmZpZz86IFJlbmRlcmVyQ29uZmlnLCBkZWZhdWx0cz86IE9wdGlvbnMpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlLlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbml0O1xyXG4gICAgLyoqXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgSW5pdGlhbGl6ZXMgc2xpZGVzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluaXRTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWdpc3RlclJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0U3R5bGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHRyYWNrIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInVHJhY2tTdHlsZXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBzdHlsZXMgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgbGlzdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rlckxpc3RTdHlsZXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBzdHlsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciBzbGlkZXMgYW5kIGNsb25lcy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaXN0ZXJTbGlkZVN0eWxlcztcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGRzIG11bHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsZSBgdHJhbnNsYXRlWGAgZm9yIHRoZSBsaXN0IGVsZW1lbnQuXHJcbiAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEEgc3RyaW5nIHdpdGggbXVsdGlwbGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYW5zbGF0ZSBmdW5jdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYnVpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVHJhbnNsYXRlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIG9mZnNldCBmb3IgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBsaXN0IGVsZW1lbnQuXHJcbiAgICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHMgYmVjYXVzZSBpdCBjYW4gbm90IGJlIGNvbnZlcnRlZCBpbnRvIHBlcmNlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2ggYnJlYWtwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBvZmZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc09mZnNldENsb25lcztcclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIFJldHVybnMgb2Zmc2V0IGZvciBjZW50ZXJpbmcgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhY3RpdmUgc2xpZGUuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTpcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoIDEwMCUgKyBnYXAgKSAvIHBlclBhZ2UgLSBnYXBcclxuICAgICAqIDEwMCUgLyBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZSArIGdhcCAvIHBlclBhZ2UgLSBnYXA7XHJcbiAgICAgKiA1MCUgLyBwZXJQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSArICggZ2FwIC8gcGVyUGFnZSAtIGdhcCApIC8gMjtcclxuICAgICAqXHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG9mZnNldC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuICAgIHByaXZhdGUgY3NzT2Zmc2V0Q2VudGVyO1xyXG4gICAgLyoqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogUmV0dXJucyBvZmZzZXQgZm9yIGdhcHMuXHJcbiAgICAgKlxyXG4gICAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgYXMgYGNhbGMoKWAuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXHJcbiAgICBwcml2YXRlIGNzc09mZnNldEdhcHM7XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBSZXNvbHZlcyB0aGUgcHJvcCBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgY29udmVydHMgaXQgaW50byB0aGUgS2ViYWIgY2FzZS5cclxuICAgICAqXHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIHByb3AgLSBBIHByb3BlcnR5IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxyXG4gICAgICogQHJldHVybiBBIHJlc29sdmVkIHByb3BlcnR5IG5hbWUgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBLZWJhYiBjYXNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlc29sdmU7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHBhZGRpbmcgaW4gdGhlIENTUyBmb3JtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXHJcbiAgICAgKiBAcGFyYW0gcmlnaHQgICAtIERldGVybWluZXMgd2hldGhlciB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0IHBhZGRpbmcgcmlnaHQgb3IgbGVmdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBQYWRkaW5nIGluIHRoZSBDU1MgZm9ybWF0LlxyXG4gICAgICovXHJcbiAgICBwcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmF0ZSBjc3NQYWRkaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGhlaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgdGhlIHRyYWNrIGVsZW1lbnQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBwcml2YXRlIGNzc1RyYWNrSGVpZ2h0O1xyXG4gICAgLyoqXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogUmV0dXJucyBoZWlnaHQgcHJvdmlkZWQgdGhvdWdoIG9wdGlvbnMgaW4gdGhlIENTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MgZm9ybWF0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidybWF0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc0hlaWdodDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcclxuICAgICAqIFJldHVybnMgd2lkdGggb2YgZWFjaCBzbGlkZSBpbiB0aGUgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFdpZHRoIGluIHRoZSBDU1MgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm1hdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjc3NTbGlkZVdpZHRoO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEhlaWdodCBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NTUyBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3NzU2xpZGVIZWlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdpZHRoIG9yIGhlaWdodCBvZiBlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaCBzbGlkZSBpbiB0aGUgQ1NTIGZvcm1hdCwgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gV2lkdGggb3IgaGVpZ2h0IGluICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgQ1NTIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjc3NTbGlkZVNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBhc3BlY3RSYXRpbyB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgdG8gc2ltdWxhdGUgdGhlIGBoZWlnaHRSYXRpb2Agb3B0aW9uLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIEByZXR1cm4gYXNwZWN0UmF0aW8gaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICovXHJcbiAgICBwcml2YXRlIGNzc0FzcGVjdFJhdGlvO1xyXG4gICAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQnVpbGRzIHRoZSBjc3MgdmFsdWUgYnkgdGhlIHByb3ZpZGVkIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSBhbmQgdW5pdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBBIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZS5cclxuICAgICAqIEBwYXJhbSB1bml0ICAtIEEgQ1NTIHVuaXQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCB2YWx1ZSBmb3IgYSBDU1MgdmFsdWUuXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkQ3NzVmFsdWU7XHJcbiAgICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAgICAgKiBQYXJzZXMgdGhlIENTUyB2YWx1ZSBpbnRvIG51bWJlciBhbmQgdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyc2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBBbiBvYmplY3Qgd2l0aCB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgYW5kIHVuaXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyc2VDc3NWYWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBicmVha3BvaW50cyBhbmQgZ2VuZXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIG9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cclxuICAgICAqL1xyXG4gICAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZhdGUgcGFyc2VCcmVha3BvaW50cztcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiB0aGUgc2xpZGUgd2lkdGggaXMgZml4ZWQgb3Igbm90LlxyXG4gICAgICpcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGUgd2lkdGggaXMgZml4ZWQsIG9yIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc0ZpeGVkVycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZHRoO1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHNsaWRlciB0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBsb29wIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIHNsaWRlciB0eXBlIGlzIGxvb3AsIG9yIG90aGVyd2lzZSBgZmFsc2VgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc0xvb3A7XHJcbiAgICAvKipcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDaGVja3MgaWYgdGhlIGFjdGl2ZSBzbGlkZSBzaG91bGQgYmUgY2VudGVyZWQgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIHNob3VsZCBiZSBjZW50ZXJlZCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBwcml2YXRlIGlzQ2VudGVyO1xyXG4gICAgLyoqXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQ2hlY2tzIGlmIHRoZSBkaXJlY3Rpb24gaXMgVFRCIG9yIG5vdC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGRpcmVjdGlvbiBpcyBUVEIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ0aWNhbDtcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGRzIGNsYXNzZXMgb2YgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb290IGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBDbGFzc2VzIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIHJvb3QgZWxlbWVudCBhcyBhIHNpbmdsZSBzdHJpbmcuXHJcbiAgICAgKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBwcml2YXRlIGJ1aWxkQ2xhc3NlcztcclxuICAgIC8qKlxyXG4gICAgICogQ29udicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnRzIHByb3ZpZGVkIGF0dHJpYnV0ZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICpcclxuICAgICAqIEBwYXJhbSBhdHRycyAtIEFuIG9iamVjdCB3aXRoIGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaWJ1dGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkQXR0cnM7XHJcbiAgICAvKipccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBDb252ZXJ0cyBwcm92aWRlZCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdHlsZXMgLSBBbiBvYmplY3Qgd2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggc3R5bGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkU3R5bGVzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogR2VuZXJhdGVzIEhUTUwgb2Ygc2xpZGVzIHdpdGggaW5zZXJ0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyBwcm92aWRlZCBjb250ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgSFRNTCBmb3IgYWxsIHNsaWRlcyBhbmQgY2xvbmVzLlxyXG4gICAgICovXHJcbiAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpdmF0ZSByZW5kZXJTbGlkZXM7XHJcbiAgICAvKipcclxuICAgICAqIEFkZCB0aGUgYGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrZ3JvdW5kYCBzdHlsZSBmb3IgdGhlIGNvdmVyIG1vZGUuXHJcbiAgICAgKlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBjb250ZW50IC0gQSBzbGlkZSBjb250ZW50LlxyXG4gICAgICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcHJpdmF0ZSBjb3ZlcjtcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbnRlbnRzIC0gQW4gYXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5IHdpdGggU2xpZGVDb250ZW50IG9iamVjdHMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIGdlbmVyYXRlQ2xvbmVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIG9mIGNsb25lcyB0byBnZW5lcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBBIG51bWJlciBvZiBjbG9uZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldENsb25lQ291bnQ7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhcnJvd3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuZCB0aGUgd3JhcHBlciBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIFRoZSBIVE1MIGZvciBhcnJvd3MuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlckFycm93cztcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGFuIGFycm93IEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MLlxyXG4gICAgICogU29tZSBhdHRyaWJ1dGVzIGFyZSB0ZW1wb3JhcnksIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlIGNoYW5nZXMgdGhlbSBhZnRlciBtb3VudC5cclxuICAgICAqXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIHByZXYgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEByZXR1cm4gVGhlIEhUTUwgZm9yIHRoZSBwcmV2IG9yIG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGFycm93LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbmRlckFycm93O1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBvZiB0aGUgc2xpZGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBnZW5lcmF0ZWQgSFRNTC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKi9cclxuICAgIGh0bWwoKTogc3RyaW5nO1xyXG59XG5cbmRlY2xhcmUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IEVWRU5UX01PVU5URUQgPSAibW91bnRlZCI7XHJcbmRlY2xhcmUgY29uc3QgRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX1JFQURZID0gInJlYWR5IjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9NT1ZFICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJtb3ZlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9NT1ZFRCA9ICJtb3ZlZCI7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0NMSUNLID0gImNsaWNrIjtcclxuZGVjbGFyZSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgRVZFTlRfQUNUSVZFID0gImFjdGl2ZSI7XHJcbmRlY2xhcmUgY29uc3QgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9WJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lTSUJMRSA9ICJ2aXNpYmxlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9ISURERU4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gImhpZGRlbiI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfUkVGUkVTSCA9ICJyZWZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzaCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfVVBEQVRFRCA9ICJ1cGRhdGVkIjtccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmRlY2xhcmUgY29uc3QgRVZFTlRfUkVTSVpFID0gInJlc2l6ZSI7XHJcbmRlY2xhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IEVWRU5UX1JFU0laRUQgPSAicmVzaXplZCI7XHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX0RSQUcgPSAiZHJhZyI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfRFJBR0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5HID0gImRyYWdnaW5nIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9EUkFHR0VEID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICJkcmFnZ2VkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9TQ1JPTEwgPSAic2Nyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfU0NST0xMRUQgPSAic2Nyb2xsZWQiO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZGVjbGFyZSBjb25zdCBFVkVOVF9PVkVSRkxPVyA9ICJvdmVyZmxvdyI7XHJcbmRlYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXJlIGNvbnN0IEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7XHJcbmRlY2xhcmUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjtcclxuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY2xhcmUgY29uc3QgRVZFTlRfQVJST1dTX1VQREFURUQgPSAiYXJyb3dzOnVwZGF0ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQgPSAicGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb246bW91bnRlZCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfUEFHSU5BVElPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05fVVBEQVRFRCA9ICJwYWdpbmF0aW9uOnVwZGF0ZWQiO1xyXG5kZWNsYXJlIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAibmF2aWdhdGlvbjptb3VudGVkIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfQVVUT1BMQVlfUExBWSA9ICJhdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYic6cGxheSI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfQVVUT1BMQVlfUExBWUlORyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciYXV0b3BsYXk6cGxheWluZyI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfQVVUT1BMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTEFaWUxPQURfTE9BREVEID0gImxhenlsb2FkOmxvYWRlZCI7XHJcbi8qKiBAaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidybmFsICovXHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfU0xJREVfS0VZRE9XTiA9ICJzaycKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX1NISUZURUQgPSAic2giO1xyXG5kZWNsYXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9ICJlaSI7XG5cbi8qKlxyXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxsIGNsYXNzZXMgYXMgY29uc3RhbnRzLlxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUk9PVCA9ICJzcGxpZGUiO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1RSQUNLOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX0xJU1Q6IHN0cmluZztcclxuZGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhcmUgY29uc3QgQ0xBU1NfU0xJREU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQ0xPTkU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19DT05UQUlOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VSOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfQVJST1dTOiBzdHJpbmc7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX0FSUk9XOiBzdHJpbmc7XHJcbmRlY2xhcmUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IENMQVNTX0FSUk9XX1BSRVY6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1dfTkVYVDogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1BBR0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkFUSU9OOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfUEFHSU5BVElPTl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUEFHRTogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1BST0dSRVNTOiBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1BST0dSRVNTX0JBUjogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZGVjbGFyZSBjb25zdCBDTEFTU19UT0dHTEU6IHN0cmluZztcclxuZGVjbGFyZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgQ0xBU1NfVE9HR0xFX1BMQVk6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfVE9HR0xFX1BBVVNFOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfUycKICAgICAgICAgICAgICAgICAgICAgICAgYidQSU5ORVI6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19TUjogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuZGVjbGFyZSBjb25zdCBDTEFTU19JTklUSUFMSVpFRDogc3RyaW5nO1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjb25zdCBDTEFTU19BQ1RJVkU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUFJFVjogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX05FWFQ6IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfVklTSUJMRTogc3RyaW5nO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBDTEFTU19MT0FESU5HOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0ZPQ1VTX0lOOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfT1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVJGTE9XOiBzdHJpbmc7XHJcbi8qKlxyXG4gKiBUaGUgYXJyYXkgd2l0aCBhbGwgc3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cyBjbGFzc2VzIGV4Y2VwdCBmb3IgYGlzLWluaXRpYWxpemVkYC5cclxuICpcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0BzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBTVEFUVVNfQ0xBU1NFUzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZ1tdO1xyXG4vKipcclxuICogVGhlIGNvbGxlY3Rpb24gb2YgY2xhc3NlcyBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGVsZW1lbnRzIHRoYXQgU3BsaWRlIGR5bmFtaWNhbGx5IGNyZWF0ZXMuXHJcbiAqXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NFUycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHtcclxuICAgIHNsaWRlOiBzdHJpbmc7XHJcbiAgICBjbG9uZTogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGFycm93czogc3RyaW5nO1xyXG4gICAgYXJyb3c6IHN0cmluZztcclxuICAgIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2OiBzdHJpbmc7XHJcbiAgICBuZXh0OiBzdHJpbmc7XHJcbiAgICBwYWdpbmF0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nO1xyXG4gICAgcGFnZTogc3RyaW5nO1xyXG4gICAgc3Bpbm5lcjogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxufTtcblxuLyoqXHJcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGRlZmF1bHQgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMuXHJcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGxlY3Rpb24gZG9lcyBub3QgY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhaW4gYWxsIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlY2xhcmUgY29uc3QgREVGQVVMVFM6IE9wdGlvbnM7XG5cbi8qKlxyXG4gKiBFbnVtZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlcyBzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxyXG4gKi9cclxuZGVjbGFyZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgTFRSID0gImx0ciI7XHJcbi8qKlxyXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCB0byBsZWZ0LlxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBSVEwgPSAicnRsIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbi8qKlxyXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBpbiBhIGNvbC5cclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIGNvbnN0IFRUQiA9ICJ0dGIiO1xuXG4vKipcclxuICogVGhlIHR5cGUgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgcmVndWxhciBzbGlkZXIuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbmRlY2xhcmUgY29uc3QgU0xJREUgPSAic2xpZGUiO1xyXG4vKipcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSB0eXBlIGZvciB0aGUgY2Fyb3VzZWwgc2xpZGVyLlxyXG4gKlxyXG4gKiBAc2luY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIGNvbnN0IExPT1AgPSAibG9vcCI7XHJcbi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcclxuICogVGhlIHR5cGUgZm9yIHRoZSBmYWRlIHNsaWRlciB0aGF0IGNhbiBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGhhdmUgbXVsdGlwbGUgc2xpZGVzIGluIGEgcGFnZS5cclxuICpcclxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYiczLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBGQURFID0gImZhZGUiO1xuXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IHsgQW55RnVuY3Rpb24sIEFycm93c0NvbXBvbmVudCwgQXV0b3BsYXlDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBCYXNlQ29tcG9uZW50LCBDTEFTU0VTLCBDTEFTU19BQ1RJVkUsIENMQVNTX0FSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVywgQ0xBU1NfQVJST1dTLCBDTEFTU19BUlJPV19ORVhULCBDTEFTU19BUlJPV19QUkVWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfQ0xPTkUsIENMQVNTX0NPTlRBSU5FUiwgQ0xBU1NfRk9DVVNfSU4sIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19JTklUSUFMSVpFRCwgQ0xBU1NfTElTVCwgQ0xBU1NfTE9BRElORywgQ0xBU1NfTkVYVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX09WRVJGTE9XLCBDTEFTU19QQUdJTkFUSU9OLCBDTEFTU19QQUdJTkFUSU9OXycKICAgICAgICAgICAgICAgICAgICAgICAgYidQQUdFLCBDTEFTU19QUkVWLCBDTEFTU19QUk9HUkVTUywgQ0xBU1NfUFJPR1JFU1NfQkFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQ0xBU1NfUk9PVCwgQ0xBU1NfU0xJREUsIENMQVNTX1NQSU5ORVIsIENMQVNTX1NSLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfVE9HR0xFLCBDTEFTU19UT0dHTEVfUEFVU0UsIENMQVNTX1RPR0dMRV9QTEFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfVFJBQ0ssIENMQVNTX1ZJU0lCTEUsIENhc3QsIENsb25lc0NvbXBvbmVudCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudENvbnN0cnVjdG9yLCBDb21wb25lbnRzLCBDb250cm9sbGVyQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgQ292ZXJDb21wb25lbnQsIERFRkFVTFRTLCBEaXJlY3Rpb25Db21wb25lbnQsIERyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnQ29tcG9uZW50LCBFVkVOVF9BQ1RJVkUsIEVWRU5UX0FSUk9XU19NT1VOVEVELCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQVJST1dTX1VQREFURUQsIEVWRU5UX0FVVE9QTEFZX1BBVVNFLCBFVkVOVF9BVVRPUEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVlfUExBWSwgRVZFTlRfQVVUT1BMQVlfUExBWUlORywgRVZFTlRfQ0xJQ0ssIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYidERVNUUk9ZLCBFVkVOVF9EUkFHLCBFVkVOVF9EUkFHR0VELCBFVkVOVF9EUkFHR0lORywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0VORF9JTkRFWF9DSEFOR0VELCBFVkVOVF9ISURERU4sIEVWRU5UX0lOQUNUSVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSwgRVZFTlRfTEFaWUxPQURfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfTU9WRUQsIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgRVZFTlRfT1ZFUkZMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09XLCBFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQsIEVWRU5UX1BBR0lOQVRJT05fVVBEQVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIEVWRU5UX1JFQURZLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYidSRVNJWkVELCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9TSElGVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgRVZFTlRfU0xJREVfS0VZRE9XTiwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfVklTSUJMRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVsZW1lbnRzQ29tcG9uZW50LCBFdmVudEJpbmRlciwgRXZlbnRCaW5kZXJPYmplY3QsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudEludGVyZmFjZSwgRXZlbnRJbnRlcmZhY2VPYmplY3QsIEV2ZW50TWFwLCBGQURFJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgSGVhZCwgS2V5Ym9hcmRDb21wb25lbnQsIExPT1AsIExUUiwgTGF5b3V0Q29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgTGF6eUxvYWRDb21wb25lbnQsIExpdmVDb21wb25lbnQsIE1lZGlhQ29tcG9uZW50LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgTW92ZUNvbXBvbmVudCwgT3B0aW9ucywgUGFnaW5hdGlvbkNvbXBvbmVudCwgUGFnaW5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25EYXRhLCBQYWdpbmF0aW9uSXRlbSwgUHVzaCwgUlRMLCBSZXF1ZXN0SW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2UsIFJlc29sdmUsIFJlc3BvbnNpdmVPcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducywgU0xJREUsIFNUQVRVU19DTEFTU0VTLCBTY3JvbGxDb21wb25lbnQsIFNoaWZ0LCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpZnROLCBTbGlkZUNvbXBvbmVudCwgU2xpZGVzQ29tcG9uZW50LCBTcGxpZGUsIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVSZW5kZXJlciwgU3RhdGUsIFN0YXRlT2JqZWN0LCBTeW5jQ29tcG9uZW50LCBTeW5jVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgVFRCLCBUaHJvdHRsZSwgVGhyb3R0bGVJbnN0YW5jZSwgVHJhbnNpdGlvbkNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQsIFdoZWVsQ29tcG9uZW50LCBTcGxpZGUgYXMgZGVmYXVsdCB9O1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L3R5cGVzL2luZGV4LmQudHMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicvKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIE1lZGlhIGNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXHJcbiAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNZWRpYUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgLyoqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAaW50ZXJuYWwgKi9cclxuICAgIHJlZHVjZShyZWR1Y2VkOiBib29sZWFuKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBzZXQob3B0aW9uczogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZnk/OiBib29sZWFuKTogdm9pZDtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgZm9yIHRoZSBEaXJlY3Rpb24gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgcmVzb2x2ZShwcm9wOiBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5nLCBheGlzT25seT86IGJvb2xlYW4sIGRpcmVjdGlvbj86IE9wdGlvbnNbJ2RpciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlY3Rpb24nXSk6IHN0cmluZztcclxuICAgIG9yaWVudCh2YWx1ZTogbnVtYmVyKTogbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlcjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgZWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHdoaWNoIHRoZSBzbGlkZXIgY29uc2lzdHMgb2YuXHJcbiAqXHJcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBFbGVtZW50Q29sbGVjdGlvbiB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgcm9vdDogSFRNTEVsZW1lbnQ7XHJcbiAgICB0cmFjazogSFRNTEVsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50O1xyXG4gICAgbGlzdDogSFRNTEVsZW1lbnQ7XHJcbiAgICBzbGlkZXM6IEgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MRWxlbWVudFtdO1xyXG4gICAgYXJyb3dzPzogSFRNTEVsZW1lbnQ7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGFnaW5hdGlvbj86IEhUTUxVTGlzdEVsZW1lbnQ7XHJcbiAgICBwcmV2PzogSFRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xCdXR0b25FbGVtZW50O1xyXG4gICAgbmV4dD86IEhUTUxCdXR0b25FbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcclxuICAgIGJhcj86IEhUTUxFbGVtZW50O1xyXG4gICAgdG9nZ2xlPzogSFRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFbGVtZW50O1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuaW50ZXJmYWNlIEVsZW1lbnRzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQsIEVsZW1lbnRDb2xsZWN0aW9uIHtcclxufVxuXG4vKipcclxuICogVGhlIGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2UgZm9yIHRoZSBTbGlkZSBzdWIgY29tcG9uZW50LlxyXG4gKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgU2xpZGVDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBpbmRleDogbnVtYmVyOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIHNsaWRlSW5kZXg6IG51bWJlcjtcclxuICAgIHNsaWRlOiBIVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XHJcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gICAgaXNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmU6IGJvb2xlYW47XHJcbiAgICB1cGRhdGUoKTogdm9pZDtcclxuICAgIHN0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHVzZUNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWluZXI/OiBib29sZWFuKTogdm9pZDtcclxuICAgIGlzV2l0aGluKGZyb206IG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsIGRpc3RhbmNlOiBudW1iZXIpOiBib29sZWFuO1xyXG59XG5cbi8qKlxyXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGludGVyZmFjZSBmb3IgdGhlIExheW91dCBjb21wb25lbnQuXHJcbiAqXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBMYXlvdXRDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBsaXN0U2l6ZSgpOiBudScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyO1xyXG4gICAgc2xpZGVTaXplKGluZGV4OiBudW1iZXIsIHdpdGhvdXRHYXA/OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm9vbGVhbik6IG51bWJlcjtcclxuICAgIHNsaWRlclNpemUod2l0aG91dEdhcD86ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidib29sZWFuKTogbnVtYmVyO1xyXG4gICAgdG90YWxTaXplKGluZGV4PzogbnVtYmVyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aG91dEdhcD86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBnZXRQYWRkaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodDogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIGlzT3ZlcmZsb3coKTogYm9vbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICByZXNpemUoZm9yY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogYm9vbGVhbik6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciB0aGUgQ2xvbmUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgQ2xvbmVzQ29tcG9uZW50IGV4dGVuZHMgQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2VDb21wb25lbnQge1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIE1vdmUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5pbnRlcmZhY2UgTW92ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHtcclxuICAgIG1vdmUoZGVzdDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBwcmV2OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBjYWxsYmFjaz86IEFueUZ1bmN0aW9uKTogdm9pZDtcclxuICAgIGp1bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwKGluZGV4OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgdHJhbnNsYXRlKHBvc2l0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBwcmV2ZW50TG9vcD86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgc2hpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KHBvc2l0aW9uOiBudW1iZXIsIGJhY2t3YXJkczogYm9vbGVhbik6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBjYW5jZWwoKTogdm9pZDtcclxuICAgIHRvSW5kZXgocG9zaXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIpOiBudW1iZXI7XHJcbiAgICB0b1Bvc2l0aW9uKGluZGV4OiBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmltbWluZz86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBnZXRQb3NpdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyO1xyXG4gICAgZ2V0TGltaXQobWF4OiBib29sZWFuKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxuICAgIGV4Y2VlZGVkTGltaXQobWF4PzogYm9vbGVhbiB8IHVuZGVmaW5lZCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBvc2l0aW9uPzogbnVtYmVyKTogYm9vbGVhbjtcclxuICAgIC8qKiBAaW50ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXHJcbiAgICByZXBvc2l0aW9uKCk6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQ29udHJvbGxlciBjb21wb25lbnQuXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBDb250cm9sbGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgZ28oY29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w6IG51bWJlciB8IHN0cmluZywgYWxsb3dTYW1lSW5kZXg/OiBib29sZWFuLCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2s/OiBBbnlGdW5jdGlvbik6IHZvaWQ7XHJcbiAgICBzY3JvbGwoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uOiBudW1iZXIsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrPzogQW55RnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgZ2V0TmV4dChkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGluYXRpb24/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gICAgZ2V0UHJldihkZXN0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gICAgZ2V0RW5kKCk6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBzZXRJbmRleChpbmRleDogbnVtYmVyKTogdm9pZDtcclxuICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbmRleChwcmV2PzogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIHRvSW5kZXgocGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IG51bWJlcik6IG51bWJlcjtcclxuICAgIHRvUGFnZShpbmRleDogbnVtYmVyKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcjtcclxuICAgIHRvRGVzdChwb3NpdGlvbjogbnVtYmVyKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxuICAgIGhhc0ZvY3VzKCk6IGJvb2xlYW47XHJcbiAgICBpc0J1c3koKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBnZXRBZGphYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQocHJldjogYm9vbGVhbiwgZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEFycm93cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2UgQXJyb3dzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYXJyb3dzOiB7XHJcbiAgICAgICAgcHJldj86IEhUTUxCdXR0b25FbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudDtcclxuICAgICAgICBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfTtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHVwZGF0ZSgpOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEF1dG9wbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbmludGVyZmFjZSBBdXRvcGxheUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250IHtcclxuICAgIHBsYXkoKTogdm9pZDtcclxuICAgIHBhdXNlKCk6IHZvaWQ7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaXNQYXVzZWQoKTogYm9vbGVhbjtcclxufVxuXG4vKipcclxuICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnRlcmZhY2UgZm9yIHRoZSBDb3ZlciBjb21wb25lbnQuXHJcbiAqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBDb3ZlckNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxufVxuXG4vKipcclxuICogVGhlIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UgZm9yIHRoZSBTY3JvbGwgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgU2Nyb2xsQ29tcG9uZW50IGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgc2Nyb2xsKHBvc2l0aW9uOiBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLCBkdXJhdGlvbj86IG51bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEFueUZ1bmN0aW9uKTogdm9pZDtcclxuICAgIGNhbmNlbCgpOiB2b2lkO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERyYWcgY29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIERyYWdDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcclxuICAgIGlzRHJhZ2dpbmcoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGJvb2xlYW47XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgS2V5Ym9hcmQgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5pbnRlcmZhY2UgS2V5Ym9hcmRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudCB7XHJcbiAgICBkaXNhYmxlKGRpc2FibGVkOiBib29sZWFuKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBMYXp5TG9hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcmZhY2UgTGF6eUxvYWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB7XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBjaGVjaygpOiB2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFBhZ2luYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuaW50ZXJmYWNlIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCB7XHJcbiAgICBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtcclxuICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdChpbmRleDogbnVtYmVyKTogUGFnaW5hdGlvbkl0ZW07XHJcbiAgICB1cGRhdGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQ7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGRhdGEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mIHRoZSBwYWdpbmF0aW9uLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG5pbnRlcmZhY2UgUGFnaW5hdGlvbkRhdGEge1xyXG4gICAgbGlzdDogSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVTGlzdEVsZW1lbnQ7XHJcbiAgICBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGVhY2ggcGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gaXRlbS5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIFBhZ2luYXRpb25JdGVtIHtcclxuICAgIGxpOiBIVE1MTElFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBwYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bmMgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG5pbnRlcmZhY2UgU3luY0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcclxuICAgIHJlbW91bnQoKTogdm9pZDtcclxufVxuXG4vKipcclxuICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcmZhY2UgZm9yIHRoZSBXaGVlbCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBXaGVlbENvbXBvbmVudCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UgZm9yIHRoZSBMaXZlIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0LjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIExpdmVDb21wb25lbnQgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQmFzZUNvbXBvbmVudCB7XHJcbiAgICBkaXNhYmxlKGRpc2FibGVkOiBib29sZWFuKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGkxOG4gc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZ3MuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgY29uc3QgSTE4Tjoge1xyXG4gICAgcHJldjogc3RyaW5nO1xyXG4gICAgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHN0cmluZztcclxuICAgIGZpcnN0OiBzdHJpbmc7XHJcbiAgICBsYXN0OiBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nO1xyXG4gICAgc2xpZGVYOiBzdHJpbmc7XHJcbiAgICBwYWdlWDogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIHBsYXk6IHN0cmluZztcclxuICAgIHBhdXNlOiBzdHJpbmc7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY2Fyb3VzZWw6IHN0cmluZztcclxuICAgIHNsaWRlOiBzdHJpbmc7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0OiBzdHJpbmc7XHJcbiAgICBzbGlkZUxhYmVsOiBzdHJpbmc7XHJcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3Igb3B0aW9ucy5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIE9wdGlvbnMgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgUmVzcG9uc2l2ZU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhlIHR5cGUgb2YgdGhlIHNsaWRlci5cclxuICAgICAqIC0gJ3NsaWRlJzogQSBzbGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZGVyIHdpdGggdGhlIHNsaWRlIHRyYW5zaXRpb25cclxuICAgICAqIC0gJ2xvb3AnIDoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEEgY2Fyb3VzZWwgc2xpZGVyXHJcbiAgICAgKiAtICdmYWRlJyA6IEEgc2xpZGVyIHciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIHRoZSBmYWRlIHRyYW5zaXRpb24uIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHBlclBhZ2Ugb3B0aW9uLlxyXG4gICAgICovXHJcbiAgICB0eXBlPzogc3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGByb2xlYCBhdHRyaWJ1dGUgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB0aGUgcm9vdCBlbGVtZW50LlxyXG4gICAgICogSWYgdGhlIHRhZyBpcyBgPHNlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uPmAsIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgdXNlZC4gVGhlIGRlZmF1bHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInZhbHVlIGlzIGAncmVnaW9uJ2AuXHJcbiAgICAgKi9cclxuICAgIHJvbGU/OiBzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpc2FibGUgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHNsaWRlciBpcyB0cmFuc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbmluZy5cclxuICAgICAqIEV2ZW4gaWYgYGZhbHNlYCwgdGhlIHNsaWRlciBmb3JjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2libHkgd2FpdHMgZm9yIHRyYW5zaXRpb24gb24gdGhlIGxvb3AgcG9pbnRzLlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgd2FpdEZvclRyYW5zaXRpb24/OiBib29sZWFuO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2Ygc2xpZGVzIGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGV0ZXJtaW5lZCBieSB0aGVpciB3aWR0aC5cclxuICAgICAqIFRoZSBgcGVyUGFnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgIGFuZCBgcGVyTW92ZWAgb3B0aW9ucyBzaG91bGQgYmUgYDFgLlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xyXG4gICAgYXV0b1dpZHRoPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIElmIGB0cnVlYCwgdGhlIGhlaWdodCBvZiBzbGlkZXMgYXJlIGRldGVybWluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIGJ5IHRoZWlyIGhlaWdodC5cclxuICAgICAqIFRoZSBgcGVyUGFnZWAgYW5kIGBwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyTW92ZWAgb3B0aW9ucyBzaG91bGQgYmUgYDFgLlxyXG4gICAgICovXHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXV0b0hlaWdodD86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnQgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0PzogbnVtYmVyO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgYXJyb3cgU1ZHIHBhdGgsIGxpa2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidtNy42MSAwLjgwNy0yLjEyLi4uJy5cclxuICAgICAqL1xyXG4gICAgYXJyb3dQYSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aD86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlciB0byBhY3RpdmF0ZSBhdXRvcGxheSBvciBub3QuXHJcbiAgICAgKiBJZiBgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlZGAsIGl0IHdpbGwgbm90IGJlZ2luIHdoZW4gdGhlIHNsaWRlciBiZWNvbWVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhY3RpdmUuXHJcbiAgICAgKiBZb3UgbmVlZCB0byBwcm92aWRlZCBwbGF5L3BhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBidXR0b25zIG9yIG1hbnVhbGx5IHN0YXJ0IGl0IGJ5IGBBdXRvcGxheSNwbGF5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIpYC5cclxuICAgICAqL1xyXG4gICAgYXV0b3BsYXk/OiBib29sZWFuIHwgJ3BhdXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhdXRvcGxheSBpbnRlcnZhbCBpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWlsbGlzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBpbnRlcnZhbD86IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXI7XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2UgYXV0b3BsYXkgb24gbW91c2VvdmVyLlxyXG4gICAgICovXHJcbiAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2VPbkhvdmVyPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybWluZXMgd2hldGhlciB0byBwYXVzZSBhdXRvcGxheSB3aGVuIHRoZSBzbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRhaW5zIHRoZSBhY3RpdmUgZWxlbWVudCAoZm9jdXNlZCBlbGVtZW50KS5ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBUaGlzIHNob3VsZCBiZSBgdHJ1ZWAgZm9yIGFjY2Vzc2liaWxpdHkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICovXHJcbiAgICBwYXVzZU9uRm9jdXM/OiBib29sZWFuO1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlc2V0IHRoZSBhdXRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXkgcHJvZ3Jlc3Mgd2hlbiBpdCBpcyByZXF1ZXN0ZWQgdG8gc3RhcnQgYWdhaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLlxyXG4gICAgICovXHJcbiAgICByZXNldFByb2dyZXNzPzogYm9vbGVhbjtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAvKipcclxuICAgICAqIEVuYWJsZXMgbGF6eSBsb2FkaW5nLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFByb3ZpZGUgdGhlIGBzcmNgIGJ5IHRoZSBgZGF0YS1zcGxpZGUtbGF6eWAgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBgc3Jjc2V0YCBieSB0aGUgYGRhdGEtc3BsaWRlLWxhenktc3Jjc2V0YC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiBZb3UgbWF5IGFsc28gcHJvdmlkZSBgc3JjYCBmb3IgdGhlIHBsYWNlaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGRlciwgYnV0IHRoZSB2YWx1ZSBtdXN0IGJlIGRpZmZlcmVudCB3aXRoIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiAtIGBmYWxzZWA6IERpc2FibGVzIGxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInp5IGxvYWRpbmdcclxuICAgICAqIC0gYCduZWFyYnknYDogU3RhcnRzIGxvYWRpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ubHkgaW1hZ2VzIGFyb3VuZCB0aGUgYWN0aXZlIHNsaWRlIChwYWdlKVxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAqIC0gYCdzZXF1ZW50aWFsJ2A6IExvYWRzIGltYWdlcyBzZXF1ZW50aWFsbHlcclxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgKi9cclxuICAgIGxhenlMb2FkPzogYm9vbGVhbiB8ICduZWFyYnknIHwgJ3NlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInF1ZW50aWFsJztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGhvdyBtYSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidueSBwYWdlcyAobm90IHNsaWRlcykgYXJvdW5kIHRoZSBhY3RpdmUgc2xpZGUgc2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VsZCBiZSBsb2FkZWQgYmVmb3JlaGFuZC5cclxuICAgICAqIFRoaXMgb25seSB3b3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIia3Mgd2hlbiB0aGUgYGxhenlMb2FkYCBvcHRpb24gaXMgYCduZWFyYnknYC5cclxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cclxuICAgIHByZWxvYWRQYWdlcz86IG51bWJlcjtcclxuICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIEVuYWJsZXMga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBjb250cm9sLlxyXG4gICAgICogLSBgdHJ1ZWAgb3IgYCdnbG9iYWwnYDogTGlzdGVuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgdG8gdGhlIGBrZXlkb3duYCBldmVudCBvZiB0aGUgZG9jdW1lbnQuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiogLSAnZm9jdXNlZCc6IExpc3RlbnMgdG8gdGhlIGBrZXlkb3duYCBldmVudCBvZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHNsaWRlciByb290IGVsZW1lbnQgd2l0aCBhZGRpbmcgYHRhYmluZGV4PSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCJgIHRvIGl0LlxyXG4gICAgICogLSBgZmFsc2VgOiBEaXNhYmxlcyBrZXlib2FyZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2hvcnRjdXRzIChkZWZhdWx0KS5cclxuICAgICAqL1xyXG4gICAga2V5Ym9hcmQ/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogYm9vbGVhbiB8ICdnbG9iYWwnIHwgJ2ZvY3VzZWQnO1xyXG4gICAgLyoqXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICogRW5hYmxlcyBuYXZpZ2F0aW9uIGJ5IHRoZSBtb3VzZSB3aGVlbC5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBTZXQgYHdhaXRGb3JUcmFuc2l0aW9uYCB0byBgdHVyZWAgb3IgcHJvdmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUgdGhlIGB3aGVlbFNsZWVwYCBkdXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3doZWVsPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRocmVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGQgdG8gY3V0IG9mZiB0aGUgc21hbGwgZGVsdGEgcHJvZHVjZWQgYnkgaW5lcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWEgc2Nyb2xsLlxyXG4gICAgICovXHJcbiAgICB3aGVlbE1pblRocmVzaG9sZD86JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGVlcCB0aW1lIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtaWxsaXNlY29uZHMgdW50aWwgYWNjZXB0aW5nIG5leHQgd2hlZWwuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIHRpbWVyIHN0YXJ0cyB3aGVuIHRoZSB0cmFuc2l0aW9uIGJlZ2lucy5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKi9cclxuICAgIHdoZWVsU2xlZXA/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVsZWFzZSB0aGUgd2hlZWwgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHdoZW4gdGhlIHNsaWRlciByZWFjaGVzIHRoZSBmaXJzdCBvciBsYXN0IHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5cclxuICAgICAqL1xyXG4gICAgcmVsZWFzZVdoZWVsPzogYm9vbGVhbjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNsaWRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXHJcbiAgICAgKiAtICdsdHInOiBMZWZ0IHRvIHJpZ2h0XHJcbiAgICAgKiAtICdyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRsJzogUmlnaHQgdG8gbGVmdFxyXG4gICAgICogLSAndHRiJzogVG9wIHRvIGJvdHRvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1cclxuICAgICAqL1xyXG4gICAgZGlyZWN0aW9uPzogJ2x0cicgfCAncnRsJyB8ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIndHRiJztcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhlIGltYWdlIGAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjYCB0byB0aGUgY3NzIGBiYWNrZ3JvdW5kLWltYWdlYCBVUkwgb2YgdGhlIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQgZWxlbWVudC5cclxuICAgICAqIFRoaXMgcmVxdWlyZXMgYGZpeGVkSGVpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Agb3IgYGhlaWdodFJhdGlvYCBvcHRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcj86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRoZXIgdG8gYWRkIGB0YWJpbmRleD0iMCJgIHRvIHZpc2libGUgc2xpZGVzIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXHJcbiAgICAgKi9cclxuICAgIHNsaWRlRm9jdXM/OiBib29sZWFuO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC8qKlxyXG4gICAgICogSWYgYHRydWVgLCB0aGUgc2xpZGVyIG1ha2VzIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgY2xpY2thYmxlIHRvIG5hdmlnYXRlIGFub3RoZXIgc2xpZGVyLlxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VzZSBgU3BsaWRlI3N5bmMoKWAgdG8gc3luYyBtdWx0aXBsZSBzbGlkZXJzLlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgaXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcclxuICAgIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byB0cmltIHNwYWNlcyBiZWZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlL2FmdGVyIHRoZSBzbGlkZXIgaWYgdGhlIGBmb2N1c2Agb3B0aW9uIGlzIGF2YWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFibGUuXHJcbiAgICAgKiAtIGB0cnVlYDogVHJpbXMgc3BhY2VzLiBUaGUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBtYXkgc3RheSBvbiB0aGUgc2FtZSBsb2NhdGlvbiBldmVuIHdoZW4gcmVxdWVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRlZCB0byBtb3ZlLlxyXG4gICAgICogLSBgJ21vdmUnYDogVHJpbXMgc3BhY2VzIGFuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgZm9yY2VzIHRvIG1vdmUgdGhlIHNsaWRlciB3aGVuIHJlcXVlc3RlZC5cclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgKi9cclxuICAgIHRyaW1TcGFjZT86IGJvb2xlYW4gfCAnbW92ZSc7XHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXHJcbiAgICAgKiBJZiBgdHJ1ZWAgYW5kIHRoZSBgZm9jdXNgIG9wdGlvbiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXZhaWxhYmxlOlxyXG4gICAgICogLSBEaXNhYmxlcyB0aGUgbmV4dCBhcnJvdyB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiBhIGNhcm91c2VsIHJlYWNoZXMgdGhlIGxhc3QgcGFnZSBldmVuIGlmIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlIHNsaWRlIGlzIG5vdCB0aGUgbGFzdCBzbGlkZS5cclxuICAgICAqIC0gT20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRzIHJlZHVuZGFudCBwYWdpbmF0aW9uIGRvdHMgd2hpY2gganVzdCBjaGFuZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBhY3RpdmUgc2xpZGUgYW5kIGRvIG5vdCBtb3ZlIGEgY2Fyb3VzZWwuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBvbWl0RW5kPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFVwZGF0ZXMgdGhlIGBpcy1hY3RpdmVgIHN0YXR1cyBvZiBzbGlkZXMganVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYmVmb3JlIG1vdmluZyB0aGUgc2xpZGVyLlxyXG4gICAgICovXHJcbiAgICB1cGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlT25Nb3ZlPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogSWYgYG1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25gLCB0aGUgbWVkaWEgcXVlcnkgZm9yIGJyZWFrcG9pbnRzIHdpbGwgYmUgYG1pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictd2lkdGhgLCBvciBvdGhlcndpc2UsIGBtYXgtd2lkdGhgLlxyXG4gICAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxyXG4gICAgbWVkaWFRdWVyeT86ICdtaW4nIHwgJ21heCc7XHJcbiAgICAvKipcclxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiBUaGUgc2VsZWN0b3IgdG8gZmluZCBmb2N1c2FibGUgZWxlbWVudHNcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiB3aGVyZSBgdGFiaW5kZXg9Ii0xImAgd2lsbCBiZSBhc3NpZ25lZCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiB0aGVpciBhc2NlbmRhbnQgc2xpZGUgaXMgaGlkZGVuLlxyXG4gICAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgZm9jdXNhYmxlTm9kZXM/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBUaGUgc2VsZWN0b3IgZm9yIG5vZGVzIHRoYXQgY2Fubm90IGJlIGRyYWdnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLlxyXG4gICAgICovXHJcbiAgICBub0RyYWc/OiBzdHJpbmc7XHJcbiAgICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXHJcbiAgICAgKiBFbmFibGVzIHRoZSBsaXZlIHJlZ2lvbiBieSBgYXJpYS1saXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AuXHJcbiAgICAgKiBJZiBgdHJ1ZWAsIHNjcmVlbiByZWFkZXJzIHdpbGwgcmVhZCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb250ZW50IG9mIGVhY2ggc2xpZGUgd2hlbmV2ZXIgc2xpZGUgY2hhbmdlcy5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKi9cclxuICAgIGxpdmU/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgVHJhbnNpdGlvbiBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgdXNlU2Nyb2xsPzogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XHJcbiAgICAvKipcclxuICAgICAqIE9wdGlvbnMgZm9yIHNwZWNpZmljIGJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2BgYHRzXHJcbiAgICAgKiB7XHJcbiAgICAgKiAgIDEwMDA6IHtcclxuICAgICAqICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGVyUGFnZTogMyxcclxuICAgICAqICAgICBnYXAgICAgOiAyMFxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqICAgfSxcclxuICAgICAqICAgNjAwOiB7XHJcbiAgICAgKiAgICAgcGVyUGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDEsXHJcbiAgICAgKiAgICAgZ2FwICAgIDogNSxcclxuICAgICAqICAgfSxcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiB9XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgYnJlYWtwb2ludHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgUmVzcG9uc2l2ZU9wdGlvbnM+O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogT3B0aW9ucyB1c2VkIHdoZW4gdGhlIGAocHJlZmVycy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVkdWNlZC1tb3Rpb246IHJlZHVjZSlgIGlzIGRldGVjdGVkLlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG4gICAgcmVkdWNlZE1vdGlvbj86IE9wdGlvbnM7XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBUaGUgY29sbGVjdGlvbiBvZiBjbGFzcyBuYW1lcy5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuICAgIGNsYXNzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgaTE4biBzdHJpbmdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqL1xyXG4gICAgaTE4bj86IFJlY29yZDxrZXlvZiB0eXBlb2YgSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxOE4gfCBzdHJpbmcsIHN0cmluZz47XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIGZvciBvcHRpb25zIHRoYXQgY2FuIGNvcnJlc3BvbmQgd2l0aCBicmVha3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2ludHMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZSBSZXNwb25zaXZlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIEFjYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcHRzIGFyYml0cmFyeSBwcm9wZXJ0aWVzIGZvciBleHRlbnNpb25zLCBhbHRob3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZ2ggaXQncyBub3QgaWRlYWwgdHlwaW5nLlxyXG4gICAgICovXHJcbiAgICBba2V5IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nXTogYW55O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgcm9vdCBlbGVtZW50LlxyXG4gICAgICogVXNlIGBsYWJlbGxlZGJ5YCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVhZCBpZiB0aGVyZSBpcyBhIHZpc2libGUgbGFiZWwuXHJcbiAgICAgKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBsYWJlbD86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIElEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgdGhlIGVsZW1lbnQgdGhhdCB1c2VkIGFzIHRoZSBsYWJlbCBvZiB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcm91c2VsLlxyXG4gICAgICovXHJcbiAgICBsYWJlbGxlZGJ5Pzogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIC8qKlxyXG4gICAgICogVGhlIHRyYW5zaXRpb24gc3BlZWQgaW4gbWlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc2Vjb25kcy5cclxuICAgICAqL1xyXG4gICAgc3BlZWQ/OiBudW1iZXI7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmV3aW5kIHRoZSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyb3VzZWwgb3Igbm90LlxyXG4gICAgICogVGhpcyBpcyBpZ25vcmVkIHdoZW4gdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBgdHlwZWAgb3B0aW9uIGlzIGAnbG9vcCdgLlxyXG4gICAgICovXHJcbiAgICByZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aW5kPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRyYW5zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHNwZWVkIG9uIHJld2luZCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICByZXdpbmRTcGVlZD86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEFsbG93cyB0byByZXdpbmQgYSBjYXJvdXNlbCBieSBkcmFnIGlmIHRoZSBgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2luZGAgb3B0aW9uIGlzIGVuYWJsZWQuXHJcbiAgICAgKi9cclxuICAgIHJld2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RCeURyYWc/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgc2xpZGVyIG1heCB3aWR0aCwgYWNjZXB0aW5nIHRoZSBDU1MgZm9ybWF0IHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWNoIGFzIDEwZW0sIDgwdncuXHJcbiAgICAgKi9cclxuICAgIHdpZHRoPzogbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciB8IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlciBoZWlnaHQsIGFjY2VwdGluZyB0aGUgQ1NTIGZvcm1hdC5cclxuICAgICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZztcclxuICAgIC8qKlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEZpeGVzIHdpZHRoIG9mIHNsaWRlcywgYWNjZXB0aW5nIHRoZSBDU1MgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm1hdC5cclxuICAgICAqIFRoZSBzbGlkZXIgd2lsbCBpZ25vcmUgdGhlIGBwZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWAgb3B0aW9uIGlmIHlvdSBwcm92aWRlIHRoaXMgdmFsdWUuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBmaXhlZFdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogRml4ZXMgaGVpZ2h0IG9mIHNsaWRlcywgYWNjZXB0aW5nIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1NTIGZvcm1hdC5cclxuICAgICAqIFRoZSBzbGlkZXIgd2lsbCBpZ25vcmUgdGhlIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVpZ2h0UmF0aW9gIG9wdGlvbiBpZiB5b3UgcHJvdmlkZSB0aGlzIHZhbHVlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqL1xyXG4gICAgZml4ZWRIZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIGhlaWdodCBvZiBzbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJ5IHRoZSByYXRpbyB0byB0aGUgc2xpZGVyIHdpZHRoLlxyXG4gICAgICogRm9yIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGFtcGxlLCB3aGVuIHRoZSBzbGlkZXIgd2lkdGggaXMgYDEwMDBgIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhdGlvIGlzIGAwLjVgLCB0aGUgaGVpZ2h0IHdpbGwgYmUgYDUwMGAuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbiAgICBoZWlnaHRSYXRpbz86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBzbGlkZXMgdG8gZGlzcGxheSBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYSBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwZXJQYWdlPzogbnVtYmVyO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW92ZSBhdCBvbmNlLlxyXG4gICAgICovXHJcbiAgICBwZXJNb3ZlPzogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lcyBvbiBlYWNoIHNpZGUgb2YgdGhlIHNsaWRlci5cclxuICAgICAqIEluIG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInN0IGNhc2VzLCB5b3UgZG9uJ3QgbmVlZCB0byBwcm92aWRlIHRoaXMgdmFsdWUuXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICovXHJcbiAgICBjbG9uZXM/OiBudW1iZXI7XHJcbiAgICAvKipccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY2xvbmUgc3RhdHVzIGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGZvciBjbG9uZXMgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBjbG9uZVN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXM/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGljaCBzbGlkZSBzaG91bGQgYmUgYWN0aXZlIGlmIHRoZXJlIGFyZSBtdWx0aXBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUgc2xpZGVzIGluIGEgcGFnZS5cclxuICAgICAqIE51bWJlcnMgYW5kIGAnY2VudGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidgIGFyZSBhY2NlcHRhYmxlLlxyXG4gICAgICovXHJcbiAgICBmb2N1cz86IG51bSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJiZXIgfCAnY2VudGVyJztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhcCBiZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2VlbiBzbGlkZXMuIFRoZSBDU1MgZm9ybWF0IGlzIGFjY2VwdGFibGUsIHN1Y2ggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzIGAxZW1gLlxyXG4gICAgICovXHJcbiAgICBnYXA/OiBudW1iZXIgfCBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHBhZGRpbmcgbGVmdC9yaWdodCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgdG9wL2JvdHRvbSBvZiB0aGUgc2xpZGVyLlxyXG4gICAgICogVGhlIENTUyBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0IGlzIGFjY2VwdGFibGUsIHN1Y2ggYXMgYDFlbWAuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0c1xyXG4gICAgICogLy8gQnkgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlclxyXG4gICAgICogcGFkZGluZzogMTAsXHJcbiAgICAgKlxyXG4gICAgICogLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvIEJ5IHRoZSBDU1MgZm9ybWF0XHJcbiAgICAgKiBwYWRkaW5nOiAnMXJlbScsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIC8vIFNwZWNpZmllcyBlYWNoIHZhbHVlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYSBob3Jpem9udGFsIHNsaWRlclxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAxMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIHJpZ2h0OiAyMCB9LFxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAnMXJlbScsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWdodDogJzJyZW0nIH0sXHJcbiAgICAgKlxyXG4gICAgICogLy8gU3BlY2lmaWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCBlYWNoIHZhbHVlIGZvciBhIHZlcnRpY2FsIHNsaWRlclxyXG4gICAgICogcGFkZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmc6IHsgdG9wOiAxMCwgYm90dG9tOiAyMCB9LFxyXG4gICAgICogYGBgXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBwYWRkaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwge1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgIHJpZ2h0PzogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciB8IHN0cmluZztcclxuICAgIH0gfCB7XHJcbiAgICAgICAgdG9wPzogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciB8IHN0cmluZztcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB0byBjcmVhdGUvZmluZCBhcnJvd3Mgb3Igbm90LlxyXG4gICAgICovXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgYXJyb3dzPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMgd2hldGhlciB0byBjcmVhdGUgcGFnaW5hdGlvbiAoaW5kaWNhdG9yIGRvdHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIHBhZ2luYXRpb24/OiBib29sZWFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidibGUga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBwYWdpbmF0aW9uIHdoZW4gaXQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRhaW5zIGZvY3VzLlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYC5cclxuICAgICAqL1xyXG4gICAgcGFnaW5hdGlvbktleWJvYXJkPzogYm9vbGVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ247XHJcbiAgICAvKipcclxuICAgICAqIEV4cGxpY2l0bHkgc2V0cyB0aGUgcGFnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gZGlyZWN0aW9uIHRoYXQgZG9lcyBub3Qgb25seSBhZmZlY3QgYXBwZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuY2UgYnV0IGFsc28gc2hvcnRjdXRzIGFuZCBBUklBIGF0dHJpYnV0ZXMuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgc2FtZSB3aXRoIHRoZSBjYXJvdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgZGlyZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwYWdpbmF0aW9uRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbj86IE9wdGlvbnNbJ2RpcmVjdGlvbiddO1xyXG4gICAgLyoqXHJcbiAgICAgKiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIENTUyB0cmFuc2l0aW9uLiBGb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4YW1wbGUsIGBsaW5lYXJgLCBlYXNlIG9yIGBjdWJpYy1iZXppZXIoKWAuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBlYXNpbmc/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZHJhZyBmcmVlIG1vZGUuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVGhlIGRlZmF1bHQgZnVuY3Rpb24gaXMgdGhlIGBlYXNlT3V0UXVhcnRgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnBvbGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBlYXNpbmdGdW5jPzogKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBudW1iZXIpID0+IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogQWxsb3dzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0byBkcmFnIHRoZSBzbGlkZXIgYnkgYSBtb3VzZSBvciBzd2lwZS5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBJZiBgZnJlZWAsIHRoZSBzbGlkZXIgZG9lcyBub3Qgc25hcCB0byBhIHNsaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhZnRlciBkcmFnLlxyXG4gICAgICovXHJcbiAgICBkcmFnPzogYm9vbGVhbiB8ICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZnJlZSc7XHJcbiAgICAvKipcclxuICAgICAqIFNuYXBzIHRoZSBjbG9zZXN0IHNsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBpbiB0aGUgZHJhZy1mcmVlIG1vZGUuXHJcbiAgICAgKi9cclxuICAgIHNuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJlcXVpcmVkIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0YW5jZSB0byBzdGFydCBtb3ZpbmcgdGhlIHNsaWRlciBieSB0aGUgdG91Y2ggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGlvbi5cclxuICAgICAqIElmIHlvdSB3YW50IHRvIGRlZmluZSB0aGUgdGhyZXNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZCBmb3IgdGhlIG1vdXNlLCBwcm92aWRlIGFuIG9iamVjdC5cclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuICAgIGRyYWdNaW5UaHJlc2hvbGQ/OiBudW1iZXIgfCB7XHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG1vdXNlOiBudW1iZXI7XHJcbiAgICAgICAgdG91Y2g6IG51bWJlcjtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgdGhlIHBvd2VyIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAiZmxpY2siLiBUaGUgbGFyZ2VyIG51bWJlciB0aGlzIGlzLCB0aGUgZmFydGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIHNsaWRlciBydW5zLlxyXG4gICAgICogQXJvdW5kIDUwMCBpcyByZWNvbW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZWQuXHJcbiAgICAgKi9cclxuICAgIGZsaWNrUG93ZXI/OiBudW1iZXI7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXHJcbiAgICAgKiBMaW1pdHMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBieSAiZmxpY2siLlxyXG4gICAgICovXHJcbiAgICBmbGlja01heFBhZ2VzPzogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhlIHNsaWRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k/OiBib29sZWFuIHwgJ2NvbXBsZXRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImx5JztcclxufVxuXG4vKipcclxuICogVGhlIHR5cGUgZm9yIGFueSBmdW5jdGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24uXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXHJcbiAqIFRoZSB0eXBlIGZvciBhIGNvbXBvbmVudC5cclxuICpcclxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSB0eXBlIENvbXBvbmVudENvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1Y3RvciA9IChTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9wdGlvbnM6IE9wdGlvbnMpID0+IEJhc2VDb21wb25lbnQ7XHJcbi8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogVGhlIGludGVyZmFjZSBmb3IgYW55IGNvbXBvbmVudC5cclxuICpcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEJhc2VDb21wb25lbnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIHNldHVwPygpOiB2b2lkO1xyXG4gICAgbW91bnQ/KCk6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveT8oY29tcGxldGVseT86IGJvb2xlYW4pOiB2b2lkO1xyXG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFRyYW5zaXRpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIFRyYW5zaXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XHJcbiAgICBzdGFydChpbmRleDogbnVtYmVyLCBkb25lOiAoKSA9PiB2b2lkKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQ7XHJcbiAgICBjYW5jZWwoKTogdm9pZDtcclxufVxyXG4vKipcclxuICogVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBpbnRlcmZhY2UgZm9yIGluZm8gb2YgYSBzcGxpZGUgaW5zdGFuY2UgdG8gc3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmMgd2l0aC5cclxuICpcclxuICogQHNpbmNlIDMuMi44XHJcbiAqL1xyXG5pbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlIFN5bmNUYXJnZXQge1xyXG4gICAgc3BsaWRlOiBTcGxpZGU7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNQYXJlbnQ/OiBib29sZWFuO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSBmb3IgYWxsIGNvbXBvbmVudHMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICovXHJcbmludGVyZmFjZSBDb21wb25lbnRzIHtcclxuICAgIFtrZXk6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmddOiBCYXNlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgTWVkaWE6IE1lZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUNvbXBvbmVudDtcclxuICAgIERpcmVjdGlvbjogRGlyZWN0aW9uQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDtcclxuICAgIEVsZW1lbnRzOiBFbGVtZW50c0NvbXBvbmVudDtcclxuICAgIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXM6IFNsaWRlc0NvbXBvbmVudDtcclxuICAgIExheW91dDogTGF5b3V0Q29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudDtcclxuICAgIENsb25lczogQ2xvbmVzQ29tcG9uZW50O1xyXG4gICAgTW92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IE1vdmVDb21wb25lbnQ7XHJcbiAgICBDb250cm9sbGVyOiBDb250cm9sbGVyQ29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudDtcclxuICAgIEFycm93czogQXJyb3dzQ29tcG9uZW50O1xyXG4gICAgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dG9wbGF5OiBBdXRvcGxheUNvbXBvbmVudDtcclxuICAgIENvdmVyOiBDb3ZlckNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQ7XHJcbiAgICBTY3JvbGw6IFNjcm9sbENvbXBvbmVudDtcclxuICAgIEQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnOiBEcmFnQ29tcG9uZW50O1xyXG4gICAgS2V5Ym9hcmQ6IEtleWJvYXJkQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudDtcclxuICAgIExhenlMb2FkOiBMYXp5TG9hZENvbXBvbmVudDtcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBQYWdpbmF0aW9uOiBQYWdpbmF0aW9uQ29tcG9uZW50O1xyXG4gICAgU3luYzogU3luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NDb21wb25lbnQ7XHJcbiAgICBXaGVlbDogV2hlZWxDb21wb25lbnQ7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTGl2ZTogTGl2ZUNvbXBvbmVudDtcclxuICAgIFRyYW5zaXRpb246IFRyYW5zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduQ29tcG9uZW50O1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsIGludGVybmFsIGV2ZW50cy5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcclxuaW50ZXJmYWNlIEV2ZW50TWFwIHtcclxuICAgICdtb3VudGVkJzogKCkgPT4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHZvaWQ7XHJcbiAgICAncmVhZHknOiAoKSA9PiB2b2lkO1xyXG4gICAgJ2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIic6IChTbGlkZTogU2xpZGVDb21wb25lbnQsIGU6IE1vdXNlRXZlbnQpID0+IHZvaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkO1xyXG4gICAgJ21vdmUnOiAoaW5kZXg6IG51bWJlciwgcHJldjogbnVtYmVyLCBkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzdDogbnVtYmVyKSA9PiB2b2lkO1xyXG4gICAgJ21vdmVkJzogKGluZGV4OiBudW1iZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyLCBwcmV2OiBudW1iZXIsIGRlc3Q6IG51bWJlcikgPT4gdm9pZDtcclxuICAgICdhYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aXZlJzogKFNsaWRlOiBTbGlkZUNvbXBvbmVudCkgPT4gdm9pZDtcclxuICAgICdpbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhY3RpdmUnOiAoU2xpZGU6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ2aXNpYmxlJzogKFNsaWRlOiBTbGlkZUNvbXBvbmVudCkgPT4gdm9pZDtcclxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInaGlkZGVuJzogKFNsaWRlOiBTbGlkZUNvbXBvbmVudCkgPT4gdm9pZDtcclxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIncmVmcmVzaCc6ICgpID0+IHZvaWQ7XHJcbiAgICAndXBkYXRlZCc6IChvcHRpb25zOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgT3B0aW9ucykgPT4gdm9pZDtcclxuICAgICdyZXNpemUnOiAoKSA9PiB2b2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcclxuICAgICdyZXNpemVkJzogKCkgPT4gdm9pZDtcclxuICAgICdkcmFnJzogKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIpID0+IHZvaWQ7XHJcbiAgICAnZHJhZ2dpbmcnOiAoKSA9PiB2b2lkO1xyXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICdkcmFnZ2VkJzogKCkgPT4gdm9pZDtcclxuICAgICdzY3JvbGwnOiAoKSA9PiB2b2kiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZDtcclxuICAgICdzY3JvbGxlZCc6ICgpID0+IHZvaWQ7XHJcbiAgICAnb3ZlcmZsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm93JzogKG92ZXJmbG93OiBib29sZWFuKSA9PiB2b2lkO1xyXG4gICAgJ2Rlc3Ryb3knIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogKCkgPT4gdm9pZDtcclxuICAgICdhcnJvd3M6bW91bnRlZCc6IChwcmV2OiBIVE1MIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J1dHRvbkVsZW1lbnQsIG5leHQ6IEhUTUxCdXR0b25FbGVtZW50KSA9PiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcclxuICAgICdhcnJvd3M6dXBkYXRlZCc6IChwcmV2OiBIVE1MQnV0dG9uRWxlbWVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIG5leHQ6IEhUTUxCdXR0b25FbGVtZW50LCBwcmV2SW5kZXg6IG51bWJlciwgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieHRJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xyXG4gICAgJ3BhZ2luYXRpb246bW91bnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWQnOiAoZGF0YTogUGFnaW5hdGlvbkRhdGEsIGl0ZW06IFBhZ2luYXRpb25JdGVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIikgPT4gdm9pZDtcclxuICAgICdwYWdpbmF0aW9uOnVwZGF0ZWQnOiAoZGF0YTogUGFnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb25EYXRhLCBwcmV2OiBQYWdpbmF0aW9uSXRlbSwgY3VycjogUGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpb25JdGVtKSA9PiB2b2lkO1xyXG4gICAgJ25hdmlnYXRpb246bW91bnRlZCc6IChzcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWRlczogU3BsaWRlW10pID0+IHZvaWQ7XHJcbiAgICAnYXV0b3BsYXk6cGxheSc6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoKSA9PiB2b2lkO1xyXG4gICAgJ2F1dG9wbGF5OnBsYXlpbmcnOiAocmF0ZTogbnVtYiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlcikgPT4gdm9pZDtcclxuICAgICdhdXRvcGxheTpwYXVzZSc6ICgpID0+IHZvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlkO1xyXG4gICAgJ2xhenlsb2FkOmxvYWRlZCc6IChpbWc6IEhUTUxJbWFnZUVsZW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBTbGlkZTogU2xpZGVDb21wb25lbnQpID0+IHZvaWQ7XHJcbn1cblxuLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKiBDYXN0cyBUIHRvIFUuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbmRlY2xhcmUgdHlwZSBDYXN0PFQsIFU+ID0gVCBleHRlbmRzIFUgPyBUIDogVTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbi8qKlxyXG4gKiBNYWtlcyB0aGUgVCBlYXN5IHRvIHJlYWQuXHJcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuZGVjbGFyZSB0eXBlIFJlc29sdmU8VD4gPSB7XHJcbiAgICBbSyBpbiBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2YgVF06IFRbS107XHJcbn0gJiB1bmtub3duO1xyXG4vKipcclxuICogUHVzaGVzIFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvIHR1cGxlIFQuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhcmUgdHlwZSBQdXNoPFQgZXh0ZW5kcyBhbnlbXSwgVSA9IGFueT4gPSBbLi4uVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIFVdO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgZmlyc3QgdHlwZSBvZiB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHR1cGxlLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmRlY2xhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5cGUgSGVhZDxUIGV4dGVuZHMgYW55W10+ID0gKCguLi5hcmdzOiBUKSA9PiBhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KSBleHRlbmRzIChhcmc6IGluZmVyIEEsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gQSA6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgZmlyc3QgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZnJvbSB0aGUgdHVwbGUgVC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuZGVjbGFyZSB0eXBlIFNoaWZ0PFQgZXh0ZW5kcyBhbnlbXT4gPSAoKC4uLmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdzOiBUKSA9PiBhbnkpIGV4dGVuZHMgKGFyZzogYW55LCAuLi5hcmdzOiBpbmZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQSkgPT4gYW55ID8gQSA6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIE4gdHlwZXMgZnJvbSB0aGUgdHVwbGUgVC5cclxuICpcclxuICogQGludGVybmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbFxyXG4gKi9cclxuZGVjbGFyZSB0eXBlIFNoaWZ0TjxUIGV4dGVuZHMgYW55W10sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBOIGV4dGVuZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgMDogVDtcclxuICAgIDE6IFNoaWZ0TjxTaGlmdDxUPiwgTiwgUHVzaDxDPj4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xyXG59W0NbJ2xlbmd0aCddIGV4dGVuZHMgTiA/IDAgOiAxXSBleHRlbmRzIGluZmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBBID8gQ2FzdDxBLCBhbnlbXT4gOiBuZXZlcjtcblxuLyoqXHJcbiAqIFRoZSBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlIGZvciB0aGUgU2xpZGVzIGNvbXBvbmVudC5cclxuICpcclxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFNsaWRlc0NvbXBvbmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIHVwZGF0ZSgpOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIHJlZ2lzdGVyKHNsaWRlOiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHNsaWRlSW5kZXg6IG51bWJlcik6IHZvaWQ7XHJcbiAgICBnZXQoZXhjbHVkZUNsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXM/OiBib29sZWFuKTogU2xpZGVDb21wb25lbnRbXTtcclxuICAgIGdldEluKHBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBudW1iZXIpOiBTbGlkZUNvbXBvbmVudFtdO1xyXG4gICAgZ2V0QXQoaW5kZXg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIpOiBTbGlkZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuICAgIGFkZChzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGU6IHN0cmluZyB8IEVsZW1lbnQgfCBBcnJheTxzdHJpbmcgfCBFbGVtZW50PiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4PzogbnVtYmVyKTogdm9pZDtcclxuICAgIHJlbW92ZShzZWxlY3RvcjogU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlTWF0Y2hlcik6IHZvaWQ7XHJcbiAgICBmb3JFYWNoKGl0ZXJhdGVlOiBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSXRlcmF0ZWUsIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuKTogdm9pZDtcclxuICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWx0ZXIobWF0Y2hlcjogU2xpZGVNYXRjaGVyKTogU2xpZGVDb21wb25lbnRbXTtccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzdHlsZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1c2VDb250YWluZXI/OiBib29sZWFuKTogdm9pZDtcclxuICAgIGdldExlbmd0aChlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hjbHVkZUNsb25lcz86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBpc0Vub3VnaCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogYm9vbGVhbjtcclxufVxyXG4vKipcclxuICogVGhlIGl0ZXJhdGVlIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgU2xpZGVzLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIHR5cGUgU2xpZGVzSXRlcmF0ZWUgPSAoU2xpZGU6IFNsaWRlQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCwgaW5kZXg6IG51bWJlciwgU2xpZGVzOiBTbGlkZUNvbXBvbmVudFtdKSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4gdm9pZDtcclxuLyoqXHJcbiAqIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZm9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZXMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmUgdHlwZSBTbGlkZXNQcmVkaWNhdGUgPSAoU2xpZGU6IFNsaWRlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgaW5kZXg6IG51bWJlciwgU2xpZGVzOiBTbGlkZUNvbXBvbmVudFtdKSA9PiBhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5O1xyXG4vKipcclxuICogVGhlIHR5cGUgZm9yIGZpbHRlcmluZyBTbGlkZUNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnQgb2JqZWN0cy5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuZGVjbGFyZSB0eXBlIFNsaWRlTWF0Y2hlciA9IG51bWJlciB8IG51bWJlcltdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IHN0cmluZyB8IFNsaWRlc1ByZWRpY2F0ZTtcblxuLyoqXHJcbiAqIFRoZSB0eXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBmb3IgYW4gRXZlbnRUYXJnZXQgb3IgYW4gYXJyYXkgd2l0aCBFdmVudFRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgb2JqZWN0cy5cclxuICpcclxuICogQHNpbmNlIDQuMC4wXHJcbiAqL1xyXG5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFyZSB0eXBlIEV2ZW50VGFyZ2V0cyA9IEV2ZW50VGFyZ2V0IHwgRXZlbnRUYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0W107XHJcbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGVyIG9iamVjdC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuaW50ZXJmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcclxuICAgIGJpbmQodGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldDogRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2s6IEFueUZ1bmN0aW9uLCBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKTogdm9pZDtcclxuICAgIHVuYmluZCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEV2ZW50VGFyZ2V0W10sIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fjaz86IEFueUZ1bmN0aW9uKTogdm9pZDtcclxuICAgIGRpc3BhdGNoPFQ+KHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW5nLCBkZXRhaWw/OiBUKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBkZXN0cm95KCk6IHZvaWQ7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gcHJvdmlkZSBtZXRob2RzIHRvIHN1YnNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYmUgbmF0aXZlIGV2ZW50cy5cclxuICpcclxuICogQHNpbmNlIDQuMC4wXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAY29uc3RydWN0b3JcclxuICpcclxuICogQHJldHVybiBBbiBFdmVudEJpbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0LlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBFdmVudEJpbmRlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTogRXZlbnRCaW5kZXJPYmplY3Q7XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBleHRlbmRzIEV2ZW50QmluZGVyT2JqZWN0IHtcclxuICAgIG9uPEsgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5b2YgRXZlbnRNYXA+KGV2ZW50OiBLLCBjYWxsYmFjazogRXZlbnRNYXBbS10pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZDtcclxuICAgIG9uKGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjazogQW55RnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgb2ZmPEsgZXh0ZW5kcyBrZXlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgRXZlbnRNYXA+KGV2ZW50czogSyB8IEtbXSB8IHN0cmluZyB8IHN0cmluZ1tdKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQ7XHJcbiAgICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBLLCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEV2ZW50TWFwW0tdPik6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgYnVzOiBEb2N1bWVudEZyYWdtZW50OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxufVxyXG4vKipcclxuICogVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3ZpZGVzIGludGVyZmFjZSBmb3IgaW50ZXJuYWwgYW5kIG5hdGl2ZSBldmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQGNvbnN0cnVjdG9yXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKlxyXG4gKiBAcGFyYW0gU3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxyXG4gKiBAcmV0dXJuIEEgY29sbGVjdGlvbiBvZiBpbnRlcmZhY2UgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5cclxuICovXHJcbmRlY2xhcmUgZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZT86IFNwbGlkZSk6IEV2ZW50SW50ZXJmYWNlT2JqZWN0O1xuXG4vKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSByZXR1cm5pbmcgdmFsdWUgb2YgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZXF1ZXN0SW50ZXJ2YWwuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbmludGVyZmFjZSBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2Uge1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHN0YXJ0KHJlc3VtZT86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgcGF1c2UoKTogdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQ7XHJcbiAgICByZXdpbmQoKTogdm9pZDtcclxuICAgIGNhbmNlbCgpOiB2b2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcclxuICAgIHNldChpbnRlcnZhbDogbnVtYmVyKTogdm9pZDtcclxuICAgIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BhdXNlZCgpOiBib29sZWFuO1xyXG59XHJcbi8qKlxyXG4gKiBSZXF1ZXN0cyBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwgbGlrZSB0aGUgbmF0aXZlIGBzZXRJbnRlcnZhbCgpYCB3aXRoIHVzaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC5cclxuICpcclxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMFxyXG4gKlxyXG4gKiBAcGFyYW0gaW50ZXJ2YWwgICAtIFRoZSBpbnRlcnZhbCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxyXG4gKiBAcGFyYW0gb25JbnRlcnZhbCAtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgY2FsbGJhY2sgZmlyZWQgb24gZXZlcnkgaW50ZXJ2YWwuXHJcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gb25VcGRhdGUgICAtIE9wdGlvbmFsLiBDYWxsZWQgb24gZXZlcnkgYW5pbWF0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBmcmFtZSwgdGFraW5nIHRoZSBwcm9ncmVzcyByYXRlLlxyXG4gKiBAcGFyYW0gbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWl0ICAgICAgLSBPcHRpb25hbC4gTGltaXRzIHRoZSBudW1iZXIgb2YgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsLlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBSZXF1ZXN0SW50ZXJ2YWwoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ludGVydmFsOiBudW1iZXIsIG9uSW50ZXJ2YWw6ICgpID0+IHZvaWQsIG9uVXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZT86IChyYXRlOiBudW1iZXIpID0+IHZvaWQsIGxpbWl0PzogbnVtYmVyKTogUmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlc3RJbnRlcnZhbEludGVyZmFjZTtcblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIGZvciB0aGUgU3RhdGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXHJcbiAqL1xyXG5pbnRlcmZhY2UgU3RhdGVPYmplY3Qge1xyXG4gICAgc2V0KHN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTogbnVtYmVyKTogdm9pZDtcclxuICAgIGlzKHN0YXRlczogbnVtYmVyIHwgbnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcltdKTogYm9vbGVhbjtcclxufVxyXG4vKipcclxuICogVGhlIGZ1bmN0aW9uIHBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWRpbmcgYSBzdXBlciBzaW1wbGUgc3RhdGUgc3lzdGVtLlxyXG4gKlxyXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQHBhcmFtIGluaXRpYWxTdGF0ZSAtIFNwZWNpZmllcyB0aGUgaW5pdGlhbCBzdGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXHJcbiAqL1xyXG5kZWNsYXJlIGZ1bmN0aW9uIFN0YXRlKGluaXRpYWxTdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlcik6IFN0YXRlT2JqZWN0O1xuXG4vKipcclxuICogVGhlIGludGVyZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgZm9yIHRoZSByZXR1cm5pbmcgdmFsdWUgb2YgdGhlIFJlcXVlc3RJbnRlcnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaHJvdHRsZUluc3RhbmNlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24ge1xyXG4gICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxufVxyXG4vKipcclxuICogUmV0dXJucyB0aGUgdGhyb3R0bGVkIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5cclxuICpcclxuICogQHBhcmFtIGZ1bmMgICAgIC0gQSBmdW5jdGlvbiB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhyb3R0bGUuXHJcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIE9wdGlvbmFsLiBUaHJvdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxyXG4gKlxyXG4gKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHJcbmRlY2xhcmUgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIFRocm90dGxlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oZnVuYzogRiwgZHVyYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uPzogbnVtYmVyKTogVGhyb3R0bGVJbnN0YW5jZTxGPjtcblxuLyoqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgZnJvbnRlbmQgY2xhc3MgZm9yIHRoZSBTcGxpZGUgc2xpZGVyLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIGNsYXNzIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBkZWZhdWx0IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zIGZvciBhbGwgU3BsaWRlIGluc3RhbmNlcy5cclxuICAgICAqL1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHN0YXRpYyBkZWZhdWx0czogT3B0aW9ucztcclxuICAgIC8qKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoZSBjb2xsZWN0aW9uIG9mIHN0YXRlIG51bWJlcnMuXHJcbiAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzdGF0aWMgcmVhZG9ubHkgU1RBVEVTOiB7XHJcbiAgICAgICAgQ1JFQVRFRDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcjtcclxuICAgICAgICBNT1VOVEVEOiBudW1iZXI7XHJcbiAgICAgICAgSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidETEU6IG51bWJlcjtcclxuICAgICAgICBNT1ZJTkc6IG51bWJlcjtcclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgU0NST0xMSU5HOiBudW1iZXI7XHJcbiAgICAgICAgRFJBR0dJTkc6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgICAgREVTVFJPWUVEOiBudW1iZXI7XHJcbiAgICB9O1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogVGhlIHJvb3QgZWxlbWVudCB3aGVyZSB0aGUgU3BsaWRlIGlzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBsaWVkLlxyXG4gICAgICovXHJcbiAgICByZWFkb25seSByb290OiBIVE1MRWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQ7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFdmVudEJ1c09iamVjdCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LlxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBldmVudDogRXZlbnRJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlT2JqZWN0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sbGVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gb2YgYWxsIGNvbXBvbmVudCBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZG9ubHkgQ29tcG9uZW50czogQ29tcG9uZW50cztcclxuICAgIC8qKlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFRoZSBTdGF0ZU9iamVjdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fkb25seSBzdGF0ZTogU3RhdGVPYmplY3Q7XHJcbiAgICAvKipcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBhcnJheSB3aXRoIFN5bmNUYXJnZXQgb2JqZWN0cyBmb3Igc3BsaWRlIGluc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZXMgdG8gc3luYyB3aXRoLlxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlczogU3luY1RhcmdldFtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cnJlbnQgb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHkgX287XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgY29tcG9uZW50cy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfQztcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGV4dGVuc2lvbnMuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICovXHJcbiAgICBwcml2YXRlIF9FO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIFRyYW5zaXRpb24gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBfVDtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNwbGlkZSBjb25zdHJ1Y3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHRhcmdldCAgLSBUaGUgc2VsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdG9yIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQsIG9yIHRoZSBlbGVtZW50IGl0c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGYuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBbiBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpdGggb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IodGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQsIG9wdGlvbnM/OiBPcHRpb25zKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIHRoZSBpbnN0YW5jZS5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKlxyXG4gICAgICogQHBhcmFtIEV4dGVuc2lvbnMgLSBPcHRpb25hbC4gQW4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCB3aXRoIGV4dGVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0gVHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBPcHRpb25hbC4gQSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHJldHVybiBgdGhpc2BcclxuICAgICAqL1xyXG4gICAgbW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRDb25zdHJ1Y3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+LCBUcmFuc2l0aW9uPzogQ29tcG9uZW50Q29uc3RydWN0b3IpOiB0aGlzO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogU3luY3MgdGhlIHNsaWRlciB3aXRoIHRoZSBwcm92aWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25lLlxyXG4gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYG1vdW50KClgLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogYGBgdHNcclxuICAgICAqIHZhciBwcmltYXJ5ICAgPSBuZXcgU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xyXG4gICAgICogdmFyIHNlY29uZGFyeSA9IG5ldyBTcGxpZGUoKTtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKlxyXG4gICAgICogcHJpbWFyeS5zeW5jKCBzZWNvbmRhcnkgKTtcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBwcmltYXJ5Lm1vdW50KCk7XHJcbiAgICAgKiBzZWNvbmRhcnkubW91bnQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3BsaWRlIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgU3BsaWRlIGluc3RhbmNlIHRvIHN5bmMgd2l0aC5cclxuICAgICAqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBgdGhpc2BcclxuICAgICAqL1xyXG4gICAgc3luYyhzcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBTcGxpZGUpOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29udHJvbCBwYXR0ZXJuLlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXHJcbiAgICAgKiB8IFBhdHRlcm4gfCBEZXNjcmlwdGlvbiB8XHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogfC0tLXwtLS18XHJcbiAgICAgKiB8IGBpYCB8IEdvZXMgdG8gdGhlIHNsaWRlIGBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImAgfFxyXG4gICAgICogfCBgJyske2l9J2AgfCBJbmNyZW1lbnRzIHRoZSBzbGlkZSBpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5kZXggYnkgYGlgIHxcclxuICAgICAqIHwgYCctJHtpfSdgIHwgRGVjcmVtZW50cyB0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImhlIHNsaWRlIGluZGV4IGJ5IGBpYCB8XHJcbiAgICAgKiB8IGAnPidgIHwgR29lcyB0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm8gdGhlIG5leHQgcGFnZSB8XHJcbiAgICAgKiB8IGAnPCdgIHwgR29lcyB0byB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXZpb3VzIHBhZ2UgfFxyXG4gICAgICogfCBgPiR7aX1gIHwgR29lcyB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInBhZ2UgYGlgIHxcclxuICAgICAqXHJcbiAgICAgKiBJbiBtb3N0IGNhc2VzLCBgJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI+J2AgYW5kIGAnPCdgIG5vdGF0aW9ucyBhcmUgZW5vdWdoIHRvIGNvbnRyb2wgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXJcclxuICAgICAqIGJlY2F1c2UgdGhleSByZXNwZWN0IGBwZXJQYWdlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIGBwZXJNb3ZlYCBvcHRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqIHZhciBzcGxpZGUgPSBuZXcgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAxOlxyXG4gICAgICogc3BsaWRlLmdvKCAxICk7XHJcbiAgICAgKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIC8vIEluY3JlbWVudHMgdGhlIGluZGV4OlxyXG4gICAgICogc3BsaWRlLmdvKCAnKzIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyApO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIG5leHQgcGFnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImU6XHJcbiAgICAgKiBzcGxpZGUuZ28oICc+JyApO1xyXG4gICAgICpcclxuICAgICAqIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAvLyBHb2VzIHRvIHRoZSBwYWdlIDI6XHJcbiAgICAgKiBzcGxpZGUuZ28oICc+MicgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgLSBBIGNvbnRyb2wgcGF0dGVybi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBgdGhpc2BcclxuICAgICAqL1xyXG4gICAgZ28oY29udHJvbDogbnVtYmVyIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZyk6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXZlbnQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIGBgYHRzXHJcbiAgICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBMaXN0ZW5zIHRvIGEgc2luZ2xlIGV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVudDpcclxuICAgICAqIHNwbGlkZS5vbiggJ21vdmUnLCBmdW5jdGlvbigpIHt9ICk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIC8vIExpc3RlbnMgdG8gbXVsdGlwbGUgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0czpcclxuICAgICAqIHNwbGlkZS5vbiggJ21vdmUgcmVzaXplJywgZnVuY3Rpb24oKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge30gKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBBcHBlbmRzIGEgbmFtZXNwYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZTpcclxuICAgICAqIHNwbGlkZS5vbiggJ21vdmUubXlOYW1lc3BhY2UgcmVzaXplLm0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieU5hbWVzcGFjZScsIGZ1bmN0aW9uKCkge30gKTtcclxuICAgICAqIGBgYFxyXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVc2UgYSBkb3QoLikgdG8gYXBwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCBhIG5hbWVzcGFjZS5cclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYFxyXG4gICAgICovXHJcbiAgICBvbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhldmVudHM6IEssIGNhbGxiYWNrOiBFdmVudE1hcFtLXSk6IHRoaXM7XHJcbiAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbik6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RlcmVkIGFsbCBoYW5kbGVycyBmb3IgdGhlIHNwZWNpZmllZCBldmVudCBvciBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRzLlxyXG4gICAgICogSWYgeW91IHdhbnQgdG8gb25seSByZW1vdmUgYSBwYXJ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ljdWxhciBoYW5kbGVyLCB1c2UgbmFtZXNwYWNlIHRvIGlkZW50aWZ5IGl0LlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLyBSZW1vdmVzIGFsbCBoYW5kbGVycyBhc3NpZ25lZCB0byAibW92ZSI6XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICogc3BsaWRlLm9mZiggJ21vdmUnICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE9ubHkgcmVtb3ZlcyBoYW5kbGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc3BlY2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImllZCBuYW1lc3BhY2U6XHJcbiAgICAgKiBzcGxpZGUub2ZmKCAnbW92ZS5teU5hbWVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInBhY2UnICk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50cyAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZXMuIFVzZSBhIGRvdCguKSB0byBhcHBlbmQgYSBuYW1lc3BhY2UuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIG9mZjxLICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIGtleW9mIEV2ZW50TWFwPihldmVudHM6IEsgfCBLW10gfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgc3RyaW5nW10pOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXZlbnQgYW5kIHRyaWdnZXJzIHJlZ2lzdGVyZWQgaGFuZGxlcnMuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUgdG8gZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQuXHJcbiAgICAgKiBAcGFyYW0gYXJncyAgLSBPcHRpb25hbC4gQW55IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8gaGFuZGxlcnMuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIGVtaXQ8SyBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlbnQ6IEssIC4uLmFyZ3M6IFBhcmFtZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJzPEV2ZW50TWFwW0tdPik6IHRoaXM7XHJcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcnRzIGEgc2xpZGUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHRzXHJcbiAgICAgKiB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZSA9IG5ldyBTcGxpZGUoKTtcclxuICAgICAqIHNwbGlkZS5tb3VudCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBBZGRzIHRoZSBzbGlkZSBieSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkhUTUw6XHJcbiAgICAgKiBzcGxpZGUuYWRkKCAnPGxpPjwvbGk+ICk7XHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIC8vIG9yIGFkZHMgdGhlIGVsZW1lbnQ6XHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3BsaWRlLmFkZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpJyApICk7XHJcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNsaWRlcyAtIEEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlIGVsZW1lbnQsIGFuIEhUTUwgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSwgb3IgYW4gYXJyYXkgd2l0aCB0aGVtLlxyXG4gICAgICogQHBhcmFtIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCAgLSBPcHRpb25hbC4gQW4gaW5kZXggdG8gaW5zZXJ0IGEgc2xpZGUgYXQuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICpcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGQoc2xpZGVzOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCBIVE1MRWxlbWVudD4sIGluZGV4PzogbnVtYmVyKTogdGhpcztcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcclxuICAgICAqIFJlbW92ZXMgc2xpZGVzIHRoYXQgbWF0Y2ggdGhlIG1hdGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXHJcbiAgICAgKiB0aGF0IGNhbiBiZSBhbiBpbmRleCwgYW4gYXJyYXkgd2l0aCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaWNlcywgYSBzZWxlY3Rvciwgb3IgYW4gaXRlcmF0ZWUgZnVuY3Rpb24uXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEBwYXJhbSBtYXRjaGVyIC0gQW4gaW5kZXgsIGFuIGFycmF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXRoIGluZGljZXMsIGEgc2VsZWN0b3Igc3RyaW5nLCBvciBhbiBpdGVyYXRlZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZShtYXRjaGVyOiBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VNYXRjaGVyKTogdGhpcztcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyIHR5cGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHR5cGUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSB0eXBlIHRvIHRlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VgIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGN1cnJlbnQgb25lLCBvciBvdGhlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzKHR5cGU6IHN0cmluZyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWZyZXNoZXMgdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpc2BcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuICAgIHJlZnJlc2goKTogdGhpcztcclxuICAgIC8qKlxyXG4gICAgICogRGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3lzIHRoZSBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGV0ZWx5IC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgU3BsaWRlIHdpbGwgbm90IHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1vdW50IHRoZSBzbGlkZXIgYnkgYnJlYWtwb2ludHMuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3koYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBsZXRlbHk/OiBib29sZWFuKTogdGhpcztcclxuICAgIC8qKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFJldHVybnMgb3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3Qgd2l0aCB0aGUgbGF0ZXN0IG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBnZXQgb3B0aW9ucygpOiBPcHRpb25zO1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWVyZ2VzIG9wdGlvbnMgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBhbmQgZW1pdHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2B1cGRhdGVkYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMgLSBBbiBvYmplY3Qgd2l0aCBuZXcgb3B0aW9ucy5cclxuICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNldCBvcHRpb25zKG9wdGlvbnM6IE9wdGlvbnMpO1xyXG4gICAgLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB3aXRob3V0IGNsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMuXHJcbiAgICAgKi9cclxuICAgIGdldCBsZW5ndGgoKTogbnVtYmVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYWN0aXZlIHNsaWRlIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBhY3RpdmUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZXQgaW5kZXgoKTogbnVtYmVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIGNvbnRlbnQgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhY2ggc2xpZGUuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSBTbGlkZUNvbnRlbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEhUTUwgb3IgdGV4dCBmb3IgZWFjaCBzbGlkZS5cclxuICAgICAqL1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWw/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvZiBzdHlsZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3BsaWRlIGlzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBsaWVkLlxyXG4gICAgICovXHJcbiAgICBzdHlsZXM/OiBSZWNvcmQ8c3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc3RyaW5nIHwgbnVtYmVyPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0aW9uIG9mIGF0dHJpYnV0ZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBpcyBhcHBsaWVkLlxyXG4gICAgICovXHJcbiAgICBhdHRycz86IFJlY29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcclxufVxyXG4vKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBjb25maWcgb2YgdGhlIHJlbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlci5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFJlbmRlcmVyQ29uZmlnIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgSUQuXHJcbiAgICAgKi9cclxuICAgIGlkPzogc3RyaW5nO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgY2xhc3MgZm9yIHRoZSByb290IGVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LlxyXG4gICAgICovXHJcbiAgICByb290Q2xhc3M/OiBzdHJpbmc7XHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXHJcbiAgICAgKiBUaGUgdGFnIHVzZWQgZm9yIHRoZSBsaXN0IGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxyXG4gICAgICovXHJcbiAgICBsaXN0VGFnPzogc3RyaW5nO1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogVGhlIHRhZyB1c2VkIGZvciBlYWNoIHNsaWRlLlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xyXG4gICAgc2xpZGVUYWc/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVuZGVyIGFycm93cyBvciBub3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICovXHJcbiAgICBhcnJvd3M/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogS2VlcHMgdGhlIHNsaWRlciBoaWRkZW4uXHJcbiAgICAgKi9cclxuICAgIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRkZW4/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3aGV0aGVyIHRvIHdyYXAgdGhlIHRyYWNrIGJ5IHRoZSBzbGlkZXIgZWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBzbGlkZXI/OiBib29sZWFuO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgSFRNTCByZW5kZXJlZCBiZWZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHRoZSBzbGlkZXIgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgYmVmb3JlU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcj86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsIEhUTUwgcmVuZGVyZWQgYWZ0ZXIgdGhlIHNsaWRlciBlbGVtZW50LlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xyXG4gICAgYWZ0ZXJTbGlkZXI/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBUaGUgYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkIGJlZm9yZSB0aGUgdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVRyYWNrPzogc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgSFRNTCByZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZWQgYWZ0ZXIgdGhlIHRyYWNrIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZnRlclRyYWNrPzogc3RyaW5nO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgY2xhc3MgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIGdlbmVyYXRlIHN0YXRpYyBIVE1MIG9mIHRoZSBzbGlkZXIgZm9yIHRoZSBmaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgdmlldy5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjbGFzcyBTcGxpZGVSZW5kZXJlciB7XHJcbiAgICAvKipcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZW1vdmVzIGEgc3R5bGUgZWxlbWVudCBhbmQgY2xvbmVzLlxyXG4gICAgICpccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBAcGFyYW0gc3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICovXHJcbiAgICBzdGF0aWMgY2xlYW4oc3BsaWRlOiBTcGxpZGUpOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgc2xpZGUgY29udGVudHMuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogU3RvcmVzIGRhdGEgb2Ygc2xpZGVzLlxyXG4gICAgICovXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcHJpdmF0ZSByZWFkb25seSBzbGlkZXM7XHJcbiAgICAvKipcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgRGlyZWN0aW9uIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUgcmVhZG9ubHkgRGlyZWN0aW9uO1xyXG4gICAgLyoqXHJcbiAgICAgKiBIb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgdGhlIFN0eWxlIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZWFkb25seSBTdHlsZTtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIG9wdGlvbnMgZm9yIHRoaXMgaW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGlkZXIgSUQuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkO1xyXG4gICAgLyoqXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQW4gYXJyYXkgd2l0aCBvcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pbnRzO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogVGhlIFNwbGlkZVJlbmRlcmVyIGNvbnN0cnVjdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGVudHMgLSBBbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBzbGlkZSBjb250ZW50cy4gRWFjaCBpdGVtIG11c3QgYmUgYW4gSFRNTCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYSBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsLiBTbGlkZXIgb3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSBjb25maWcgICAtIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0aWMgZGVmYXVsdCBvcHRpb25zLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRzIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIHNsaWRlci4gUGFzcyBgU3BsaWRlLmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhdWx0c2AgaWYgeW91IGFyZSB1c2luZyBpdC5cclxuICAgICAqL1xyXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0cnVjdG9yKGNvbnRlbnRzOiBzdHJpbmdbXSB8IFNsaWRlQ29udGVudFtdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucz86IE9wdGlvbnMsIGNvbmZpZz86IFJlbmRlcmVyQ29uZmlnLCBkZWZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdHM/OiBPcHRpb25zKTtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbml0O1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgc2xpZGVzLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgcHJpdmF0ZSBpbml0U2xpZGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmVnaXN0ZXJzIHN0eWxlcyBmb3IgdGhlIHJvb3QgZWxlbWVudC5cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cclxuICAgIHByaXZhdGUgcmVnaXN0ZXJSb290U3R5bGVzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogUmVnaXN0ZXJzIHN0eWxlcyBmb3IgdGhlIHRyYWNrIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyVHJhY2tTdHlsZXM7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0aGUgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3QgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWdpc3RlckwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0U3R5bGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3Igc2xpZGVzIGFuZCBjbG9uZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHJlZ2lzdGVyU2xpZGVTdHlsZXM7XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgbXVsdGlwbGUgYHRyYW5zbGF0ZVhgIGZvciB0aGUgbGlzdCBlbGVtZW50LlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJyZWFrcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBBIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgd2l0aCBtdWx0aXBsZSB0cmFuc2xhdGUgZnVuY3Rpb25zLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgcHJpdmF0ZSBidWlsZFRyYW5zbGF0ZTtcclxuICAgIC8qKlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFJldHVybnMgb2Zmc2V0IGZvciB0aGUgbGlzdCBlbGVtZW50LlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBnYXBzIGJlY2F1c2UgaXQgY2FuIG5vdCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgY29udmVydGVkIGludG8gcGVyY2VudC5cclxuICAgICAqXHJcbiAgICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG9mZnNldC5cclxuICAgICAqL1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHByaXZhdGUgY3NzT2Zmc2V0Q2xvbmVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmV0dXJucyBvZmZzZXQgZm9yIGNlbnRlcmluZyB0aGUgYWN0aXZlIHNsaWRlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqXHJcbiAgICAgKiBOb3RlOlxyXG4gICAgICogKCAxMDAlICsgZ2FwICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8gcGVyUGFnZSAtIGdhcFxyXG4gICAgICogMTAwJSAvIHBlclBhZ2UgKyBnYXAgLyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZSAtIGdhcDtcclxuICAgICAqIDUwJSAvIHBlclBhZ2UgKyAoIGdhcCAvIHBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JQYWdlIC0gZ2FwICkgLyAyO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHJldHVybiBUaGUgb2Zmc2V0LlxyXG4gICAgICovXHJcbiAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpdmF0ZSBjc3NPZmZzZXRDZW50ZXI7XHJcbiAgICAvKipcclxuICAgICAqIFJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm5zIG9mZnNldCBmb3IgZ2Fwcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG9mZnNldCBhcyBgY2FsYygpYC5ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3NzT2Zmc2V0R2FwcztcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIFJlc29sdmVzIHRoZSBwcm9wIGZvciB0aGUgY3VycmVudCBkaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGFuZCBjb252ZXJ0cyBpdCBpbnRvIHRoZSBLZWJhYiBjYXNlLlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXHJcbiAgICAgKiBAcGFyYW0gcHJvcCAtIEEgcHJvcGVydHkgbmFtZSB0byByZXNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgcHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnR5IG5hbWUgaW4gdGhlIEtlYmFiIGNhc2UuXHJcbiAgICAgKi9cclxuICAgIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncml2YXRlIHJlc29sdmU7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgcGFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpbmcgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSByaWdodCAgIC0gRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldGVybWluZXMgd2hldGhlciB0byBnZXQgcGFkZGluZyByaWdodCBvciBsZWZ0LlxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFBhZGRpbmcgaW4gdGhlIENTUyBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ybWF0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc1BhZGRpbmc7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGhlaWdodCBvZiB0aGUgdHJhY2sgZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIGNzc1RyYWNrSGVpZ2h0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZWlnaHQgcHJvdmlkZWQgdGhvdWdoIG9wdGlvbnMgaW4gdGhlIENTUyBmb3JtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybWF0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc0hlaWdodDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcclxuICAgICAqIFJldHVybnMgd2lkdGggb2YgZWFjaCBzbGlkZSBpbiB0aGUgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFdpZHRoIGluIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgQ1NTIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjc3NTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXaWR0aDtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBoZWlnaHQgb2YgZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggc2xpZGUgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwcml2YXRlIGNzc1NsaWRlSGVpZ2h0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJucyB3aWR0aCBvciBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JtYXQsIGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBAcmV0dXJuIFdpZHRoIG9yIGhlaWdodCBpbiB0aGUgQ1NTIGZvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3NzU2xpZGVTaXplO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYXNwZWN0UmF0aW8gdmFsdWUgdG8gc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXVsYXRlIHRoZSBgaGVpZ2h0UmF0aW9gIG9wdGlvbi5cclxuICAgICAqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxyXG4gICAgICpcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIGFzcGVjdFJhdGlvIGluIHRoZSBDU1MgZm9ybWF0LlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG4gICAgcHJpdmF0ZSBjc3NBc3BlY3RSYXRpbztcclxuICAgIC8qKlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEJ1aWxkcyB0aGUgY3NzIHZhbHVlIGJ5IHRoZSBwcm92aWRlZCB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIHVuaXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gQSB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUuXHJcbiAgICAgKiBAcGFyYW0gdW5pdCAgLSBBIENTUyB1bml0LlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXHJcbiAgICAgKiBAcmV0dXJuIEEgYnVpbHQgdmFsdWUgZm9yIGEgQ1NTIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBidWlsZENzc1ZhbHVlO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogUGFyc2VzIHRoZSBDU1MgdmFsdWUgaW50byBudW1iZXIgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCB1bml0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIEEgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlIHRvIHBhcnNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQW4gb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCB3aXRoIHZhbHVlIGFuZCB1bml0LlxyXG4gICAgICovXHJcbiAgICBwcml2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSBwYXJzZUNzc1ZhbHVlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzIGFuZCBnZW5lcmF0ZSBvcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcnNlQnJlYWtwb2ludHM7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHNsaWRlIHdpZHRoIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBmaXhlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VgIGlmIHRoZSBzbGlkZSB3aWR0aCBpcyBmaXhlZCwgb3Igb3RoZXJ3aXNlIGBmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsc2VgLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlzRml4ZWRXaWR0aDtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgc2xpZGVyIHR5cGUgaXMgbG9vcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRydWVgIGlmIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgc2xpZGVyIHR5cGUgaXMgbG9vcCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICovXHJcbiAgICBwcml2YXRlIGlzTG9vcDtcclxuICAgIC8qKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENoZWNrcyBpZiB0aGUgYWN0aXZlIHNsaWRlIHNob3VsZCBiZSBjZW50ZXJlZCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGUgc2hvdWxkIGJlIGNlbnRlcmVkLCBvciBvdGhlcndpc2UgYGZhbHNlYC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNDZW50ZXI7XHJcbiAgICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGRpcmVjdGlvbiBpcyBUVEIgb3Igbm90LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpcyBUVEIsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcHJpdmF0ZSBpc1ZlcnRpY2FsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbGRzIGNsYXNzZXMgb2YgdGhlIHJvb3QgZWxlbWVudC5cclxuICAgICAqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogQHJldHVybiBDbGFzc2VzIGZvciB0aGUgcm9vdCBlbGVtZW50IGFzIGEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmdsZSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYnVpbGRDbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcztcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgcHJvdmlkZWQgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBhdHRycyAtIEFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBwcml2YXRlIGJ1aWxkQXR0cnM7XHJcbiAgICAvKipcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb252ZXJ0cyBwcm92aWRlZCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICpcclxuICAgICAqIEBwYXJhbSBzdHlsZXMgLSBBbiBvYmplY3Qgd2l0aCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkU3R5bGVzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogR2VuZXJhdGVzIEhUTUwgb2Ygc2xpZGVzIHdpdGggaW5zZXJ0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyBwcm92aWRlZCBjb250ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgSFRNTCBmb3IgYWxsIHNsaWRlcyBhbmQgY2xvbmVzLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgcHJpdmF0ZSByZW5kZXJTbGlkZXM7XHJcbiAgICAvKipcclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBBZGQgdGhlIGBiYWNrZ3JvdW5kYCBzdHlsZSBmb3IgdGhlIGNvdmVyIG1vZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZW50IC0gQSBzbGlkZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb3ZlcjtcclxuICAgIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEdlbmVyYXRlcyBjbG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBjb250ZW50cyAtIEFuIGFycmF5IHdpdGggU2xpZGVDb250ZW50IG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3RzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlQ2xvbmVzO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsb25lcyB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VuZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBBIG51bWJlciBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgY2xvbmVzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldENsb25lQ291bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYXJyb3dzIGFuZCB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdyYXBwZXIgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgSFRNTCBmb3IgYXJyb3dzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXJBcnJvd3M7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhbiBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3cgSFRNTC5cclxuICAgICAqIFNvbWUgYXR0cmlidXRlcyBhcmUgdGVtcG9yYXJ5LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIFNwbGlkZSBjaGFuZ2VzIHRoZW0gYWZ0ZXIgbW91bnQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEBwYXJhbSBwcmV2IC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBIVE1MIGZvciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXYgb3IgbmV4dCBhcnJvdy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZGVyQXJyb3c7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIEhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMIG9mIHRoZSBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdlbmVyYXRlZCBIVE1MLlxyXG4gICAgICovXHJcbiAgICBodG1sKCk6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2c7XHJcbn1cblxuZGVjbGFyZSBjb25zdCBFVkVOVF9NT1VOVEVEID0gIm1vdW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9SRUFEWSA9ICJyZWFkeSI7XHJcbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNsYXJlIGNvbnN0IEVWRU5UX01PVkUgPSAibW92ZSI7XHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX01PVkVEID0gIm1vdmVkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9DTEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0sgPSAiY2xpY2siO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0FDVElWRSA9ICJhY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9JTkFDVElWRSA9ICJpbmFjdGl2ZSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX1ZJU0lCTEUgPSAidmlzaWJsZSI7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0hJRERFTiA9ICJoaWRkZW4iO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xyXG5kZWNsYXJlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBFVkVOVF9VUERBVEVEID0gInVwZGF0ZWQiO1xyXG5kZWNsYXJlIGNvbnN0IEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9SRVNJWkUgPSAicmVzaXplIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9SRVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSVpFRCA9ICJyZXNpemVkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9EUkFHID0gImQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0RSQUdHRUQgPSAiZHJhZ2dlZCI7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGNvbnN0IEVWRU5UX1NDUk9MTCA9ICJzY3JvbGwiO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBFVkVOVF9TQ1JPTExFRCA9ICJzY3JvbGxlZCI7XHJcbmRlY2xhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IEVWRU5UX09WRVJGTE9XID0gIm92ZXJmbG93IjtcclxuZGVjbGFyZSBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgRVZFTlRfREVTVFJPWSA9ICJkZXN0cm95IjtcclxuZGVjbGFyZSBjb25zdCBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfQVJST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xyXG5kZWNsYXJlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XHJcbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNsYXJlIGNvbnN0IEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICJwYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbjptb3VudGVkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX1VQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEVEID0gInBhZ2luYXRpb246dXBkYXRlZCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX05BVklHQVRJT05fTU9VTlRFRCA9ICJuYXZpZ2F0aW9uOm1vdW50ZWQiO1xyXG5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjbGFyZSBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gImF1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcGxheTpwbGF5aW5nIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9BVVRPUExBWV9QQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVU0UgPSAiYXV0b3BsYXk6cGF1c2UiO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0xBWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZTE9BRF9MT0FERUQgPSAibGF6eWxvYWQ6bG9hZGVkIjtcclxuLyoqIEBpbnRlcm5hbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cclxuZGVjbGFyZSBjb25zdCBFVkVOVF9TTElERV9LRVlET1dOID0gInNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfU0hJRlRFRCA9ICJzaCI7XHJcbmRlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXJlIGNvbnN0IEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0gImVpIjtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gKiBBbGwgY2xhc3NlcyBhcyBjb25zdGFudHMuXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjb25zdCBDTEFTU19ST09UID0gInNwbGlkZSI7XHJcbmRlY2xhcmUgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX1RSQUNLOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfTElTVDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19TTElERTogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZGVjbGFyZSBjb25zdCBDTEFTU19DTE9ORTogc3RyaW5nO1xyXG5kZWNsYXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19DT05UQUlORVI6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQVJST1dTOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfQVJST1c6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfQVJST1dfUFJFVjogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19BUlJPV19ORVhUOiBzdHJpbmc7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIGNvbnN0IENMQVNTX1BBR0lOQVRJT046IHN0cmluZztcclxuZGVjbGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ0xBU1NfUEFHSU5BVElPTl9QQUdFOiBzdHJpbmc7XHJcbmRlY2xhcmUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IENMQVNTX1BST0dSRVNTOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUjogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1RPRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHTEU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19UT0dHTEVfUExBWTogcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19UT0dHTEVfUEFVU0U6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfU1BJTk5FUjogc3RyaW5nO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBDTEFTU19TUjogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19JTklUSUFMSVpFRDogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX0FDVEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19QUkVWOiBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX05FWFQ6IHN0cmluZztcclxuZGVjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmUgY29uc3QgQ0xBU1NfVklTSUJMRTogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19MT0FESU5HOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfRk9DVVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0lOOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfT1ZFUkZMT1c6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmc7XHJcbi8qKlxyXG4gKiBUaGUgYXJyYXkgd2l0aCBhbGwgc3RhdHVzIGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGV4Y2VwdCBmb3IgYGlzLWluaXRpYWxpemVkYC5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBTVEFUVVNfQ0xBU1NFUzonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZ1tdO1xyXG4vKipcclxuICogVGhlIGNvbGxlY3Rpb24gb2YgY2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgZm9yIGVsZW1lbnRzIHRoYXQgU3BsaWRlIGR5bmFtaWNhbGx5IGNyZWF0ZXMuXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTRVM6IHtcclxuICAgIHNsaWRlOiBzdHJpbmc7XHJcbiAgICBjbG9uZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuICAgIGFycm93czogc3RyaW5nO1xyXG4gICAgYXJyb3c6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmc7XHJcbiAgICBwcmV2OiBzdHJpbmc7XHJcbiAgICBuZXh0OiBzdHJpbmc7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcGFnaW5hdGlvbjogc3RyaW5nO1xyXG4gICAgcGFnZTogc3RyaW5nO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNwaW5uZXI6IHN0cmluZztcclxufTtcblxuLyoqXHJcbiAqIFRoZSBjb2xsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBvZiBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gYWxsIG9wdGlvbnMuXHJcbiAqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgREVGQVVMVFM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25zO1xuXG4vKipcclxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSBsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB0byByaWdodC5cclxuICovXHJcbmRlY2xhcmUgY29uc3QgTFRSID0gImx0ciI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4vKipcclxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSByaWdodCB0byBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdC5cclxuICovXHJcbmRlY2xhcmUgY29uc3QgUlRMID0gInJ0bCI7XHJcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICogRW51bWVyYXRlcyBzbGlkZXMgaW4gYSBjb2wuXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjb25zdCBUVEIgPSAidHRiIjtcblxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHJlZ3VsYXIgc2xpZGVyLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5kZWNsYXJlIGNvbnN0IFNMSURFID0gInNsaWRlIjtcclxuLyoqXHJcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaGUgdHlwZSBmb3IgdGhlIGNhcm91c2VsIHNsaWRlci5cclxuICpcclxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBMT09QID0gImxvb3AiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FuIG5vdCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgRkFERSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiZmFkZSI7XG5cbmV4cG9ydCB7IEFueUZ1bmN0aW9uLCBBcnJvd3NDb21wb25lbnQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBdXRvcGxheUNvbXBvbmVudCwgQmFzZUNvbXBvbmVudCwgQ0xBU1NFUywgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX0FDVElWRSwgQ0xBU1NfQVJST1csIENMQVNTX0FSUk9XUywgQ0xBU1NfQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX05FWFQsIENMQVNTX0FSUk9XX1BSRVYsIENMQVNTX0NMT05FLCBDTEFTU19DT05UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJTkVSLCBDTEFTU19GT0NVU19JTiwgQ0xBU1NfSU5JVElBTElaRUQsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMSVNULCBDTEFTU19MT0FESU5HLCBDTEFTU19ORVhULCBDTEFTU19PVkVSRkxPVywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1BBR0lOQVRJT04sIENMQVNTX1BBR0lOQVRJT05fUEFHRSwgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRVYsIENMQVNTX1BST0dSRVNTLCBDTEFTU19QUk9HUkVTU19CQVIsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST09ULCBDTEFTU19TTElERSwgQ0xBU1NfU1BJTk5FUiwgQ0xBU1NfU1IsIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19UT0dHTEUsIENMQVNTX1RPR0dMRV9QQVVTRSwgQ0xBU1NfVE9HR0xFX1BMQVksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19UUkFDSywgQ0xBU1NfVklTSUJMRSwgQ2FzdCwgQ2xvbmVzQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCwgQ29tcG9uZW50Q29uc3RydWN0b3IsIENvbXBvbmVudHMsIENvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50LCBDb3ZlckNvbXBvbmVudCwgREVGQVVMVFMsIERpcmVjdGlvbkNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQsIERyYWdDb21wb25lbnQsIEVWRU5UX0FDVElWRSwgRVZFTlRfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXU19NT1VOVEVELCBFVkVOVF9BUlJPV1NfVVBEQVRFRCwgRVZFTlRfQVVUT1BMQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BBVVNFLCBFVkVOVF9BVVRPUExBWV9QTEFZLCBFVkVOVF9BVVRPUExBWV9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lORywgRVZFTlRfQ0xJQ0ssIEVWRU5UX0RFU1RST1ksIEVWRU5UX0RSQUcsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9EUkFHR0VELCBFVkVOVF9EUkFHR0lORywgRVZFTlRfRU5EX0lOREVYX0NIQU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0VELCBFVkVOVF9ISURERU4sIEVWRU5UX0lOQUNUSVZFLCBFVkVOVF9MQVpZTE9BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFLCBFVkVOVF9NT1ZFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgRVZFTlRfT1ZFUkZMT1csIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9QQUdJTkFUSU9OX01PVU5URUQsIEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1JFQURZLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSRVNJWkVELCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9TSEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRlRFRCwgRVZFTlRfU0xJREVfS0VZRE9XTiwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZJU0lCTEUsIEVsZW1lbnRzQ29tcG9uZW50LCBFdmVudEJpbmRlciwgRXZlbnRCaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyT2JqZWN0LCBFdmVudEludGVyZmFjZSwgRXZlbnRJbnRlcmZhY2VPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFdmVudE1hcCwgRkFERSwgSGVhZCwgS2V5Ym9hcmRDb21wb25lbnQsIExPT1AsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBMVFIsIExheW91dENvbXBvbmVudCwgTGF6eUxvYWRDb21wb25lbnQsIExpdmVDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50LCBNZWRpYUNvbXBvbmVudCwgTW92ZUNvbXBvbmVudCwgT3B0aW9ucywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFBhZ2luYXRpb25Db21wb25lbnQsIFBhZ2luYXRpb25EYXRhLCBQYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0l0ZW0sIFB1c2gsIFJUTCwgUmVxdWVzdEludGVydmFsLCBSZXF1ZXN0SW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsSW50ZXJmYWNlLCBSZXNvbHZlLCBSZXNwb25zaXZlT3B0aW9ucywgU0xJREUsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEFUVVNfQ0xBU1NFUywgU2Nyb2xsQ29tcG9uZW50LCBTaGlmdCwgU2hpZnROLCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVDb21wb25lbnQsIFNsaWRlc0NvbXBvbmVudCwgU3BsaWRlLCBTcGxpZGVSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyZXIsIFN0YXRlLCBTdGF0ZU9iamVjdCwgU3luY0NvbXBvbmVudCwgU3luY1QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQsIFRUQiwgVGhyb3R0bGUsIFRocm90dGxlSW5zdGFuY2UsIFRyYW5zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uQ29tcG9uZW50LCBXaGVlbENvbXBvbmVudCwgU3BsaWRlIGFzIGRlZmF1bHQgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvdHlwZXMvaW5kZXguZC50cycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9fSwKIDI0OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYidAa2V5ZnJhbWVzIHNwbGlkZS1sb2FkaW5nezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uc3BsaWRlX190cmFjay0tZHJhZ2dhYmxley0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LScKICAgICAgICAgICAgICAgICAgICAgICAgYidtcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNwbGlkZV9fdHJhY2stJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGV7bWFyZ2luOjAhaW1wb3J0YW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtvcGFjaXR5OjA7ei1pbmRleDowfS5zcGxpZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGVfXycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXtvcGFjaXR5OjE7ei1pbmRleDoxfS5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlLS1ydGx7ZGlyZWN0aW9uOnJ0bH0uc3BsaWRlX190cmFjay0tdHRiPi5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX19saXN0e2Rpc3BsYXk6YmxvY2t9LnNwbGlkZV9fY29udGFpbmVye2JveC1zaXppbmc6YicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LnNwbGlkZV9fbGlzdHtiYWNrZmFjZS12JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzaWJpbGl0eTpoaWRkZW47ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodDoxMDAlO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlzLWluaXRpYWxpemVkOm5vdCguaXMtYWN0aXZlKSAuc3BsaWRlX19saXN0e2RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5OmJsb2NrfS5zcGxpZGVfX3BhZ2luYXRpb257LW1zLWZsZXgtYWxpZ246Y2VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDstbXMtZmxleC1wYWNrOmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MDtwb2ludGVyLWV2ZW50czonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbm9uZX0uc3BsaWRlX19wYWdpbmF0aW9uIGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlLWhlaWdodDoxO2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbjowO3BvaW50ZXItZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czphdXRvfS5zcGxpZGU6bm90KC5pcy1vdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb257ZGlzcGxheTpub25lfS5zcGxpZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXtwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aWFsaXplZCwuc3BsaWRlLmlzLXJlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZV9fc2xpZGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpibycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZGVyLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC1zdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UtdHlwZTpub25lIWltcG9ydGFudDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZV9fc2xpZGUgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uc3BsaWRlX19zcGlubicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnthbmltYXRpb246c3BsaWRlLWxvYWRpbmcgMXMgbGluZWFyIGluZmluaXRlO2JvcmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I6MnB4IHNvbGlkICM5OTk7Ym9yZGVyLWxlZnQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci1yYWRpdXM6NTAlO2JvdHRvbTowO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6aW5saW5lLScKICAgICAgICAgICAgICAgICAgICAgICAgYidibG9jaztoZWlnaHQ6MjBweDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MjBweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCAwIDApO2JvcmRlcjowO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dnbGUuaXMtYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX19wYXVzZXtkaXNwbGF5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fdG9nZ2xlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvY3NzL3NwbGlkZS1jb3JlLm1pbi5jc3MnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYidAa2V5ZnJhbWVzIHNwbGlkZS1sb2FkaW5nezAle3RyYW5zZm9ybTpyb3RhdGUoMCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uc3BsaWRlX190cmFjay0tZHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dnYWJsZXstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rle21hcmdpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7ei1pbmRleDowfS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3RpdmV7b3BhY2l0eToxO3otaW5kZXg6MX0uc3BsaWRlLS1ydGx7ZGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpydGx9LnNwbGlkZV9fdHJhY2stLXR0Yj4uc3BsaWRlX19saXN0e2Rpc3BsYXk6YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb2NrfS5zcGxpZGVfX2NvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdmlzaWJpbGl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3k6aGlkZGVuO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MTAwJTttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5pcy1pbml0aWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LWFsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbjowO3BvaW50ZXItZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlOm5vbmU7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoLmlzLW92ZXJmbG93KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fcHJvZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbGF0aXZlO3Zpc2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLC5zcGxpZGUuaXMtcmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19zbGlkZXtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JkZXItYm94Oy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZS10eXBlOm5vbmUhaW1wb3J0YW50O21hcmdpbjowO3Bvc2l0aW9uOnJlbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZX0uc3BsaWRlX19zbGlkZSBpbWd7dmVydGljYWwtYWxpZ246Ym90dG9tfS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19zcGlubmVye2FuaW1hdGlvbjpzcGxpZGUtbG9hZGluZyAxcyBsaW5lYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGluZmluaXRlO2JvcmRlcjoycHggc29saWQgIzk5OTtib3JkZXItbGVmdC1jb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjA7Y29udGFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ246c3RyaWN0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZnQ6MCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGg6MjBweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZ2dsZS5pcy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfX3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzZXtkaXNwbGF5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fdG9nZ2xlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH0nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvY3NzL3NwbGlkZS1jb3JlLm1pbi5jc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAyNTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInLnNwbGlkZV9fY29udGFpbmVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXRpdmV9LnNwbGlkZV9fbGlzdHtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAhaW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQ6bicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCguaXMtYWN0aXZlKSAuc3BsaWRlX19saXN0e2Rpc3BsYXk6YmxvY2t9LnNwbGlkZV9fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb257LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwOycKICAgICAgICAgICAgICAgICAgICAgICAgYidmbGV4LXdyYXA6d3JhcDstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlbnRlcjttYXJnaW46MDtwb2ludGVyLWV2ZW50czpub25lfS5zcGxpZGVfX3BhZ2luYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7bGlzdC1zdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgYictdHlwZTpub25lO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOmF1dG99LnNwbGlkZTpub3QoJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcy1vdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGlvbntkaXNwbGF5Om5vbmV9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaWRle3Bvc2l0aW9uOnJlbGF0aXZlOycKICAgICAgICAgICAgICAgICAgICAgICAgYid2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluaXRpYWxpemVkLC5zcGxpZGUuaXMtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3BsaWRlX19zbGlkZXtiYWNrZmFjZS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpib3JkZXItYm94Oy1tcy1mbGV4LW5lZycKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC1zdHlsZS10eXBlOm5vbmUhaW1wb3J0YW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3BsaWRlX19zbGlkZSBpbWd7dmVydGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsLWFsaWduOmJvdHRvbX0uc3BsaWRlX19zcGlubmVye2FuaW1hdGlvbjpzcGxpZGUtbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYWRpbmcgMXMgbGluZWFyIGluZmluaXRlO2JvcmRlcjoycHggc29saWQgIzk5OTtib3JkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLWxlZnQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZicKICAgICAgICAgICAgICAgICAgICAgICAgYid0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g6MjBweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7aGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYic6YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfX3BhdXNle2Rpc3BsYXk6bm9uZX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190b2dnbGVfX3BhdXNle2RpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWVzIHNwbGlkZS1sb2FkaW5nezAle3RyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfdHJhY2stLWRyYWdnYWJsZXstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lfS5zcGxpZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidle21hcmdpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7ei1pbmRleDowfS5zcGxpZGVfX3RyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXtvcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2l0eToxO3otaW5kZXg6MX0uc3BsaWRlLS1ydGx7ZGlyZWN0aW9uOnJ0bH0uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfdHJhY2stLXR0Yj4uc3BsaWRlX19saXN0e2Rpc3BsYXk6YmxvY2t9LnNwbGlkZV9fYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293ey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQ6I2NjYztib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjtkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjJlbTstbXMtZmxleC1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvcGFjaXR5Oi43O3BhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNScKICAgICAgICAgICAgICAgICAgICAgICAgYicwJSk7d2lkdGg6MmVtO3otaW5kZXg6MX0uc3BsaWRlX19hcnJvdyBzdmd7ZmlsbDojMDAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJztoZWlnaHQ6MS4yZW07d2lkdGg6MS4yZW19LnNwbGlkZV9fYXJyb3c6aG92ZXI6bm90KDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzYWJsZWQpe29wYWNpdHk6Ljl9LnNwbGlkZV9fYXJyb3c6ZGlzYWJsZWR7b3BhY2l0eScKICAgICAgICAgICAgICAgICAgICAgICAgYic6LjN9LnNwbGlkZV9fYXJyb3c6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDoxZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fYXJyb3ctLW5leHR7cmlnaHQ6MWVtfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX2Fycm93OmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOjNweH0uc3BsaWRlX19wYWdpbmF0aW9ue2JvdHRvbTouNWVtO2xlZnQ6MDtwYWRkaW5nOicKICAgICAgICAgICAgICAgICAgICAgICAgYicwIDFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3otaW5kZXg6MX0uc3BsaWRlX19wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnaW5hdGlvbl9fcGFnZXtiYWNrZ3JvdW5kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6NTAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDo4cHg7bWFyZ2luOjNweDtvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2l0eTouNztwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Nmb3JtIC4ycyBsaW5lYXI7d2lkdGg6OHB4fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzLWFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7dHJhbnNmb3JtOnNjYWxlKDEuNCk7ei1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmhvdmVye2N1cnNvcjpwb2ludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJztvcGFjaXR5Oi45fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS5pcycKICAgICAgICAgICAgICAgICAgICAgICAgYictZm9jdXMtaW4gLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsaW5lOjNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fcHJvZ3Jlc3NfX2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ7YmFja2dyb3VuZDojY2NjO2hlaWdodDozcHh9LnNwbGlkZV9fc2xpZGV7LXdlYmtpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYictdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5zcGxpZGVfX3NsaWRlOmZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c3tvdXRsaW5lOjB9QHN1cHBvcnRzKG91dGxpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX19zbGlkZTpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZScKICAgICAgICAgICAgICAgICAgICAgICAgYictb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZSl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtib3JkZXI6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMGJmfX1Ac3VwcG9ydHMob3V0bGluZS1vZmZzZXQ6LTNweCl7LnNwbGlkZS5pcy1mb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYictaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZS1vZmZzZXQ6LTNweH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDpub25lKXsuc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3NsaWRlOmZvY3Vze2JvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXI6M3B4IHNvbGlkICMwYmZ9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX190cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZTpmb2N1c3tib3JkZXItY29sb3I6IzAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmZ9fS5zcGxpZGVfX3RvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uc3BsaWRlX190b2dnbGU6ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B4fS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdG9nZ2xlOmZvY3Vze291dGxpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX190cmFjay0tbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdj4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle2JvcmRlcjozcHggc29saWQgdHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zcGFyZW50O2N1cnNvcjpwb2ludGVyfS5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle2JvcmRlcjozcHggc29saWQgIzAwMCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDphdXRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJztyaWdodDoxZW19LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN2Z3t0cmFuc2Zvcm06c2NhbGVYKDEpfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX19hcnJvdy0tbmV4dHtsZWZ0OjFlbTtyaWdodDphdXRvfS5zcGxpZGVfX2Fycm93cy0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0bCAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93e2xlZnQ6NTAlO3RyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgYic6dHJhbnNsYXRlKC01MCUpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93JwogICAgICAgICAgICAgICAgICAgICAgICBiJy0tcHJldnt0b3A6MWVtfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldiBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5zcGxpZGVfX2Fycm93cy0tdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0YiAuc3BsaWRlX19hcnJvdy0tbmV4dHtib3R0b206MWVtO3RvcDphdXRvfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnJvdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoOTBkZWcpfS5zcGxpZGVfX3BhZ2luYXRpb24tLXR0Yntib3R0b206MDtkaXNwbGF5OicKICAgICAgICAgICAgICAgICAgICAgICAgYictbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xleC1kaXJlY3Rpb246Y29sdW1uO2xlZnQ6YXV0bztwYWRkaW5nOjFlbSAwO3JpZ2h0Oi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInNWVtO3RvcDowfScsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3Mvc3BsaWRlLm1pbi5jc3MnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicuc3BsaWRlX19jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjpyZWxhdGl2ZX0uc3BsaWRlX19saXN0e2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlbjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9LnNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtaW5pdGlhbGl6ZWQ6bm90KC5pcy1hY3RpdmUpIC5zcGxpZGVfX2xpc3R7ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6YmxvY2t9LnNwbGlkZV9fcGFnaW5hdGlvbnstbXMtZmxleC1hbGlnbjpjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwOy1tcy1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjowOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludGVyLWV2ZW50czpub25lfS5zcGxpZGVfX3BhZ2luYXRpb24gbGl7ZGlzcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7bGlzdC1zdHlsZS10eXBlOm5vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOmF1dG99LnNwbGlkZTpub3QoLmlzLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGlvbntkaXNwbGF5Om5vbmV9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaWRle3Bvc2l0aW9uOnJlbGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZTt2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluaXRpYWxpemVkLC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlzLXJlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3BsaWRlX19zbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpib3JkZXItJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC1zdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictdHlwZTpub25lIWltcG9ydGFudDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fc2xpZGUgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fc3Bpbm5lcnthbmltYXRpb246c3BsaWRlLWxvYWRpbmcgMXMgbGluZWFyIGluZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbml0ZTtib3JkZXI6MnB4IHNvbGlkICM5OTk7Ym9yZGVyLWxlZnQtY29sb3I6dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO2JvdHRvbTowO2NvbnRhaW46c3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ljdDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtsZWZ0OjA7bWFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MjAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHh9LnNwbGlkZV9fc3J7Y2xpcDpyZWN0KDAgMCAwIDApO2JvcmRlcjowO2hlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3BsaWRlX190b2dnbGUuaXMtYWN0aXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAuc3BsaWRlX190b2dnbGVfX3BsYXksLnNwbGlkZV9fdG9nZ2xlX19wYXVzZXtkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzcGxheTpub25lfS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGlkZV9fdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZ2dsZV9fcGF1c2V7ZGlzcGxheTppbmxpbmV9LnNwbGlkZV9fdHJhY2t7b3ZlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9QGtleWZyYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgc3BsaWRlLWxvYWRpbmd7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JtOnJvdGF0ZSgxdHVybil9fS5zcGxpZGVfX3RyYWNrLS1kcmFnZ2FibGV7LXcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfdHJhY2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXttYXJnaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjAhaW1wb3J0YW50O29wYWNpdHk6MDt6LWluZGV4OjB9LnNwbGlkZV9fdHJhY2stJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle29wYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaXR5OjE7ei1pbmRleDoxfS5zcGxpZGUtLXJ0bHtkaXJlY3Rpb246cnRsfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX190cmFjay0tdHRiPi5zcGxpZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fYXJyb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXI7YmFja2dyb3VuZDojY2NjO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJzb3I6cG9pbnRlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VpZ2h0OjJlbTstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRlcjtvcGFjaXR5Oi43O3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoyZW07ei1pbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3g6MX0uc3BsaWRlX19hcnJvdyBzdmd7ZmlsbDojMDAwO2hlaWdodDoxLjJlbTt3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkdGg6MS4yZW19LnNwbGlkZV9fYXJyb3c6aG92ZXI6bm90KDpkaXNhYmxlZCl7b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNpdHk6Ljl9LnNwbGlkZV9fYXJyb3c6ZGlzYWJsZWR7b3BhY2l0eTouM30uc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fYXJyb3c6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMGJmOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDoxZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZV9fYXJyb3ctLW5leHR7cmlnaHQ6MWVtfS5zcGxpZGUuaXMtZm9jdXMtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIC5zcGxpZGVfX2Fycm93OmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19wYWdpbmF0aW9ue2JvdHRvbTouNWVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztsZWZ0OjA7cGFkZGluZzowIDFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZXtiYWNrZ3JvdW5kOiMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2NjO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6aW5saW5lLWJsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jaztoZWlnaHQ6OHB4O21hcmdpbjozcHg7b3BhY2l0eTouNztwYWRkaW5nOjA7cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBsaW5lYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3dpZHRoOjhweH0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlLmlzLWFjdGl2ZXtiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fja2dyb3VuZDojZmZmO3RyYW5zZm9ybTpzY2FsZSgxLjQpO3otaW5kZXg6MX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpob3ZlcntjdXJzb3I6cG9pbnRlcjtvcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2l0eTouOX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3VzLXZpc2libGV7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXN7b3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19wcm9ncmVzc19fYmFye2JhY2tncm91bmQ6I2NjYztoZWlnaHQ6M3B4fS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZXstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCl9LnNwbGlkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTowfUBzdXBwb3J0cyhvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZS1vZmZzZXQ6LTNweCl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDotM3B4fX1AbWVkaWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0Om5vbmUpey5zcGxpZGVfX3NsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTpmb2N1cy12aXNpYmxle2JvcmRlcjozcHggc29saWQgIzBiZn19QHN1cHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlLmlzLWZvY3VzLWluIC5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Om5vbmUpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2JvcmRlcjozcHggc29saWQgIzBiZn0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX190cmFjaz4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlOmZvY3Vze2JvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXItY29sb3I6IzBiZn19LnNwbGlkZV9fdG9nZ2xle2N1cnNvcjpwb2ludGVyfS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX190b2dnbGU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fdG9nZ2xlOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2Zmc2V0OjNweH0uc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVfX3NsaWRle2JvcmRlcjozcHggc29saWQgdHJhbnNwYXJlbnQ7Y3Vyc29yOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludGVyfS5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4uc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fc2xpZGUuaXMtYWN0aXZle2JvcmRlcjozcHggc29saWQgIzAwMH0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDphdXRvO3JpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodDoxZW19LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN2Z3t0cmFuc2Zvcm06c2NhbGVYKDEpfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19hcnJvdy0tbmV4dHtsZWZ0OjFlbTtyaWdodDphdXRvfS5zcGxpZGVfXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsZVgoLTEpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93e2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5zcGxpZGVfX2Fycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtfS5zcGxpZGVfX2Fycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnJvdGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoLTkwZGVnKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHR7Ym90dG9tOjFlbTt0b3A6YXV0b30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19wYWdpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGlzcGxheTotbXMtZmxleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlyZWN0aW9uOmNvbHVtbjtsZWZ0OmF1dG87cGFkZGluZzoxZW0gMDtyaWdodDouJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzVlbTt0b3A6MH0nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvY3NzL3NwbGlkZS5taW4uY3NzJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogMjY6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXtib3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi43fScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2ZXtib3JkZXI6M3B4IHNvbGlkICMwMGJmZmY7b3BhY2l0eToxfS5zcGxpZGVfX2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3stbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtjdXJzb3I6cG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIuNWVtOy0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7d2lkdGg6Mi41ZW07ei1pbmRleDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMwMGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZmO2hlaWdodDoyLjVlbTt0cmFuc2l0aW9uOmZpbGwgLjJzIGxpbmVhcjt3aWR0aDoyLicKICAgICAgICAgICAgICAgICAgICAgICAgYic1ZW19LnNwbGlkZV9fYXJyb3c6aG92ZXI6bm90KDpkaXNhYmxlZCkgc3Zne2ZpbGw6IzY2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q5ZmZ9LnNwbGlkZV9fYXJyb3c6ZGlzYWJsZWR7b3BhY2l0eTouM30uc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3c6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMDBiZmZmO291dGxpbmUtbycKICAgICAgICAgICAgICAgICAgICAgICAgYidmZnNldDozcHh9LnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDoxZW19LnNwbGlkZV9fYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0uc3BsaWRlX19hcnJvdy0tbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHR7cmlnaHQ6MWVtfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fYXJyb3c6Zm9jdScKICAgICAgICAgICAgICAgICAgICAgICAgYidze291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19wYWdpbmF0aW9ue2JvdHRvbTouNWVtO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjphYnNvbHV0ZTtyaWdodDowO3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfcGFnZXtiYWNrZ3JvdW5kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O21hcmdpbjozcHg7cGFkZGluZzowO3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGxpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXIsdHJhbnNmb3JtIC4ycyBsaW5lYXI7d2lkdGg6MTBweH0uc3BsaWRlX19wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbl9fcGFnZS5pcy1hY3RpdmV7YmFja2dyb3VuZDojMDBiZmZmO3RyYW5zZm9ybTpzY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGUoMS40KTt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpob3ZlcntiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidja2dyb3VuZDojNjZkOWZmO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljl9LnNwbGlkZV9fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMDBiZmZmO291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fY29udGFpbmVye2JveC1zaXppbmc6Ym9yZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LnNwbGlkZV9fbGlzdHtiYWNrZmFjZS12aXNpYicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGl0eTpoaWRkZW47ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzoxMDAlO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzLWluaXRpYWxpemVkOm5vdCguaXMtYWN0aXZlKSAuc3BsaWRlX19saXN0e2Rpc3BsYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5OmJsb2NrfS5zcGxpZGVfX3BhZ2luYXRpb257LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDstbXMtZmxleC1wYWNrOmNlbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYic7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MDtwb2ludGVyLWV2ZW50czpub25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19wYWdpbmF0aW9uIGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodDoxO2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdXRvfS5zcGxpZGU6bm90KC5pcy1vdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGlvbntkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzcGxheTpub25lfS5zcGxpZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaWRle3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluaXRpYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXplZCwuc3BsaWRlLmlzLXJlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpib3JkZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC1zdHlsZS10eScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZTpub25lIWltcG9ydGFudDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGUgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uc3BsaWRlX19zcGlubmVye2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmltYXRpb246c3BsaWRlLWxvYWRpbmcgMXMgbGluZWFyIGluZmluaXRlO2JvcmRlcjoycCcKICAgICAgICAgICAgICAgICAgICAgICAgYid4IHNvbGlkICMwMGJmZmY7Ym9yZGVyLWxlZnQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1yYWRpdXM6NTAlO2JvdHRvbTowO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6aW5saW5lLWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9jaztoZWlnaHQ6MjBweDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MjBweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwIDApO2JvcmRlcjowO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZycKICAgICAgICAgICAgICAgICAgICAgICAgYidnbGUuaXMtYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19wYXVzZXtkaXNwbGF5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fdG9nZ2xlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWVzIHNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstd2Via2l0LXRvdWNoLScKICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7eicKICAgICAgICAgICAgICAgICAgICAgICAgYictaW5kZXg6MH0uc3BsaWRlX190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19zbGlkZS5pcy1hY3RpdmV7b3BhY2l0eToxO3otaW5kZXg6MX0uc3BsaWRlLS1ydGx7ZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbjpydGx9LnNwbGlkZV9fdHJhY2stLXR0Yj4uc3BsaWRlX19saXN0e2Rpc3BsYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5OmJsb2NrfS5zcGxpZGVfX3Byb2dyZXNzX19iYXJ7YmFja2dyb3VuZDojY2NjO2hlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6M3B4fS5zcGxpZGVfX3NsaWRley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInYSgwLDAsMCwwKX0uc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjB9QHN1cHBvcnRzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lOjNweCBzb2xpZCAjMDBiZmZmO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZV9fc2xpZGU6ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VzLXZpc2libGV7Ym9yZGVyOjNweCBzb2xpZCAjMDBiZmZmfX1Ac3VwcG9ydHMob3V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7b3V0bGluZS1vZmZzZXQ6LTNweCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKXsuc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcy1mb2N1cy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tib3JkZXI6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDBiZmZmfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdHJhY2s+LnNwbGlkZV9fbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3Q+LnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMGJmZmZ9fS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX190b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LnNwbGlkZV9fdG9nZ2xlOmZvY3VzLXZpc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxle291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3RvZ2dsZTpmb2N1c3tvdXRsaW5lOjNweCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fYXJyb3dzLS1ydGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6YXV0bztyaWdodDoxZW19LnNwbGlkZV9fYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYJwogICAgICAgICAgICAgICAgICAgICAgICBiJygxKX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbmV4dHtsZWZ0OjEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW07cmlnaHQ6YXV0b30uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHQgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19hcnJvd3tsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtfS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUoLTkwZGVnKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHR7Ym90dG9tOjFlbTt0b3A6YXV0b30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5zcGxpZGVfX3BhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0OmF1dG87cGFkZGluZzoxZW0gMDtyaWdodDouNWVtO3RvcDowfScsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3MvdGhlbWVzL3NwbGlkZS1za3libHVlLm1pbi5jc3MnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicuc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2JvcmRlcjozcHggc29saWQgdHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXI7b3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHk6Ljd9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCBzb2xpZCAjMDBiZmZmO29wYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXR5OjF9LnNwbGlkZV9fYXJyb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZGVyLXJhZGl1czowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6LW1zLWZsZXhib3gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6Mi41ZW07LW1zLWZsZXgtcGFjazpjZW50ZXI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjIuNWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbTt6LWluZGV4OjF9LnNwbGlkZV9fYXJyb3cgc3Zne2ZpbGw6IzAwYmZmZjtoZWlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0OjIuNWVtO3RyYW5zaXRpb246ZmlsbCAuMnMgbGluZWFyO3dpZHRoOjIuNWVtfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOmRpc2FibGVkKSBzdmd7ZmlsbDojNjYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDlmZn0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5Oi4zfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19hcnJvdzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLnNwbGlkZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzAwYmZmZjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOi41JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwO3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTppbmxpbmUtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jsb2NrO2hlaWdodDoxMHB4O21hcmdpbjozcHg7cGFkZGluZzowO3Bvc2l0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGxpbmVhciwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJhbnNmb3JtIC4ycyBsaW5lYXI7d2lkdGg6MTBweH0uc3BsaWRlX19wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbl9fcGFnZS5pcy1hY3RpdmV7YmFja2dyb3VuZDojMDBiZmZmO3RyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6c2NhbGUoMS40KTt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG92ZXJ7YmFja2dyb3VuZDojNjZkOWZmO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy45fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXtvdXRsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtZm9jdXMtaW4gLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX2NvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO21hcmdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3BsaWRlLmlzLWluaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWZsZXgtcGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjA7cG9pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXtkaXNwbGF5OmlubGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCguaXMtb3ZlcmZsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaWRlX19wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXRpdmU7dmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwbGlkZS5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictcmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGVfX3NsaWRle2JhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LXN0eWxlLXR5cGU6bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmUhaW1wb3J0YW50O21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19zbGlkZSBpbWd7dmVydGljYWwtYWxpZ246Ym90dG9tfS5zcGxpZGVfX3NwaW5uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vye2FuaW1hdGlvbjpzcGxpZGUtbG9hZGluZyAxcyBsaW5lYXIgaW5maW5pdGU7YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmRlcjoycHggc29saWQgIzAwYmZmZjtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjA7Y29udGFpbjpzdHJpY3Q7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZnQ6MDttYXJnaW46YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoyMHB4fS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7aGVpZ2h0OjFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3g7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfX3BhdXNle2Rpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190b2dnbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZmxvdzonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWVzIHNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6cm90YXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstd2Via2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfX3RyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbjowIWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvcnRhbnQ7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWRlX190cmFjay0tZmFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7b3BhY2l0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MTt6LWluZGV4OjF9LnNwbGlkZS0tcnRse2RpcmVjdGlvbjpydGx9LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3RyYWNrLS10dGI+LnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19wcm9ncmVzc19fYmFye2JhY2tncm91bmQ6I2NjYztoZWlnaHQ6M3B4fS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZXstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCl9LnNwbGlkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTowfUBzdXBwb3J0cyhvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZS1vZmZzZXQ6LTNweCl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDotM3B4fX1AbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0Om5vbmUpey5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19zbGlkZTpmb2N1cy12aXNpYmxle2JvcmRlcjozcHggc29saWQgIzAwYmZmZn19QCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlLmlzLWZvY3VzLWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMDBiZmZmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztvdXRsaW5lLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoLWNvbnRyYXN0Om5vbmUpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOmZvY3Vze2JvcmRlcjozcHggc29saWQgIzAwYmZmZn0uc3BsaWRlLmlzLWZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cy1pbiAuc3BsaWRlX190cmFjaz4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZTpmb2N1c3tib3JkZXItY29sb3I6IzAwYmZmZn19LnNwbGlkZV9fdG9nZ2xle2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJzb3I6cG9pbnRlcn0uc3BsaWRlX190b2dnbGU6Zm9jdXMtdmlzaWJsZXtvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdG9nZ2xlOmZvY3Vze291dGxpbmU6M3B4IHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xpZCAjMDBiZmZmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvd3MtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDphdXRvO3JpZ2h0OjFlbX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2Zvcm06c2NhbGVYKDEpfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2FyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvdy0tbmV4dHtsZWZ0OjFlbTtyaWdodDphdXRvfS5zcGxpZGVfX2Fycm93cy0tcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bCAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnNjYWxlWCgtMSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93e2xlZnQ6NTAlO3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtfS5zcGxpZGVfX2Fycm93cy0tdHRiIC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmV4dHtib3R0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtOjFlbTt0b3A6YXV0b30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5zcGxpZGVfX3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmNvbHVtbjtsZWZ0OmF1dG87cGFkZGluZzoxZW0gMDtyaWdodDouNWVtO3RvcDowfScsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3MvdGhlbWVzL3NwbGlkZS1za3libHVlLm1pbi5jc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAyNzogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInLnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle2JvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXI6M3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRlcjtvcGFjaXR5Oi43fS5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle2JvcmRlcjozcHggc29saWQgIzIwYjJhYTtvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2l0eToxfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93e2xlZnQ6NTAlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmV4dHtib3R0b206MWVtO3RvcDphdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZm9ybTpyb3RhdGUoOTBkZWcpfS5zcGxpZGVfX3BhZ2luYXRpb24tLXR0Yntib3R0b206JwogICAgICAgICAgICAgICAgICAgICAgICBiJzA7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtZGlyZWN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xlZnQ6YXV0bztwYWRkaW5nOjFlbScKICAgICAgICAgICAgICAgICAgICAgICAgYicgMDtyaWdodDoxZW07dG9wOjB9LnNwbGlkZV9fcGFnaW5hdGlvbi0tdHRiIC5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19wYWdpbmF0aW9uX19wYWdle2hlaWdodDoyMHB4O3dpZHRoOjVweH0uc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZDp0cmFuc3BhcmVudDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Y3Vyc29yOnBvaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoyLjVlbTstbXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjA7cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoOjIuNWVtO3otaW5kZXg6MX0uc3BsaWRlX19hcnJvdyBzdmd7ZmlsbDojMjBiMmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYTtoZWlnaHQ6Mi41ZW07dHJhbnNpdGlvbjpmaWxsIC4ycyBsaW5lYXI7d2lkdGg6Mi41ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtfS5zcGxpZGVfX2Fycm93OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHN2Z3tmaWxsOiM1N2UxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q5fS5zcGxpZGVfX2Fycm93OmRpc2FibGVke29wYWNpdHk6LjN9LnNwbGlkZV9fYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW5lLW9mZicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQ6M3B4fS5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6MWVtfS5zcGxpZGVfX2Fycm93JwogICAgICAgICAgICAgICAgICAgICAgICBiJy0tcHJldiBzdmd7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LnNwbGlkZV9fYXJyb3ctLW5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne3JpZ2h0OjFlbX0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX2Fycm93OmZvY3VzeycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fcGFnaW5hdGlvbntib3R0b206MWVtO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjphYnNvbHV0ZTtyaWdodDowO3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXtiYWNrZ3JvdW5kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoyLjVweDtkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjVweDttYXJnaW46M3B4O3BhZGRpbmc6MDtwb3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBsaW5lYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyO3dpZHRoOjIwcHh9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZS5pcy1hY3RpdmV7YmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tncm91bmQ6IzIwYjJhYTt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG92ZXJ7YmFja2dyb3VuZDojNTdlMWQ5O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljl9LicKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29saWQgIzIwYjJhYTtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMicKICAgICAgICAgICAgICAgICAgICAgICAgYicwYjJhYTtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fc2xpZGV7LXdlYmtpdC10YXAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci1yYWRpdXM6NHB4fS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjB9QHN1cHBvcnRzKG91dGxpbmUtb2Zmc2V0OicKICAgICAgICAgICAgICAgICAgICAgICAgYictM3B4KXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAjMjBiMmFhO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtibycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZGVyOjNweCBzb2xpZCAjMjBiMmFhfX1Ac3VwcG9ydHMob3V0bGluZS1vZmZzZXQ6LTNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInM3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZS1vZmZzZXQ6LTNweH19QG1lZGlhIHNjcmVlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKXsuc3BsaWRlLmlzLWZvY3VzLWluIC5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19zbGlkZTpmb2N1c3tib3JkZXI6M3B4IHNvbGlkICMyMGIyYWF9LnNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtZm9jdXMtaW4gLnNwbGlkZV9fdHJhY2s+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGU6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyMGIyYWF9fS5zcGxpZGVfX2NvbnRhaW5lcntiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ294LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGVfX2xpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXk6ZmxleDtoZWlnaHQ6MTAwJTttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnRhbnR9LnNwbGlkZS5pcy1pbml0aWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LScKICAgICAgICAgICAgICAgICAgICAgICAgYidhbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjA7cG9pbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXItZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXtkaXNwbGF5OmlubGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCguaXMtb3ZlcmZsb3cpIC5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaWRlX19wcm9ncmVzc19fYmFye3dpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTpoaWRkZW59LnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwbGlkZS5pcy1yZW5kZXJlZHt2aXNpYmlsaXR5OicKICAgICAgICAgICAgICAgICAgICAgICAgYid2aXNpYmxlfS5zcGxpZGVfX3NsaWRle2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazonCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDtsaXN0LXN0eWxlLXR5cGU6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjA7cG9zaXRpb246cicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbGF0aXZlfS5zcGxpZGVfX3NsaWRlIGltZ3t2ZXJ0aWNhbC1hbGlnbjpib3R0b219LnNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVfX3NwaW5uZXJ7YW5pbWF0aW9uOnNwbGlkZS1sb2FkaW5nIDFzIGxpbmVhciBpbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdGU7Ym9yZGVyOjJweCBzb2xpZCAjMjBiMmFhO2JvcmRlci1sZWZ0LWNvbG9yOnRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtib3R0b206MDtjb250YWluOnN0cmljdDtkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7bGVmdDowO21hcmdpbjphdXRvO3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoOjIwcHh9LnNwbGlkZV9fcycKICAgICAgICAgICAgICAgICAgICAgICAgYidye2NsaXA6cmVjdCgwIDAgMCAwKTtib3JkZXI6MDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4JwogICAgICAgICAgICAgICAgICAgICAgICBiJztvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHh9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190b2dnbGVfX3BsYXksLicKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTpub25lfS5zcGxpZGVfX3RvZ2dsZS5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MtYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTppbmxpbmV9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RyYWNre292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OicKICAgICAgICAgICAgICAgICAgICAgICAgYicwfUBrZXlmcmFtZXMgc3BsaWRlLWxvYWRpbmd7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10JwogICAgICAgICAgICAgICAgICAgICAgICBiJ297dHJhbnNmb3JtOnJvdGF0ZSgxdHVybil9fS5zcGxpZGVfX3RyYWNrLS1kcmFnZ2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIney13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc3BsaWRlX190cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXttYXJnaW46MCFpbXBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW50O29wYWNpdHk6MDt6LWluZGV4OjB9LnNwbGlkZV9fdHJhY2stLWZhZGU+LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle29wYWNpdHk6MTt6LWluZGV4OjF9JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGUtLXJ0bHtkaXJlY3Rpb246cnRsfS5zcGxpZGVfX3RyYWNrLS10dGI+LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX19wcm9ncmVzc19fYmFye2JhY2tncicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW5kOiNjY2M7aGVpZ2h0OjNweH0uc3BsaWRlX190b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3RvZ2dsZTpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMyMGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInMmFhO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfXycKICAgICAgICAgICAgICAgICAgICAgICAgYid0b2dnbGU6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW5lLW9mZnNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6M3B4fS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmF1dG87cmlnaHQ6MWVtfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LScKICAgICAgICAgICAgICAgICAgICAgICAgYictcHJldiBzdmd7dHJhbnNmb3JtOnNjYWxlWCgxKX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZV9fYXJyb3ctLW5leHR7bGVmdDoxZW07cmlnaHQ6YXV0b30uc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLScKICAgICAgICAgICAgICAgICAgICAgICAgYicxKX0uc3BsaWRlX19zbGlkZXI+LnNwbGlkZV9fYXJyb3dzIC5zcGxpZGVfX2Fycm93LS1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldntsZWZ0Oi0yLjVlbX0uc3BsaWRlX19zbGlkZXI+LnNwbGlkZV9fYXJyb3dzIC5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvdy0tbmV4dHtyaWdodDotMi41ZW19LnNwbGlkZXtwYWRkaW5nOjNlbX0nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvY3NzL3RoZW1lcy9zcGxpZGUtc2VhLWdyZWVuLm1pbi5jc3MnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicuc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2JvcmRlcjozcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo0cHg7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljd9LnNwbGlkZV9fdHJhY2stLW5hdj4ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc29saWQgIzIwYjJhYTtvcGFjaXR5OjF9LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVfX2Fycm93e2xlZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1wcmV2e3RvcDoxZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19hcnJvdy0tbmV4dHtib3R0b206MWVtO3RvcDphdXRvfS5zcGxpZGVfX2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUoOTBkZWcpfS5zcGxpZGVfX3BhZ2luYXRpb24tLXR0Yntib3R0b206MDtkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtZGlyZWN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uO2xlZnQ6YXV0bztwYWRkaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzoxZW0gMDtyaWdodDoxZW07dG9wOjB9LnNwbGlkZV9fcGFnaW5hdGlvbi0tdHRiICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19wYWdpbmF0aW9uX19wYWdle2hlaWdodDoyMHB4O3dpZHRoOjVweH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fYXJyb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpjZW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtib3JkZXItcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGl1czowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXk6ZmxleDtoZWlnaHQ6Mi41ZW07LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ktY29udGVudDpjZW50ZXI7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjIuNWVtO3otaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4OjF9LnNwbGlkZV9fYXJyb3cgc3Zne2ZpbGw6IzIwYjJhYTtoZWlnaHQ6Mi41JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtO3RyYW5zaXRpb246ZmlsbCAuMnMgbGluZWFyO3dpZHRoOjIuNWVtfS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19hcnJvdzpob3Zlcjpub3QoOmRpc2FibGVkKSBzdmd7ZmlsbDojNTdlMWQ5fS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5Oi4zfS5zcGxpZGVfX2Fycm93JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbX0uc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOjFlbTtsZWZ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzowO3BhZGRpbmc6MCAxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt6LWluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleDoxfS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2V7YmFja2dyb3VuZDojY2NjO2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JkZXI6MDtib3JkZXItcmFkaXVzOjIuNXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztoZWlnaHQ6NXB4O21hcmdpbjozcHg7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGxpbmVhcjt3aWR0aDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjBweH0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlLmlzLWFjdGl2ZXtiYWNrZ3JvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuZDojMjBiMmFhO3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidob3ZlcntiYWNrZ3JvdW5kOiM1N2UxZDk7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLjl9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1cy12aXNpYmxle291dGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy1mb2N1cy1pbiAuc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3Vze291dGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGV7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO2JvcmRlci1yYWRpdXM6NHB4fS5zcGxpZGVfX3NsaWRlOmZvY3Vze291dGxpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjB9QHN1cHBvcnRzKG91dGxpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGVfX3NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Q6bm9uZSl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtib3JkZXI6M3B4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzb2xpZCAjMjBiMmFhfX1Ac3VwcG9ydHMob3V0bGluZS1vZmZzZXQ6LTNweCl7LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZS1vZmZzZXQ6LTNweH19QG1lZGlhIHNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKXsuc3BsaWRlLmlzLWZvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tib3JkZXI6M3B4IHNvbGlkICMyMGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMmFhfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdHJhY2s+LnNwbGlkZV9fJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3Q+LnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMyMGIyYWF9fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjpyZWxhdGl2ZX0uc3BsaWRlX19saXN0e2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlbjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9LnNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtaW5pdGlhbGl6ZWQ6bm90KC5pcy1hY3RpdmUpIC5zcGxpZGVfX2xpc3R7ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6YmxvY2t9LnNwbGlkZV9fcGFnaW5hdGlvbnstbXMtZmxleC1hbGlnbjpjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwOy1tcy1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjowOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludGVyLWV2ZW50czpub25lfS5zcGxpZGVfX3BhZ2luYXRpb24gbGl7ZGlzcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7bGlzdC1zdHlsZS10eXBlOm5vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOmF1dG99LnNwbGlkZTpub3QoLmlzLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGlvbntkaXNwbGF5Om5vbmV9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaWRle3Bvc2l0aW9uOnJlbGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZTt2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluaXRpYWxpemVkLC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlzLXJlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3BsaWRlX19zbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpib3JkZXItJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC1zdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictdHlwZTpub25lIWltcG9ydGFudDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fc2xpZGUgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fc3Bpbm5lcnthbmltYXRpb246c3BsaWRlLWxvYWRpbmcgMXMgbGluZWFyIGluZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbml0ZTtib3JkZXI6MnB4IHNvbGlkICMyMGIyYWE7Ym9yZGVyLWxlZnQtY29sb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO2JvdHRvbTowO2NvbnRhaW46JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmljdDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtsZWZ0OjA7bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjIwcHh9LnNwbGlkZV9fc3J7Y2xpcDpyZWN0KDAgMCAwIDApO2JvcmRlcjowO2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3BsaWRlX190b2dnbGUuaXMtYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSAuc3BsaWRlX190b2dnbGVfX3BsYXksLnNwbGlkZV9fdG9nZ2xlX19wYXVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V7ZGlzcGxheTpub25lfS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTppbmxpbmV9LnNwbGlkZV9fdHJhY2t7b3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9QGtleWZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZXMgc3BsaWRlLWxvYWRpbmd7MCV7dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbnNmb3JtOnJvdGF0ZSgxdHVybil9fS5zcGxpZGVfX3RyYWNrLS1kcmFnZ2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIney13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fdHJhY2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXttYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2luOjAhaW1wb3J0YW50O29wYWNpdHk6MDt6LWluZGV4OjB9LnNwbGlkZV9fdHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZleycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcGFjaXR5OjE7ei1pbmRleDoxfS5zcGxpZGUtLXJ0bHtkaXJlY3Rpb246cnRsfS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX190cmFjay0tdHRiPi5zcGxpZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZV9fcHJvZ3Jlc3NfX2JhcntiYWNrZ3JvdW5kOiNjY2M7aGVpZ2h0OjNweCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LnNwbGlkZV9fdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5zcGxpZGVfX3RvZ2dsZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mZnNldDozcHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX190b2dnbGU6ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY3Vze291dGxpbmU6M3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZS1vZmZzZXQ6M3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneH0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzphdXRvO3JpZ2h0OjFlbX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoMSl9LnNwbGlkZV9fYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy0tcnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0e2xlZnQ6MWVtO3JpZ2h0OmF1dG99JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbnNmb3JtOnNjYWxlWCgtMSl9LnNwbGlkZV9fc2xpZGVyPi5zcGxpZGVfX2Fycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd3MgLnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDotMi41ZW19LnNwbGlkZV9fc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlcj4uc3BsaWRlX19hcnJvd3MgLnNwbGlkZV9fYXJyb3ctLW5leHR7cmlnaHQ6LScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyLjVlbX0uc3BsaWRle3BhZGRpbmc6M2VtfScsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3MvdGhlbWVzL3NwbGlkZS1zZWEtZ3JlZW4ubWluLmNzcycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9fSwKIDI4OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYicuc3BsaWRlX19jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhdGl2ZX0uc3BsaWRlX19saXN0e2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2Rpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTttYXJnaW46MCFpbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9LnNwbGlkZS5pcy1pbml0aWFsaXplZDpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290KC5pcy1hY3RpdmUpIC5zcGxpZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbnstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOycKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZsZXgtd3JhcDp3cmFwOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VudGVyO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy10eXBlOm5vbmU7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzLW92ZXJmbG93KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fcHJvZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXRpdmU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Zpc2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwbGlkZS5pcy0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGVfX3NsaWRle2JhY2tmYWNlLScKICAgICAgICAgICAgICAgICAgICAgICAgYid2aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWZsZXgtbmVnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LXN0eWxlLXR5cGU6bm9uZSFpbXBvcnRhbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGVfX3NsaWRlIGltZ3t2ZXJ0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidjYWwtYWxpZ246Ym90dG9tfS5zcGxpZGVfX3NwaW5uZXJ7YW5pbWF0aW9uOnNwbGlkZS1sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29hZGluZyAxcyBsaW5lYXIgaW5maW5pdGU7Ym9yZGVyOjJweCBzb2xpZCAjOTk5O2JvcmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtib3R0b206MCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7bGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDoyMHB4fS5zcGxpZGVfX3Nye2NsaXA6cmVjdCgwIDAgMCAwKTtib3JkZXI6MDtoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJzphYnNvbHV0ZTt3aWR0aDoxcHh9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fdG9nZ2xlX19wbGF5LC5zcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTpub25lfScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX190b2dnbGUuaXMtYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6aW5saW5lfS5zcGxpZGVfX3RyYWNre292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjonCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVsYXRpdmU7ei1pbmRleDowfUBrZXlmcmFtZXMgc3BsaWRlLWxvYWRpbmd7MCV7dHJhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgxdHVybil9fS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ190cmFjay0tZHJhZ2dhYmxley13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmV9LnNwbGlkZV9fdHJhY2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V7bWFyZ2luOjAhaW1wb3J0YW50O29wYWNpdHk6MDt6LWluZGV4OjB9LnNwbGlkZV9fdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle29wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaXR5OjE7ei1pbmRleDoxfS5zcGxpZGUtLXJ0bHtkaXJlY3Rpb246cnRsfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ190cmFjay0tdHRiPi5zcGxpZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZDojY2NjO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO2RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MmVtOy1tcy1mbGV4LXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO29wYWNpdHk6Ljc7cGFkZGluZycKICAgICAgICAgICAgICAgICAgICAgICAgYic6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAlKTt3aWR0aDoyZW07ei1pbmRleDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMwMDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2hlaWdodDoxLjJlbTt3aWR0aDoxLjJlbX0uc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOicKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlZCl7b3BhY2l0eTouOX0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5JwogICAgICAgICAgICAgICAgICAgICAgICBiJzouM30uc3BsaWRlX19hcnJvdzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbScKICAgICAgICAgICAgICAgICAgICAgICAgYid9LnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOi41ZW07bGVmdDowO3BhZGRpbmc6JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7ei1pbmRleDoxfS5zcGxpZGVfX3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQ6I2NjYztib3JkZXI6MDtib3JkZXItcmFkaScKICAgICAgICAgICAgICAgICAgICAgICAgYid1czo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjhweDttYXJnaW46M3B4O29wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaXR5Oi43O3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Zvcm0gLjJzIGxpbmVhcjt3aWR0aDo4cHh9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMtYWN0aXZle2JhY2tncm91bmQ6I2ZmZjt0cmFuc2Zvcm06c2NhbGUoMS40KTt6LWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDoxfS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6aG92ZXJ7Y3Vyc29yOnBvaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO29wYWNpdHk6Ljl9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1cy12aXNpYmxleycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlLmlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1mb2N1cy1pbiAuc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3Vze291dGxpbmU6M3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19wcm9ncmVzc19fYicKICAgICAgICAgICAgICAgICAgICAgICAgYidhcntiYWNrZ3JvdW5kOiNjY2M7aGVpZ2h0OjNweH0uc3BsaWRlX19zbGlkZXstd2Via2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9LnNwbGlkZV9fc2xpZGU6Zm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Vze291dGxpbmU6MH1Ac3VwcG9ydHMob3V0bGluZS1vZmZzZXQ6LTNweCl7LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidfX3NsaWRlOmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1vZmZzZXQ6LTNweH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0Om4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lKXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle2JvcmRlcjozcHggc29saWQgIycKICAgICAgICAgICAgICAgICAgICAgICAgYicwYmZ9fUBzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlLmlzLWZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0Om5vbmUpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcjozcHggc29saWQgIzBiZn0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3RyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaz4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlOmZvY3Vze2JvcmRlci1jb2xvcjojMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiZn19LnNwbGlkZV9fdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5zcGxpZGVfX3RvZ2dsZTpmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX190b2dnbGU6Zm9jdXN7b3V0bGluZScKICAgICAgICAgICAgICAgICAgICAgICAgYic6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3RyYWNrLS1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGV7Ym9yZGVyOjNweCBzb2xpZCB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXJ9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCBzb2xpZCAjMDAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OmF1dG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO3JpZ2h0OjFlbX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3Zne3RyYW5zZm9ybTpzY2FsZVgoMSl9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX2Fycm93LS1uZXh0e2xlZnQ6MWVtO3JpZ2h0OmF1dG99LnNwbGlkZV9fYXJyb3dzLS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3d7bGVmdDo1MCU7dHJhbnNmb3JtJwogICAgICAgICAgICAgICAgICAgICAgICBiJzp0cmFuc2xhdGUoLTUwJSl9LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLS1wcmV2e3RvcDoxZW19LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2IHN2Z3t0cmFuc2Zvcm06cm90YXRlKC05MGRlZyl9LnNwbGlkZV9fYXJyb3dzLS10JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RiIC5zcGxpZGVfX2Fycm93LS1uZXh0e2JvdHRvbToxZW07dG9wOmF1dG99LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06cm90YScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSg5MGRlZyl9LnNwbGlkZV9fcGFnaW5hdGlvbi0tdHRie2JvdHRvbTowO2Rpc3BsYXk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJy1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4LWRpcmVjdGlvbjpjb2x1bW47bGVmdDphdXRvO3BhZGRpbmc6MWVtIDA7cmlnaHQ6LicKICAgICAgICAgICAgICAgICAgICAgICAgYic1ZW07dG9wOjB9JywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2Nzcy90aGVtZXMvc3BsaWRlLWRlZmF1bHQubWluLmNzcycsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy5zcGxpZGVfX2NvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduOnJlbGF0aXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy1pbml0aWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzdHtkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheTpibG9ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LWFsaWduOmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50ZXItZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXtkaXNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5cGU6bm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmU7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCguaXMtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZXJmbG93KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fcHJvZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlO3Zpc2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuaXMtcmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGVfX3NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm94Oy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LXN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy10eXBlOm5vbmUhaW1wb3J0YW50O21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19zbGlkZSBpbWd7dmVydGljYWwtYWxpZ246Ym90dG9tfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19zcGlubmVye2FuaW1hdGlvbjpzcGxpZGUtbG9hZGluZyAxcyBsaW5lYXIgaW5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRlO2JvcmRlcjoycHggc29saWQgIzk5OTtib3JkZXItbGVmdC1jb2xvcjp0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjA7Y29udGFpbjpzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWN0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZnQ6MDttYXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoyMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7aGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIC5zcGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfX3BhdXNle2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNwbGF5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29nZ2xlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBzcGxpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zvcm06cm90YXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MCFpbXBvcnRhbnQ7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWRlX190cmFjay0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7b3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHk6MTt6LWluZGV4OjF9LnNwbGlkZS0tcnRse2RpcmVjdGlvbjpydGx9LnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVfX3RyYWNrLS10dGI+LnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvd3stbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcjtiYWNrZ3JvdW5kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cnNvcjpwb2ludGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQ6MmVtOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudGVyO29wYWNpdHk6Ljc7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjJlbTt6LWluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMwMDA7aGVpZ2h0OjEuMmVtO3dpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aDoxLjJlbX0uc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOmRpc2FibGVkKXtvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2l0eTouOX0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5Oi4zfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvdzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMwYmY7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gLnNwbGlkZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOi41ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQ6IycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTppbmxpbmUtYmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2NrO2hlaWdodDo4cHg7bWFyZ2luOjNweDtvcGFjaXR5Oi43O3BhZGRpbmc6MDtwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGxpbmVhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7d2lkdGg6OHB4fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2UuaXMtYWN0aXZle2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrZ3JvdW5kOiNmZmY7dHJhbnNmb3JtOnNjYWxlKDEuNCk7ei1pbmRleDoxfS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmhvdmVye2N1cnNvcjpwb2ludGVyO29wYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaXR5Oi45fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuaXMtZm9jdXMtaW4gLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3Byb2dyZXNzX19iYXJ7YmFja2dyb3VuZDojY2NjO2hlaWdodDozcHh9LnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX3NsaWRley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwKX0uc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjB9QHN1cHBvcnRzKG91dGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZV9fc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOmZvY3VzLXZpc2libGV7Ym9yZGVyOjNweCBzb2xpZCAjMGJmfX1Ac3VwcG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzKG91dGxpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVfX3NsaWRlOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6bm9uZSl7LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7Ym9yZGVyOjNweCBzb2xpZCAjMGJmfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RyYWNrPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlci1jb2xvcjojMGJmfX0uc3BsaWRlX190b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX3RvZ2dsZTpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX190b2dnbGU6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZmZzZXQ6M3B4fS5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4uc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZV9fc2xpZGV7Ym9yZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtjdXJzb3I6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50ZXJ9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCBzb2xpZCAjMDAwfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OmF1dG87cmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0OjFlbX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3Zne3RyYW5zZm9ybTpzY2FsZVgoMSl9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX2Fycm93LS1uZXh0e2xlZnQ6MWVtO3JpZ2h0OmF1dG99LnNwbGlkZV9fJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxlWCgtMSl9LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3d7bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9LnNwbGlkZV9fYXJyb3dzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0tdHRiIC5zcGxpZGVfX2Fycm93LS1wcmV2e3RvcDoxZW19LnNwbGlkZV9fYXJybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06cm90YXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgtOTBkZWcpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dHtib3R0b206MWVtO3RvcDphdXRvfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX3BhZ2luYXRpb24tLXR0Yntib3R0b206MDtkaXNwbGF5Oi1tcy1mbGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXJlY3Rpb246Y29sdW1uO2xlZnQ6YXV0bztwYWRkaW5nOjFlbSAwO3JpZ2h0Oi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNWVtO3RvcDowfScsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3MvdGhlbWVzL3NwbGlkZS1kZWZhdWx0Lm1pbi5jc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAyOTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvciknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgeyB3cml0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLyohXG4gKiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLmpzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICA6IE1JVFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xuKGZ1bmN0aW9uIChnJwogICAgICAgICAgICAgICAgICAgICAgICBiImxvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0IgogICAgICAgICAgICAgICAgICAgICAgICBiInlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3J5KCkgOiB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgZGVmaW5lKGZhY3RvcnkpIDogKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAnIgogICAgICAgICAgICAgICAgICAgICAgICBiInVuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5TcGwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaWN0XCc7XG5cbiAgdmFyIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04gPSAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIjtcbiAgdmFyIENSRUFURUQgPSAxJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIE1PVU5URUQgPSAyO1xuICB2YXIgSURMRSA9IDM7XG4gIHZhciBNT1ZJTicKICAgICAgICAgICAgICAgICAgICAgICAgYidHID0gNDtcbiAgdmFyIFNDUk9MTElORyA9IDU7XG4gIHZhciBEUkFHR0lORyA9IDY7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgREVTVFJPWUVEID0gNztcbiAgdmFyIFNUQVRFUyA9IHtcbiAgICBDUkVBVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRDogQ1JFQVRFRCxcbiAgICBNT1VOVEVEOiBNT1VOVEVELFxuICAgIElETEU6IElETEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIE1PVklORzogTU9WSU5HLFxuICAgIFNDUk9MTElORzogU0NST0xMSU5HLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBEUkFHR0lORzogRFJBR0dJTkcsXG4gICAgREVTVFJPWUVEOiBERVNUUk9ZRUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG5cbiAgZnVuY3Rpb24gZW1wdHkoYXJyYXkpIHtcbiAgICBhcnJheS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoID0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWNlKGFycmF5TGlrZSwgc3RhcnQsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMaWsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSwgc3RhcnQsIGVuZCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseShmdW5jKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBmdW5jLmJpbmQuYXBwbHkoZnVuYywgW251bGxdLmNvbmNhdChzbGljZShhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnRzLCAxKSkpO1xuICB9XG5cbiAgdmFyIG5leHRUaWNrID0gc2V0VGltZW91dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZihmdW5jKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYyk7XG4gIH1cblxuICBmdW5jdGlvbiB0eXBlT2YodHlwZSwgc3ViamVjdCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNPYmplY3Qoc3ViamVjdCkge1xuICAgIHJldHVybiAhaXNOdWxsKHN1YmplY3QpICYmIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xuICB9XG5cbiAgdmFyIGlzQXJyYXkgPSBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JyYXkuaXNBcnJheTtcbiAgdmFyIGlzRnVuY3Rpb24gPSBhcHBseSh0eXBlT2YsICJmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24iKTtcbiAgdmFyIGlzU3RyaW5nID0gYXBwbHkodHlwZU9mLCAic3RyaW5nIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsICJ1bmRlZmluZWQiKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgZnVuY3Rpb24gaXNOdWxsKHN1YmplY3QpIHtcbiAgICByZXR1cm4gc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgPT09IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzdWJqZWN0IGluc3RhbmNlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzdWJqZWN0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93KS5IVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gIH1cblxuICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoKHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgICB0b0FycmF5KHZhbHVlcykuZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2goaXRlcmF0ZWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHB1c2goYXJyYXksIGl0ZW1zKSB7XG4gICAgYXJyYXkucHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2guYXBwbHkoYXJyYXksIHRvQXJyYXkoaXRlbXMpKTtcbiAgICByZXR1cm4gYXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgaWYgKGVsbSkge1xuICAgICAgZm9yRWFjaChjbGFzc2VzLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBlbG0uY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzTGlzdFthZGQgPyAiYWRkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMpIHtcbiAgICB0b2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgZm9yRWFjaChjaGlsZHJlbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gICAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhub2RlKSB7XG4gICAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCBub2RlKS5wYXJlbnROb2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZShub2RlLCByZWYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGNoZXMoZWxtLCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBpc0hUTUxFbGVtZW50KGVsbScKICAgICAgICAgICAgICAgICAgICAgICAgYicpICYmIChlbG1bIm1zTWF0Y2hlc1NlbGVjdG9yIl0gfHwgZWxtLm1hdGNoZXMpLmNhbGwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbSwgc2VsZWN0b3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4yID0gcGFyZW50ID8gc2xpY2UocGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudC5jaGlsZHJlbikgOiBbXTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzKGNoaWxkLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IpO1xuICAgIH0pIDogY2hpbGRyZW4yO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RyZW4ocGFyZW50LCBzZWxlY3RvcilbMF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cztcblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yT3duKG9iamVjdCwgaXRlcmF0ZWUsIHJpZ2h0KSB7XG4gICAgaWYgKG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvd25LZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cyhvYmplY3QpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAga2V5ICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgIl9fcHJvdG9fXyIgJiYgaXRlcmF0ZWUob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICB9KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NpZ24ob2JqZWN0KSB7XG4gICAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAoc291cmNlKSB7XG4gICAgICBmb3JPd24oc291cmNlLCBmdW5jdGlvbiAodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBrZXkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1lcmdlKG9iamVjdCkge1xuICAgIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaChmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gKHNvdXJjZSkge1xuICAgICAgZm9yT3duKHNvdXJjZSwgZnVuY3Rpb24gKHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSwga2V5KSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gbWVyZ2Uoe30sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc09iamVjdChvYmplY3Rba2V5XSkgPyBvYmplY3Rba2V5XSA6IHt9LCB2YWx1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzKSB7XG4gICAgZm9yRWFjaChrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cyB8fCBvd25LZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlbGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKGVsbXMsIGF0dHJzKSB7XG4gICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVsbSAmJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgfSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUpIHtcbiAgICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgICBmb3JPdycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKGF0dHJzLCBmdW5jdGlvbiAodmFsdWUyLCBuYW1lKSB7XG4gICAgICAgIHNldEF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgICAgIGlzTnVsbCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUpIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sIGF0dHJzKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGUodGFnLCBhdHRycywgcGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGF0dHJzKSB7XG4gICAgICBpc1N0cmluZyhhdHRycykgPyBhZGRDbGFzcyhlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycyk7XG4gICAgfVxuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICAgIHJldHVybiBlbG07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZWxtKVtwcm9wXTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVsbCh2YWx1ZSkpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbG0uc3R5bGVbcHJvcF0gPSAiIiArIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBkaXNwbGF5KGVsbSwgZGlzcGxheTIpIHtcbiAgICBzdHlsZShlbG0sICJkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheSIsIGRpc3BsYXkyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvY3VzKGVsbSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbG1bInNldEFjdGl2ZSJdICYmIGVsbVsic2V0QWN0aXZlIl0oKSB8fCBlbG0uZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3VzKHtcbiAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gICAgcmV0dXJuIGVsbS5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cmlidXRlKGF0dHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIGVsbSAmJiBlbG0uY2xhc3NMaXN0LmNvbnRhaW5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhjbGFzc05hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgICBmb3JFYWNoKG5vZGVzLCBmdW5jdGlvbiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25vZGUpIHtcbiAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSHRtbChodG1sKSB7XG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBjaGlsZChuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICJ0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dC9odG1sIikuYm9keSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2ZW50KGUsIHN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUHJvcGFnYXRpb24pIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBxdWVyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHBhcmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHF1ZXJ5QWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gc2xpY2UocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICAgIHRvZycKICAgICAgICAgICAgICAgICAgICAgICAgYidnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW1lT2YoZSkge1xuICAgIHJldHVybiBlLnRpbWVTdGFtcDtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB1bml0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZhbHVlID8gdmFsdWUgKyAicHgiIDogIiI7XG4gIH1cblxuICB2YXIgUFJPSkVDVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ09ERSA9ICJzcGxpZGUiO1xuICB2YXIgREFUQV9BVFRSSUJVVEUgPSAiZGF0YS0iICsgUFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0pFQ1RfQ09ERTtcblxuICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCJbIiArIFBST0pFQ1RfQ09ERSArICJdICIgKyAobWVzc2FnZSB8fCAiIikpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICB2YXIgbWluID0gTWF0aC5taW4sXG4gICAgICBtYXggPSBNYXRoLm1heCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICBmbG9vciA9IE1hdGguZmxvb3IsXG4gICAgICBjZWlsID0gTWF0aC5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbCxcbiAgICAgIGFicyA9IE1hdGguYWJzO1xuXG4gIGZ1bmN0aW9uIGFwcHJveGltYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikge1xuICAgIHJldHVybiBhYnMoeCAtIHkpIDwgZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2lsb247XG4gIH1cblxuICBmdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwgeCwgeSwgZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1c2l2ZSkge1xuICAgIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICAgIHZhciBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F4aW11bSA9IG1heCh4LCB5KTtcbiAgICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW11bSA8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIgJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICYmIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIgPD0gbWF4aW11bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gsIHkpIHtcbiAgICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgICB2YXIgbWF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltdW0gPSBtYXgoeCwgeSk7XG4gICAgcmV0dXJuIG1pbihtYXgobWluaW11bSwgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksIG1heGltdW0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiArKHggPiAwKSAtICsoeCA8IDApO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0KHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcsIHJlcGxhY2VtZW50cykge1xuICAgIGZvckVhY2gocmVwbGFjZW1lbnRzLCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKHJlcGxhY2VtZW50KSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyVzIiwgIiIgKyByZXBsYWNlbWVudCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2c7XG4gIH1cblxuICBmdW5jdGlvbiBwYWQobnVtYmVyKSB7XG4gICAgcmV0dXJuIG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgPCAxMCA/ICIwIiArIG51bWJlciA6ICIiICsgbnVtYmVyO1xuICB9XG5cbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZHMgPSB7fTtcblxuICBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuICIiICsgcHJlZml4ICsgcGFkKGlkc1twcmVmaXhdID0gKGlkc1twcmVmaXhdIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwKSArIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gRXZlbnRCaW5kZXIoKSB7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBsaXN0ZW5lcnMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGJpbmQodGFyZ2V0cywgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgIGZvckVhY2hFdmVudCh0YXJnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgZXZlbnRzLCBmdW5jdGlvbiAodGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB2YXIgaXNFdmVudFRhcmdldCA9ICgiYWRkRXZlbnRMaXN0ZW5lciIgaW4gdGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCk7XG4gICAgICAgIHZhciByZW1vdmVyID0gaXNFdmVudFRhcmdldCA/IHRhcmdldC5yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRhcmdldCwgZXZlbnQsIGNhbGxiYWNrLCBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucykgOiB0YXJnZXRbInJlbW92ZUxpc3RlbmVyIl0uYmluZCh0YXJnZXQsIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayk7XG4gICAgICAgIGlzRXZlbnRUYXJnZXQgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQsIGNhbGxiYWNrLCBvcHRpb25zKSA6IHRhcmdldFsiYWRkTGlzdGVuZXIiXShjYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2spO1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChbdGFyZ2V0LCBldmVudCwgbmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGFjZSwgY2FsbGJhY2ssIHJlbW92ZXJdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiB1bmJpbmQodGFyZ2V0cywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2hFdmVudCh0YXJnZXRzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRhcmdldCAmJiBsaXN0ZW5lclsxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1lc3BhY2UgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICAgICAgbGlzdGVuZXJbNF0oKTtcbiAgICAgICAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQsIHR5cGUsIGRldGFpbCkge1xuICAgICAgdmFyIGU7XG4gICAgICB2YXIgYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1YmJsZXMgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIEN1c3RvbUV2ZW50ID09PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgImZ1bmN0aW9uIikge1xuICAgICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KHR5cGUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgYnViYmxlczogYnViYmxlcyxcbiAgICAgICAgICBkZXRhaWw6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXRhaWxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlID0gZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO1xuICAgICAgICBlLmluaXRDdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgZmFsc2UsIGRldGFpbCk7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChlKTtcbiAgICAgIHJldHVybiBlOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQodGFyZ2V0cywgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgaXRlcmF0ZWUpIHtcbiAgICAgIGZvckVhY2godGFyZ2V0cywgZnVuY3Rpb24gKHRhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQpIHtcbiAgICAgICAgdGFyZ2V0ICYmIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbiAoZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIpIHtcbiAgICAgICAgICBldmVudHMyLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKGV2ZW50TlMpIHtcbiAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGV2ZW50TlMuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGl0KCIuIik7XG4gICAgICAgICAgICBpdGVyYXRlZSh0YXJnZXQsIGZyYWdtZW50WzBdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnJhZ21lbnRbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgbGlzdGVuZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGRhdGFbNF0oKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB9KTtcbiAgICAgIGVtcHR5KGxpc3RlbmVycyk7XG4gICAgfVxuXG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiB7XG4gICAgICBiaW5kOiBiaW5kLFxuICAgICAgdW5iaW5kOiB1bmJpbmQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgICAgZGVzdHJveTogZGVzdHJveVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9O1xuICB9XG5cbiAgdmFyIEVWRU5UX01PVU5URUQgPSAibW91bnRlZCI7XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfUkVBRFkgPSAicmVhZHkiO1xuICB2YXIgRVZFTlRfTU9WRSA9ICJtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gIHZhciBFVkVOVF9NT1ZFRCA9ICJtb3ZlZCI7XG4gIHZhciBFVkVOVF9DTElDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0sgPSAiY2xpY2siO1xuICB2YXIgRVZFTlRfQUNUSVZFID0gImFjdGl2ZSI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfSU5BQ1RJVkUgPSAiaW5hY3RpdmUiO1xuICB2YXIgRVZFTlRfVklTSUJMRSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAidmlzaWJsZSI7XG4gIHZhciBFVkVOVF9ISURERU4gPSAiaGlkZGVuIjtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xuICB2YXIgRVZFTlRfVVBEQVRFRCA9ICJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BkYXRlZCI7XG4gIHZhciBFVkVOVF9SRVNJWkUgPSAicmVzaXplIjtcbiAgdmFyIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9SRVNJWkVEID0gInJlc2l6ZWQiO1xuICB2YXIgRVZFTlRfRFJBRyA9ICJkcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyI7XG4gIHZhciBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyI7XG4gIHZhciBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfRFJBR0dFRCA9ICJkcmFnZ2VkIjtcbiAgdmFyIEVWRU5UX1NDUk9MTCA9ICJzY3JvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgdmFyIEVWRU5UX1NDUk9MTEVEID0gInNjcm9sbGVkIjtcbiAgdmFyIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9PVkVSRkxPVyA9ICJvdmVyZmxvdyI7XG4gIHZhciBFVkVOVF9ERVNUUk9ZID0gImRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm95IjtcbiAgdmFyIEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEID0gInBhZ2luYXRpb246bW91bnRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEID0gInBhZ2luYXRpb246dXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQiO1xuICB2YXIgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gIm5hdmlnYXRpb246bScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50ZWQiO1xuICB2YXIgRVZFTlRfQVVUT1BMQVlfUExBWSA9ICJhdXRvcGxheTpwbGF5IicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBFVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gImF1dG9wbGF5OnBsYXlpbmciOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIEVWRU5UX0FVVE9QTEFZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBFVkVOVF9MQVpZTE9BRF9MT0FERUQgPSAibGF6eWxvYWQ6bG9hZGVkIjtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBFVkVOVF9TTElERV9LRVlET1dOID0gInNrIjtcbiAgdmFyIEVWRU5UX1NISUZURUQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgInNoIjtcbiAgdmFyIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0gImVpIjtcblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikge1xuICAgIHZhciBidXMgPSBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiA/IFNwbGlkZTIuZXZlbnQuYnVzIDogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ21lbnQoKTtcbiAgICB2YXIgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcblxuICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBvbihldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgICBiaW5kZXIuYmluZChidXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0b0FycmF5KGV2ZW50cykuam9pbigiICIpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2suYXBwbHkoY2FsbGJhY2ssIGlzQXJyYXkoZS5kZXRhaWwpID8gZS5kZXRhaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsIDogW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdChldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpIHtcbiAgICAgIGJpbmRlci5kaXNwYXRjaChidXMsIGV2ZW50LCBzbGljZShhcmd1bWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLCAxKSk7XG4gICAgfVxuXG4gICAgaWYgKFNwbGlkZTIpIHtcbiAgICAgIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpbmRlci5kZXN0cm95KTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIGFzc2lnbihiaW5kZXIsIHtcbiAgICAgIGJ1czogYnVzLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uOiBvbixcbiAgICAgIG9mZjogYXBwbHkoYmluZGVyLnVuYmluZCwgYnVzKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0OiBlbWl0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBSZXF1ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZSwgbGltaXQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIG5vdyA9IERhdGUubm93O1xuICAgIHZhciBzdGFydFRpbWU7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciByYXRlID0gMDtcbiAgICB2YXIgaWQ7XG4gICAgdmFyIHBhdXNlZCA9IHRydWU7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBjb3VudCA9IDA7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFwYXVzZWQpIHtcbiAgICAgICAgcmF0ZSA9IGludGVydmFsID8gbWluKChub3coKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwsIDEpIDogMTtcbiAgICAgICAgb25VcGRhdGUgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIG9uVXBkYXRlKHJhdGUpO1xuXG4gICAgICAgIGlmIChyYXRlID49IDEpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgb25JbnRlcnZhbCgpO1xuICAgICAgICAgIHN0YXJ0VGltZSA9IG5vdygpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgICAgIGlmIChsaW1pdCAmJiArK2NvdW50ID49IGxpbWl0KSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHN0YXJ0KHJlc3VtZSkge1xuICAgICAgcmVzdW1lIHx8IGNhbmNlbCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHN0YXJ0VGltZSA9IG5vdygpIC0gKHJlc3VtZSA/IHJhdGUgKiBpbnRlcnZhbCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAwKTtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgaWQgPSByYWYodXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgICBwYXVzZWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgICBzdGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RUaW1lID0gbm93KCk7XG4gICAgICByYXRlID0gMDtcblxuICAgICAgaWYgKG9uVXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSkge1xuICAgICAgICBvblVwZGF0ZShyYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgaWQgJiYgY2FuY2VsQW5pbWF0aW9uRnJhbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKGlkKTtcbiAgICAgIHJhdGUgPSAwO1xuICAgICAgaWQgPSAwO1xuICAgICAgcGF1c2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KHRpbWUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbCA9IHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNQYXVzZWQoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuIHBhdXNlZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXJ0OiBzdGFydCxcbiAgICAgIHJld2luZDogcmV3aW5kLFxuICAgICAgcGF1c2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBwYXVzZSxcbiAgICAgIGNhbmNlbDogY2FuY2VsLFxuICAgICAgc2V0OiBzZXQsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaXNQYXVzZWQ6IGlzUGF1c2VkXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICB2YXIgc3RhdGUgPSBpbml0aWFsU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuXG4gICAgZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICBzdGF0ZSA9IHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpcyhzdGF0ZXMpIHtcbiAgICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5jbHVkZXModG9BcnJheShzdGF0ZXMpLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB7XG4gICAgICBzZXQ6IHNldCxcbiAgICAgIGlzOiBpc1xuICAgIH07XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gVGhyb3R0bGUoZnVuYywgZHVyYXRpb24pIHtcbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKGR1cmF0aW9uIHx8IDAsIGZ1bmMsIG51JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaW50ZXJ2YWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgICB9O1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIE1lZGlhKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBzdGF0ZSA9IFNwbGlkZTIuc3RhdGU7XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuYnJlYWtwb2ludHMgfHwge307XG4gICAgdmFyIHJlZHVjZWRNb3Rpb24gPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5yZWR1Y2VkTW90aW9uIHx8IHt9O1xuICAgIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB2YXIgcXVlcmllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2V0dXAoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAibWluIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBvd25LZXlzKGJyZWFrcG9pbnRzKS5zb3J0KGZ1bmN0aW9uIChuLCBtKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmVnaXN0ZXIoYnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrcG9pbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4iIDogIm1heCIpICsgIi13aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g6IiArIGtleSArICJweCkiKTtcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXIocmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZWRNb3Rpb24sIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pO1xuICAgICAgdXBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICAgIGJpbmRlci5kZXN0cm95KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyKG9wdGlvbnMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcXVlcnkpIHtcbiAgICAgIHZhciBxdWVyeUxpc3QgPSBtYXRjaE1lZGlhKHF1ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSk7XG4gICAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaGFuZ2UiLCB1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICAgIHF1ZXJpZXMucHVzaChbb3B0aW9uczIsIHF1ZXJ5TGlzdF0pO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB2YXIgZGVzdHJveWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA9IHN0YXRlLmlzKERFU1RST1lFRCk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uO1xuICAgICAgdmFyIG1lcmdlZCA9IHF1ZXJpZXMucmVkdWNlKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAobWVyZ2VkMiwgZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKG1lcmdlZDInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBlbnRyeVsxXS5tYXRjaGVzID8gZW50cnlbMF0gOiB7fSk7XG4gICAgICB9LCB7fScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgb21pdChvcHRpb25zKTtcbiAgICAgIHNldChtZXJnZWQpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKG9wdGlvbnMuZGVzdHJveSkge1xuICAgICAgICBTcGxpZGUyLmRlc3Ryb3kob3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuZGVzdHJveSA9PT0gImNvbXBsZXRlbHkiKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3llZCkge1xuICAgICAgICBkZXN0cm95KHRydWUpO1xuICAgICAgICBTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5tb3VudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uICE9PSBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5kaXJlY3Rpb24gJiYgU3BsaWRlMi5yZWZyZXNoKCk7XG4gICAgICB9XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZHVjZShlbmFibGUpIHtcbiAgICAgIGlmIChtYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2hNZWRpYShNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OKS5tYXRjaGVzKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBlbmFibGUgPyBtZXJnZShvcHRpb25zLCByZWR1Y2VkTW90aW9uKSA6IG9taXQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMsIG93bktleXMocmVkdWNlZE1vdGlvbikpO1xuICAgICAgfVxuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiBzZXQob3B0cywgYmFzZSwgbm90aWZ5KSB7XG4gICAgICBtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2Uob3B0aW9ucywgb3B0cyk7XG4gICAgICBiYXNlICYmIG1lcmdlKE9iamVjdC5nZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG90eXBlT2Yob3B0aW9ucyksIG9wdHMpO1xuXG4gICAgICBpZiAobm90aWZ5IHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgYichc3RhdGUuaXMoQ1JFQVRFRCkpIHtcbiAgICAgICAgU3BsaWRlMi5lbWl0KEVWRU5UX1VQRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVELCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldHVwOiBzZXR1cCxcbiAgICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkdWNlOiByZWR1Y2UsXG4gICAgICBzZXQ6IHNldFxuICAgIH07XG4gIH1cblxuICB2YXIgQScKICAgICAgICAgICAgICAgICAgICAgICAgYidSUk9XID0gIkFycm93IjtcbiAgdmFyIEFSUk9XX0xFRlQgPSBBUlJPVyArICJMZWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gIHZhciBBUlJPV19SSUdIVCA9IEFSUk9XICsgIlJpZ2h0IjtcbiAgdmFyIEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPV19VUCA9IEFSUk9XICsgIlVwIjtcbiAgdmFyIEFSUk9XX0RPV04gPSBBUlJPVyArICJEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293biI7XG4gIHZhciBSVEwgPSAicnRsIjtcbiAgdmFyIFRUQiA9ICJ0dGIiO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIE9SSUVOVEFUSU9OX01BUCA9IHtcbiAgICB3aWR0aDogWyJoZWlnaHQiXSxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbGVmdDogWyJ0b3AiLCAicmlnaHQiXSxcbiAgICByaWdodDogWyJib3R0b20iLCAibGVmdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciXSxcbiAgICB4OiBbInkiXSxcbiAgICBYOiBbIlkiXSxcbiAgICBZOiBbIlgiXSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQXJyb3dMZWZ0OiBbQVJST1dfVVAsIEFSUk9XX1JJR0hUXSxcbiAgICBBcnJvd1JpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogW0FSUk9XX0RPV04sIEFSUk9XX0xFRlRdXG4gIH07XG5cbiAgZnVuY3Rpb24gRGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlKHByb3AsIGF4aXNPbmx5LCBkaXJlY3Rpb24pIHtcbiAgICAgIGRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBkaXJlY3Rpb24gfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgICB2YXIgaW5kZXggPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlyZWN0aW9uID09PSBSVEwgJiYgIWF4aXNPbmx5ID8gMSA6IGRpcmVjdGlvbiA9PT0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RUQiA/IDAgOiAtMTtcbiAgICAgIHJldHVybiBPUklFTlRBVElPTl9NQVBbcHJvcF0gJiYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09SSUVOVEFUSU9OX01BUFtwcm9wXVtpbmRleF0gfHwgcHJvcC5yZXBsYWNlKC93aWR0aHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVmdHxyaWdodC9pLCBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCkge1xuICAgICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYXNlKCldWycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleF0gfHwgbWF0Y2g7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPiAwID8gcmVwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoMSkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogcmVwbGFjZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKiAob3B0aW9ucy5kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBSVEwgPyAxIDogLTEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZTogcmVzb2x2ZSxcbiAgICAgIG9yaWVudDogb3JpZW50XG4gICAgfTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgUk9MRSA9ICJyb2xlIjtcbiAgdmFyIFRBQl9JTkRFWCA9ICJ0YWJpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3giO1xuICB2YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQiO1xuICB2YXIgQVJJQV9QUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lYID0gImFyaWEtIjtcbiAgdmFyIEFSSUFfQ09OVFJPTFMgPSBBUklBX1BSRUZJWCArICJjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udHJvbHMiO1xuICB2YXIgQVJJQV9DVVJSRU5UID0gQVJJQV9QUkVGSVggKyAiY3VycmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiO1xuICB2YXIgQVJJQV9TRUxFQ1RFRCA9IEFSSUFfUFJFRklYICsgInNlbGVjdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCI7XG4gIHZhciBBUklBX0xBQkVMID0gQVJJQV9QUkVGSVggKyAibGFiZWwiO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUFJFRklYICsgImxhYmVsbGVkYnkiO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEFSSUFfSElEREVOID0gQVJJQV9QUkVGSVggKyAiaGlkZGVuIjtcbiAgdmFyIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX09SSUVOVEFUSU9OID0gQVJJQV9QUkVGSVggKyAib3JpZW50YXRpb24iO1xuICB2YXIgQVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfUk9MRURFU0NSSVBUSU9OID0gQVJJQV9QUkVGSVggKyAicm9sZWRlc2NyaXB0aW9uIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBBUklBX0xJVkUgPSBBUklBX1BSRUZJWCArICJsaXZlIjtcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0JVU1kgPSBBUklBX1BSRUZJWCArICJidXN5IjtcbiAgdmFyIEFSSUFfQVRPTUlDICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IEFSSUFfUFJFRklYICsgImF0b21pYyI7XG4gIHZhciBBTExfQVRUUklCVVRFUyA9IFtSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidMRSwgVEFCX0lOREVYLCBESVNBQkxFRCwgQVJJQV9DT05UUk9MUywgQVJJQV9DVVJSRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZLCBBUklBX0hJRERFTiwgQVJJQV9PUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UQVRJT04sIEFSSUFfUk9MRURFU0NSSVBUSU9OXTtcbiAgdmFyIENMQVNTX1BSRUZJWCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBQUk9KRUNUX0NPREUgKyAiX18iO1xuICB2YXIgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtIjtcbiAgdmFyIENMQVNTX1JPT1QgPSBQUk9KRUNUX0NPREU7XG4gIHZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfVFJBQ0sgPSBDTEFTU19QUkVGSVggKyAidHJhY2siO1xuICB2YXIgQ0xBU1NfTElTVCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19QUkVGSVggKyAibGlzdCI7XG4gIHZhciBDTEFTU19TTElERSA9IENMQVNTX1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVGSVggKyAic2xpZGUiO1xuICB2YXIgQ0xBU1NfQ0xPTkUgPSBDTEFTU19TTElERSArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLS1jbG9uZSI7XG4gIHZhciBDTEFTU19DT05UQUlORVIgPSBDTEFTU19TTElERSArICJfX2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb250YWluZXIiO1xuICB2YXIgQ0xBU1NfQVJST1dTID0gQ0xBU1NfUFJFRklYICsgImFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3MiO1xuICB2YXIgQ0xBU1NfQVJST1cgPSBDTEFTU19QUkVGSVggKyAiYXJyb3ciOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIENMQVNTX0FSUk9XX1BSRVYgPSBDTEFTU19BUlJPVyArICItLXByZXYiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIENMQVNTX0FSUk9XX05FWFQgPSBDTEFTU19BUlJPVyArICItLW5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgdmFyIENMQVNTX1BBR0lOQVRJT04gPSBDTEFTU19QUkVGSVggKyAicGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24iO1xuICB2YXIgQ0xBU1NfUEFHSU5BVElPTl9QQUdFID0gQ0xBU1NfUEFHSU5BVElPTiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiX19wYWdlIjtcbiAgdmFyIENMQVNTX1BST0dSRVNTID0gQ0xBU1NfUFJFRklYICsgInAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9ncmVzcyI7XG4gIHZhciBDTEFTU19QUk9HUkVTU19CQVIgPSBDTEFTU19QUk9HUkVTUyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiX19iYXIiO1xuICB2YXIgQ0xBU1NfVE9HR0xFID0gQ0xBU1NfUFJFRklYICsgInRvZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGUiO1xuICB2YXIgQ0xBU1NfU1BJTk5FUiA9IENMQVNTX1BSRUZJWCArICJzcGlubmVyIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBDTEFTU19TUiA9IENMQVNTX1BSRUZJWCArICJzciI7XG4gIHZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfSU5JVElBTElaRUQgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImluaXRpYWxpemVkIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBDTEFTU19BQ1RJVkUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImFjdGl2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgQ0xBU1NfUFJFViA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAicHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YiO1xuICB2YXIgQ0xBU1NfTkVYVCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibmV4dCI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgQ0xBU1NfVklTSUJMRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAidmlzaWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xuICB2YXIgQ0xBU1NfTE9BRElORyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibG9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpbmciO1xuICB2YXIgQ0xBU1NfRk9DVVNfSU4gPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJmb2N1cy1pbiI7XG4gIHZhciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lYICsgIm92ZXJmbG93IjtcbiAgdmFyIFNUQVRVU19DTEFTU0VTID0gW0NMQVNTX0FDVElWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIENMQVNTX1ZJU0lCTEUsIENMQVNTX1BSRVYsIENMQVNTX05FWFQsIENMQVNTX0xPQUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5HLCBDTEFTU19GT0NVU19JTiwgQ0xBU1NfT1ZFUkZMT1ddO1xuICB2YXIgQ0xBU1NFUyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSB7XG4gICAgc2xpZGU6IENMQVNTX1NMSURFLFxuICAgIGNsb25lOiBDTEFTU19DTE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkUsXG4gICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgYXJyb3c6IENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyxcbiAgICBwcmV2OiBDTEFTU19BUlJPV19QUkVWLFxuICAgIG5leHQ6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19BUlJPV19ORVhULFxuICAgIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBhZ2U6IENMQVNTX1BBR0lOQVRJT05fUEFHRSxcbiAgICBzcGlubmVyOiBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1BJTk5FUlxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsb3Nlc3QoZnJvbSwgc2VsZWN0b3IpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkge1xuICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBmcm9tLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHZhciBlbG0gPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJvbTtcblxuICAgIHdoaWxlIChlbG0gJiYgZWxtLm5vZGVUeXBlID09PSAxKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKG1hdGNoZXMoZWxtLCBzZWxlY3RvcikpIHtcbiAgICAgICAgYnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrO1xuICAgICAgfVxuXG4gICAgICBlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmV0dXJuIGVsbTtcbiAgfVxuXG4gIHZhciBGUklDVElPTiA9IDU7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgTE9HX0lOVEVSVkFMID0gMjAwO1xuICB2YXIgUE9JTlRFUl9ET1dOX0VWRU5UUyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAidG91Y2hzdGFydCBtb3VzZWRvd24iO1xuICB2YXIgUE9JTlRFUl9NT1ZFX0VWRU5UUyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAidG91Y2htb3ZlIG1vdXNlbW92ZSI7XG4gIHZhciBQT0lOVEVSX1VQX0VWRU5UUyA9ICJ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hlbmQgdG91Y2hjYW5jZWwgbW91c2V1cCBjbGljayI7XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0V2ZW50SW50ZXJmYWNlLm9uLFxuICAgICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5iaW5kO1xuXG4gICAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvb3Q7XG4gICAgdmFyIGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gb3B0aW9ucy5pMThuO1xuICAgIHZhciBlbGVtZW50cyA9IHt9O1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVzID0gW107XG4gICAgdmFyIHJvb3RDbGFzc2VzID0gW107XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFja0NsYXNzZXMgPSBbXTtcbiAgICB2YXIgdHJhY2s7XG4gICAgdmFyIGxpc3Q7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBpc1VzaW5nS2V5O1xuXG4gICAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29sbGVjdCgpO1xuICAgICAgaW5pdCgpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRlc3Ryb3kpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgc2V0dXApO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKEVWRU5UX1VQREFURUQsIHVwZGF0ZSk7XG4gICAgICBiaW5kKGRvY3VtZW50LCBQT0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFUl9ET1dOX0VWRU5UUyArICIga2V5ZG93biIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpc1VzaW5nS2V5ID0gZS50eXBlID09PSAia2V5ZG93biI7XG4gICAgICB9LCB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGJpbmQocm9vdCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICJmb2N1c2luIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICB0b2dnbGVDbGFzcyhyb290LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfRk9DVVNfSU4sICEhaXNVc2luZ0tleSk7XG4gICAgICB9KTtcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZWx5KSB7XG4gICAgICB2YXIgYXR0cnMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQUxMX0FUVFJJQlVURVMuY29uY2F0KCJzdHlsZSIpO1xuICAgICAgZW1wdHkoc2xpZGVzKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICByZW1vdmVDbGFzcyhyb290LCByb290Q2xhc3Nlcyk7XG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gICAgICByZW1vdmVBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKFt0cmFjaywgbGlzdF0sIGF0dHJzKTtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcGxldGVseSA/IGF0dHJzIDogWyJzdHlsZSIsIEFSSUFfUk9MRURFU0NSSVBUSU9OJwogICAgICAgICAgICAgICAgICAgICAgICBiJ10pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHJlbW92ZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyhyb290LCByb290Q2xhc3Nlcyk7XG4gICAgICByZW1vdmVDbGFzcyh0cmFjaywgdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrQ2xhc3Nlcyk7XG4gICAgICByb290Q2xhc3NlcyA9IGdldENsYXNzZXMoQ0xBU1NfUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1QpO1xuICAgICAgdHJhY2tDbGFzc2VzID0gZ2V0Q2xhc3NlcyhDTEFTU19UUkFDSycKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgYWRkQ2xhc3Mocm9vdCwgcm9vdENsYXNzZXMpO1xuICAgICAgYWRkQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKHRyYWNrLCB0cmFja0NsYXNzZXMpO1xuICAgICAgc2V0QXR0cmlidXRlKHJvb3QsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0xBQkVMLCBvcHRpb25zLmxhYmVsKTtcbiAgICAgIHNldEF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQVJJQV9MQUJFTExFREJZLCBvcHRpb25zLmxhYmVsbGVkYnkpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBjb2xsZWN0KCkge1xuICAgICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19UUkFDSyk7XG4gICAgICBsaXN0ID0gY2hpbGQodHJhY2ssICIuIiArIENMQVNTX0xJU1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIGFzc2VydCh0cmFjayAmJiBsaXN0LCAiQSB0cmFjay9saXN0IGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIG1pc3NpbmcuIik7XG4gICAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiArIENMQVNTX1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZvck93bih7XG4gICAgICAgIGFycm93czogQ0xBU1NfQVJST1dTLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcGFnaW5hdGlvbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgICAgcHJldjogQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0FSUk9XX1BSRVYsXG4gICAgICAgIG5leHQ6IENMQVNTX0FSUk9XX05FWFQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBiYXI6IENMQVNTX1BST0dSRVNTX0JBUixcbiAgICAgICAgdG9nZ2xlOiBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE9HR0xFXG4gICAgICB9LCBmdW5jdGlvbiAoY2xhc3NOYW1lLCBrZXkpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVsZW1lbnRzW2tleV0gPSBmaW5kKCIuIiArIGNsYXNzTmFtZSk7XG4gICAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICAgICAgcm9vdDogcm9vdCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlczogc2xpZGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpIHtcbiAgICAgIHZhciBpZCA9IHJvb3QuaWQgfHwgdW5pcXVlSWQoUFJPSkVDVF9DT0QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSk7XG4gICAgICB2YXIgcm9sZSA9IG9wdGlvbnMucm9sZTtcbiAgICAgIHJvb3QuaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaWQ7XG4gICAgICB0cmFjay5pZCA9IHRyYWNrLmlkIHx8IGlkICsgIi10cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICAgICAgbGlzdC5pZCA9IGxpc3QuaWQgfHwgaWQgKyAiLWxpc3QiO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCFnZXRBdHRyaWJ1dGUocm9vdCwgUk9MRSkgJiYgcm9vdC50YWdOYW1lICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgIlNFQ1RJT04iICYmIHJvbGUpIHtcbiAgICAgICAgc2V0QXR0cmlidXRlKHJvb3QsIFJPTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCByb2xlKTtcbiAgICAgIH1cblxuICAgICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1JPTEVERVNDUklQVElPTiwgaTE4bi5jYXJvdXNlbCk7XG4gICAgICBzZXRBdHRyaWJ1dGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGxpc3QsIFJPTEUsICJwcmVzZW50YXRpb24iKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmluZChzZWxlY3Rvcikge1xuICAgICAgdmFyIGVsbSA9IHF1ZXJ5KHJvb3QsIHNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rvcik7XG4gICAgICByZXR1cm4gZWxtICYmIGNsb3Nlc3QoZWxtLCAiLiIgKyBDTEFTU19SJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09PVCkgPT09IHJvb3QgPyBlbG0gOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdldENsYXNzZXMoYmFzZSkge1xuICAgICAgcmV0dXJuIFtiYXNlICsgIi0tIiArIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLnR5cGUsIGJhc2UgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWcgJiYgYmFzZSArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBiYXNlICsgIi0tbmF2IiwgYmFzZSA9PT0gQ0xBU1NfUk9PVCAmJiBDTEFTU19BQ1RJVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzaWduKGVsZW1lbnRzLCB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXA6IHNldHVwLFxuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3lcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBTTElERSA9ICJzbGlkZSI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgTE9PUCA9ICJsb29wIjtcbiAgdmFyIEZBREUgPSAiZmFkZSI7XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIFNsaWRlJDEoU3BsaWRlMiwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICAgIHZhciBvbiA9IGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudC5vbixcbiAgICAgICAgZW1pdCA9IGV2ZW50LmVtaXQsXG4gICAgICAgIGJpbmQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQuYmluZDtcbiAgICB2YXIgQ29tcG9uZW50cyA9IFNwbGlkZTIuQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIHJvb3QgPSBTcGxpZGUyLnJvb3QsXG4gICAgICAgIG9wdGlvbnMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlMi5vcHRpb25zO1xuICAgIHZhciBpc05hdmlnYXRpb24gPSBvcHRpb25zLmlzTicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdmlnYXRpb24sXG4gICAgICAgIHVwZGF0ZU9uTW92ZSA9IG9wdGlvbnMudXBkYXRlT25NbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSxcbiAgICAgICAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgICAgcGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSBvcHRpb25zLnBhZ2luYXRpb24sXG4gICAgICAgIHNsaWRlRm9jdXMgPSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5zbGlkZUZvY3VzO1xuICAgIHZhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnJlc29sdmU7XG4gICAgdmFyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZSIpO1xuICAgIHZhciBsYWJlbCA9IGdldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHZhciBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICAgIHZhciBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudGFpbmVyID0gY2hpbGQoc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkZXN0cm95ZWQ7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIWlzQ2xvbmUpIHtcbiAgICAgICAgc2xpZGUuaWQgPSByb290LmlkICsgIi1zbGlkZSIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFkKGluZGV4ICsgMSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2luYXRpb24gPyAidGFicGFuZWwiIDogImdyb3VwIik7XG4gICAgICAgIHNldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuLnNsaWRlKTtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwgbGFiZWwgfHwgZm9ybWF0KGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnNsaWRlTGFiZWwsIFtpbmRleCArIDEsIFNwbGlkZTIubGVuZ3RoXSkpO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgbGlzdGVuKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdGVuKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGJpbmQoc2xpZGUsICJjbGljayIsIGFwcGx5KGVtaXQsIEVWRU5UX0NMSUNLLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZikpO1xuICAgICAgYmluZChzbGlkZSwgImtleWRvd24iLCBhcHBseShlbWl0LCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfU0xJREVfS0VZRE9XTiwgc2VsZikpO1xuICAgICAgb24oW0VWRU5UX01PVkVELCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfU0hJRlRFRCwgRVZFTlRfU0NST0xMRURdLCB1cGRhdGUpO1xuICAgICAgb24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX05BVklHQVRJT05fTU9VTlRFRCwgaW5pdE5hdmlnYXRpb24pO1xuXG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKHVwZGF0ZU9uTW92ZSkge1xuICAgICAgICBvbihFVkVOVF9NT1ZFLCBvbk1vdmUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBldmVudC5kZXN0cm95KCk7XG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vtb3ZlQ2xhc3Moc2xpZGUsIFNUQVRVU19DTEFTU0VTKTtcbiAgICAgIHJlbW92ZUF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUoc2xpZGUsIEFMTF9BVFRSSUJVVEVTKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsICJzdHlsZSIsIHN0eWxlcyk7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMLCBsYWJlbCB8fCAiIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdE5hdicKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2F0aW9uKCkge1xuICAgICAgdmFyIGNvbnRyb2xzID0gU3BsaWRlMi5zcGxpZGVzLm1hcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB2YXIgU2xpZGUyID0gdGFyZ2V0LnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoaW5kZXgpO1xuICAgICAgICByZXR1cm4gUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMiA/IFNsaWRlMi5zbGlkZS5pZCA6ICIiO1xuICAgICAgfSkuam9pbigiICIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwgZm9ybWF0KGkxOG4uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlWCwgKGlzQ2xvbmUgPyBzbGlkZUluZGV4IDogaW5kZXgpICsgMSkpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9DT05UUk9MUywgY29udHJvbHMpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgc2xpZGVGb2N1cyA/ICJidXR0b24iIDogIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIHNsaWRlRm9jdXMgJiYgcmVtb3ZlQXR0cmlidXRlKHNsaWRlLCBBUklBX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0xFREVTQ1JJUFRJT04pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW92ZSgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAoIWRlc3Ryb3llZCkge1xuICAgICAgICB1cGRhdGUoKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKCFkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JveWVkKSB7XG4gICAgICAgIHZhciBjdXJyID0gU3BsaWRlMi5pbmRleDtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHVwZGF0ZUFjdGl2aXR5KCk7XG4gICAgICAgIHVwZGF0ZVZpc2liaWxpdHkoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19QUkVWLCBpbmRleCA9PT0gY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnIgLSAxKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX05FWFQsIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCA9PT0gY3VyciArIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVBY3Rpdml0eSgpIHtcbiAgICAgIHZhciBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKGFjdGl2ZSAhPT0gaGFzQ2xhc3Moc2xpZGUsIENMQVNTX0FDVElWRSkpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19BQ1RJVkUsIGFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfQ1VSUkVOVCwgaXNOYXZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhdGlvbiAmJiBhY3RpdmUgfHwgIiIpO1xuICAgICAgICBlbWl0KGFjdGl2ZSA/IEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgc2VsZik7XG4gICAgICB9XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKSB7XG4gICAgICB2YXIgdmlzaWJsZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBpc1Zpc2libGUoKTtcbiAgICAgIHZhciBoaWRkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAgICBpZiAoIVNwbGlkZTIuc3RhdGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSSUFfSElEREVOLCBoaWRkZW4gfHwgIiIpO1xuICAgICAgfVxuXG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCBvcHRpb25zLmZvY3VzYWJsZU5vZGVzIHx8ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiksIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAiIik7XG5cbiAgICAgIGlmIChzbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVGb2N1cykge1xuICAgICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIFRBQl9JTkRFWCwgaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRlbiA/IC0xIDogMCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2aXNpYmxlICE9PSBoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FzQ2xhc3Moc2xpZGUsIENMQVNTX1ZJU0lCTEUpKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdmlzaWJsZSk7XG4gICAgICAgIGVtaXQodmlzaWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPyBFVkVOVF9WSVNJQkxFIDogRVZFTlRfSElEREVOLCBzZWxmKTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgIGlmICghdmlzaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gc2xpZGUpIHtcbiAgICAgICAgdmFyIFNsaWRlMiA9IENvbXBvbmVudHMuU2xpZGVzLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdChTcGxpZGUyLmluZGV4KTtcbiAgICAgICAgU2xpZGUyICYmIGZvY3VzKFNsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0eWxlJDEocHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHZhbHVlLCB1c2VDb250YWluZXIpIHtcbiAgICAgIHN0eWxlKHVzZUNvbnRhaW5lciAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29udGFpbmVyIHx8IHNsaWRlLCBwcm9wLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGlzQWN0aXZlKCkge1xuICAgICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleDtcbiAgICAgIHJldHVybiBjdXJyID09PSBpbmRleCB8fCBvcHRpb25zLmNsb25lU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cyAmJiBjdXJyID09PSBzbGlkZUluZGV4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1Zpc2libGUoKSB7XG4gICAgICBpZiAoU3BsaWRlMi5pcyhGQURFKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIGlzQWN0aXZlKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFja1JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0ID0gcmVjdChDb21wb25lbnRzLkVsZW1lbnRzLnRyYWNrKTtcbiAgICAgIHZhciBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VSZWN0ID0gcmVjdChzbGlkZSk7XG4gICAgICB2YXIgbGVmdCA9IHJlc29sdmUoImxlZnQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSk7XG4gICAgICB2YXIgcmlnaHQgPSByZXNvbHZlKCJyaWdodCIsIHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIHJldHVybiBmbG9vcih0cmFja1JlY3RbbGVmdF0pIDw9IGNlaWwoc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUmVjdFtsZWZ0XSkgJiYgZmxvb3Ioc2xpZGVSZWN0W3JpZ2h0XSkgPD0gY2VpbCh0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYidSZWN0W3JpZ2h0XSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNXaXRoaW4oZnJvbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpc3RhbmNlKSB7XG4gICAgICB2YXIgZGlmZiA9IGFicyhmcm9tIC0gaW5kZXgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKCFpc0Nsb25lICYmIChvcHRpb25zLnJld2luZCB8fCBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5pcyhMT09QKSkpIHtcbiAgICAgICAgZGlmZiA9IG1pbihkaWZmLCBTcGxpZGUyLmxlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidndGggLSBkaWZmKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpZmYgPD0gZGlzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0ge1xuICAgICAgaW5kZXg6IGluZGV4LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHNsaWRlSW5kZXg6IHNsaWRlSW5kZXgsXG4gICAgICBzbGlkZTogc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBpc0Nsb25lOiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidDbG9uZSxcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGRlc3Ryb3k6IGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5LFxuICAgICAgdXBkYXRlOiB1cGRhdGUsXG4gICAgICBzdHlsZTogc3R5bGUkMSxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpc1dpdGhpbjogaXNXaXRoaW5cbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIFNsaWRlcyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlMiA9IEV2ZW50SW50ZXJmYWNlKFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UyLm9uLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdCA9IF9FdmVudEludGVyZmFjZTIuZW1pdCxcbiAgICAgICAgYmluZCA9IF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UyLmJpbmQ7XG5cbiAgICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBzbGlkZXMgPSBfQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MyJEVsZW1lbnRzLnNsaWRlcyxcbiAgICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMubGlzdDtcbiAgICB2YXIgU2xpZGVzMiA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3kpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLCBpbmRleCkge1xuICAgICAgICByZWdpc3RlcihzbGlkZSwgaW5kZXgsIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIFNsaWRlMi5kZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSgpO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShTbGlkZXMyKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyKSB7XG4gICAgICAgIFNsaWRlMi51cGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgaW5kZXgsIHNsaWRlSW5kZXgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB2YXIgb2JqZWN0ID0gU2xpZGUkMShTcGxpZGUyLCBpbmRleCwgc2xpZGVJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgsIHNsaWRlKTtcbiAgICAgIG9iamVjdC5tb3VudCgpO1xuICAgICAgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIucHVzaChvYmplY3QpO1xuICAgICAgU2xpZGVzMi5zb3J0KGZ1bmN0aW9uIChTbGlkZTEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZTIpIHtcbiAgICAgICAgcmV0dXJuIFNsaWRlMS5pbmRleCAtIFNsaWRlMi5pbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3g7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQoZXhjbHVkZUNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMpIHtcbiAgICAgIHJldHVybiBleGNsdWRlQ2xvbmVzID8gZmlsdGVyKGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUyKSB7XG4gICAgICAgIHJldHVybiAhU2xpZGUyLmlzQ2xvbmU7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSkgOiBTbGlkZXMyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluKHBhZ2UpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGluZGV4ID0gQ29udHJvbGxlci50b0luZGV4KHBhZ2UpO1xuICAgICAgdmFyIG1heCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDb250cm9sbGVyLmhhc0ZvY3VzKCkgPyAxIDogb3B0aW9ucy5wZXJQYWdlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgICByZXR1cm4gYicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHdlZW4oU2xpZGUyLmluZGV4LCBpbmRleCwgaW5kZXggKyBtYXggLSAxKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBdChpbmRleCkge1xuICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBmaWx0ZXIoaW5kZXgpWzBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZChpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbXMsIGluZGV4KSB7XG4gICAgICBmb3JFYWNoKGl0ZW1zLCBmdW5jdGlvbiAoc2xpZGUpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIGlmIChpc1N0cmluZyhzbGlkZSkpIHtcbiAgICAgICAgICBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBwYXJzZUh0bWwoc2xpZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTUxFbGVtZW50KHNsaWRlKSkge1xuICAgICAgICAgIHZhciByZWYgPSBzbGlkZXNbaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXTtcbiAgICAgICAgICByZWYgPyBiZWZvcmUoc2xpZGUsIHJlZikgOiBhcHBlbmQobGlzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlKTtcbiAgICAgICAgICBhZGRDbGFzcyhzbGlkZSwgb3B0aW9ucy5jbGFzc2VzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk7XG4gICAgICAgICAgb2JzZXJ2ZUltYWdlcyhzbGlkZSwgYXBwbHkoZW1pdCwgRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFU0laRSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVtaXQoRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX1JFRlJFU0gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZSQxKG1hdGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gICAgICByZW1vdmUoZmlsdGVyKG1hdGNoZXIpLm1hcChmdW5jdGlvbiAoU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlMikge1xuICAgICAgICByZXR1cm4gU2xpZGUyLnNsaWRlO1xuICAgICAgfSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVtaXQoRVZFTlRfUkVGUkVTSCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2gkMShpdGVyYXRlZSwgZXhjbHVkZUNsb25lcykge1xuICAgICAgZ2V0KGV4Y2x1ZGVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVzKS5mb3JFYWNoKGl0ZXJhdGVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsdGVyKG1hdGNoZXIpIHtcbiAgICAgIHJldHVybiBTbGlkZXMyLmZpbHRlcihpc0Z1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihtYXRjaGVyKSA/IG1hdGNoZXIgOiBmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gaXNTdHJpbmcobWF0Y2hlcikgPyBtYXRjaGVzKFNsaWRlMi5zbGlkZSwgbWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXIpIDogaW5jbHVkZXModG9BcnJheShtYXRjaGVyKSwgU2xpZGUyLmluZGV4KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHlsZShwcm9wLCB2YWx1ZSwgdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNvbnRhaW5lcikge1xuICAgICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIFNsaWRlMi5zdHlsZShwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvYnNlcnZlSW1hZ2VzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbG0sIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwoZWxtLCAiaScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZyIpO1xuICAgICAgdmFyIGxlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAobGVuZ3RoKSB7XG4gICAgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgZnVuY3Rpb24gKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgICAgIGlmICghIC0tbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBmdW5jdGlvbiBnZXRMZW5ndGgoZXhjbHVkZUNsb25lcykge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBleGNsdWRlQ2xvbmVzID8gc2xpZGVzLmxlbmd0aCA6IFNsaWRlczIubGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0Vub3VnaCgpIHtcbiAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gU2xpZGVzMi5sZW5ndGggPiBvcHRpb25zLnBlclBhZ2U7XG4gICAgfVxuXG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidveSxcbiAgICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgICAgcmVnaXN0ZXI6IHJlZ2lzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcixcbiAgICAgIGdldDogZ2V0LFxuICAgICAgZ2V0SW46IGdldEluLFxuICAgICAgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEF0OiBnZXRBdCxcbiAgICAgIGFkZDogYWRkLFxuICAgICAgcmVtb3ZlOiByZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJDEsXG4gICAgICBmb3JFYWNoOiBmb3JFYWNoJDEsXG4gICAgICBmaWx0ZXI6IGZpbHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBnZXRMZW5ndGg6IGdldExlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGgsXG4gICAgICBpc0Vub3VnaDogaXNFbm91Z2hcbiAgICB9O1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIExheW91dChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0V2ZW50SW50ZXJmYWNlMyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gPSBfRXZlbnRJbnRlcmZhY2UzLm9uLFxuICAgICAgICBiaW5kID0gX0V2ZW50SW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZTMuYmluZCxcbiAgICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTMuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICAgIHZhciBfQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyJEVsZW1lbnRzMiA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czIucm9vdCxcbiAgICAgICAgdHJhY2sgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NvbXBvbmVudHMyJEVsZW1lbnRzMi50cmFjayxcbiAgICAgICAgbGlzdCA9IF9Db21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIkRWxlbWVudHMyLmxpc3Q7XG4gICAgdmFyIGdldEF0ID0gU2xpZGVzLmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdCxcbiAgICAgICAgc3R5bGVTbGlkZXMgPSBTbGlkZXMuc3R5bGU7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXJ0aWNhbDtcbiAgICB2YXIgcm9vdFJlY3Q7XG4gICAgdmFyIG92ZXJmbG93O1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgYmluZCh3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZG93LCAicmVzaXplIGxvYWQiLCBUaHJvdHRsZShhcHBseShlbWl0LCBFVkVOVF9SRVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVpFKSkpO1xuICAgICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCk7XG4gICAgICBvbihFVkVOVF9SRVNJWkUsIHJlc2l6ZSk7XG4gICAgfVxuXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2ZXJ0aWNhbCA9IG9wdGlvbnMuZGlyZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gVFRCO1xuICAgICAgc3R5bGUocm9vdCwgIm1heFdpZHRoIiwgdW5pdChvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCkpO1xuICAgICAgc3R5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpbmdMZWZ0IiksICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NQYWRkaW5nKGZhbHNlKSk7XG4gICAgICBzdHlsZSh0cmFjaywgcmVzb2x2ZSgicGFkZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmdSaWdodCIpLCBjc3NQYWRkaW5nKHRydWUpKTtcbiAgICAgIHJlc2l6ZSh0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplKGZvcmNlKSB7XG4gICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5ld1JlY3QgPSByZWN0KHJvb3QpO1xuXG4gICAgICBpZiAoZm9yY2UgfHwgcm9vdFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LndpZHRoICE9PSBuZXdSZWN0LndpZHRoIHx8IHJvb3RSZWN0LmhlaWdodCAhPT0gbicKICAgICAgICAgICAgICAgICAgICAgICAgYidld1JlY3QuaGVpZ2h0KSB7XG4gICAgICAgIHN0eWxlKHRyYWNrLCAiaGVpZ2h0IiwgY3NzVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWNrSGVpZ2h0KCkpO1xuICAgICAgICBzdHlsZVNsaWRlcyhyZXNvbHZlKCJtYXJnaW5SaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQiKSwgdW5pdChvcHRpb25zLmdhcCkpO1xuICAgICAgICBzdHlsZVNsaWRlcygid2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIiwgY3NzU2xpZGVXaWR0aCgpKTtcbiAgICAgICAgc3R5bGVTbGlkZXMoImhlaWdodCIsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NTbGlkZUhlaWdodCgpLCB0cnVlKTtcbiAgICAgICAgcm9vdFJlY3QgPSBuZXdSZWN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgZW1pdChFVkVOVF9SRVNJWkVEKTtcblxuICAgICAgICBpZiAob3ZlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG93ICE9PSAob3ZlcmZsb3cgPSBpc092ZXJmbG93KCkpKSB7XG4gICAgICAgICAgdG9nZ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUNsYXNzKHJvb3QsIENMQVNTX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQoRVZFTlRfT1ZFUkZMT1csIG92ZXJmbG93KTtcbiAgICAgICAgfVxuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG5cbiAgICBmdW5jdGlvbiBjc3NQYWRkaW5nKHJpZ2h0KSB7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICB2YXIgcHJvcCA9IHJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7XG4gICAgICByZXR1cm4gcGFkZGluZyAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5pdChwYWRkaW5nW3Byb3BdIHx8IChpc09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZykpIHx8ICIwcHgiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNzc1RyYWNrSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCgpIHtcbiAgICAgIHZhciBoZWlnaHQgPSAiIjtcblxuICAgICAgaWYgKHZlcnRpY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCkge1xuICAgICAgICBoZWlnaHQgPSBjc3NIZWlnaHQoKTtcbiAgICAgICAgYXNzZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChoZWlnaHQsICJoZWlnaHQgb3IgaGVpZ2h0UmF0aW8gaXMgbWlzc2luZy4iKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGhlaWdodCA9ICJjYWxjKCIgKyBoZWlnaHQgKyAiIC0gIiArIGNzc1BhZGRpbmcoZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHNlKSArICIgLSAiICsgY3NzUGFkZGluZyh0cnVlKSArICIpIjtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3NzSGVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCgpIHtcbiAgICAgIHJldHVybiB1bml0KG9wdGlvbnMuaGVpZ2h0IHx8IHJlY3QobGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpLndpZHRoICogb3B0aW9ucy5oZWlnaHRSYXRpbyk7XG4gICAgfVxuXG4gICAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGNzc1NsaWRlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoID8gbnVsbCA6IHVuaXQob3B0aW9ucy5maXhlZFdpZHRoKSB8fCAodmVydGljYWwgPyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIgOiBjc3NTbGlkZVNpemUoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3NzU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlSGVpZ2h0KCkge1xuICAgICAgcmV0dXJuIHVuaXQob3B0aW9ucy5maXhlZEhlaWdodCkgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8ICh2ZXJ0aWNhbCA/IG9wdGlvbnMuYXV0b0hlaWdodCA/IG51bGwgOiBjc3NTbGlkZVNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plKCkgOiBjc3NIZWlnaHQoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3NzU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlU2l6ZSgpIHtcbiAgICAgIHZhciBnYXAgPSB1bml0KG9wdGlvbnMuZ2FwKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iJwogICAgICAgICAgICAgICAgICAgICAgICBiJyArIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFNpemUoKSB7XG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHJlY3QobGlzdClbcmVzb2x2ZSgid2lkdGgiKV07XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHNsaWRlU2l6ZShpbmRleCwgd2l0aG91dEdhcCkge1xuICAgICAgdmFyIFNsaWRlID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0KGluZGV4IHx8IDApO1xuICAgICAgcmV0dXJuIFNsaWRlID8gcmVjdChTbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUpW3Jlc29sdmUoIndpZHRoIildICsgKHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpKSA6IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG90YWxTaXplKGluZGV4LCB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG91dEdhcCkge1xuICAgICAgdmFyIFNsaWRlID0gZ2V0QXQoaW5kZXgpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKFNsaWRlKSB7XG4gICAgICAgIHZhciByaWdodCA9IHJlY3QoU2xpZGUuc2xpZGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tyZXNvbHZlKCJyaWdodCIpXTtcbiAgICAgICAgdmFyIGxlZnQgPSByZWN0KGxpc3QpW3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NvbHZlKCJsZWZ0IildO1xuICAgICAgICByZXR1cm4gYWJzKHJpZ2h0IC0gbGVmdCkgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2xpZGVyU2l6ZSh3aXRob3V0R2FwKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuIHRvdGFsU2l6ZShTcGxpZGUyLmxlbmd0aCAtIDEpIC0gdG90YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2l6ZSgwKSArIHNsaWRlU2l6ZSgwLCB3aXRob3V0R2FwKTtcbiAgICB9XG5cbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZ2V0R2FwKCkge1xuICAgICAgdmFyIFNsaWRlID0gZ2V0QXQoMCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2xpZGUuc2xpZGUsIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlKCJtYXJnaW5SaWdodCIpKSkgfHwgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ2V0UGFkZGluZyhyaWdodCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrLCByZXNvbHZlKCJwYWRkaW5nIiArIChyaWdodCA/ICJSaWdodCIgOiAiTGVmdCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSkpKSB8fCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT3ZlcmZsb3coKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIFNwbGlkZTIuaXMoRkFERSkgfHwgc2xpZGVyU2l6ZSh0cnVlKSA+IGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0U2l6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgcmVzaXplOiByZXNpemUsXG4gICAgICBsaXN0U2l6ZTogbGlzdFNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgc2xpZGVTaXplOiBzbGlkZVNpemUsXG4gICAgICBzbGlkZXJTaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVyU2l6ZSxcbiAgICAgIHRvdGFsU2l6ZTogdG90YWxTaXplLFxuICAgICAgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFBhZGRpbmc6IGdldFBhZGRpbmcsXG4gICAgICBpc092ZXJmbG93OiBpc092ZXJmbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd1xuICAgIH07XG4gIH1cblxuICB2YXIgTVVMVElQTElFUiA9IDI7XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIENsb25lcyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgICB2YXIgb24gPSBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicub247XG4gICAgdmFyIEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gICAgdmFyIHJlc29sdmUgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gICAgdmFyIGNsb25lcyA9IFtdOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgY2xvbmVDb3VudDtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uKEVWRU5UX1JFRlJFU0gsIHJlbW91bnQpO1xuICAgICAgb24oW0VWRU5UX1VQREFUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VELCBFVkVOVF9SRVNJWkVdLCBvYnNlcnZlKTtcblxuICAgICAgaWYgKGNsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ID0gY29tcHV0ZUNsb25lQ291bnQoKSkge1xuICAgICAgICBnZW5lcmF0ZShjbG9uZUNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCk7XG4gICAgICAgIENvbXBvbmVudHMyLkxheW91dC5yZXNpemUodHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgICBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSgpO1xuICAgICAgbW91bnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidveSgpIHtcbiAgICAgIHJlbW92ZShjbG9uZXMpO1xuICAgICAgZW1wdHkoY2xvbmVzKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBldmVudC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb2JzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VydmUoKSB7XG4gICAgICB2YXIgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWYgKGNsb25lQ291bnQgIT09IGNvdW50KSB7XG4gICAgICAgIGlmIChjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVDb3VudCA8IGNvdW50IHx8ICFjb3VudCkge1xuICAgICAgICAgIGV2ZW50LmVtaXQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1JFRlJFU0gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGdlbmVyYXRlKGNvdW50KSB7XG4gICAgICB2YXIgc2xpZGVzID0gU2xpZGVzLmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoKS5zbGljZSgpO1xuICAgICAgdmFyIGxlbmd0aCA9IHNsaWRlcy5sZW5ndGg7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHdoaWxlIChzbGlkZXMubGVuZ3RoIDwgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KSB7XG4gICAgICAgICAgcHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICAgICAgcHVzaChzbGlkZXMuc2xpY2UoLWNvdW50KSwgc2xpZGVzLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgwLCBjb3VudCkpLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlLCBpbmRleCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgaXNIZWFkID0gaW5kZXggPCBjb3VudDtcbiAgICAgICAgICB2YXIgY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlID0gY2xvbmVEZWVwKFNsaWRlLnNsaWRlLCBpbmRleCk7XG4gICAgICAgICAgaXNIZWFkICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IGJlZm9yZShjbG9uZSwgc2xpZGVzWzBdLnNsaWRlKSA6IGFwcGVuZChFbGVtZW50cy5sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdCwgY2xvbmUpO1xuICAgICAgICAgIHB1c2goY2xvbmVzLCBjbG9uZSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIFNsaWRlcy5yZWdpc3RlcihjbG9uZSwgaW5kZXggLSBjb3VudCArIChpc0hlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gMCA6IGxlbmd0aCksIFNsaWRlLmluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lRGVlcChlbG0sIGluZGV4KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGNsb25lID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGFkZENsYXNzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZSwgb3B0aW9ucy5jbGFzc2VzLmNsb25lKTtcbiAgICAgIGNsb25lLmlkID0gU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIucm9vdC5pZCArICItY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGNsb25lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIHZhciBjbG9uZXMyID0gb3B0aW9ucy5jbG9uZXM7XG5cbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoIVNwbGlkZTIuaXMoTE9PUCkpIHtcbiAgICAgICAgY2xvbmVzMiA9IDA7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSBlbHNlIGlmIChpc1VuZGVmaW5lZChjbG9uZXMyKSkge1xuICAgICAgICB2YXIgZml4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkU2l6ZSA9IG9wdGlvbnNbcmVzb2x2ZSgiZml4ZWRXaWR0aCIpXSAmJiBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczIuTGF5b3V0LnNsaWRlU2l6ZSgwKTtcbiAgICAgICAgdmFyIGZpeGVkQ291bnQgPSBmaXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRTaXplICYmIGNlaWwocmVjdChFbGVtZW50cy50cmFjaylbcmVzb2x2ZSgid2lkdGgiKScKICAgICAgICAgICAgICAgICAgICAgICAgYiddIC8gZml4ZWRTaXplKTtcbiAgICAgICAgY2xvbmVzMiA9IGZpeGVkQ291bnQgfHwgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIildICYmIFNwbGlkZTIubGVuZ3RoIHx8IG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lczI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBkZXN0cm95OiBkZXN0cm95XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIE1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2U0ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZTQub24sXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U0LmVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0O1xuXG4gICAgdmFyIHNldCA9IFNwbGlkZTIuc3RhdGUuc2V0O1xuICAgIHZhciBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJExheW91dCA9IENvbXBvbmVudHMyLkxheW91dCxcbiAgICAgICAgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVTaXplLFxuICAgICAgICBnZXRQYScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZGluZyA9IF9Db21wb25lbnRzMiRMYXlvdXQuZ2V0UGFkZGluZyxcbiAgICAgICAgdG90YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQudG90YWxTaXplLFxuICAgICAgICBsaXN0UycKICAgICAgICAgICAgICAgICAgICAgICAgYidpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0Lmxpc3RTaXplLFxuICAgICAgICBzbGlkZXJTaScKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVyU2l6ZTtcbiAgICB2YXIgX0NvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiREaXJlY3RpbyA9IENvbXBvbmVudHMyLkRpcmVjdGlvbixcbiAgICAgICAgcmVzbycKICAgICAgICAgICAgICAgICAgICAgICAgYidsdmUgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8ucmVzb2x2ZSxcbiAgICAgICAgb3JpZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IF9Db21wb25lbnRzMiREaXJlY3Rpby5vcmllbnQ7XG4gICAgdmFyIF9Db21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgYickRWxlbWVudHMzID0gQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICAgICAgIGxpc3QgPSBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJEVsZW1lbnRzMy5saXN0LFxuICAgICAgICB0cmFjayA9IF9Db21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czIkRWxlbWVudHMzLnRyYWNrO1xuICAgIHZhciBUcmFuc2l0aW9uO1xuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG1vdW50KCkge1xuICAgICAgVHJhbnNpdGlvbiA9IENvbXBvbmVudHMyLlRyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uO1xuICAgICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFU0laRUQsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgcmVwb3NpdGlvbik7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIHJlcG9zaXRpb24oKSB7XG4gICAgICBpZiAoIUNvbXBvbmVudHMyLkNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sbGVyLmlzQnVzeSgpKSB7XG4gICAgICAgIENvbXBvbmVudHMyLlNjcm9sbC5jYW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKCk7XG4gICAgICAgIGp1bXAoU3BsaWRlMi5pbmRleCk7XG4gICAgICAgIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5TbGlkZXMudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1vdmUoZGVzdCwgaW5kZXgsIHByZXYsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgIT09IGluZGV4ICYmIGNhblNoaWZ0KGRlc3QgPiBwcmV2KSkge1xuICAgICAgICBjYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VsKCk7XG4gICAgICAgIHRyYW5zbGF0ZShzaGlmdChnZXRQb3NpdGlvbigpLCBkZXN0ID4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXYpLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgc2V0KE1PVklORyk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZW1pdChFVkVOVF9NT1ZFLCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICBUcmFuc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5zdGFydChpbmRleCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXQoSURMRSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBlbWl0KEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZ1bmN0aW9uIGp1bXAoaW5kZXgpIHtcbiAgICAgIHRyYW5zbGF0ZSh0b1Bvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihpbmRleCwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24sIHByZXZlbnRMb29wKSB7XG4gICAgICBpZiAoIVNwbGlkZTIuaXMoRkFERSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHByZXZlbnRMb29wID8gcG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbG9vcChwb3NpdGlvbik7XG4gICAgICAgIHN0eWxlKGxpc3QsICJ0cmFuc2Zvcm0iLCAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAiKCIgKyBkZXN0aW5hdGlvbiArICJweCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgICAgIHBvc2l0aW9uICE9PSBkZXN0aW5hdGlvbiAmJiBlbWl0KEVWRU5UX1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSElGVEVEKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb29wKHBvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbikge1xuICAgICAgaWYgKFNwbGlkZTIuaXMoTE9PUCkpIHtcbiAgICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCA9IHRvSW5kZXgocG9zaXRpb24pO1xuICAgICAgICB2YXIgZXhjZWVkZWRNYXggPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggPiBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEVuZCgpO1xuICAgICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGV4Y2VlZGVkTWluID0gaW5kZXggPCAwO1xuXG4gICAgICAgIGlmIChleGNlZWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNaW4gfHwgZXhjZWVkZWRNYXgpIHtcbiAgICAgICAgICBwb3NpdGlvbiA9IHNoaWZ0KHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiwgZXhjZWVkZWRNYXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hpZnQocG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBiYWNrd2FyZHMpIHtcbiAgICAgIHZhciBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdChiYWNrd2FyZHMpO1xuICAgICAgdmFyIHNpemUgPSBzbGlkZXJTaXplKCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcG9zaXRpb24gLT0gb3JpZW50KHNpemUgKiAoY2VpbChhYnMoZXhjZXNzKSAvIHNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plKSB8fCAxKSkgKiAoYmFja3dhcmRzID8gMSA6IC0xKTtcbiAgICAgIHJldHVybiBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgdHJhbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF0ZShnZXRQb3NpdGlvbigpLCB0cnVlKTtcbiAgICAgIFRyYW5zaXRpb24uY2FuY2VsKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW5kZXgocG9zaXRpb24pIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzLmdldCgpO1xuICAgICAgdmFyIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleCA9IDA7XG4gICAgICB2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciAodmFyIGkgPSAwOyBpIDwgU2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgc2xpZGVJbmRleCA9IFNsaWRlc1tpXS5pbmRleDtcbiAgICAgICAgdmFyIGRpc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IGFicyh0b1Bvc2l0aW9uKHNsaWRlSW5kZXgsIHRydWUpIC0gcG9zaXRpb24pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgICBpZiAoZGlzdGFuY2UgPD0gbWluRGlzdGFuY2UpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgICBpbmRleCA9IHNsaWRlSScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHRvUG9zaXRpb24oaW5kZXgsIHRyaW1taW5nKSB7XG4gICAgICB2YXIgcG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uID0gb3JpZW50KHRvdGFsU2l6ZShpbmRleCAtIDEpIC0gb2Zmc2V0KGluZGV4KSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIHRyaW1taW5nID8gdHJpbShwb3NpdGlvbikgOiBwb3NpdGlvbjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UG9zaXRpb24oKSB7XG4gICAgICB2YXIgbGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSByZXNvbHZlKCJsZWZ0Iik7XG4gICAgICByZXR1cm4gcmVjdChsaXN0KVtsZWZ0XSAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZWN0KHRyYWNrKVtsZWZ0XSArIG9yaWVudChnZXRQYWRkaW5nKGZhbHNlKSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGZ1bmN0aW9uIHRyaW0ocG9zaXRpb24pIHtcbiAgICAgIGlmIChvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy50cmltU3BhY2UgJiYgU3BsaWRlMi5pcyhTTElERSkpIHtcbiAgICAgICAgcG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gY2xhbXAocG9zaXRpb24sIDAsIG9yaWVudChzbGlkZXJTaXplKHRydWUpIC0gbGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RTaXplKCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQoaW5kZXgpIHtcbiAgICAgIHZhciBmb2N1cyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLmZvY3VzO1xuICAgICAgcmV0dXJuIGZvY3VzID09PSAiY2VudGVyIiA/IChsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdFNpemUoKSAtIHNsaWRlU2l6ZShpbmRleCwgdHJ1ZSkpIC8gMiA6ICtmb2N1cyAqIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemUoaW5kZXgpIHx8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TGltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0KG1heCkge1xuICAgICAgcmV0dXJuIHRvUG9zaXRpb24obWF4ID8gQ29tcG9uZW50czIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRyb2xsZXIuZ2V0RW5kKCkgOiAwLCAhIW9wdGlvbnMudHJpbVNwYWNlKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgZnVuY3Rpb24gY2FuU2hpZnQoYmFja3dhcmRzKSB7XG4gICAgICB2YXIgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidoaWZ0ZWQgPSBvcmllbnQoc2hpZnQoZ2V0UG9zaXRpb24oKSwgYmFja3dhcmRzKSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaWZ0ZWQgPj0gMCA6IHNoaWZ0ZWQgPD0gbGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgiKV0gLSByZWN0KHRyYWNrKVtyZXNvbHZlKCJ3aWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGgiKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhjZWVkZWRMaW1pdChtYXgsIHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbikge1xuICAgICAgcG9zaXRpb24gPSBpc1VuZGVmaW5lZChwb3NpdGlvbikgPyBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0UG9zaXRpb24oKSA6IHBvc2l0aW9uO1xuICAgICAgdmFyIGV4Y2VlZGVkTWluID0gbWF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhPT0gdHJ1ZSAmJiBvcmllbnQocG9zaXRpb24pIDwgb3JpZW50KGdldExpbWl0KGZhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpO1xuICAgICAgdmFyIGV4Y2VlZGVkTWF4ID0gbWF4ICE9PSBmYWxzZSAmJiBvcmllbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHBvc2l0aW9uKSA+IG9yaWVudChnZXRMaW1pdCh0cnVlKSk7XG4gICAgICByZXR1cm4gZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VlZGVkTWluIHx8IGV4Y2VlZGVkTWF4O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbW91bnQ6IG1vdW50LFxuICAgICAgbW92ZTogbW92ZSxcbiAgICAgIGp1bXA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidqdW1wLFxuICAgICAgdHJhbnNsYXRlOiB0cmFuc2xhdGUsXG4gICAgICBzaGlmdDogcycKICAgICAgICAgICAgICAgICAgICAgICAgYidoaWZ0LFxuICAgICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgICB0b0luZGV4OiB0b0luZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleCxcbiAgICAgIHRvUG9zaXRpb246IHRvUG9zaXRpb24sXG4gICAgICBnZXRQb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb246IGdldFBvc2l0aW9uLFxuICAgICAgZ2V0TGltaXQ6IGdldExpbWl0LFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGV4Y2VlZGVkTGltaXQ6IGV4Y2VlZGVkTGltaXQsXG4gICAgICByZXBvc2l0aW9uOiByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvblxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb250cm9sbGVyKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2U1JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2U1Lm9uLFxuICAgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlNS5lbWl0O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZTtcbiAgICB2YXIgZ2V0UG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgICAgZ2V0TGltaXQgPSBNb3ZlLmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RMaW1pdCxcbiAgICAgICAgdG9Qb3NpdGlvbiA9IE1vdmUudG9Qb3NpdGlvbjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIF9Db21wb25lbnRzMiRTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXMsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpc0Vub3VnaCA9IF9Db21wb25lbnRzMiRTbGlkZXMuaXNFbm91Z2gsXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRMZW5ndGggPSBfQ29tcG9uZW50czIkU2xpZGVzLmdldExlbmd0aDtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29taXRFbmQgPSBvcHRpb25zLm9taXRFbmQ7XG4gICAgdmFyIGlzTG9vcCA9IFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKExPT1ApO1xuICAgIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTElERSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBnZXROZXh0ID0gYXBwbHkoZ2V0QWRqYWNlbnQsIGZhbHNlKTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFByZXYgPSBhcHBseShnZXRBZGphY2VudCwgdHJ1ZSk7XG4gICAgdmFyIGN1cnJJbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ggPSBvcHRpb25zLnN0YXJ0IHx8IDA7XG4gICAgdmFyIGVuZEluZGV4O1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcHJldkluZGV4ID0gY3VyckluZGV4O1xuICAgIHZhciBzbGlkZUNvdW50O1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgcGVyTW92ZTtcbiAgICB2YXIgcGVyUGFnZTtcblxuICAgIGZ1bmN0aW9uIG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIG9uKFtFVkVOVF9VUERBVEVELCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0lOREVYX0NIQU5HRURdLCBpbml0KTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihFVkVOVF9SRVNJWkVELCBvblJlc2l6ZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBpbml0KCkge1xuICAgICAgc2xpZGVDb3VudCA9IGdldExlbmd0aCh0cnVlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBwZXJNb3ZlID0gb3B0aW9ucy5wZXJNb3ZlO1xuICAgICAgcGVyUGFnZSA9IG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnBlclBhZ2U7XG4gICAgICBlbmRJbmRleCA9IGdldEVuZCgpO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBpbmRleCA9IGNsYW1wKGN1cnJJbmRleCwgMCwgb21pdEVuZCA/IGVuZEluZGV4IDogcycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlQ291bnQgLSAxKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSBjdXJySW5kZXgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIGN1cnJJbmRleCA9IGluZGV4O1xuICAgICAgICBNb3ZlLnJlcG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25SZXNpemVkKCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGlmIChlbmRJbmRleCAhPT0gZ2V0RW5kKCkpIHtcbiAgICAgICAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBnbyhjb250cm9sLCBhbGxvd1NhbWVJbmRleCwgY2FsbGJhY2spIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIWlzQnVzeSgpKSB7XG4gICAgICAgIHZhciBkZXN0ID0gcGFyc2UoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB2YXIgaW5kZXggPSBsb29wKGRlc3QpO1xuXG4gICAgICAgIGlmIChpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggPiAtMSAmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggIT09IGN1cnJJbmRleCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgICAgc2V0SW5kZXgoaW5kZXgpO1xuICAgICAgICAgIE1vdmUubW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoZGVzdCwgaW5kZXgsIHByZXZJbmRleCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R1cmF0aW9uLCBzbmFwLCBjYWxsYmFjaykge1xuICAgICAgQ29tcG9uZW50czIuU2Nyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBmdW5jdGlvbiAoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUudG9JbmRleChnZXRQb3NpdGlvbigpKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICBzZXRJbmRleChvbWl0RW5kID8gbWluKGluZGV4LCBlbmRJbmRleCkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgpO1xuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlKGNvbnRyb2wpIHtcbiAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggPSBjdXJySW5kZXg7XG5cbiAgICAgIGlmIChpc1N0cmluZyhjb250cm9sKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgdmFyIF9yZWYgPSBjb250cm9sLm1hdGNoKC8oWytcXC08Pl0pKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXGQrKT8vKSB8fCBbXSxcbiAgICAgICAgICAgIGluZGljYXRvciA9IF9yZWZbMV0sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgICAgbnVtYmVyID0gX3JlZlsyXTtcblxuICAgICAgICBpZiAoaW5kaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRvciA9PT0gIisiIHx8IGluZGljYXRvciA9PT0gIi0iKSB7XG4gICAgICAgICAgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyArKCIiICsgaW5kaWNhdG9yICsgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrbnVtYmVyIHx8IDEpKSwgY3VyckluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhdG9yID09PSAiPiIpIHtcbiAgICAgICAgICBpbmRleCA9IG51bWJlciA/IHRvSW5kZXgoKycKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIpIDogZ2V0TmV4dCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRpY2F0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyID09PSAiPCIpIHtcbiAgICAgICAgICBpbmRleCA9IGdldFByZXYodHJ1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleCA9IGlzTG9vcCA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb250cm9sIDogY2xhbXAoY29udHJvbCwgMCwgZW5kSW5kZXgpO1xuICAgICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFkamFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudChwcmV2LCBkZXN0aW5hdGlvbikge1xuICAgICAgdmFyIG51bWJlciA9IHBlck1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IChoYXNGb2N1cygpID8gMSA6IHBlclBhZ2UpO1xuICAgICAgdmFyIGRlc3QgPSBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZURlc3RJbmRleChjdXJySW5kZXggKyBudW1iZXIgKiAocHJldiA/IC0xIDogMSksIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJySW5kZXgsICEocGVyTW92ZSB8fCBoYXNGb2N1cygpKSk7XG5cbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA9PT0gLTEgJiYgaXNTbGlkZSkge1xuICAgICAgICBpZiAoIWFwcHJveGltYXRlbHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXF1YWwoZ2V0UG9zaXRpb24oKSwgZ2V0TGltaXQoIXByZXYpLCAxKSkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gcHJldiA/IDAgOiBlbmRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uID8gZGVzdCA6IGxvb3AoZGVzdCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVEZXN0SW5kZXgoZGVzdCwgZnJvbSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NuYXBQYWdlKSB7XG4gICAgICBpZiAoaXNFbm91Z2goKSB8fCBoYXNGb2N1cygpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICB2YXIgaW5kZXggPSBjb21wdXRlTW92YWJsZURlc3RJbmRleChkZXN0KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSBkZXN0KSB7XG4gICAgICAgICAgZnJvbSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0O1xuICAgICAgICAgIGRlc3QgPSBpbmRleDtcbiAgICAgICAgICBzbmFwUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXN0IDwgMCB8fCBkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCA+IGVuZEluZGV4KSB7XG4gICAgICAgICAgaWYgKCFwZXJNb3ZlICYmIChiZXR3ZWVuKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLCBkZXN0LCBmcm9tLCB0cnVlKSB8fCBiZXR3ZWVuKGVuZEluZGV4LCBmcm9tLCBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSkpKSB7XG4gICAgICAgICAgICBkZXN0ID0gdG9JbmRleCh0b1BhZ2UoZGVzdCkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTG9vcCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgICAgZGVzdCA9IHNuYXBQYWdlID8gZGVzdCA8IDAgPyAtKHNsaWRlQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ICUgcGVyUGFnZSB8fCBwZXJQYWdlKSA6IHNsaWRlQ291bnQgOiBkZXN0O1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5yZXdpbmQpIHtcbiAgICAgICAgICAgICAgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBkZXN0IDwgMCA/IGVuZEluZGV4IDogMDtcbiAgICAgICAgICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICAgICAgICBkZXN0ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc25hcFBhZ2UgJiYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QgIT09IGZyb20pIHtcbiAgICAgICAgICAgIGRlc3QgPSB0b0luZGV4KHRvUGFnZShmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbSkgKyAoZGVzdCA8IGZyb20gPyAtMSA6IDEpKTtcbiAgICAgICAgICB9XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0ID0gLTE7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmFibGVEZXN0SW5kZXgoZGVzdCkge1xuICAgICAgaWYgKGlzU2xpZGUgJiYgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicudHJpbVNwYWNlID09PSAibW92ZSIgJiYgZGVzdCAhPT0gY3VyckluZGV4KSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGlvbigpO1xuXG4gICAgICAgIHdoaWxlICcKICAgICAgICAgICAgICAgICAgICAgICAgYicocG9zaXRpb24gPT09IHRvUG9zaXRpb24oZGVzdCwgdHJ1ZSkgJiYgYmV0d2VlbihkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgMCwgU3BsaWRlMi5sZW5ndGggLSAxLCAhb3B0aW9ucy5yZXdpbmQpKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3QgPCBjdXJySW5kZXggPyAtLWRlc3QgOiArK2Rlc3Q7XG4gICAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBsb29wKGluZGV4KSB7XG4gICAgICByZXR1cm4gaXNMb29wID8gKGluZGV4ICsgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlQ291bnQpICUgc2xpZGVDb3VudCB8fCAwIDogaW5kZXg7XG4gICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGdldEVuZCgpIHtcbiAgICAgIHZhciBlbmQgPSBzbGlkZUNvdW50IC0gKGhhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NGb2N1cygpIHx8IGlzTG9vcCAmJiBwZXJNb3ZlID8gMSA6IHBlclBhZ2UpO1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgd2hpbGUgKG9taXRFbmQgJiYgZW5kLS0gPiAwKSB7XG4gICAgICAgIGlmICh0b1BvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbihzbGlkZUNvdW50IC0gMSwgdHJ1ZSkgIT09IHRvUG9zaXRpb24oZW5kLCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpIHtcbiAgICAgICAgICBlbmQrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsYW1wKGVuZCwgMCwgc2xpZGVDb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSAxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0luZGV4KHBhZ2UpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gY2xhbXAoaGFzRm9jdXMoKSA/IHBhZ2UgOiBwZXJQYWdlICogcGFnZSwgMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1BhZ2UoaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZXR1cm4gaGFzRm9jdXMoKSA/IG1pbihpbmRleCwgZW5kSW5kZXgpIDogZmxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yKChpbmRleCA+PSBlbmRJbmRleCA/IHNsaWRlQ291bnQgLSAxIDogaW5kZXgpIC8gcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclBhZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGVzdChkZXN0aW5hdGlvbikgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHZhciBjbG9zZXN0ID0gTW92ZS50b0luZGV4KGRlc3RpbmF0aW9uKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gaXNTbGlkZSA/IGNsYW1wKGNsb3Nlc3QsIDAsIGVuZEluZGV4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjbG9zZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEluZGV4KGluZGV4KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWYgKGluZGV4ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgICAgcHJldkluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCA9IGN1cnJJbmRleDtcbiAgICAgICAgY3VyckluZGV4ID0gaW5kZXg7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluZGV4KHByZXYpIHtcbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJbmRleDtcbiAgICB9XG5cbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaGFzRm9jdXMoKSB7XG4gICAgICByZXR1cm4gIWlzVW5kZWZpbmVkKG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmZvY3VzKSB8fCBvcHRpb25zLmlzTmF2aWdhdGlvbjtcbiAgICB9XG5cbiAgICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaXNCdXN5KCkge1xuICAgICAgcmV0dXJuIFNwbGlkZTIuc3RhdGUuaXMoW01PVicKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkcsIFNDUk9MTElOR10pICYmICEhb3B0aW9ucy53YWl0Rm9yVHJhbnNpdGlvbjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGdvOiBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28sXG4gICAgICBzY3JvbGw6IHNjcm9sbCxcbiAgICAgIGdldE5leHQ6IGdldE5leHQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgZ2V0UHJldjogZ2V0UHJldixcbiAgICAgIGdldEFkamFjZW50OiBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RqYWNlbnQsXG4gICAgICBnZXRFbmQ6IGdldEVuZCxcbiAgICAgIHNldEluZGV4OiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0SW5kZXgsXG4gICAgICBnZXRJbmRleDogZ2V0SW5kZXgsXG4gICAgICB0b0luZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogdG9JbmRleCxcbiAgICAgIHRvUGFnZTogdG9QYWdlLFxuICAgICAgdG9EZXN0OiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29EZXN0LFxuICAgICAgaGFzRm9jdXM6IGhhc0ZvY3VzLFxuICAgICAgaXNCdXN5OiBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NCdXN5XG4gICAgfTtcbiAgfVxuXG4gIHZhciBYTUxfTkFNRV9TUEFDRSA9ICJodHRwOi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3d3dy53My5vcmcvMjAwMC9zdmciO1xuICB2YXIgUEFUSCA9ICJtMTUuNSAwLjkzMi00LjMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLScKICAgICAgICAgICAgICAgICAgICAgICAgYic0LjQtNC40LTE0LjYtMTQuNnoiO1xuICB2YXIgU0laRSA9IDQwO1xuXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBBcnJvd3MoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICAgICAgZW1pdCA9IGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5lbWl0O1xuICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbGFzc2VzLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczIuRWxlbWVudHMsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxlcjtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5hcnJvd3MsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0cmFjayA9IEVsZW1lbnRzLnRyYWNrO1xuICAgIHZhciB3cmFwcGVyID0gcGxhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG9sZGVyO1xuICAgIHZhciBwcmV2ID0gRWxlbWVudHMucHJldjtcbiAgICB2YXIgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHQgPSBFbGVtZW50cy5uZXh0O1xuICAgIHZhciBjcmVhdGVkO1xuICAgIHZhciB3cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlckNsYXNzZXM7XG4gICAgdmFyIGFycm93cyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oRVZFTlRfVVBEQVRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW91bnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpO1xuICAgICAgbW91bnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCgpIHtcbiAgICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5hcnJvd3M7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoZW5hYmxlZCAmJiAhKHByZXYgJiYgbmV4dCkpIHtcbiAgICAgICAgY3JlYXRlQXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cygpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBhc3NpZ24oYXJyb3dzLCB7XG4gICAgICAgICAgcHJldjogcHJldixcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbmV4dDogbmV4dFxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGxheSh3cmFwcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciwgZW5hYmxlZCA/ICIiIDogIm5vbmUiKTtcbiAgICAgICAgYWRkQ2xhc3Mod3JhcHBlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHdyYXBwZXJDbGFzc2VzID0gQ0xBU1NfQVJST1dTICsgIi0tIiArIG9wdGlvbnMuZGlyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbik7XG5cbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICBsaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduKCk7XG4gICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbcHJldiwgbmV4dF0sIEFSSUFfQ09OVFJPTFMsIHRyYWNrLmlkKTtcbiAgICAgICAgICBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdChFVkVOVF9BUlJPV1NfTU9VTlRFRCwgcHJldiwgbmV4dCk7XG4gICAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIGV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5kZXN0cm95KCk7XG4gICAgICByZW1vdmVDbGFzcyh3cmFwcGVyLCB3cmFwcGVyQ2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMpO1xuXG4gICAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgICByZW1vdmUocGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlaG9sZGVyID8gW3ByZXYsIG5leHRdIDogd3JhcHBlcik7XG4gICAgICAgIHByZXYgPSBuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKFtwcmV2LCBuZXh0XSwgQUxMX0FUVFJJQlVURVMpO1xuICAgICAgfVxuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX01PVkVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfRU5EX0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWF9DSEFOR0VEXSwgdXBkYXRlKTtcbiAgICAgIGJpbmQobmV4dCwgImNsaWNrIiwgYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGx5KGdvLCAiPiIpKTtcbiAgICAgIGJpbmQocHJldiwgImNsaWNrIiwgYXBwbHkoZ28sICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPCIpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgICBDbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudHJvbGxlci5nbyhjb250cm9sLCB0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JlYXRlQXJyb3dzKCkge1xuICAgICAgd3JhcHBlciA9IHBsYWNlaG9sZGVyIHx8IGNyZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoImRpdiIsIGNsYXNzZXMuYXJyb3dzKTtcbiAgICAgIHByZXYgPSBjcmVhdGVBcnJvdygnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSk7XG4gICAgICBuZXh0ID0gY3JlYXRlQXJyb3coZmFsc2UpO1xuICAgICAgY3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZWQgPSB0cnVlO1xuICAgICAgYXBwZW5kKHdyYXBwZXIsIFtwcmV2LCBuZXh0XScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgIXBsYWNlaG9sZGVyICYmIGJlZm9yZSh3cmFwcGVyLCB0cmFjayk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFycm93KHByZXYyKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGFycm93ID0gIjxidXR0b24gY2xhc3M9XFwiIiArIGNsYXNzZXMuYXJyb3cgKyAiICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgKHByZXYyID8gY2xhc3Nlcy5wcmV2IDogY2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwZT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFwiYnV0dG9uXFwiPjxzdmcgeG1sbnM9XFwiIiArIFhNTF9OQU1FX1NQQUNFICsgIlxcIicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmlld0JveD1cXCIwIDAgIiArIFNJWkUgKyAiICIgKyBTSVpFICsgIlxcIiB3aWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiIiArIFNJWkUgKyAiXFwiIGhlaWdodD1cXCIiICsgU0laRSArICJcXCIgZm9jdXNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZT1cXCJmYWxzZVxcIj48cGF0aCBkPVxcIiIgKyAob3B0aW9ucy5hcnJvd1BhdGggfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IFBBVEgpICsgIlxcIiAvPiI7XG4gICAgICByZXR1cm4gcGFyc2VIdG1sKGFycm93KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKHByZXYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYmIG5leHQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gU3BsaWRlMi5pbmRleDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByZXYoKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBuZXh0SW5kZXggPSBDb250cm9sbGVyLmdldE5leHQoKTtcbiAgICAgICAgdmFyIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCA8IHByZXZJbmRleCA/IGkxOG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmxhc3QgOiBpMThuLnByZXY7XG4gICAgICAgIHZhciBuZXh0TGFiZWwgPSBuZXh0SW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPyBpMThuLmZpcnN0IDogaTE4bi5uZXh0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgcHJldi5kaXNhYmxlZCA9IHByZXZJbmRleCA8IDA7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgMDtcbiAgICAgICAgc2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZWwpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUobicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHQsIEFSSUFfTEFCRUwsIG5leHRMYWJlbCk7XG4gICAgICAgIGVtaXQoRVZFTlRfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidXU19VUERBVEVELCBwcmV2LCBuZXh0LCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhcnJvd3M6IGFycm93cyxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgICAgdScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZTogdXBkYXRlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBJTlRFUlZBTF9EQVRBX0FUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RSSUJVVEUgPSBEQVRBX0FUVFJJQlVURSArICItaW50ZXJ2YWwiO1xuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBBdXRvcGxheShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgX0V2ZW50SW50ZXJmYWNlNiA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb24gPSBfRXZlbnRJbnRlcmZhY2U2Lm9uLFxuICAgICAgICBiaW5kID0gX0V2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZTYuYmluZCxcbiAgICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTYuZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQ7XG5cbiAgICB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwob3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJ2YWwsIFNwbGlkZTIuZ28uYmluZChTcGxpZGUyLCAiPiIpLCBvbkFuaW1hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidGcmFtZSk7XG4gICAgdmFyIGlzUGF1c2VkID0gaW50ZXJ2YWwuaXNQYXVzZWQ7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBfQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyJEVsZW1lbnRzNCA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBybycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czQucm9vdCxcbiAgICAgICAgdG9nZ2xlID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiRFbGVtZW50czQudG9nZ2xlO1xuICAgIHZhciBhdXRvcGxheSA9IG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmF1dG9wbGF5O1xuICAgIHZhciBob3ZlcmVkO1xuICAgIHZhciBmb2N1c2VkOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgc3RvcHBlZCA9IGF1dG9wbGF5ID09PSAicGF1c2UiO1xuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG1vdW50KCkge1xuICAgICAgaWYgKGF1dG9wbGF5KSB7XG4gICAgICAgIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZW4oKTtcbiAgICAgICAgdG9nZ2xlICYmIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NPTlRST0xTLCBFbGVtZW50cy50cmFjay5pZCk7XG4gICAgICAgIHN0b3BwZWQgfHwgcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkoKTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGxpc3RlbigpIHtcbiAgICAgIGlmIChvcHRpb25zLnBhdXNlT25Ib3ZlcikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgYmluZChyb290LCAibW91c2VlbnRlciBtb3VzZWxlYXZlIiwgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIChlKSB7XG4gICAgICAgICAgaG92ZXJlZCA9IGUudHlwZSA9PT0gIm1vdXNlZW50ZXIiOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgICBhdXRvVG9nZ2xlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKG9wdGlvbnMucGF1c2VPbkZvY3VzKSB7XG4gICAgICAgIGJpbmQocm9vdCwgIicKICAgICAgICAgICAgICAgICAgICAgICAgYidmb2N1c2luIGZvY3Vzb3V0IiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBmb2N1c2VkICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGUudHlwZSA9PT0gImZvY3VzaW4iO1xuICAgICAgICAgIGF1dG9Ub2dnbGUoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBiaW5kKHRvZ2dsZSwgImNsaWNrIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkID8gcGxheSgpIDogcGF1c2UodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgb24oW0VWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfUkVGUkVTSF0sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbC5yZXdpbmQpO1xuICAgICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgIGlmIChpc1BhdXNlZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSAmJiBDb21wb25lbnRzMi5TbGlkZXMuaXNFbm91Z2goKSkge1xuICAgICAgICBpbnRlcnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQcm9ncmVzcyk7XG4gICAgICAgIGZvY3VzZWQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1BMQVkpO1xuICAgICAgfVxuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICAgICBpZiAoc3RvcCA9PT0gdm9pZCAwKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc3RvcHBlZCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhIXN0b3A7XG4gICAgICB1cGRhdGUoKTtcblxuICAgICAgaWYgKCFpc1BhdXNlZCgpKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBpbnRlcnZhbC5wYXVzZSgpO1xuICAgICAgICBlbWl0KEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYidBVVRPUExBWV9QQVVTRSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29Ub2dnbGUoKSB7XG4gICAgICBpZiAoIXN0b3BwZWQpIHtcbiAgICAgICAgaG92ZXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgfHwgZm9jdXNlZCA/IHBhdXNlKGZhbHNlKSA6IHBsYXkoKTtcbiAgICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKHRvZ2dsZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgdG9nZ2xlQ2xhc3ModG9nZ2xlLCBDTEFTU19BQ1RJVkUsICFzdG9wcGVkKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfTEFCRUwsIG9wdGlvbnMuaScKICAgICAgICAgICAgICAgICAgICAgICAgYicxOG5bc3RvcHBlZCA/ICJwbGF5IiA6ICJwYXVzZSJdKTtcbiAgICAgIH1cbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZShyYXRlKSB7XG4gICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGJhciA9IEVsZW1lbnRzLmJhcjtcbiAgICAgIGJhciAmJiBzdHlsZShiYXIsICJ3aWR0aCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCByYXRlICogMTAwICsgIiUiKTtcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUExBWUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkcsIHJhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW92ZShpbmRleCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHZhciBTbGlkZSA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXRBdChpbmRleCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaW50ZXJ2YWwuc2V0KFNsaWRlICYmICtnZXRBdHRyaWJ1dGUoU2xpZGUuc2xpZGUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSkgfHwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneTogaW50ZXJ2YWwuY2FuY2VsLFxuICAgICAgcGxheTogcGxheSxcbiAgICAgIHBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogcGF1c2UsXG4gICAgICBpc1BhdXNlZDogaXNQYXVzZWRcbiAgICB9O1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIENvdmVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBfRXZlbnRJbnRlcmZhY2U3ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBvbiA9IF9FdmVudEludGVyZmFjZTcub247XG5cbiAgICBmdW5jdGlvbiBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoKSB7XG4gICAgICBpZiAob3B0aW9ucy5jb3Zlcikge1xuICAgICAgICBvbihFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfTEFaWUxPQURfTE9BREVELCBhcHBseSh0b2dnbGUsIHRydWUpKTtcbiAgICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgYXBwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KGNvdmVyLCB0cnVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY292JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyKGNvdmVyMikge1xuICAgICAgQ29tcG9uZW50czIuU2xpZGVzLmZvckVhY2goZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChTbGlkZSkge1xuICAgICAgICB2YXIgaW1nID0gY2hpbGQoU2xpZGUuY29udGFpbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBTbGlkZS5zbGlkZSwgImltZyIpO1xuXG4gICAgICAgIGlmIChpbWcgJiYgaW1nJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcmMpIHtcbiAgICAgICAgICB0b2dnbGUoY292ZXIyLCBpbWcsIFNsaWRlKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvZ2dsZShjb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIyLCBpbWcsIFNsaWRlKSB7XG4gICAgICBTbGlkZS5zdHlsZSgiYmFja2dyb3VuZCIsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcjIgPyAiY2VudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXFwiIiArIGltZy5zcmMgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlxcIikiIDogIiIsIHRydWUpO1xuICAgICAgZGlzcGxheShpbWcsIGNvdmVyMiA/ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbm9uZSIgOiAiIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgICBkZXN0cm95OiBhcHBseShjb3ZlciwgZmFsc2UpXG4gICAgfTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICB2YXIgQk9VTkNFX0RJRkZfVEhSRVNIT0xEID0gMTA7XG4gIHZhciBCT1VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NFX0RVUkFUSU9OID0gNjAwO1xuICB2YXIgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIEJBU0VfVkVMT0NJVFkgPSAxLjU7XG4gIHZhciBNSU5fRFVSQVRJT04gPSA4MDA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlOCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm9uLFxuICAgICAgICBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pdCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICAgIHZhciBzZXQgPSBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMi5zdGF0ZS5zZXQ7XG4gICAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgICBnZXRMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltaXQgPSBNb3ZlLmdldExpbWl0LFxuICAgICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hjZWVkZWRMaW1pdCxcbiAgICAgICAgdHJhbnNsYXRlID0gTW92ZS50cmFuc2xhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTElERSk7XG4gICAgdmFyIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbDtcbiAgICB2YXIgY2FsbGJhY2s7XG4gICAgdmFyIGZyaWN0aW9uID0gMTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIG9uKEVWRU5UX01PVkUsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vhcik7XG4gICAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sIGNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCBzbmFwLCBvblNjcm9sbGVkLCBub0NvbnN0cmFpbikge1xuICAgICAgdmFyIGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYidtID0gZ2V0UG9zaXRpb24oKTtcbiAgICAgIGNsZWFyKCk7XG5cbiAgICAgIGlmIChzbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncCAmJiAoIWlzU2xpZGUgfHwgIWV4Y2VlZGVkTGltaXQoKSkpIHtcbiAgICAgICAgdmFyIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXplID0gQ29tcG9uZW50czIuTGF5b3V0LnNsaWRlclNpemUoKTtcbiAgICAgICAgdmFyIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZzZXQgPSBzaWduKGRlc3RpbmF0aW9uKSAqIHNpemUgKiBmbG9vcihhYnMoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKSAvIHNpemUpIHx8IDA7XG4gICAgICAgIGRlc3RpbmF0aW9uID0gTW92ZS50b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihDb21wb25lbnRzMi5Db250cm9sbGVyLnRvRGVzdChkZXN0aW5hdGlvbiAlIHNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plKSkgKyBvZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBub0Rpc3RhbmNlID0gYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcHJveGltYXRlbHlFcXVhbChmcm9tLCBkZXN0aW5hdGlvbiwgMSk7XG4gICAgICBmcmljdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSAxO1xuICAgICAgZHVyYXRpb24gPSBub0Rpc3RhbmNlID8gMCA6IGR1cmF0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCBtYXgoYWJzKGRlc3RpbmF0aW9uIC0gZnJvbSkgLyBCQVNFX1ZFTE9DSVRZLCBNSU5fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RVUkFUSU9OKTtcbiAgICAgIGNhbGxiYWNrID0gb25TY3JvbGxlZDtcbiAgICAgIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiwgb25FbmQsIGFwcGx5KHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiksIDEpO1xuICAgICAgc2V0KFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1JPTExJTkcpO1xuICAgICAgZW1pdChFVkVOVF9TQ1JPTEwpO1xuICAgICAgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25FbmQoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0KElETEUpO1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0KEVWRU5UX1NDUk9MTEVEKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZyb20sIHRvLCBub0NvbnN0cmFpbiwgcmF0ZSkge1xuICAgICAgdmFyIHBvc2l0aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldFBvc2l0aW9uKCk7XG4gICAgICB2YXIgdGFyZ2V0ID0gZnJvbSArICh0byAtIGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSAqIGVhc2luZyhyYXRlKTtcbiAgICAgIHZhciBkaWZmID0gKHRhcmdldCAtIHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbikgKiBmcmljdGlvbjtcbiAgICAgIHRyYW5zbGF0ZShwb3NpdGlvbiArIGRpZmYpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKGlzU2xpZGUgJiYgIW5vQ29uc3RyYWluICYmIGV4Y2VlZGVkTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbWl0KCkpIHtcbiAgICAgICAgZnJpY3Rpb24gKj0gRlJJQ1RJT05fRkFDVE9SO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpZiAoYWJzKGRpZmYpIDwgQk9VTkNFX0RJRkZfVEhSRVNIT0xEKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHNjcm9sbChnZXRMaW1pdChleGNlZWRlZExpbWl0KHRydWUpKSwgQk9VTkNFXycKICAgICAgICAgICAgICAgICAgICAgICAgYidEVVJBVElPTiwgZmFsc2UsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIGlmIChpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwpIHtcbiAgICAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgIGlmIChpbnRlcnZhbCAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIWludGVydmFsLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgY2xlYXIoKTtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uRW5kKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZWFzaW5nKHQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICB2YXIgZWFzaW5nRnVuYyA9IG9wdGlvbnMuZWFzaW5nRnVuYztcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gZWFzaW5nRnVuYyA/IGVhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEgLSB0LCA0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxcbiAgICAgIGRlc3Ryb3k6IGNsZWFyLFxuICAgICAgc2Nyb2xsOiBzY3JvbGwsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgY2FuY2VsOiBjYW5jZWxcbiAgICB9O1xuICB9XG5cbiAgdmFyIFNDUk9MTF9MSVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEVORVJfT1BUSU9OUyA9IHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogdHJ1ZVxuICB9O1xuXG4gIGZ1bmN0aW9uIERyYWcoU3BsaWRlMiwgQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGVyZmFjZTkgPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOS5vbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kID0gX0V2ZW50SW50ZXJmYWNlOS5iaW5kLFxuICAgICAgICB1bmJpbmQgPSBfRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlOS51bmJpbmQ7XG5cbiAgICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUsXG4gICAgICAgIFNjcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGwgPSBDb21wb25lbnRzMi5TY3JvbGwsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuQ29udHJvbGxlcixcbiAgICAgICAgdHJhY2sgPSBDb21wb25lbnRzMi5FbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMudHJhY2ssXG4gICAgICAgIHJlZHVjZSA9IENvbXBvbmVudHMyLk1lZGlhLnJlZHVjZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIF9Db21wb25lbnRzMiREaXJlY3RpbzIgPSBDb21wb25lbnRzMi5EaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLFxuICAgICAgICByZXNvbHZlID0gX0NvbXBvbmVudHMyJERpcmVjdGlvMi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSxcbiAgICAgICAgb3JpZW50ID0gX0NvbXBvbmVudHMyJERpcmVjdGlvMi5vcmllbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgIHZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBleGNlZWRlZExpbWl0ID0gTW92ZS5leGNlZWRlZExpbWl0O1xuICAgIHZhciBiYXNlUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uO1xuICAgIHZhciBiYXNlRXZlbnQ7XG4gICAgdmFyIHByZXZCYXNlRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgIHZhciBpc0ZyZWU7XG4gICAgdmFyIGRyYWdnaW5nO1xuICAgIHZhciBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWQgPSBmYWxzZTtcbiAgICB2YXIgY2xpY2tQcmV2ZW50ZWQ7XG4gICAgdmFyIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNhYmxlZDtcbiAgICB2YXIgdGFyZ2V0O1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgYmluZCh0cmFjaywgUE9JTlRFUl9NT1ZFX0VWRU5UUywgbm9vcCwgU0NST0xMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgIGJpbmQodHJhY2ssIFBPSU5URVJfVVBfRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UUywgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgYmluZCh0cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ssIFBPSU5URVJfRE9XTl9FVkVOVFMsIG9uUG9pbnRlckRvd24sIFNDUk9MTF9MSVNURU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVJfT1BUSU9OUyk7XG4gICAgICBiaW5kKHRyYWNrLCAiY2xpY2siLCBvbkNsaWNrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGJpbmQodHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrLCAiZHJhZ3N0YXJ0IiwgcHJldmVudCk7XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX1VQREFURURdLCBpbml0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICAgIHZhciBkcmFnID0gb3B0aW9ucy5kcmFnO1xuICAgICAgZGlzYWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoIWRyYWcpO1xuICAgICAgaXNGcmVlID0gZHJhZyA9PT0gImZyZWUiO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGUpIHtcbiAgICAgIGNsaWNrUHJldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgaXNUb3VjaCA9IGlzVG91Y2hFdmVudChlKTtcblxuICAgICAgICBpZiAoaXNEcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dhYmxlKGUudGFyZ2V0KSAmJiAoaXNUb3VjaCB8fCAhZS5idXR0b24pKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICghQ29udHJvbGxlci5pc0J1c3koKSkge1xuICAgICAgICAgICAgdGFyZ2V0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzVG91Y2ggPyB0cmFjayA6IHdpbmRvdztcbiAgICAgICAgICAgIGRyYWdnaW5nID0gc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pO1xuICAgICAgICAgICAgcHJldkJhc2VFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPSBudWxsO1xuICAgICAgICAgICAgYmluZCh0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRTLCBvblBvaW50ZXJNb3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgYmluZCh0YXJnZXQsIFBPSU5URVJfVVBfRVZFTlRTLCBvblBvaW50ZXJVcCwgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgICAgICAgIE1vdmUuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgICAgICAgICAgU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgICAgc2F2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZlbnQoZSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBvblBvaW50ZXJNb3ZlKGUpIHtcbiAgICAgIGlmICghc3RhdGUuaXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RSQUdHSU5HKSkge1xuICAgICAgICBzdGF0ZS5zZXQoRFJBR0dJTkcpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdChFVkVOVF9EUkFHKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUuY2FuY2VsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGUpIHtcbiAgICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgICAgTW92ZS50cicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbnNsYXRlKGJhc2VQb3NpdGlvbiArIGNvbnN0cmFpbihkaWZmQ29vcmQoZSkpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdmFyIGV4cGlyZWQgPSBkaWZmVGltZShlKSA+IExPR19JTlRFUlZBTDtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdmFyIGhhc0V4Y2VlZGVkID0gZXhjZWVkZWQgIT09IChleGNlZWRlZCA9IGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlZWRlZExpbWl0KCkpO1xuXG4gICAgICAgICAgaWYgKGV4cGlyZWQgfHwgaGFzRXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkKSB7XG4gICAgICAgICAgICBzYXZlKGUpO1xuICAgICAgICAgIH1cblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBjbGlja1ByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgZW1pdChFVkVOVF9EUkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0dJTkcpO1xuICAgICAgICAgIHByZXZlbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGlzU2xpZGVyRGlyZWN0aW9uKGUpKSB7XG4gICAgICAgICAgZHJhZ2dpbmcgPSBzaG91bGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3RhcnQoZSk7XG4gICAgICAgICAgcHJldmVudChlKTtcbiAgICAgICAgfVxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJVcChlKSB7XG4gICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgICBzdGF0ZS5zZXQoSURMRSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBlbWl0KEVWRU5UX0RSQUdHRUQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWdnaW5nKSB7XG4gICAgICAgIG1vdmUoZSk7XG4gICAgICAgIHByZXZlbnQoZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgfVxuXG4gICAgICB1bmJpbmQodGFyZ2V0LCBQT0lOVEVSX01PVkVfRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUUywgb25Qb2ludGVyTW92ZSk7XG4gICAgICB1bmJpbmQodGFyZ2V0LCBQT0lOVEVSX1VQXycKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgICAgIGRyYWdnaW5nID0gZmFsc2U7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgaWYgKCFkaXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgJiYgY2xpY2tQcmV2ZW50ZWQpIHtcbiAgICAgICAgcHJldmVudChlLCB0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZShlKSB7XG4gICAgICBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldkJhc2VFdmVudCA9IGJhc2VFdmVudDtcbiAgICAgIGJhc2VFdmVudCA9IGU7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgYmFzZVBvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbW92ZShlKSB7XG4gICAgICB2YXIgdmVsb2NpdHkgPSBjb21wdXRlVmVsb2NpdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpO1xuICAgICAgdmFyIGRlc3RpbmF0aW9uID0gY29tcHV0ZURlc3RpbmF0aW9uKHZlbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2l0eSk7XG4gICAgICB2YXIgcmV3aW5kID0gb3B0aW9ucy5yZXdpbmQgJiYgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kQnlEcmFnO1xuICAgICAgcmVkdWNlKGZhbHNlKTtcblxuICAgICAgaWYgKGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ZyZWUpIHtcbiAgICAgICAgQ29udHJvbGxlci5zY3JvbGwoZGVzdGluYXRpb24sIDAsIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnNuYXApO1xuICAgICAgfSBlbHNlIGlmIChTcGxpZGUyLmlzKEZBREUpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICBDb250cm9sbGVyLmdvKG9yaWVudChzaWduKHZlbG9jaXR5KSkgPCAwID8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJld2luZCA/ICI8IiA6ICItIiA6IHJld2luZCA/ICI+IiA6ICIrIik7XG4gICAgICB9IGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHNlIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiBleGNlZWRlZCAmJiByZXdpbmQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIENvbnRyb2xsZXIuZ28oZXhjZWVkZWRMaW1pdCh0cnVlKSA/ICI+IiA6ICI8IicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ29udHJvbGxlci5nbyhDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlci50b0Rlc3QoZGVzdGluYXRpb24pLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHVjZSh0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdGFydChlKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIHRocmVzaG9sZHMgPSBvcHRpb25zLmRyYWdNaW5UaHJlc2hvbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgdmFyIGlzT2JqID0gaXNPYmplY3QodGhyZXNob2xkcyk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIG1vdXNlID0gaXNPYmogJiYgdGhyZXNob2xkcy5tb3VzZSB8fCAwO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0b3VjaCA9IChpc09iaiA/IHRocmVzaG9sZHMudG91Y2ggOiArdGhyZXNob2xkcykgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IDEwO1xuICAgICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gKGlzVG91Y2hFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkgPyB0b3VjaCA6IG1vdXNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJEaXJlY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gYWInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyhkaWZmQ29vcmQoZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlVmVsb2NpdHkoZSkge1xuICAgICAgaWYgKFNwbGlkZTIuaXMoTE9PUCkgfHwgIWV4Y2VlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZCkge1xuICAgICAgICB2YXIgdGltZSA9IGRpZmZUaW1lKGUpO1xuXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAodGltZSAmJiB0aW1lIDwgTE9HX0lOVEVSVkFMKSB7XG4gICAgICAgICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaWZmQ29vcmQoZSkgLyB0aW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRGVzdGluYXRpb24odicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbG9jaXR5KSB7XG4gICAgICByZXR1cm4gZ2V0UG9zaXRpb24oKSArIHNpZ24odmVsb2NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KSAqIG1pbihhYnModmVsb2NpdHkpICogKG9wdGlvbnMuZmxpY2tQb3dlciB8fCA2MDApJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgaXNGcmVlID8gSW5maW5pdHkgOiBDb21wb25lbnRzMi5MYXlvdXQubGlzdFNpemUoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiAob3B0aW9ucy5mbGlja01heFBhZ2VzIHx8IDEpKTtcbiAgICB9XG5cbiAgICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZGlmZkNvb3JkKGUsIG9ydGhvZ29uYWwpIHtcbiAgICAgIHJldHVybiBjb29yZE9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlLCBvcnRob2dvbmFsKSAtIGNvb3JkT2YoZ2V0QmFzZUV2ZW50KGUpLCBvcnRob2dvbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0aW1lT2YoZSkgLSB0aW1lT2YoZ2V0QmFzZUV2ZW50KGUpKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZnVuY3Rpb24gZ2V0QmFzZUV2ZW50KGUpIHtcbiAgICAgIHJldHVybiBiYXNlRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBlICYmIHByZXZCYXNlRXZlbnQgfHwgYmFzZUV2ZW50O1xuICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpIHtcbiAgICAgIHJldHVybiAoaXNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hFdmVudChlKSA/IGUuY2hhbmdlZFRvdWNoZXNbMF0gOiBlKVsicGFnZSIgKyByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2x2ZShvcnRob2dvbmFsID8gIlkiIDogIlgiKV07XG4gICAgfVxuXG4gICAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGNvbnN0cmFpbihkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZiAvIChleGNlZWRlZCAmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYgU3BsaWRlMi5pcyhTTElERSkgPyBGUklDVElPTiA6IDEpO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBpc0RyYWdnYWJsZSh0YXJnZXQyKSB7XG4gICAgICB2YXIgbm9EcmFnID0gbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMubm9EcmFnO1xuICAgICAgcmV0dXJuICFtYXRjaGVzKHRhcmdldDIsICIuIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19QQUdJTkFUSU9OX1BBR0UgKyAiLCAuIiArIENMQVNTX0FSUk9XKSAmJiAoIW5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RyYWcgfHwgIW1hdGNoZXModGFyZ2V0Miwgbm9EcmFnKSk7XG4gICAgfVxuXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGlzVG91Y2hFdmVudChlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIFRvdWNoRScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50ICE9PSAidW5kZWZpbmVkIiAmJiBlIGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gaXNEcmFnZ2luZygpIHtcbiAgICAgIHJldHVybiBkcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dpbmc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzYWJsZSh2YWx1ZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGRpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudDogbW91bnQsXG4gICAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgICAgaXNEcmFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmc6IGlzRHJhZ2dpbmdcbiAgICB9O1xuICB9XG5cbiAgdmFyIE5PUk1BTElaQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX01BUCA9IHtcbiAgICBTcGFjZWJhcjogIiAiLFxuICAgIFJpZ2h0OiBBUlJPV19SSUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFQsXG4gICAgTGVmdDogQVJST1dfTEVGVCxcbiAgICBVcDogQVJST1dfVVAsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Rvd246IEFSUk9XX0RPV05cbiAgfTtcblxuICBmdW5jdGlvbiBub3JtYWxpemVLZXkoaycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSkge1xuICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkua2V5O1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gTk9STUFMSVpBVElPTl9NQVBba2V5XSB8fCBrZXk7XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEtFWUJPQVJEX0VWRU5UID0gImtleWRvd24iO1xuXG4gIGZ1bmN0aW9uIEtleWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2FyZChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlMTAgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0V2ZW50SW50ZXJmYWNlMTAub24sXG4gICAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMTAuYmluZCxcbiAgICAgICAgdW5iaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAudW5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZDtcblxuICAgIHZhciByb290ID0gU3BsaWRlMi5yb290O1xuICAgIHZhciByZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICAgIHZhciB0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgIHZhciBkaXNhYmxlZDtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluaXQoKTtcbiAgICAgIG9uKEVWRU5UX1VQREFURUQsIGRlc3Ryb3kpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uKEVWRU5UX1VQREFURUQsIGluaXQpO1xuICAgICAgb24oRVZFTlRfTU9WRSwgb25NJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYm9hcmQgPSBvcHRpb25zLmtleWJvYXJkO1xuXG4gICAgICBpZiAoa2V5Ym9hcmQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHRhcmdldCA9IGtleWJvYXJkID09PSAiZ2xvYmFsIiA/IHdpbmRvdyA6IHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb290O1xuICAgICAgICBiaW5kKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93biknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5iaW5kKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQpO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBkaXNhYmxlKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgICB2YXIgX2Rpc2FibGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGRpc2FibGVkO1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgbmV4dFRpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGlzYWJsZWQgPSBfZGlzYWJsZWQ7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKGUpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXkoZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfTEVGVCkpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgU3BsaWRlMi5nbygiPCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlc29sdmUoQVJST1dfUklHSFQpKSB7XG4gICAgICAgICAgU3BsaWRlMi5nbygiPiIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NhYmxlOiBkaXNhYmxlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBTUkNfREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFID0gREFUQV9BVFRSSUJVVEUgKyAiLWxhenkiO1xuICB2YXIgU1JDU0VUX0RBVEFfQVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVFJJQlVURSA9IFNSQ19EQVRBX0FUVFJJQlVURSArICItc3Jjc2V0IjtcbiAgdmFyIElNQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRV9TRUxFQ1RPUiA9ICJbIiArIFNSQ19EQVRBX0FUVFJJQlVURSArICJdLCBbIiArIFNSQycKICAgICAgICAgICAgICAgICAgICAgICAgYidTRVRfREFUQV9BVFRSSUJVVEUgKyAiXSI7XG5cbiAgZnVuY3Rpb24gTGF6eUxvYWQoUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UxMSA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJbnRlcmZhY2UxMS5vbixcbiAgICAgICAgb2ZmID0gX0V2ZW50SW50ZXJmYWNlMTEub2ZmLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTExLmJpbmQsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMTEuZW1pdDtcblxuICAgIHZhciBpc1NlcXVlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0aWFsID0gb3B0aW9ucy5sYXp5TG9hZCA9PT0gInNlcXVlbnRpYWwiO1xuICAgIHZhciBldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzID0gW0VWRU5UX01PVkVELCBFVkVOVF9TQ1JPTExFRF07XG4gICAgdmFyIGVudHJpZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzID0gW107XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmIChvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5sYXp5TG9hZCkge1xuICAgICAgICBpbml0KCk7XG4gICAgICAgIG9uKEVWRU5UX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUZSRVNILCBpbml0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIGVtcHR5KGVudHJpZXMpO1xuICAgICAgcmVnaXN0ZXIoKTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmIChpc1NlcXVlbnRpYWwpIHtcbiAgICAgICAgbG9hZE5leHQoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9IGVsc2Uge1xuICAgICAgICBvZmYoZXZlbnRzKTtcbiAgICAgICAgb24oZXZlbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgY2hlY2spO1xuICAgICAgICBjaGVjaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZWdpc3RlcigpIHtcbiAgICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgICAgcXVlcnlBbGwoU2xpZGUuc2xpZGUsIElNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHRV9TRUxFQ1RPUikuZm9yRWFjaChmdW5jdGlvbiAoaW1nKSB7XG4gICAgICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzcmMgPSBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgc3Jjc2V0ID0gZ2V0QXR0cmlidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQlVURSk7XG5cbiAgICAgICAgICBpZiAoc3JjICE9PSBpbWcuc3JjIHx8IHNyY3NldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IGltZy5zcmNzZXQpIHtcbiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5jbGFzc2VzLnNwaW5uZXI7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gaW1nLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRFbGVtZW50O1xuICAgICAgICAgICAgdmFyIHNwaW5uZXIgPSBjaGlsZChwYXJlbnQsICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiIgKyBjbGFzc05hbWUpIHx8IGNyZWF0ZSgic3BhbiIsIGNsYXNzTmFtZSwgcGFyZW50KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2ltZywgU2xpZGUsIHNwaW5uZXJdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgICAgICBpbWcuc3JjIHx8IGRpc3BsYXkoaW1nLCAibm9uZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGNoZWNrKCkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAoZGF0YSkge1xuICAgICAgICB2YXIgZGlzdGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogKChvcHRpb25zLnByZWxvYWRQYWdlcyB8fCAxKSArIDEpIC0gMTtcbiAgICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBkYXRhWzFdLmlzV2l0aGluKFNwbGlkZTIuaW5kZXgsIGRpc3RhbmNlKSA/IGxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGRhdGEpIDogdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgZW50cmllcy5sZW5ndGggfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mZihldmVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWQoZGF0YSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHZhciBpbWcgPSBkYXRhWzBdO1xuICAgICAgYWRkQ2xhc3MoZGF0YVsxXS5zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0xPQURJTkcpO1xuICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgYXBwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KG9uTG9hZCwgZGF0YSkpO1xuICAgICAgc2V0QXR0cmlidXRlKGltZywgInNyYyIsIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpKTtcbiAgICAgIHNldEF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUoaW1nLCAic3Jjc2V0IiwgZ2V0QXR0cmlidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQlVURSkpO1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKGltZywgU1JDX0RBVEFfQVRUUklCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VURSk7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkxvYWQoZGF0YSwgZSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbWcgPSBkYXRhWzBdLFxuICAgICAgICAgIFNsaWRlID0gZGF0YVsxXTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZW1vdmVDbGFzcyhTbGlkZS5zbGlkZSwgQ0xBU1NfTE9BRElORyk7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoZS50eXBlICE9PSAiZXJyb3IiKSB7XG4gICAgICAgIHJlbW92ZShkYXRhWzInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSk7XG4gICAgICAgIGRpc3BsYXkoaW1nLCAiIik7XG4gICAgICAgIGVtaXQoRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0xBWllMT0FEX0xPQURFRCwgaW1nLCBTbGlkZSk7XG4gICAgICAgIGVtaXQoRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0laRSk7XG4gICAgICB9XG5cbiAgICAgIGlzU2VxdWVudGlhbCAmJiBsb2FkTmV4dCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTmV4dCgpIHtcbiAgICAgIGVudHJpZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aCAmJiBsb2FkKGVudHJpZXMuc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBhcHBseShlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wdHksIGVudHJpZXMpLFxuICAgICAgY2hlY2s6IGNoZWNrXG4gICAgfTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBQYWdpbmF0aW9uKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgb24gPSBldmVudC5vbixcbiAgICAgICAgZW1pdCA9IGV2ZW50LmVtaXQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBiaW5kID0gZXZlbnQuYmluZDtcbiAgICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlNsaWRlcyxcbiAgICAgICAgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgaGFzRm9jdXMgPSBDb250cm9sbGVyLmhhc0ZvY3VzLFxuICAgICAgICBnZXRJbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggPSBDb250cm9sbGVyLmdldEluZGV4LFxuICAgICAgICBnbyA9IENvbnRyb2xsZXIuZycKICAgICAgICAgICAgICAgICAgICAgICAgYidvO1xuICAgIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlO1xuICAgIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLnBhZ2luYXRpb247XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBsaXN0O1xuICAgIHZhciBwYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbkNsYXNzZXM7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5KCk7XG4gICAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRScKICAgICAgICAgICAgICAgICAgICAgICAgYidORF9JTkRFWF9DSEFOR0VEXSwgbW91bnQpO1xuICAgICAgdmFyIGVuYWJsZWQgPSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5wYWdpbmF0aW9uO1xuICAgICAgcGxhY2Vob2xkZXIgJiYgZGlzcGxheShwbGFjZWhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIsIGVuYWJsZWQgPyAiIiA6ICJub25lIik7XG5cbiAgICAgIGlmIChlbmFibGVkKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBvbihbRVZFTlRfTU9WRSwgRVZFTlRfU0NST0xMLCBFVkVOVF9TQ1JPTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMRURdLCB1cGRhdGUpO1xuICAgICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1cGRhdGUoKTtcbiAgICAgICAgZW1pdChFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgICBpdGVtczogaXRlbXNcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIH0sIGdldEF0KFNwbGlkZTIuaW5kZXgpKTtcbiAgICAgIH1cbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIGlmIChsaXN0KSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmUocGxhY2Vob2xkZXIgPyBzbGljZShsaXN0LmNoaWxkcmVuKSA6IGxpc3QpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgcmVtb3ZlQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsYXNzZXMpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgZW1wdHkoaXRlbXMpO1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlUGFnaW5hdGlvbigpIHtcbiAgICAgIHZhciBsZW5ndGggPSBTcGxpZGUyLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g7XG4gICAgICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgICAgICBwZXJQYWdlID0gb3B0aW9ucy5wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZTtcbiAgICAgIHZhciBtYXggPSBoYXNGb2N1cygpID8gQ29udHJvbGxlci5nZXRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kKCkgKyAxIDogY2VpbChsZW5ndGggLyBwZXJQYWdlKTtcbiAgICAgIGxpc3QgPSBwbGFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vob2xkZXIgfHwgY3JlYXRlKCJ1bCIsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyYWNrLnBhcmVudEVsZW1lbnQpO1xuICAgICAgYWRkQ2xhc3MobGlzdCwgcGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25DbGFzc2VzID0gQ0xBU1NfUEFHSU5BVElPTiArICItLSIgKyBnZXREaXJlY3Rpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc2V0QXR0cmlidXRlKGxpc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0KTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUobGlzdCwgQVJJQV9PUklFTlRBVElPTiwgZ2V0RGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuXG4gICAgICBmb3IgKHZhciBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICB2YXIgbGkgPSBjcmVhdGUoImxpIiwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsIGxpc3QpO1xuICAgICAgICB2YXIgYnV0dG9uID0gY3JlYXRlKCJidXR0b24iLCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICAgIGNsYXNzOiBjbGFzc2VzLnBhZ2UsXG4gICAgICAgICAgdHlwZTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJidXR0b24iXG4gICAgICAgIH0sIGxpKTtcbiAgICAgICAgdmFyIGNvbnRyb2xzID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlcy5nZXRJbihpKS5tYXAoZnVuY3Rpb24gKFNsaWRlKSB7XG4gICAgICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBTbGlkZS5zbGlkZS5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0ZXh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICFoYXNGb2N1cygpICYmIHBlclBhZ2UgPiAxID8gaTE4bi5wYWdlWCA6IGkxOG4uc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlWDtcbiAgICAgICAgYmluZChidXR0b24sICJjbGljayIsIGFwcGx5KG9uQ2xpY2ssIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIGJpbmQoYnV0dG9uLCAia2V5ZG93biIsIGFwcGx5KG9uS2V5ZG93biwgaSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEF0dHJpYnV0ZShsaSwgUk9MRSwgInByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzZW50YXRpb24iKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgUk9MRSwgInRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2IiKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgQVJJQV9DT05UUk9MUywgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb2xzLmpvaW4oIiAiKSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMLCBmb3JtYXQodGV4dCwgaSArIDEpKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKGJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgbGk6IGxpLFxuICAgICAgICAgIGJ1dHRvbjogYnV0dG9uLFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYWdlOiBpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbkNsaWNrKHBhZ2UpIHtcbiAgICAgIGdvKCI+IiArIHBhZ2UsIHRydWUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbktleWRvd24ocGFnZSwgZSkge1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICAgIHZhciBkaXIgPSBnZXREaXJlY3Rpb24oKTtcbiAgICAgIHZhciBuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dFBhZ2UgPSAtMTtcblxuICAgICAgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19SSScKICAgICAgICAgICAgICAgICAgICAgICAgYidHSFQsIGZhbHNlLCBkaXIpKSB7XG4gICAgICAgIG5leHRQYWdlID0gKytwYWdlICUgbGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX0xFRlQsIGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSwgZGlyKSkge1xuICAgICAgICBuZXh0UGFnZSA9ICgtLXBhZ2UgKyBsZW5ndGgpICUgbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiSG9tZSIpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG5leHRQYWdlID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiRW5kIikgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGl0ZW0gPSBpdGVtc1tuZXh0UGFnZV07XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBmb2N1cyhpdGVtLmJ1dHRvbik7XG4gICAgICAgIGdvKCI+IiArIG5leHRQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGdldERpcmVjdGlvbigpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnBhZ2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uRGlyZWN0aW9uIHx8IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBnZXRBdChpbmRleCkge1xuICAgICAgcmV0dXJuIGl0ZW1zW0NvbnRyb2xsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyLnRvUGFnZShpbmRleCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgcHJldiA9IGdldEF0KGdldEluZGV4KHRydWUpKTtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgY3VyciA9IGdldEF0KGdldEluZGV4KCkpO1xuXG4gICAgICBpZiAocHJldikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgdmFyIGJ1dHRvbiA9IHByZXYuYnV0dG9uO1xuICAgICAgICByZW1vdmVDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoYnV0dG9uLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgICByZW1vdmVBdHRyaWJ1dGUoYnV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvbiwgQVJJQV9TRUxFQ1RFRCk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JfSU5ERVgsIC0xKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnIpIHtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBfYnV0dG9uID0gY3Vyci5idXR0b247XG4gICAgICAgIGFkZENsYXNzKF9idXR0b24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0VMRUNURUQsIHRydWUpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVEFCX0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWCwgIiIpO1xuICAgICAgfVxuXG4gICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VQREFURUQsIHtcbiAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgaXRlbXM6IGl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vtc1xuICAgICAgfSwgcHJldiwgY3Vycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpdGVtczogaXRlbXMsXG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JveTogZGVzdHJveSxcbiAgICAgIGdldEF0OiBnZXRBdCxcbiAgICAgIHVwZGF0ZTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VwZGF0ZVxuICAgIH07XG4gIH1cblxuICB2YXIgVFJJR0dFUl9LRVlTID0gWyIgIiwgIkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlciJdO1xuXG4gIGZ1bmN0aW9uIFN5bmMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKSB7XG4gICAgdmFyIGlzTmF2aWdhdGlvbiA9IG9wdGlvbnMuaXNOYXZpZ2F0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixcbiAgICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGb2N1cztcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGV2ZW50cyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlMi5zcGxpZGVzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKCF0YXJnZXQuaXNQYXJlbnQpIHtcbiAgICAgICAgICBzeW5jKFNwbGlkZTIsIHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Quc3BsaWRlKTtcbiAgICAgICAgICBzeW5jKHRhcmdldC5zcGxpZGUsIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpc05hdmlnYXRpb24pICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIG5hdmlnYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGRlc3Ryb3koKSB7XG4gICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgZW1wdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGV2ZW50cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3VudCgpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95KCk7XG4gICAgICBtb3VudCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jKHNwbGlkZSwgdGFyZ2V0KSB7XG4gICAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uoc3BsaWRlKTtcbiAgICAgIGV2ZW50Lm9uKEVWRU5UX01PVkUsIGZ1bmN0aW9uIChpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gsIHByZXYsIGRlc3QpIHtcbiAgICAgICAgdGFyZ2V0LmdvKHRhcmdldC5pcyhMT09QKSA/JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0IDogaW5kZXgpO1xuICAgICAgfSk7XG4gICAgICBldmVudHMucHVzaChldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5hdmlnYXRlKCkge1xuICAgICAgdmFyIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICAgICAgdmFyIG9uID0gZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uO1xuICAgICAgb24oRVZFTlRfQ0xJQ0ssIG9uQ2xpY2spO1xuICAgICAgb24oRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1NMSURFX0tFWURPV04sIG9uS2V5ZG93bik7XG4gICAgICBvbihbRVZFTlRfTU9VTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIEVWRU5UX1VQREFURURdLCB1cGRhdGUpO1xuICAgICAgZXZlbnRzLnB1c2goZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIGV2ZW50LmVtaXQoRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVELCBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMi5zcGxpZGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKENvbXBvbmVudHMyLkVsZW1lbnRzLmxpc3QsIEFSSUFfT1JJRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FUSU9OLCBvcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCID8gInZlcnRpY2FsIiA6ICIiKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbGljayhTbGlkZSkge1xuICAgICAgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIuZ28oU2xpZGUuaW5kZXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uS2V5ZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd24oU2xpZGUsIGUpIHtcbiAgICAgIGlmIChpbmNsdWRlcyhUUklHR0VSX0tFWVMsIG5vcm0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxpemVLZXkoZSkpKSB7XG4gICAgICAgIG9uQ2xpY2soU2xpZGUpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldmVudChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVwOiBhcHBseShDb21wb25lbnRzMi5NZWRpYS5zZXQsIHtcbiAgICAgICAgc2xpZGVGb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6IGlzVW5kZWZpbmVkKHNsaWRlRm9jdXMpID8gaXNOYXZpZ2F0aW9uIDogc2xpZGVGbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXNcbiAgICAgIH0sIHRydWUpLFxuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3k6IGRlc3Ryb3ksXG4gICAgICByZW1vdW50OiByZW1vdW50XG4gICAgfTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBXaGVlbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlMTIgPSBFdmVudEludGVyZmFjZShTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMiksXG4gICAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMi5iaW5kO1xuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBsYXN0VGltZSA9IDA7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAob3B0aW9ucy53aGVlbCkge1xuICAgICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy50cmFjaywgIndoZWVsIiwgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidTKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoZS5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmRlbHRhWScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgIHZhciBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHRpbWVTdGFtcCA9IHRpbWVPZihlKTtcblxuICAgICAgICB2YXIgX21pbiA9IG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLndoZWVsTWluVGhyZXNob2xkIHx8IDA7XG5cbiAgICAgICAgdmFyIHNsZWVwICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IG9wdGlvbnMud2hlZWxTbGVlcCB8fCAwO1xuXG4gICAgICAgIGlmIChhYnMoZGVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhWSkgPiBfbWluICYmIHRpbWVTdGFtcCAtIGxhc3RUaW1lID4gc2xlZXApIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU3BsaWRlMi5nbyhiYWNrd2FyZHMgPyAiPCIgOiAiPiIpO1xuICAgICAgICAgIGxhcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0VGltZSA9IHRpbWVTdGFtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNob3VsZFByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50KGJhY2t3YXJkcykgJiYgcHJldmVudChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gc2hvdWxkUHJldmVudChiYWNrd2FyZHMpIHtcbiAgICAgIHJldHVybiAhbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMucmVsZWFzZVdoZWVsIHx8IFNwbGlkZTIuc3RhdGUuaXMoTU9WSU5HKSB8fCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRBZGphY2VudChiYWNrd2FyZHMpICE9PSAtMTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuICB9XG5cbiAgdmFyIFNSX1JFTU9WQUxfREVMQVkgPSA5MDtcblxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgTGl2ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlMTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgX0V2ZW50SW50ZXJmYWNlMTMub247XG5cbiAgICB2YXIgdHJhY2sgPSBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czIuRWxlbWVudHMudHJhY2s7XG4gICAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmICFvcHRpb25zLmlzTmF2aWdhdGlvbjtcbiAgICB2YXIgc3IgPSBjcmVhdGUoInNwYW4iLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfU1IpO1xuICAgIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChTUl9SRScKICAgICAgICAgICAgICAgICAgICAgICAgYidNT1ZBTF9ERUxBWSwgYXBwbHkodG9nZ2xlLCBmYWxzZSkpO1xuXG4gICAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1vdW50KCkge1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIUNvbXBvbmVudHMyLkF1dG9wbGF5LmlzUGF1c2VkKCkpO1xuICAgICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHRyYWNrLCBBUklBX0FUT01JQywgdHJ1ZSk7XG4gICAgICAgIHNyLnRleHRDb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9ICJcXHUyMDI2IjtcbiAgICAgICAgb24oRVZFTlRfQVVUT1BMQVlfUExBWSwgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KGRpc2FibGUsIHRydWUpKTtcbiAgICAgICAgb24oRVZFTlRfQVVUT1BMQVlfUEFVUycKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCBhcHBseShkaXNhYmxlLCBmYWxzZSkpO1xuICAgICAgICBvbihbRVZFTlRfTU9WRUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9TQ1JPTExFRF0sIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAgICAgfVxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICBmdW5jdGlvbiB0b2dnbGUoYWN0aXZlKSB7XG4gICAgICBzZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKHRyYWNrLCBBUklBX0JVU1ksIGFjdGl2ZSk7XG5cbiAgICAgIGlmIChhY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlKSB7XG4gICAgICAgIGFwcGVuZCh0cmFjaywgc3IpO1xuICAgICAgICBpbnRlcnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWwuc3RhcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZShzcik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBpbnRlcnZhbC5jYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0cmFjaywgW0FSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0xJVkUsIEFSSUFfQVRPTUlDLCBBUklBX0JVU1ldKTtcbiAgICAgIHJlbW92ZShzcicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc2FibGUoZGlzYWJsZWQpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoZW5hYmxlZCkge1xuICAgICAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSSUFfTElWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIGRpc2FibGVkID8gIm9mZiIgOiAicG9saXRlIik7XG4gICAgICB9XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkaXNhYmxlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzYWJsZSxcbiAgICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbiAgICB9O1xuICB9XG5cbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBDb21wb25lbnRDb25zdHJ1Y3RvcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBNZWRpYTogTWVkaWEsXG4gICAgRGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbjogRGlyZWN0aW9uLFxuICAgIEVsZW1lbnRzOiBFbGVtZW50cyxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVzOiBTbGlkZXMsXG4gICAgTGF5b3V0OiBMYXlvdXQsXG4gICAgQ2xvbmVzOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xvbmVzLFxuICAgIE1vdmU6IE1vdmUsXG4gICAgQ29udHJvbGxlcjogQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsXG4gICAgQXJyb3dzOiBBcnJvd3MsXG4gICAgQXV0b3BsYXk6IEF1dG9wbGF5LFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBDb3ZlcjogQ292ZXIsXG4gICAgU2Nyb2xsOiBTY3JvbGwsXG4gICAgRHJhZzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RyYWcsXG4gICAgS2V5Ym9hcmQ6IEtleWJvYXJkLFxuICAgIExhenlMb2FkOiBMYXp5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xvYWQsXG4gICAgUGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBTeW5jOiBTeW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBXaGVlbDogV2hlZWwsXG4gICAgTGl2ZTogTGl2ZVxuICB9KTtcbiAgdmFyIEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInMThOID0ge1xuICAgIHByZXY6ICJQcmV2aW91cyBzbGlkZSIsXG4gICAgbmV4dDogIk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0IHNsaWRlIixcbiAgICBmaXJzdDogIkdvIHRvIGZpcnN0IHNsaWRlIixcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzdDogIkdvIHRvIGxhc3Qgc2xpZGUiLFxuICAgIHNsaWRlWDogIkdvIHRvIHNsaWRlICUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsXG4gICAgcGFnZVg6ICJHbyB0byBwYWdlICVzIixcbiAgICBwbGF5OiAiU3RhcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGF1dG9wbGF5IixcbiAgICBwYXVzZTogIlBhdXNlIGF1dG9wbGF5IixcbiAgICBjYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VzZWw6ICJjYXJvdXNlbCIsXG4gICAgc2xpZGU6ICJzbGlkZSIsXG4gICAgc2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDogIlNlbGVjdCBhIHNsaWRlIHRvIHNob3ciLFxuICAgIHNsaWRlTGFiZWw6ICIlcyBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJXMiXG4gIH07XG4gIHZhciBERUZBVUxUUyA9IHtcbiAgICB0eXBlOiAic2xpZGUiLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByb2xlOiAicmVnaW9uIixcbiAgICBzcGVlZDogNDAwLFxuICAgIHBlclBhZ2U6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicxLFxuICAgIGNsb25lU3RhdHVzOiB0cnVlLFxuICAgIGFycm93czogdHJ1ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbjogdHJ1ZSxcbiAgICBwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGludGVydmFsOiA1ZTMsXG4gICAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAgIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXVzZU9uRm9jdXM6IHRydWUsXG4gICAgcmVzZXRQcm9ncmVzczogdHJ1ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFzaW5nOiAiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgMSkiLFxuICAgIGRyYWc6IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlLFxuICAgIGRpcmVjdGlvbjogImx0ciIsXG4gICAgdHJpbVNwYWNlOiB0cnVlLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmb2N1c2FibGVOb2RlczogImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCBzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LCBpZnJhbWUiLFxuICAgIGxpdmU6IHRydWUsXG4gICAgY2xhc3NlczogQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVMsXG4gICAgaTE4bjogSTE4TixcbiAgICByZWR1Y2VkTW90aW9uOiB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZWQ6IDAsXG4gICAgICByZXdpbmRTcGVlZDogMCxcbiAgICAgIGF1dG9wbGF5OiAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlIlxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBGYWRlKFNwbGlkZTIsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBFdmVudEludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoU3BsaWRlMikub24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFRlJFU0hdLCBpbml0KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIFNsaWRlcy5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgICAgU2xpZGUuc3R5bGUoInRyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCAidHJhbnNsYXRlWCgtIiArIDEwMCAqIFNsaWRlLmluZGV4ICsgIiUpIik7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnQoaW5kZXgsIGRvbmUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTbGlkZXMuc3R5bGUoInRyYW5zaXRpb24iLCAib3BhY2l0eSAiICsgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BlZWQgKyAibXMgIiArIG9wdGlvbnMuZWFzaW5nKTtcbiAgICAgIG5leHRUaWNrKGRvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXJ0OiBzdGFydCxcbiAgICAgIGNhbmNlbDogbm9vcFxuICAgIH07XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gU2xpZGUoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgICBDb250cm9sbGVyID0gQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkNvbnRyb2xsZXIsXG4gICAgICAgIFNjcm9sbCA9IENvbXBvbmVudHMyLlMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGw7XG4gICAgdmFyIGxpc3QgPSBDb21wb25lbnRzMi5FbGVtZW50cy5saXN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgdHJhbnNpdGlvbiA9IGFwcGx5KHN0eWxlLCBsaXN0LCAidHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICB2YXIgZW5kQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBFdmVudEludGVyZmFjZShTcGxpZGUyKS5iaW5kKGxpc3QsICJ0cmFuc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVuZCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gbGlzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgZW5kQ2FsbGJhY2spIHtcbiAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHN0YXJ0KGluZGV4LCBkb25lKSB7XG4gICAgICB2YXIgZGVzdGluYXRpb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS50b1Bvc2l0aW9uKGluZGV4LCB0cnVlKTtcbiAgICAgIHZhciBwb3NpdGlvbiA9IE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlLmdldFBvc2l0aW9uKCk7XG4gICAgICB2YXIgc3BlZWQgPSBnZXRTcGVlZChpbmRleCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICBpZiAoYWJzKGRlc3RpbmF0aW9uIC0gcG9zaXRpb24pID49IDEgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwZWVkID49IDEpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlU2Nyb2xsKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIFNjcm9sbC5zY3JvbGwoZGVzdGluYXRpb24sIHNwZWVkLCBmYWxzZSwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zaXRpb24oInRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc2Zvcm0gIiArIHNwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhc2luZyk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIE1vdmUudHJhbnNsYXRlKGRlc3RpbmF0aW9uLCB0cnVlKTtcbiAgICAgICAgICBlbmRDYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2sgPSBkb25lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS5qdW1wKGluZGV4KTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICB0cmFuc2l0aW9uKCIiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBTY3JvbGwuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3BlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKGluZGV4KSB7XG4gICAgICB2YXIgcmV3aW5kU3BlZWQgPSBvcHRpb25zLnJld2luZFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZDtcblxuICAgICAgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIHJld2luZFNwZWVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICB2YXIgcHJldiA9IENvbnRyb2xsZXIuZ2V0SW5kZXgodHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB2YXIgZW5kID0gQ29udHJvbGxlci5nZXRFbmQoKTtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKHByZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kIHx8IHByZXYgPj0gZW5kICYmIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXdpbmRTcGVlZDtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc3BlZWQ7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBzdGFydDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXJ0LFxuICAgICAgY2FuY2VsOiBjYW5jZWxcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBfU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZXZlbnQgPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoKTtcbiAgICAgIHRoaXMuQ29tcG9uZW50cyA9IHt9O1xuICAgICAgdGhpcy5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUgPSBTdGF0ZShDUkVBVEVEKTtcbiAgICAgIHRoaXMuc3BsaWRlcyA9IFtdO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRoaXMuX28gPSB7fTtcbiAgICAgIHRoaXMuX0UgPSB7fTtcbiAgICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igcm9vdCA9IGlzU3RyaW5nKHRhcmdldCkgPyBxdWVyeShkb2N1bWVudCwgdGFyZ2V0KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiB0YXJnZXQ7XG4gICAgICBhc3NlcnQocm9vdCwgcm9vdCArICIgaXMgaW52YWxpZC4iKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgb3B0aW9ucyA9IG1lcmdlKHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGxhYmVsOiBnZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCkgfHwgIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBsYWJlbGxlZGJ5OiBnZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRURCWSkgfHwgIiJcbiAgICAgIH0sIERFRkFVTFRTLCBfU3BsaWRlLmRlZmF1bHRzLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyB8fCB7fSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG1lcmdlKG9wdGlvbnMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBKU09OLnBhcnNlKGdldEF0dHJpYnV0ZShyb290LCBEQVRBX0FUVFJJQlVURSkpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgIkludmFsaWQgSlNPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04iKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbyA9IE9iamVjdC5jcmVhdGUobWVyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKHt9LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IF9TcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uIG1vdW50KEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRlbnNpb25zLCBUcmFuc2l0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIgPSB0aGlzLkNvbXBvbmVudHM7XG4gICAgICBhc3NlcnQoc3RhdGUuaXMoW0NSRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEVELCBERVNUUk9ZRURdKSwgIkFscmVhZHkgbW91bnRlZCEiKTtcbiAgICAgIHN0YXRlLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQoQ1JFQVRFRCk7XG4gICAgICB0aGlzLl9DID0gQ29tcG9uZW50czI7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5fVCA9IFRyYW5zaXRpb24gfHwgdGhpcy5fVCB8fCAodGhpcy5pcyhGQURFKSA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidGYWRlIDogU2xpZGUpO1xuICAgICAgdGhpcy5fRSA9IEV4dGVuc2lvbnMgfHwgdGhpcy5fRScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB2YXIgQ29uc3RydWN0b3JzID0gYXNzaWduKHt9LCBDb21wb25lbnRDb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidydWN0b3JzLCB0aGlzLl9FLCB7XG4gICAgICAgIFRyYW5zaXRpb246IHRoaXMuX1RcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9KTtcbiAgICAgIGZvck93bihDb25zdHJ1Y3RvcnMsIGZ1bmN0aW9uIChDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50LCBrZXkpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IENvbXBvbmVudChfdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIENvbXBvbmVudHMyLCBfdGhpcy5fbyk7XG4gICAgICAgIENvbXBvbmVudHMyW2tleV0gPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50O1xuICAgICAgICBjb21wb25lbnQuc2V0dXAgJiYgY29tcG9uZW50LnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cCgpO1xuICAgICAgfSk7XG4gICAgICBmb3JPd24oQ29tcG9uZW50czIsIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5tb3VudCAmJiBjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0Lm1vdW50KCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdChFVkVOVF9NT1VOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFRCk7XG4gICAgICBhZGRDbGFzcyh0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICBzdGF0ZS5zZXQoSURMRSk7XG4gICAgICB0aGlzLmVtaXQoRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFQURZKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc3knCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmMgPSBmdW5jdGlvbiBzeW5jKHNwbGlkZSkge1xuICAgICAgdGhpcy5zcGxpZGVzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHtcbiAgICAgICAgc3BsaWRlOiBzcGxpZGVcbiAgICAgIH0pO1xuICAgICAgc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVzLnB1c2goe1xuICAgICAgICBzcGxpZGU6IHRoaXMsXG4gICAgICAgIGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BhcmVudDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJRExFKSkge1xuICAgICAgICB0aGlzLl9DLlN5bmMucmVtb3VudCgpO1xuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcbiAgICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ28gPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZ28oY29udHJvbCkge1xuICAgICAgdGhpcy5fQy5Db250cm9sbGVyLmdvKGNvbnRyb2wpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wcm90by5vbiA9IGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBvbihldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV2ZW50Lm9uKGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mZihldmVudHMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRldmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XG5cbiAgICAgIChfdGhpcyRldmVudCA9IHRoaXMuZXZlbnQpLmVtaXQuYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKF90aGlzJGV2ZW50LCBbZXZlbnRdLmNvbmNhdChzbGljZShhcmd1bWVudHMsIDEpKSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZCA9IGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBhZGQoc2xpZGVzLCBpbmRleCkge1xuICAgICAgdGhpcy5fQy5TbGlkZXMuYWRkKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXMsIGluZGV4KTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG1hdGNoZXIpIHtcbiAgICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLl9DLlNsaWRlcy5yZW1vdmUobWF0Y2hlcik7XG5cbiAgICAgIHJldHVybiB0aGlzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9O1xuXG4gICAgX3Byb3RvLmlzID0gZnVuY3Rpb24gaXModHlwZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzLl9vLnR5cGUgPT09IHR5cGU7XG4gICAgfTtcblxuICAgIF9wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG8ucmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICB0aGlzLmVtaXQoRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX1JFRlJFU0gpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChjb21wbGV0ZWx5ID09PSB2b2lkIDApIHtcbiAgICAgICAgY29tcGxldGVseSA9IHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLmV2ZW50LFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZS5pcyhDUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCkpIHtcbiAgICAgICAgRXZlbnRJbnRlcmZhY2UodGhpcykub24oRVZFTlRfUkVBRFknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzLCBjb21wbGV0ZWx5KSk7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgZm9yT3duKHRoaXMuX0MsIGZ1bmN0aW9uIChjb21wb25lbnQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgICAgY29tcG9uZW50LmRlc3Ryb3kgJiYgY29tcG9uZW50LmRlc3Ryb3koYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBsZXRlbHkpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgZXZlbnQuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfREVTVFJPWSk7XG4gICAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbXBsZXRlbHkgJiYgZW1wdHkodGhpcy5zcGxpZGVzKTtcbiAgICAgICAgc3RhdGUucycKICAgICAgICAgICAgICAgICAgICAgICAgYidldChERVNUUk9ZRUQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIF9jcmVhdGVDbGFzcyhfU3BsaWRlLCBbe1xuICAgICAga2V5OiAib3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5fbztcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducykge1xuICAgICAgICB0aGlzLl9DLk1lZGlhLnNldChvcHRpb25zLCB0cnVlLCB0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAibGVuZ3RoIixcbiAgICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX0MuU2xpZGVzLmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RMZW5ndGgodHJ1ZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAiaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4IixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuX0MuQ29udHJvbGxlci5nZXRJbmRleCgpO1xuICAgICAgfVxuICAgIH1dKTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gX1NwbGlkZTtcbiAgfSgpO1xuXG4gIHZhciBTcGxpZGUgPSBfU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTtcbiAgU3BsaWRlLmRlZmF1bHRzID0ge307XG4gIFNwbGlkZS5TVEFURVMgPSBTVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVTO1xuICByZXR1cm4gU3BsaWRlO1xufSk7XG4nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsgd3JpdGFibGU6IGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qIVxuICogU3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZW5zZSAgOiBNSVRcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKi9cbihmdW5jdGlvbiAoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzID0gZmFjdG9yeSgpIDogdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6IChnbG9iYWwgPSB0eXBlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgc2VsZiwgZ2xvYmFsLlNwbGlkZSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIE1FRElBX1BSIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VGRVJTX1JFRFVDRURfTU9USU9OID0gIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVkdWNlKSI7XG4gIHZhciBDUkVBVEVEID0gMTtcbiAgdmFyIE1PVU5URUQgPSAyOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIElETEUgPSAzO1xuICB2YXIgTU9WSU5HID0gNDtcbiAgdmFyIFNDUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTExJTkcgPSA1O1xuICB2YXIgRFJBR0dJTkcgPSA2O1xuICB2YXIgREVTVFJPWUVEICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IDc7XG4gIHZhciBTVEFURVMgPSB7XG4gICAgQ1JFQVRFRDogQ1JFQVRFRCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgTU9VTlRFRDogTU9VTlRFRCxcbiAgICBJRExFOiBJRExFLFxuICAgIE1PVklORycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IE1PVklORyxcbiAgICBTQ1JPTExJTkc6IFNDUk9MTElORyxcbiAgICBEUkFHR0lORycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IERSQUdHSU5HLFxuICAgIERFU1RST1lFRDogREVTVFJPWUVEXG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGVtcHR5KGFycmF5KSB7XG4gICAgYXJyYXkubGVuZ3RoID0gMDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICBmdW5jdGlvbiBzbGljZShhcnJheUxpa2UsIHN0YXJ0LCBlbmQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycmF5TGlrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHkoZnVuYykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICByZXR1cm4gZnVuYy5iaW5kLmFwcGx5KGZ1bmMsIFtudWxsXS5jb25jYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHNsaWNlKGFyZ3VtZW50cywgMSkpKTtcbiAgfVxuXG4gIHZhciBuZXh0VGljayAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBzZXRUaW1lb3V0O1xuXG4gIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7fTtcblxuICBmdW5jdGlvbiByYWYoZnVuYykge1xuICAgIHJldHVybiByZXF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPZih0eXBlLCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuICFpc051bGwoc3ViamVjdCkgJiYgdHlwZU9mKCJvYmplY3QiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdCk7XG4gIH1cblxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgImZ1bmN0aW9uIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgaXNTdHJpbmcgPSBhcHBseSh0eXBlT2YsICJzdHJpbmciKTtcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1VuZGVmaW5lZCA9IGFwcGx5KHR5cGVPZiwgInVuZGVmaW5lZCIpO1xuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBpc051bGwoc3ViamVjdCkge1xuICAgIHJldHVybiBzdWJqZWN0ID09PSBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3ViamVjdCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoc3ViJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Qub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTUxFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGZvckVhY2godmFsdWVzLCBpdGVyYXRlZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0b0FycmF5KHZhbHVlcykuZm9yRWFjaChpdGVyYXRlZSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneS5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXksIGl0ZW1zKSB7XG4gICAgYXJyYXkucHVzaC5hcHBseShhcnJheSwgdG9BcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkoaXRlbXMpKTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQpIHtcbiAgICBpZiAoZWxtKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgZm9yRWFjaChjbGFzc2VzLCBmdW5jdGlvbiAobmFtZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBlbG0uY2xhc3NMaXN0W2FkZCA/ICJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3NlcykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB0b2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgZm9yRWFjaChjaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW4sIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gICAgZm9yRWFjaChub2RlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm9kZSkucGFyZW50Tm9kZTtcblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCByZWYpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoZXMoZWxtLCBzZWxlY3Rvcikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmIChlbG1bIm1zTWF0Y2hlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTZWxlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwgc2VsZWN0b3IpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGNoaWxkcmVuMiA9IHBhcmVudCA/IHNsaWNlKHBhcmVudC5jaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW4pIDogW107XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4yLmZpbHRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlcyhjaGlsZCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yKTtcbiAgICB9KSA6IGNoaWxkcmVuMjtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciA/IGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpWzBdIDogcGFyZW50LmZpcnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRDaGlsZDtcbiAgfVxuXG4gIHZhciBvd25LZXlzID0gT2JqZWN0LmtlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lzO1xuXG4gIGZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBpZiAob2JqZWN0KSB7XG4gICAgICAocmlnaHQgPyBvd25LZXlzKG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpLnJldmVyc2UoKSA6IG93bktleXMob2JqZWN0KSkuZm9yRWFjaChmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGtleSkge1xuICAgICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhvYmplY3Rba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gYXNzaWduKG9iamVjdCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWVyZ2Uob2JqZWN0KSB7XG4gICAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICBmb3JPd24oc291cmNlLCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgb2JqZWN0W2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXldID0gbWVyZ2Uoe30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iamVjdFtrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5XSA6IHt9LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gb21pdChvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LCBrZXlzKSB7XG4gICAgZm9yRWFjaChrZXlzIHx8IG93bktleXMob2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxtcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJzKSB7XG4gICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgZWxtICYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgfSk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUpIHtcbiAgICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgICBmb3JPdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGF0dHJzLCBmdW5jdGlvbiAodmFsdWUyLCBuYW1lKSB7XG4gICAgICAgIHNldEF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uge1xuICAgICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc051bGwodmFsdWUpIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtLCBhdHRycykgOiBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHRhZywgYXR0cnMsIHBhcmVudCkge1xuICAgIHZhciBlbG0gPSBkb2N1bWVudC5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlRWxlbWVudCh0YWcpO1xuXG4gICAgaWYgKGF0dHJzKSB7XG4gICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdHJpbmcoYXR0cnMpID8gYWRkQ2xhc3MoZWxtLCBhdHRycykgOiBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKGVsbSwgYXR0cnMpO1xuICAgIH1cblxuICAgIHBhcmVudCAmJiBhcHBlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHBhcmVudCwgZWxtKTtcbiAgICByZXR1cm4gZWxtO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHN0eWxlKGVsbSwgcHJvcCwgdmFsdWUpIHtcbiAgICBpZiAoaXNVbmRlZmluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxtKVtwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcF07XG4gICAgfVxuXG4gICAgaWYgKCFpc051bGwodmFsdWUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtLnN0eWxlW3Byb3BdID0gIiIgKyB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZGlzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gICAgc3R5bGUoZWxtLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgImRpc3BsYXkiLCBkaXNwbGF5Mik7XG4gIH1cblxuICBmdW5jdGlvbiBmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtKSB7XG4gICAgZWxtWyJzZXRBY3RpdmUiXSAmJiBlbG1bInNldEFjdGl2ZSJdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHx8IGVsbS5mb2N1cyh7XG4gICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGVsbSwgYXR0cikgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBoYXNDbGFzcyhlbG0sIGNsYXNzTmFtZSkge1xuICAgIHJldHVybiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xtICYmIGVsbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiByZWN0KHRhcmdldCkge1xuICAgIHJldHVybiB0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW92ZShub2Rlcykge1xuICAgIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uIChub2RlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIdG1sKGh0bWwpIHtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGNoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJ0ZXh0L2h0bWwiKS5ib2R5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGUsIHN0b3BQcm9wYWdhdGlvbikge1xuICAgIGUucHJldmVudERlZmF1bHQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBlLnN0b3BQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcGFnYXRpb24oKTtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHF1ZXJ5KHBhcmVudCwgc2VsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yKSB7XG4gICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3RvcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVlcnlBbGwocGFyZW50LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBzbGljZShwYXJlbnQucScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICAgIHRvZ2dsZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YoZSkge1xuICAgIHJldHVybiBlLnRpbWVTdGFtcDtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB1bml0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSA6IHZhbHVlID8gdmFsdWUgKyAicHgiIDogIiI7XG4gIH1cblxuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BST0pFQ1RfQ09ERSA9ICJzcGxpZGUiO1xuICB2YXIgREFUQV9BVFRSSUJVVEUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRhdGEtIiArIFBST0pFQ1RfQ09ERTtcblxuICBmdW5jdGlvbiBhc3NlcnQoY29uZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB0aHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3cgbmV3IEVycm9yKCJbIiArIFBST0pFQ1RfQ09ERSArICJdICIgKyAobWVzc2FnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfHwgIiIpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWluID0gTWF0aC5taW4sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgICBmbG9vciA9IE1hdGguZmxvb3IsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgY2VpbCA9IE1hdGguY2VpbCxcbiAgICAgIGFicyA9IE1hdGguYWJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICBmdW5jdGlvbiBhcHByb3hpbWF0ZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICByZXR1cm4gYWJzKHggLSB5KSA8IGVwc2lsb247XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYmV0d2VlbihudW1iZXIsIHgsIHksIGV4Y2x1c2l2ZSkge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgICB2YXIgbWF4aW11bSA9IG1heCh4LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSk7XG4gICAgcmV0dXJuIGV4Y2x1c2l2ZSA/IG1pbmltdW0gPCBudW1iZXIgJiYgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciA8IG1heGltdW0gOiBtaW5pbXVtIDw9IG51bWJlciAmJiBudW1iZXIgPD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heGltdW07XG4gIH1cblxuICBmdW5jdGlvbiBjbGFtcChudW1iZXIsIHgsIHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIG1pbmltdW0gPSBtaW4oeCwgeSk7XG4gICAgdmFyIG1heGltdW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbWF4KHgsIHkpO1xuICAgIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLCBtYXhpbXVtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gKyh4ID4gMCkgLSArKHggPCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JtYXQoc3RyaW5nLCByZXBsYWNlbWVudHMpIHtcbiAgICBmb3JFYWNoKHJlcGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMsIGZ1bmN0aW9uIChyZXBsYWNlbWVudCkge1xuICAgICAgc3RyaW5nID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZy5yZXBsYWNlKCIlcyIsICIiICsgcmVwbGFjZW1lbnQpO1xuICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFkKG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgICByZXR1cm4gbnVtYmVyIDwgMTAgPyAiMCIgKyBudW1iZXIgOiAiIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyBudW1iZXI7XG4gIH1cblxuICB2YXIgaWRzID0ge307XG5cbiAgZnVuY3Rpb24gdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXF1ZUlkKHByZWZpeCkge1xuICAgIHJldHVybiAiIiArIHByZWZpeCArIHBhZChpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzW3ByZWZpeF0gPSAoaWRzW3ByZWZpeF0gfHwgMCkgKyAxKTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBFdmVudEJpbmRlcigpIHtcbiAgICB2YXIgbGlzdGVuZXJzID0gW10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgZnVuY3Rpb24gYmluZCh0YXJnZXRzLCBldmVudHMsIGNhbGxiYWNrLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucykge1xuICAgICAgZm9yRWFjaEV2ZW50KHRhcmdldHMsIGV2ZW50cywgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0V2ZW50VGFyZ2V0ID0gKCJhZGRFdmVudExpc3RlbmVyIiBpbiB0YXJnZXQpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgdmFyIHJlbW92ZXIgPSBpc0V2ZW50VGFyZ2V0ID8gdGFyZ2V0LnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVFdmVudExpc3RlbmVyLmJpbmQodGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zKSA6IHRhcmdldFsicmVtb3ZlTGlzdGVuZXIiXS5iaW5kKHRhcmdldCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrKTtcbiAgICAgICAgaXNFdmVudFRhcmdldCA/IHRhcmdldC5hZGRFdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMpIDogdGFyZ2V0WyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkTGlzdGVuZXIiXShjYWxsYmFjayk7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaywgcmVtb3Zlcl0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuYmluZCh0YXJnZXRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgICAgZm9yRWFjaEV2ZW50KHRhcmdldHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZW5lcikge1xuICAgICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0gdGFyZ2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBsaXN0ZW5lclsxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09IG5hbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BhY2UgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICAgICAgbGlzdGVuZXJbNF0oKTtcbiAgICAgICAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNwYXRjaCh0YXJnZXQsIHR5cGUsIGRldGFpbCkge1xuICAgICAgdmFyIGU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIGJ1YmJsZXMgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIEN1c3RvbUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCA9PT0gImZ1bmN0aW9uIikge1xuICAgICAgICBlID0gbmV3IEN1c3RvbUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCh0eXBlLCB7XG4gICAgICAgICAgYnViYmxlczogYnViYmxlcyxcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGV0YWlsOiBkZXRhaWxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgZmFsc2UsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXRhaWwpO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSk7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaEV2ZW50KHRhcmdldHMsIGV2ZW50cywgaXRlcmF0ZWUpIHtcbiAgICAgIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2ZW50czIpIHtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZXZlbnRzMi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TlMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBldmVudE5TLnNwbGl0KCIuIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICAgICAgaXRlcmF0ZWUodGFyZ2V0LCBmcmFnbWVudFswXSwgZnJhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50WzFdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBkYXRhWzRdKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShsaXN0ZW5lcnMpO1xuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4ge1xuICAgICAgYmluZDogYmluZCxcbiAgICAgIHVuYmluZDogdW5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCxcbiAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcbiAgICAgIGRlc3Ryb3k6IGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95XG4gICAgfTtcbiAgfVxuXG4gIHZhciBFVkVOVF9NT1VOVEVEID0gIm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVkIjtcbiAgdmFyIEVWRU5UX1JFQURZID0gInJlYWR5IjtcbiAgdmFyIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNT1ZFID0gIm1vdmUiO1xuICB2YXIgRVZFTlRfTU9WRUQgPSAibW92ZWQiO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIEVWRU5UX0NMSUNLID0gImNsaWNrIjtcbiAgdmFyIEVWRU5UX0FDVElWRSA9ICJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aXZlIjtcbiAgdmFyIEVWRU5UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9WSVNJQkxFID0gInZpc2libGUiO1xuICB2YXIgRVZFTlRfSElEREVOID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJoaWRkZW4iO1xuICB2YXIgRVZFTlRfUkVGUkVTSCA9ICJyZWZyZXNoIjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9VUERBVEVEID0gInVwZGF0ZWQiO1xuICB2YXIgRVZFTlRfUkVTSVpFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJyZXNpemUiO1xuICB2YXIgRVZFTlRfUkVTSVpFRCA9ICJyZXNpemVkIjtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBFVkVOVF9EUkFHID0gImRyYWciO1xuICB2YXIgRVZFTlRfRFJBR0dJTkcgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWdnaW5nIjtcbiAgdmFyIEVWRU5UX0RSQUdHRUQgPSAiZHJhZ2dlZCI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfU0NST0xMID0gInNjcm9sbCI7XG4gIHZhciBFVkVOVF9TQ1JPTExFRCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSAic2Nyb2xsZWQiO1xuICB2YXIgRVZFTlRfT1ZFUkZMT1cgPSAib3ZlcmZsb3ciOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7XG4gIHZhciBFVkVOVF9BUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xuICB2YXIgRVZFTlRfQVJSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09XU19VUERBVEVEID0gImFycm93czp1cGRhdGVkIjtcbiAgdmFyIEVWRU5UX1BBR0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkFUSU9OX01PVU5URUQgPSAicGFnaW5hdGlvbjptb3VudGVkIjtcbiAgdmFyIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9QQUdJTkFUSU9OX1VQREFURUQgPSAicGFnaW5hdGlvbjp1cGRhdGVkIjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAibmF2aWdhdGlvbjptb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCI7XG4gIHZhciBFVkVOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsYXkiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgPSAiYXV0b3BsYXk6cGxheWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmciO1xuICB2YXIgRVZFTlRfQVVUT1BMQVlfUEFVU0UgPSAiYXV0b3BsYXk6cGF1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIjtcbiAgdmFyIEVWRU5UX0xBWllMT0FEX0xPQURFRCA9ICJsYXp5bG9hZDpsb2FkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIjtcbiAgdmFyIEVWRU5UX1NMSURFX0tFWURPV04gPSAic2siO1xuICB2YXIgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX1NISUZURUQgPSAic2giO1xuICB2YXIgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gImVpIjtcblxuICBmdW5jdGlvbiBFdmVudEludGVyZmFjZShTcGxpZGUyKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHZhciBidXMgPSBTcGxpZGUyID8gU3BsaWRlMi5ldmVudC5idXMgOiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBiaW5kZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRXZlbnRCaW5kZXIoKTtcblxuICAgIGZ1bmN0aW9uIG9uKGV2ZW50cywgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrKSB7XG4gICAgICBiaW5kZXIuYmluZChidXMsIHRvQXJyYXkoZXZlbnRzKS5qbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbigiICIpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBjYWxsYmFjay5hcHBseShjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGJhY2ssIGlzQXJyYXkoZS5kZXRhaWwpID8gZS5kZXRhaWwgOiBbXSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmRlci5kaXNwYXRjaChidXMsIGV2ZW50LCBzbGljZShhcmd1bWVudHMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxKSk7XG4gICAgfVxuXG4gICAgaWYgKFNwbGlkZTIpIHtcbiAgICAgIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpbmRlci5kZXN0cm95KTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIGFzc2lnbihiaW5kZXIsIHtcbiAgICAgIGJ1czogYnVzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9uOiBvbixcbiAgICAgIG9mZjogYXBwbHkoYmluZGVyLnVuYmluZCwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cyksXG4gICAgICBlbWl0OiBlbWl0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gUmVxdWVzdEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGxpbWl0KSB7XG4gICAgdmFyIG5vdyA9IERhdGUubm93O1xuICAgIHZhciBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lO1xuICAgIHZhciByYXRlID0gMDtcbiAgICB2YXIgaWQ7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZWQgPSB0cnVlO1xuICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgICAgcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBpbnRlcnZhbCA/IG1pbigobm93KCkgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKSA6IDE7XG4gICAgICAgIG9uVXBkYXRlICYmIG9uVXBkYXRlKHJhdGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgICBpZiAocmF0ZSA+PSAxKSB7XG4gICAgICAgICAgb25JbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwoKTtcbiAgICAgICAgICBzdGFydFRpbWUgPSBub3coKTtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAobGltaXQgJiYgKytjb3VudCA+PSBsaW1pdCkge1xuICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBwYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZCA9IHJhZih1cGRhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBzdGFydChyZXN1bWUpIHtcbiAgICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBzdGFydFRpbWUgPSBub3coKSAtIChyZXN1bWUgPyByYXRlICogaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsIDogMCk7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIGlkID0gcmFmKHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmV3aW5kKCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgcmF0ZSA9IDA7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAob25VcGRhdGUpIHtcbiAgICAgICAgb25VcGRhdGUocmF0ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCAmJiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgICByYXRlID0gMDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZCA9IDA7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBzZXQodGltZSkge1xuICAgICAgaW50ZXJ2YWwgPSB0aW1lO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBpc1BhdXNlZCgpIHtcbiAgICAgIHJldHVybiBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2VkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LFxuICAgICAgcmV3aW5kOiByZXdpbmQsXG4gICAgICBwYXVzZTogcGF1c2UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgICBzZXQ6IHNldCxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc1BhdXNlZDogaXNQYXVzZWRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG5cbiAgICBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHN0YXRlID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzKHN0YXRlcykge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBpbmNsdWRlcyh0b0FycmF5KHN0YXRlcyksIHN0YXRlKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNldDogc2V0LFxuICAgICAgaXM6IGlzXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBUaHJvdHRsZShmdW5jLCBkdXJhdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24pIHtcbiAgICB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHx8IDAsIGZ1bmMsIG51bGwsIDEpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaW50ZXJ2YWwuaXNQYXVzZWQoKSAmJiBpbnRlcnZhbC5zdGFydCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gTWVkaWEoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGJyZWFrcG9pbnRzID0gb3B0aW9ucy5icmVha3BvaW50cyB8fCB7fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIHJlZHVjZWRNb3Rpb24gPSBvcHRpb25zLnJlZHVjZWRNb3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IHt9O1xuICAgIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcigpO1xuICAgIHZhciBxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlcmllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAibWluIjtcbiAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd25LZXlzKGJyZWFrcG9pbnRzKS5zb3J0KGZ1bmN0aW9uIChuLCBtKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbiAgICAgIH0pLmZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmVnaXN0ZXIoYnJlYWtwb2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4iIDogIm1heCIpICsgIi13aWR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2g6IiArIGtleSArICJweCkiKTtcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXIocmVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZWRNb3Rpb24sIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRlbHkpIHtcbiAgICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICAgIGJpbmRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcihvcHRpb25zMiwgcXVlcnkpIHtcbiAgICAgIHZhciBxdWVyeUxpc3QgPSBtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hNZWRpYShxdWVyeSk7XG4gICAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmdlIiwgdXBkYXRlKTtcbiAgICAgIHF1ZXJpZXMucHVzaChbb3B0aW9uczIsIHF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyeUxpc3RdKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGRlc3Ryb3llZCA9IHN0YXRlLmlzKERFU1RST1lFRCk7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgdmFyIG1lcmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgPSBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkMiwgZW50cnkpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIHJldHVybiBtZXJnZShtZXJnZWQyLCBlbnRyeVsxXS5tYXRjaGVzID8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVudHJ5WzBdIDoge30pO1xuICAgICAgfSwge30pO1xuICAgICAgb21pdChvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyk7XG4gICAgICBzZXQobWVyZ2VkKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3kpIHtcbiAgICAgICAgU3BsaWRlMi5kZXN0cm95KG9wdGlvbnMuZGVzdHJveScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPT09ICJjb21wbGV0ZWx5Iik7XG4gICAgICB9IGVsc2UgaWYgKGRlc3Ryb3llZCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgZGVzdHJveSh0cnVlKTtcbiAgICAgICAgU3BsaWRlMi5tb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiAhPT0gb3B0aW9ucy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uICYmIFNwbGlkZTIucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiByZWR1Y2UoZW5hYmxlKSB7XG4gICAgICBpZiAobWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoTWVkaWEoTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTikubWF0Y2hlcykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgZW5hYmxlID8gbWVyZ2Uob3B0aW9ucywgcmVkdWNlZE1vdGlvbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogb21pdChvcHRpb25zLCBvd25LZXlzKHJlZHVjZWRNb3Rpb24pKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KG9wdHMsIGJhc2UsIG5vdGlmeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIG1lcmdlKG9wdGlvbnMsIG9wdHMpO1xuICAgICAgYmFzZSAmJiBtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2UoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9wdGlvbnMpLCBvcHRzKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChub3RpZnkgfHwgIXN0YXRlLmlzKENSRUFURUQpKSB7XG4gICAgICAgIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLmVtaXQoRVZFTlRfVVBEQVRFRCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiB7XG4gICAgICBzZXR1cDogc2V0dXAsXG4gICAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveTogZGVzdHJveSxcbiAgICAgIHJlZHVjZTogcmVkdWNlLFxuICAgICAgc2V0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0XG4gICAgfTtcbiAgfVxuXG4gIHZhciBBUlJPVyA9ICJBcnJvdyI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQVJST1dfTEVGVCA9IEFSUk9XICsgIkxlZnQiO1xuICB2YXIgQVJST1dfUklHSFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQVJST1cgKyAiUmlnaHQiO1xuICB2YXIgQVJST1dfVVAgPSBBUlJPVyArICJVcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgQVJST1dfRE9XTiA9IEFSUk9XICsgIkRvd24iO1xuICB2YXIgUlRMICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJydGwiO1xuICB2YXIgVFRCID0gInR0YiI7XG4gIHZhciBPUklFTlRBVElPTl9NQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQID0ge1xuICAgIHdpZHRoOiBbImhlaWdodCJdLFxuICAgIGxlZnQ6IFsidG9wIiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodCJdLFxuICAgIHJpZ2h0OiBbImJvdHRvbSIsICJsZWZ0Il0sXG4gICAgeDogWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicieSJdLFxuICAgIFg6IFsiWSJdLFxuICAgIFk6IFsiWCJdLFxuICAgIEFycm93TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZnQ6IFtBUlJPV19VUCwgQVJST1dfUklHSFRdLFxuICAgIEFycm93UmlnaHQ6IFtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1dfRE9XTiwgQVJST1dfTEVGVF1cbiAgfTtcblxuICBmdW5jdGlvbiBEaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHJlc29sdmUocHJvcCwgYXhpc09ubHksIGRpcmVjdGlvbikge1xuICAgICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgaW5kZXggPSBkaXJlY3Rpb24gPT09IFJUTCAmJiAhYXhpc09ubHkgPyAxICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGRpcmVjdGlvbiA9PT0gVFRCID8gMCA6IC0xO1xuICAgICAgcmV0dXJuIE9SSUVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBVElPTl9NQVBbcHJvcF0gJiYgT1JJRU5UQVRJT05fTUFQW3Byb3BdW2luZGV4XScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgcHJvcC5yZXBsYWNlKC93aWR0aHxsZWZ0fHJpZ2h0L2ksIGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0Y2gsIG9mZnNldCkge1xuICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBPUklFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYXNlKCldW2luZGV4XSB8fCBtYXRjaDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJldHVybiBvZmZzZXQgPiAwID8gcmVwbGFjZW1lbnQuY2hhckF0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoMSkgOiByZXBsYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcmllbnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKiAob3B0aW9ucy5kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBSVEwgPyAxIDogLTEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgIG9yaWVudDogb3JpZW50XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG4gIH1cblxuICB2YXIgUk9MRSA9ICJyb2xlIjtcbiAgdmFyIFRBQl9JTkRFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ggPSAidGFiaW5kZXgiO1xuICB2YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQiO1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIEFSSUFfUFJFRklYID0gImFyaWEtIjtcbiAgdmFyIEFSSUFfQ09OVFJPTFMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9QUkVGSVggKyAiY29udHJvbHMiO1xuICB2YXIgQVJJQV9DVVJSRU5UID0gQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSSUFfUFJFRklYICsgImN1cnJlbnQiO1xuICB2YXIgQVJJQV9TRUxFQ1RFRCA9IEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX1BSRUZJWCArICJzZWxlY3RlZCI7XG4gIHZhciBBUklBX0xBQkVMID0gQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgImxhYmVsIjtcbiAgdmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSRUZJWCArICJsYWJlbGxlZGJ5IjtcbiAgdmFyIEFSSUFfSElEREVOID0gQVJJQV9QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYICsgImhpZGRlbiI7XG4gIHZhciBBUklBX09SSUVOVEFUSU9OID0gQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgIm9yaWVudGF0aW9uIjtcbiAgdmFyIEFSSUFfUk9MRURFU0NSSVBUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTiA9IEFSSUFfUFJFRklYICsgInJvbGVkZXNjcmlwdGlvbiI7XG4gIHZhciBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19MSVZFID0gQVJJQV9QUkVGSVggKyAibGl2ZSI7XG4gIHZhciBBUklBX0JVU1kgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9QUkVGSVggKyAiYnVzeSI7XG4gIHZhciBBUklBX0FUT01JQyA9IEFSSUFfUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSRUZJWCArICJhdG9taWMiO1xuICB2YXIgQUxMX0FUVFJJQlVURVMgPSBbUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBQl9JTkRFWCwgRElTQUJMRUQsIEFSSUFfQ09OVFJPTFMsIEFSSUFfQ1VSUkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwgQVJJQV9ISURERU4sIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX09SSUVOVEFUSU9OLCBBUklBX1JPTEVERVNDUklQVElPTl07XG4gIHZhciBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUFJFRklYID0gUFJPSkVDVF9DT0RFICsgIl9fIjtcbiAgdmFyIFNUQVRVU19DTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJFRklYID0gImlzLSI7XG4gIHZhciBDTEFTU19ST09UID0gUFJPSkVDVF9DT0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTtcbiAgdmFyIENMQVNTX1RSQUNLID0gQ0xBU1NfUFJFRklYICsgInRyYWNrIjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBDTEFTU19MSVNUID0gQ0xBU1NfUFJFRklYICsgImxpc3QiO1xuICB2YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1NMSURFID0gQ0xBU1NfUFJFRklYICsgInNsaWRlIjtcbiAgdmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19DTE9ORSA9IENMQVNTX1NMSURFICsgIi0tY2xvbmUiO1xuICB2YXIgQ0xBU1NfQ08nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRBSU5FUiA9IENMQVNTX1NMSURFICsgIl9fY29udGFpbmVyIjtcbiAgdmFyIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19BUlJPV1MgPSBDTEFTU19QUkVGSVggKyAiYXJyb3dzIjtcbiAgdmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPVyA9IENMQVNTX1BSRUZJWCArICJhcnJvdyI7XG4gIHZhciBDTEFTU19BUlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1dfUFJFViA9IENMQVNTX0FSUk9XICsgIi0tcHJldiI7XG4gIHZhciBDTEFTU19BUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST1dfTkVYVCA9IENMQVNTX0FSUk9XICsgIi0tbmV4dCI7XG4gIHZhciBDTEFTU19QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FHSU5BVElPTiA9IENMQVNTX1BSRUZJWCArICJwYWdpbmF0aW9uIjtcbiAgdmFyIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19QQUdJTkFUSU9OX1BBR0UgPSBDTEFTU19QQUdJTkFUSU9OICsgIl9fcGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xuICB2YXIgQ0xBU1NfUFJPR1JFU1MgPSBDTEFTU19QUkVGSVggKyAicHJvZ3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNzIjtcbiAgdmFyIENMQVNTX1BST0dSRVNTX0JBUiA9IENMQVNTX1BST0dSRVNTICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrICJfX2JhciI7XG4gIHZhciBDTEFTU19UT0dHTEUgPSBDTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvZ2dsZSI7XG4gIHZhciBDTEFTU19TUElOTkVSID0gQ0xBU1NfUFJFRklYICsgInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGlubmVyIjtcbiAgdmFyIENMQVNTX1NSID0gQ0xBU1NfUFJFRklYICsgInNyIjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBDTEFTU19JTklUSUFMSVpFRCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRpYWxpemVkIjtcbiAgdmFyIENMQVNTX0FDVElWRSA9IFNUQVRVU19DTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgImFjdGl2ZSI7XG4gIHZhciBDTEFTU19QUkVWID0gU1RBVFVTX0NMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggKyAicHJldiI7XG4gIHZhciBDTEFTU19ORVhUID0gU1RBVFVTX0NMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19QUkVGSVggKyAibmV4dCI7XG4gIHZhciBDTEFTU19WSVNJQkxFID0gU1RBVFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19DTEFTU19QUkVGSVggKyAidmlzaWJsZSI7XG4gIHZhciBDTEFTU19MT0FESU5HICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibG9hZGluZyI7XG4gIHZhciBDTEFTU19GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09DVVNfSU4gPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImZvY3VzLWluIjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAib3ZlcmZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293IjtcbiAgdmFyIFNUQVRVU19DTEFTU0VTID0gW0NMQVNTX0FDVElWRSwgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1ZJU0lCTEUsIENMQVNTX1BSRVYsIENMQVNTX05FWFQsIENMQVNTX0xPQURJTkcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19GT0NVU19JTiwgQ0xBU1NfT1ZFUkZMT1ddO1xuICB2YXIgQ0xBU1NFUyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB7XG4gICAgc2xpZGU6IENMQVNTX1NMSURFLFxuICAgIGNsb25lOiBDTEFTU19DTE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkUsXG4gICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgYXJyb3c6IENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyxcbiAgICBwcmV2OiBDTEFTU19BUlJPV19QUkVWLFxuICAgIG5leHQ6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19BUlJPV19ORVhULFxuICAgIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBhZ2U6IENMQVNTX1BBR0lOQVRJT05fUEFHRSxcbiAgICBzcGlubmVyOiBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfU1BJTk5FUlxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsb3Nlc3QoZnJvbSwgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdG9yKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJldHVybiBmcm9tLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgZWxtID0gZnJvbTtcblxuICAgIHdoaWxlIChlbG0gJiYgZWxtLm5vZGVUeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZSA9PT0gMSkge1xuICAgICAgaWYgKG1hdGNoZXMoZWxtLCBzZWxlY3RvcikpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBlbG0gPSBlbG0ucGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsbTtcbiAgfVxuXG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRlJJQ1RJT04gPSA1O1xuICB2YXIgTE9HX0lOVEVSVkFMID0gMjAwO1xuICB2YXIgUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPSU5URVJfRE9XTl9FVkVOVFMgPSAidG91Y2hzdGFydCBtb3VzZWRvd24iO1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIFBPSU5URVJfTU9WRV9FVkVOVFMgPSAidG91Y2htb3ZlIG1vdXNlbW92ZSI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgUE9JTlRFUl9VUF9FVkVOVFMgPSAidG91Y2hlbmQgdG91Y2hjYW5jZWwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdXNldXAgY2xpY2siO1xuXG4gIGZ1bmN0aW9uIEVsZW1lbnRzKFNwbGlkZTIsIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZS5vbixcbiAgICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZS5iaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcblxuICAgIHZhciByb290ID0gU3BsaWRlMi5yb290O1xuICAgIHZhciBpMTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgZWxlbWVudHMgPSB7fTtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlcyA9IFtdO1xuICAgIHZhciByb290Q2xhc3NlcyA9IFtdO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJhY2tDbGFzc2VzID0gW107XG4gICAgdmFyIHRyYWNrO1xuICAgIHZhciBsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdDtcbiAgICB2YXIgaXNVc2luZ0tleTtcblxuICAgIGZ1bmN0aW9uIHNldHVwKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIGNvbGxlY3QoKTtcbiAgICAgIGluaXQoKTtcbiAgICAgIHVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbihFVkVOVF9SRUZSRVNILCBkZXN0cm95KTtcbiAgICAgIG9uKEVWRU5UX1JFRlJFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidILCBzZXR1cCk7XG4gICAgICBvbihFVkVOVF9VUERBVEVELCB1cGRhdGUpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGJpbmQoZG9jdW1lbnQsIFBPSU5URVJfRE9XTl9FVkVOVFMgKyAiIGtleWRvd24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaXNVc2luZ0tleSA9IGUudHlwZSA9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJrZXlkb3duIjtcbiAgICAgIH0sIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VcbiAgICAgIH0pO1xuICAgICAgYmluZChyb290LCAiZm9jdXNpbiIsIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInISFpc1VzaW5nS2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICAgIHZhciBhdHRycyA9IEFMTF9BVFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUklCVVRFUy5jb25jYXQoInN0eWxlIik7XG4gICAgICBlbXB0eShzbGlkZXMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzc2VzKTtcbiAgICAgIHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICAgIHJlbW92ZUF0dHJpYnV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoW3RyYWNrLCBsaXN0XSwgYXR0cnMpO1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiBbInN0eWxlIiwgQVJJQV9ST0xFREVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NSSVBUSU9OXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzc2VzKTtcbiAgICAgIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICAgIHJvb3RDbGFzc2VzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldENsYXNzZXMoQ0xBU1NfUk9PVCk7XG4gICAgICB0cmFja0NsYXNzZXMgPSBnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Q2xhc3NlcyhDTEFTU19UUkFDSyk7XG4gICAgICBhZGRDbGFzcyhyb290LCByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsYXNzZXMpO1xuICAgICAgYWRkQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUwsIG9wdGlvbnMubGFiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKTtcbiAgICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX0xBQkVMTEVEQlksIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmxhYmVsbGVkYnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0KCkge1xuICAgICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVNTX1RSQUNLKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0ID0gY2hpbGQodHJhY2ssICIuIiArIENMQVNTX0xJU1QpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzc2VydCh0cmFjayAmJiBsaXN0LCAiQSB0cmFjay9saXN0IGVsZW1lbnQgaXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pc3NpbmcuIik7XG4gICAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiArIENMQVNTX1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGZvck93bih7XG4gICAgICAgIGFycm93czogQ0xBU1NfQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxcbiAgICAgICAgcGFnaW5hdGlvbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXY6IENMQVNTX0FSUk9XX1BSRVYsXG4gICAgICAgIG5leHQ6IENMQVNTX0FSUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPV19ORVhULFxuICAgICAgICBiYXI6IENMQVNTX1BST0dSRVNTX0JBUixcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRvZ2dsZTogQ0xBU1NfVE9HR0xFXG4gICAgICB9LCBmdW5jdGlvbiAoY2xhc3NOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZSwga2V5KSB7XG4gICAgICAgIGVsZW1lbnRzW2tleV0gPSBmaW5kKCIuIiArIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc05hbWUpO1xuICAgICAgfSk7XG4gICAgICBhc3NpZ24oZWxlbWVudHMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICAgIHRyYWNrOiB0cmFjayxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGxpc3Q6IGxpc3QsXG4gICAgICAgIHNsaWRlczogc2xpZGVzXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgPSByb290LmlkIHx8IHVuaXF1ZUlkKFBST0pFQ1RfQ09ERSk7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIHJvbGUgPSBvcHRpb25zLnJvbGU7XG4gICAgICByb290LmlkID0gaWQ7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJhY2suaWQgPSB0cmFjay5pZCB8fCBpZCArICItdHJhY2siO1xuICAgICAgbGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuaWQgPSBsaXN0LmlkIHx8IGlkICsgIi1saXN0IjtcblxuICAgICAgaWYgKCFnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHJvb3QsIFJPTEUpICYmIHJvb3QudGFnTmFtZSAhPT0gIlNFQ1RJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOIiAmJiByb2xlKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZShyb290LCBST0xFLCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZSk7XG4gICAgICB9XG5cbiAgICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19ST0xFREVTQ1JJUFRJT04sIGkxOG4uY2Fyb3VzZWwpO1xuICAgICAgc2V0QXR0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnV0ZShsaXN0LCBST0xFLCAicHJlc2VudGF0aW9uIik7XG4gICAgfVxuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlbG0gPSBxdWVyeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocm9vdCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIGVsbSAmJiBjbG9zZXN0KGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20sICIuIiArIENMQVNTX1JPT1QpID09PSByb290ID8gZWxtIDogdm9pZCAwO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDbGFzc2VzKGJhc2UpIHtcbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gW2Jhc2UgKyAiLS0iICsgb3B0aW9ucy50eXBlLCBiYXNlICsgIi0tIiArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLmRpcmVjdGlvbiwgb3B0aW9ucy5kcmFnICYmIGJhc2UgKyAiLS1kcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2dhYmxlIiwgb3B0aW9ucy5pc05hdmlnYXRpb24gJiYgYmFzZSArICItLW5hdiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBiYXNlID09PSBDTEFTU19ST09UICYmIENMQVNTX0FDVElWRV07XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICAgIHNldHVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc2V0dXAsXG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JveVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIFNMSURFID0gInNsaWRlIjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBMT09QID0gImxvb3AiO1xuICB2YXIgRkFERSA9ICJmYWRlIjtcblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gU2xpZGUkMShTcGxpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgc2xpZGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBvbiA9IGV2ZW50Lm9uLFxuICAgICAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGJpbmQgPSBldmVudC5iaW5kO1xuICAgIHZhciBDb21wb25lbnRzID0gU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuQ29tcG9uZW50cyxcbiAgICAgICAgcm9vdCA9IFNwbGlkZTIucm9vdCxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIG9wdGlvbnMgPSBTcGxpZGUyLm9wdGlvbnM7XG4gICAgdmFyIGlzTmF2aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnYXRpb24gPSBvcHRpb25zLmlzTmF2aWdhdGlvbixcbiAgICAgICAgdXBkYXRlT25NJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSA9IG9wdGlvbnMudXBkYXRlT25Nb3ZlLFxuICAgICAgICBpMThuID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuaTE4bixcbiAgICAgICAgcGFnaW5hdGlvbiA9IG9wdGlvbnMucGFnaW5hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIHNsaWRlRm9jdXMgPSBvcHRpb25zLnNsaWRlRm9jdXM7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2ZTtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eWxlIik7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBsYWJlbCA9IGdldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCk7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICAgIHZhciBjb250YWluZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY2hpbGQoc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gICAgdmFyIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0cm95ZWQ7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIWlzQ2xvbmUpIHtcbiAgICAgICAgc2xpZGUuaWQgPSByb290LmlkICsgIi1zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciICsgcGFkKGluZGV4ICsgMSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPTEUsIHBhZ2luYXRpb24gPyAidGFicGFuZWwiIDogImdyb3VwIik7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zbGlkZSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxhYmVsIHx8IGZvcm1hdChpMThuLnNsaWRlTGFiZWwsIFtpbmRleCArIDEsIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLmxlbmd0aF0pKTtcbiAgICAgIH1cblxuICAgICAgbGlzdGVuKCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICAgIGJpbmQoc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCAiY2xpY2siLCBhcHBseShlbWl0LCBFVkVOVF9DTElDSywgc2VsZikpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmQoc2xpZGUsICJrZXlkb3duIiwgYXBwbHkoZW1pdCwgRVZFTlRfU0xJRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFX0tFWURPV04sIHNlbGYpKTtcbiAgICAgIG9uKFtFVkVOVF9NT1ZFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NISUZURUQsIEVWRU5UX1NDUk9MTEVEXSwgdXBkYXRlKTtcbiAgICAgIG9uKEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9OQVZJR0FUSU9OX01PVU5URUQsIGluaXROYXZpZ2F0aW9uKTtcblxuICAgICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICh1cGRhdGVPbk1vdmUpIHtcbiAgICAgICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlbW92ZUNsYXNzKHNsaWRlLCBTVEFUVVNfQ0xBU1NFUyk7XG4gICAgICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlQXR0cmlidXRlKHNsaWRlLCBBTExfQVRUUklCVVRFUyk7XG4gICAgICBzZXRBdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlKHNsaWRlLCAic3R5bGUiLCBzdHlsZXMpO1xuICAgICAgc2V0QXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZShzbGlkZSwgQVJJQV9MQUJFTCwgbGFiZWwgfHwgIiIpO1xuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBpbml0TmF2aWdhdGlvbigpIHtcbiAgICAgIHZhciBjb250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHMgPSBTcGxpZGUyLnNwbGlkZXMubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHZhciBTbGlkZTIgPSB0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5nZXRBdChpbmRleCk7XG4gICAgICAgIHJldHVybiBTbGlkZTIgPyBTbGlkZTIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlkIDogIiI7XG4gICAgICB9KS5qb2luKCIgIik7XG4gICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHNsaWRlLCBBUklBX0xBQkVMLCBmb3JtYXQoaTE4bi5zbGlkZVgsIChpc0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZSA/IHNsaWRlSW5kZXggOiBpbmRleCkgKyAxKSk7XG4gICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHNsaWRlLCBBUklBX0NPTlRST0xTLCBjb250cm9scyk7XG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHNsaWRlLCBST0xFLCBzbGlkZUZvY3VzID8gImJ1dHRvbiIgOiAiIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgc2xpZGVGb2N1cyAmJiByZW1vdmVBdHRyaWJ1dGUoc2xpZGUsIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX1JPTEVERVNDUklQVElPTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25NJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSgpIHtcbiAgICAgIGlmICghZGVzdHJveWVkKSB7XG4gICAgICAgIHVwZGF0ZSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCFkZXN0cm95ZWQpIHtcbiAgICAgICAgdmFyIGN1cnIgPSBTcGxpZGUyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleDtcbiAgICAgICAgdXBkYXRlQWN0aXZpdHkoKTtcbiAgICAgICAgdXBkYXRlVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2liaWxpdHkoKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX1BSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWLCBpbmRleCA9PT0gY3VyciAtIDEpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIENMQVNTX05FWFQsIGluZGV4ID09PSBjdXJyICsgMSk7XG4gICAgICB9XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2aXR5KCkge1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xuXG4gICAgICBpZiAoYWN0aXZlICE9PSBoYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xhc3Moc2xpZGUsIENMQVNTX0FDVElWRSkpIHtcbiAgICAgICAgdG9nZ2xlQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKHNsaWRlLCBDTEFTU19BQ1RJVkUsIGFjdGl2ZSk7XG4gICAgICAgIHNldEF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUoc2xpZGUsIEFSSUFfQ1VSUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgIiIpO1xuICAgICAgICBlbWl0KGFjdGl2ZSA/IEVWRU5UX0FDVElWRSA6IEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9JTkFDVElWRSwgc2VsZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKSB7XG4gICAgICB2YXIgdmlzaWJsZSA9IGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Zpc2libGUoKTtcbiAgICAgIHZhciBoaWRkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAgICBpZiAoIVNwbGlkZTIuc3RhdGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUsIEFSSUFfSElEREVOLCBoaWRkZW4gfHwgIiIpO1xuICAgICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc2V0QXR0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCBvcHRpb25zLmZvY3VzYWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVOb2RlcyB8fCAiIiksIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAiIik7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoc2xpZGVGb2N1cykge1xuICAgICAgICBzZXRBdHRyaWJ1dGUoc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogMCk7XG4gICAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAodmlzaWJsZSAhPT0gaGFzQ2xhc3Moc2xpZGUsIENMQVNTX1ZJU0lCTEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkge1xuICAgICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2libGUpO1xuICAgICAgICBlbWl0KHZpc2libGUgPyBFVkVOVF9WSVNJQkxFIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0hJRERFTiwgc2VsZik7XG4gICAgICB9XG5cbiAgICAgIGlmICghdmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2libGUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gc2xpZGUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBTbGlkZTIgPSBDb21wb25lbnRzLlNsaWRlcy5nZXRBdChTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pbmRleCk7XG4gICAgICAgIFNsaWRlMiAmJiBmb2N1cyhTbGlkZTIuc2xpZGUpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHlsZSQxKHByb3AsIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSwgdXNlQ29udGFpbmVyKSB7XG4gICAgICBzdHlsZSh1c2VDb250YWluZXIgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRhaW5lciB8fCBzbGlkZSwgcHJvcCwgdmFsdWUpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICAgIHZhciBjdXJyID0gU3BsaWRlMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuaW5kZXg7XG4gICAgICByZXR1cm4gY3VyciA9PT0gaW5kZXggfHwgb3B0aW9ucy5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVTdGF0dXMgJiYgY3VyciA9PT0gc2xpZGVJbmRleDtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gaXNWaXNpYmxlKCkge1xuICAgICAgaWYgKFNwbGlkZTIuaXMoRkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREUpKSB7XG4gICAgICAgIHJldHVybiBpc0FjdGl2ZSgpO1xuICAgICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgdmFyIHRyYWNrUmVjdCA9IHJlY3QoQ29tcG9uZW50cy5FbGVtZW50cy50cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2spO1xuICAgICAgdmFyIHNsaWRlUmVjdCA9IHJlY3Qoc2xpZGUpO1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBsZWZ0ID0gcmVzb2x2ZSgibGVmdCIsIHRydWUpO1xuICAgICAgdmFyIHJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHJlc29sdmUoInJpZ2h0IiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gZmxvb3IodHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrUmVjdFtsZWZ0XSkgPD0gY2VpbChzbGlkZVJlY3RbbGVmdF0pICYmIGZsb29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZVJlY3RbcmlnaHRdKSA8PSBjZWlsKHRyYWNrUmVjdFtyaWdodF0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICBmdW5jdGlvbiBpc1dpdGhpbihmcm9tLCBkaXN0YW5jZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBkaWZmID0gYWJzKGZyb20gLSBpbmRleCk7XG5cbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoIWlzQ2xvbmUgJiYgKG9wdGlvbnMucmV3aW5kIHx8IFNwbGlkZTIuaXMoTE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1ApKSkge1xuICAgICAgICBkaWZmID0gbWluKGRpZmYsIFNwbGlkZTIubGVuZ3RoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIGRpZmYpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZiA8PSBkaXN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY2U7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB7XG4gICAgICBpbmRleDogaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4LFxuICAgICAgc2xpZGVJbmRleDogc2xpZGVJbmRleCxcbiAgICAgIHNsaWRlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIGlzQ2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpc0Nsb25lLFxuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3ksXG4gICAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICAgIHN0eWxlOiBzdHlsZSQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMSxcbiAgICAgIGlzV2l0aGluOiBpc1dpdGhpblxuICAgIH07XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBzZWxmO1xuICB9XG5cbiAgZnVuY3Rpb24gU2xpZGVzKFNwbGlkZTIsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UyID0gRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UyLm9uLFxuICAgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMi5lbWl0LFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTIuYmluZDtcblxuICAgIHZhciBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyJEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzbGlkZXMgPSBfQ29tcG9uZW50czIkRWxlbWVudHMuc2xpZGVzLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZW50cy5saXN0O1xuICAgIHZhciBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzMiA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pdCgpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXQoKSB7XG4gICAgICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGUsIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCkge1xuICAgICAgICByZWdpc3RlcihzbGlkZSwgaW5kZXgsIC0xKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIFNsaWRlMi5kZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSgpO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShTbGlkZXMyKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgZm9yRWFjaCQxKGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIFNsaWRlMi51cGRhdGUoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4LCBzbGlkZUluZGV4KSB7XG4gICAgICB2YXIgb2JqZWN0ID0gU2xpZGUkMShTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMiwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlKTtcbiAgICAgIG9iamVjdC5tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtcbiAgICAgIFNsaWRlczIucHVzaChvYmplY3QpO1xuICAgICAgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIuc29ydChmdW5jdGlvbiAoU2xpZGUxLCBTbGlkZTIpIHtcbiAgICAgICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBTbGlkZTEuaW5kZXggLSBTbGlkZTIuaW5kZXg7XG4gICAgICB9KTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KGV4Y2x1ZGVDbG9uZXMpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gZXhjbHVkZUNsb25lcyA/IGZpbHRlcihmdW5jdGlvbiAoU2xpZGUyKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICByZXR1cm4gIVNsaWRlMi5pc0Nsb25lO1xuICAgICAgfSkgOiBTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJbihwYWdlKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbmRleCA9IENvbnRyb2xsZXIudG9JbmRleChwYWdlKTtcbiAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWF4ID0gQ29udHJvbGxlci5oYXNGb2N1cygpID8gMSA6IG9wdGlvbnMucGVyUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2U7XG4gICAgICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBiZXR3ZWVuKFNsaWRlMi5pbmRleCwgaW5kZXgsIGluZGV4ICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21heCAtIDEpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGluZGV4KSB7XG4gICAgICByZXR1cm4gZmlsdGVyKGluZGV4KVswXTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gYWRkKGl0ZW1zLCBpbmRleCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2goaXRlbXMsIGZ1bmN0aW9uIChzbGlkZSkge1xuICAgICAgICBpZiAoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3RyaW5nKHNsaWRlKSkge1xuICAgICAgICAgIHNsaWRlID0gcGFyc2VIdG1sKHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUpKSB7XG4gICAgICAgICAgdmFyIHJlZiA9IHNsaWRlc1tpbmRleF07XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlZiA/IGJlZm9yZShzbGlkZSwgcmVmKSA6IGFwcGVuZChsaXN0LCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUpO1xuICAgICAgICAgIGFkZENsYXNzKHNsaWRlLCBvcHRpb25zLmNsYXNzZXMucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKTtcbiAgICAgICAgICBvYnNlcnZlSW1hZ2VzKHNsaWRlLCBhcHBseShlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgRVZFTlRfUkVTSVpFKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtaXQoRVZFTlRfUkVGUkVTSCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSQxKG1hdGNoZXIpIHtcbiAgICAgIHJlbW92ZShmaWx0ZXIobWF0Y2hlcikubWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncChmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIHJldHVybiBTbGlkZTIuc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICAgICAgfSkpO1xuICAgICAgZW1pdChFVkVOVF9SRUZSRVNIKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gZm9yRWFjaCQxKGl0ZXJhdGVlLCBleGNsdWRlQ2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcykge1xuICAgICAgZ2V0KGV4Y2x1ZGVDbG9uZXMpLmZvckVhY2goaXRlcmF0ZWUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXIobWF0Y2hlcikge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBTbGlkZXMyLmZpbHRlcihpc0Z1bmN0aW9uKG1hdGNoZXIpID8gbWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoZXIgOiBmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIHJldHVybiBpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcobWF0Y2hlcikgPyBtYXRjaGVzKFNsaWRlMi5zbGlkZSwgbWF0Y2hlcikgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jbHVkZXModG9BcnJheShtYXRjaGVyKSwgU2xpZGUyLmluZGV4KTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHlsZShwcm9wLCB2YWx1ZSwgdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNvbnRhaW5lcikge1xuICAgICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIFNsaWRlMi5zdHlsZShwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvYnNlcnZlSW1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlcyhlbG0sIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGVsbSwgImltZyIpO1xuICAgICAgdmFyIGxlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoaW1nKSB7XG4gICAgICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghIC0tbGVuZ3RoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRMZW5ndGgoZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2x1ZGVDbG9uZXMpIHtcbiAgICAgIHJldHVybiBleGNsdWRlQ2xvbmVzID8gc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcy5sZW5ndGggOiBTbGlkZXMyLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gaXNFbm91Z2goKSB7XG4gICAgICByZXR1cm4gU2xpZGVzMi5sZW5ndGggPiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5wZXJQYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHVwZGF0ZSxcbiAgICAgIHJlZ2lzdGVyOiByZWdpc3RlcixcbiAgICAgIGdldDogZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldCxcbiAgICAgIGdldEluOiBnZXRJbixcbiAgICAgIGdldEF0OiBnZXRBdCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBhZGQ6IGFkZCxcbiAgICAgIHJlbW92ZTogcmVtb3ZlJDEsXG4gICAgICBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaDogZm9yRWFjaCQxLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGU6IHN0eWxlLFxuICAgICAgZ2V0TGVuZ3RoOiBnZXRMZW5ndGgsXG4gICAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2g6IGlzRW5vdWdoXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIExheW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXQoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX0V2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEludGVyZmFjZTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uID0gX0V2ZW50SW50ZXJmYWNlMy5vbixcbiAgICAgICAgYmluZCA9IF9FdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UzLmJpbmQsXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0O1xuXG4gICAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24ucmVzb2x2ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50czIgPSBDb21wb25lbnRzMi5FbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMsXG4gICAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290LFxuICAgICAgICB0cmFjayA9IF9Db21wb25lbnRzMiRFbGVtZW50czIudHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMi5saXN0O1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZ2V0QXQgPSBTbGlkZXMuZ2V0QXQsXG4gICAgICAgIHN0eWxlU2xpZGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNsaWRlcy5zdHlsZTtcbiAgICB2YXIgdmVydGljYWw7XG4gICAgdmFyIHJvb3RSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdDtcbiAgICB2YXIgb3ZlcmZsb3c7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBpbml0KCk7XG4gICAgICBiaW5kKHdpbmRvdywgInJlc2l6ZSBsb2FkIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIFRocm90dGxlKGFwcGx5KGVtaXQsIEVWRU5UX1JFU0laRSkpKTtcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sIGluaXQpO1xuICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX1JFU0laRSwgcmVzaXplKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdCgpIHtcbiAgICAgIHZlcnRpY2FsID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUVEI7XG4gICAgICBzdHlsZShyb290LCAibWF4V2lkdGgiLCB1bml0KG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoKSk7XG4gICAgICBzdHlsZSh0cmFjaywgcmVzb2x2ZSgicGFkZGluZ0xlZnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiksIGNzc1BhZGRpbmcoZmFsc2UpKTtcbiAgICAgIHN0eWxlKHRyYWNrLCByZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSgicGFkZGluZ1JpZ2h0IiksIGNzc1BhZGRpbmcodHJ1ZSkpO1xuICAgICAgcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSh0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNpemUoZm9yY2UpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB2YXIgbmV3UmVjdCA9IHJlY3Qocm9vdCk7XG5cbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoZm9yY2UgfHwgcm9vdFJlY3Qud2lkdGggIT09IG5ld1JlY3Qud2lkdGggfHwgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3RSZWN0LmhlaWdodCAhPT0gbmV3UmVjdC5oZWlnaHQpIHtcbiAgICAgICAgc3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlKHRyYWNrLCAiaGVpZ2h0IiwgY3NzVHJhY2tIZWlnaHQoKSk7XG4gICAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZVNsaWRlcyhyZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1bml0KG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCkpO1xuICAgICAgICBzdHlsZVNsaWRlcygid2lkdGgiLCBjc3NTbGlkZVdpZHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCgpKTtcbiAgICAgICAgc3R5bGVTbGlkZXMoImhlaWdodCIsIGNzc1NsaWRlSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodCgpLCB0cnVlKTtcbiAgICAgICAgcm9vdFJlY3QgPSBuZXdSZWN0O1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZW1pdChFVkVOVF9SRVNJWkVEKTtcblxuICAgICAgICBpZiAob3ZlcmZsb3cgIT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicob3ZlcmZsb3cgPSBpc092ZXJmbG93KCkpKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzKHJvb3QsIENMQVNTX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQoRVZFTlRfT1ZFUkZMT1csIG92ZXJmbG93KTtcbiAgICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjc3NQYWRkaW5nKHJpZ2h0KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICB2YXIgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3AgPSByZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7XG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHBhZGRpbmcgJiYgdW5pdChwYWRkaW5nW3Byb3BdIHx8IChpc09iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocGFkZGluZykgPyAwIDogcGFkZGluZykpIHx8ICIwcHgiO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBjc3NUcmFja0hlaWdodCgpIHtcbiAgICAgIHZhciBoZWlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gIiI7XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBoZWlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY3NzSGVpZ2h0KCk7XG4gICAgICAgIGFzc2VydChoZWlnaHQsICJoZWlnaHQgb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGhlaWdodFJhdGlvIGlzIG1pc3NpbmcuIik7XG4gICAgICAgIGhlaWdodCA9ICJjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYygiICsgaGVpZ2h0ICsgIiAtICIgKyBjc3NQYWRkaW5nKGZhbHNlKSArICIgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiArIGNzc1BhZGRpbmcodHJ1ZSkgKyAiKSI7XG4gICAgICB9XG5cbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gaGVpZ2h0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNzc0hlaWdodCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWdodCB8fCByZWN0KGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KS53aWR0aCAqIG9wdGlvbnMuaGVpZ2h0UmF0aW8pO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBjc3NTbGlkZVdpZHRoKCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1dG9XaWR0aCA/IG51bGwgOiB1bml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXJ0aWNhbCA/ICIiIDogY3NzU2xpZGVTaXplKCkpO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBjc3NTbGlkZUhlaWdodCgpIHtcbiAgICAgIHJldHVybiB1bml0KG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmZpeGVkSGVpZ2h0KSB8fCAodmVydGljYWwgPyBvcHRpb25zLmF1dG9IZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0ID8gbnVsbCA6IGNzc1NsaWRlU2l6ZSgpIDogY3NzSGVpZ2h0KCkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBjc3NTbGlkZVNpemUoKSB7XG4gICAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgICAgcmV0dXJuICJjYWxjKCgxMDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJSIgKyAoZ2FwICYmICIgKyAiICsgZ2FwKSArICIpLyIgKyAob3B0aW9ucy5wZXJQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSB8fCAxKSArIChnYXAgJiYgIiAtICIgKyBnYXApICsgIikiO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBmdW5jdGlvbiBsaXN0U2l6ZSgpIHtcbiAgICAgIHJldHVybiByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdChsaXN0KVtyZXNvbHZlKCJ3aWR0aCIpXTtcbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc2xpZGVTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlID0gZ2V0QXQoaW5kZXggfHwgMCk7XG4gICAgICByZXR1cm4gU2xpZGUgPyByZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChTbGlkZS5zbGlkZSlbcmVzb2x2ZSgid2lkdGgiKV0gKyAod2l0aG91dEdhcCA/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwIDogZ2V0R2FwKCkpIDogMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgICB2YXIgU2xpZGUgPSBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXQoaW5kZXgpO1xuXG4gICAgICBpZiAoU2xpZGUpIHtcbiAgICAgICAgdmFyIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCA9IHJlY3QoU2xpZGUuc2xpZGUpW3Jlc29sdmUoInJpZ2h0IildO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGxlZnQgPSByZWN0KGxpc3QpW3Jlc29sdmUoImxlZnQiKV07XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gYWJzKHJpZ2h0IC0gbGVmdCkgKyAod2l0aG91dEdhcCA/IDAgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0R2FwKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZnVuY3Rpb24gc2xpZGVyU2l6ZSh3aXRob3V0R2FwKSB7XG4gICAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHRvdGFsU2l6ZShTcGxpZGUyLmxlbmd0aCAtIDEpIC0gdG90YWxTaXplKDApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIHNsaWRlU2l6ZSgwLCB3aXRob3V0R2FwKTtcbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZ2V0R2FwKCkge1xuICAgICAgdmFyIFNsaWRlID0gZ2V0QXQoMCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2xpZGUuc2xpZGUsIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlKCJtYXJnaW5SaWdodCIpKSkgfHwgMDtcbiAgICB9XG5cbiAgICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZ2V0UGFkZGluZyhyaWdodCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYWRkaW5nIiArIChyaWdodCA/ICJSaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHQiIDogIkxlZnQiKSkpKSB8fCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc092ZXJmbG93KCkge1xuICAgICAgcmV0dXJuIFNwbGlkZTIuaXMoRkFERSkgfHwgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlclNpemUodHJ1ZSkgPiBsaXN0U2l6ZSgpO1xuICAgIH1cblxuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgcmVzaXplOiByZXNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plLFxuICAgICAgbGlzdFNpemU6IGxpc3RTaXplLFxuICAgICAgc2xpZGVTaXplOiBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplLFxuICAgICAgc2xpZGVyU2l6ZTogc2xpZGVyU2l6ZSxcbiAgICAgIHRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbFNpemU6IHRvdGFsU2l6ZSxcbiAgICAgIGdldFBhZGRpbmc6IGdldFBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgaXNPdmVyZmxvdzogaXNPdmVyZmxvd1xuICAgIH07XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIE1VTFRJUExJRVIgPSAyO1xuXG4gIGZ1bmN0aW9uIENsb25lcyhTcGxpZGUyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub247XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQ29tcG9uZW50czIuU2xpZGVzO1xuICAgIHZhciByZXNvbHZlID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICAgIHZhciBjbG9uZXMgPSBbXTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGNsb25lQ291bnQ7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihFVkVOVF9SRUZSRVNILCByZW1vdW50KTtcbiAgICAgIG9uKFtFVkVOVF9VJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BEQVRFRCwgRVZFTlRfUkVTSVpFXSwgb2JzZXJ2ZSk7XG5cbiAgICAgIGlmIChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCkpIHtcbiAgICAgICAgZ2VuZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNsb25lQ291bnQpO1xuICAgICAgICBDb21wb25lbnRzMi5MYXlvdXQucmVzaXplKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGRlc3Ryb3koKTtcbiAgICAgIG1vdW50KCk7XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICByZW1vdmUoY2xvbmVzKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbXB0eShjbG9uZXMpO1xuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvYnNlcnZlKCkge1xuICAgICAgdmFyIGNvdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNvbXB1dGVDbG9uZUNvdW50KCk7XG5cbiAgICAgIGlmIChjbG9uZUNvdW50ICE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY291bnQpIHtcbiAgICAgICAgaWYgKGNsb25lQ291bnQgPCBjb3VudCB8fCAhY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KSB7XG4gICAgICAgICAgZXZlbnQuZW1pdChFVkVOVF9SRUZSRVNIKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZShjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQpIHtcbiAgICAgIHZhciBzbGlkZXMgPSBTbGlkZXMuZ2V0KCkuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgbGVuZ3RoID0gc2xpZGVzLmxlbmd0aDtcblxuICAgICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChsZW5ndGgpIHtcbiAgICAgICAgd2hpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgICBwdXNoKHNsaWRlcywgc2xpZGVzKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgICAgICBwdXNoKHNsaWRlcy5zbGljZSgtY291bnQpLCBzbGlkZXMuc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKDAsIGNvdW50KSkuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUsIGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIHZhciBpc0hlYWQgPSBpbmRleCA8IGNvdW50O1xuICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgY2xvbmUgPSBjbG9uZURlZXAoU2xpZGUuc2xpZGUsIGluZGV4KTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaXNIZWFkID8gYmVmb3JlKGNsb25lLCBzbGlkZXNbMF0uc2xpZGUpIDogYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVuZChFbGVtZW50cy5saXN0LCBjbG9uZSk7XG4gICAgICAgICAgcHVzaChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLCBjbG9uZSk7XG4gICAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKGNsb25lLCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggLSBjb3VudCArIChpc0hlYWQgPyAwIDogbGVuZ3RoKSwgU2xpZGUuaW5kZXgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lRGVlcChlbG0sIGluZGV4KSB7XG4gICAgICB2YXIgY2xvbmUgPSBlbG0uY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlTm9kZSh0cnVlKTtcbiAgICAgIGFkZENsYXNzKGNsb25lLCBvcHRpb25zLmNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmNsb25lKTtcbiAgICAgIGNsb25lLmlkID0gU3BsaWRlMi5yb290LmlkICsgIi0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBjbG9uZXMyID0gb3B0aW9ucy5jbG9uZXM7XG5cbiAgICAgIGlmICghU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaXMoTE9PUCkpIHtcbiAgICAgICAgY2xvbmVzMiA9IDA7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChpc1VuZGVmaW5lZChjbG9uZXMyKSkge1xuICAgICAgICB2YXIgZml4ZWRTaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSA9IG9wdGlvbnNbcmVzb2x2ZSgiZml4ZWRXaWR0aCIpXSAmJiBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInczIuTGF5b3V0LnNsaWRlU2l6ZSgwKTtcbiAgICAgICAgdmFyIGZpeGVkQ291bnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZml4ZWRTaXplICYmIGNlaWwocmVjdChFbGVtZW50cy50cmFjaylbcmVzb2x2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIndpZHRoIildIC8gZml4ZWRTaXplKTtcbiAgICAgICAgY2xvbmVzMiA9IGZpeGVkQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50IHx8IG9wdGlvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIildICYmIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aCB8fCBvcHRpb25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgcmV0dXJuIGNsb25lczI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0cm95XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiBNb3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2U0ID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyZmFjZTQub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlNC5lbWl0O1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzZXQgPSBTcGxpZGUyLnN0YXRlLnNldDtcbiAgICB2YXIgX0NvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzMiRMYXlvdXQgPSBDb21wb25lbnRzMi5MYXlvdXQsXG4gICAgICAgIHNsaWRlU2l6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlU2l6ZSxcbiAgICAgICAgZ2V0UGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGRpbmcgPSBfQ29tcG9uZW50czIkTGF5b3V0LmdldFBhZGRpbmcsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3RhbFNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnRvdGFsU2l6ZSxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGxpc3RTaXplID0gX0NvbXBvbmVudHMyJExheW91dC5saXN0U2l6ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNsaWRlclNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlclNpemU7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBfQ29tcG9uZW50czIkRGlyZWN0aW8gPSBDb21wb25lbnRzMi5EaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0aW9uLFxuICAgICAgICByZXNvbHZlID0gX0NvbXBvbmVudHMyJERpcmVjdGlvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlLFxuICAgICAgICBvcmllbnQgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yaWVudDtcbiAgICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzMyA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5FbGVtZW50cyxcbiAgICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMzLmxpc3QsXG4gICAgICAgIHRyYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMudHJhY2s7XG4gICAgdmFyIFRyYW5zaXRpb247XG5cbiAgICBmdW5jdGlvbiBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKSB7XG4gICAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50czIuVHJhbnNpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb247XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCByZXBvc2l0aW9uKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gcmVwb3NpdGlvbigpIHtcbiAgICAgIGlmICghQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkNvbnRyb2xsZXIuaXNCdXN5KCkpIHtcbiAgICAgICAgQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLlNjcm9sbC5jYW5jZWwoKTtcbiAgICAgICAganVtcChTcGxpZGUyLmluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgIENvbXBvbmVudHMyLlNsaWRlcy51cGRhdGUoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZShkZXN0LCBpbmRleCwgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXYsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoZGVzdCAhPT0gaW5kZXggJiYgY2FuUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaWZ0KGRlc3QgPiBwcmV2KSkge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zbGF0ZShzaGlmdChnZXRQb3NpdGlvbigpLCBkZXN0ID4gcHJldiksIHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH1cblxuICAgICAgc2V0KE1PVklORyk7XG4gICAgICBlbWl0KEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9NT1ZFLCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICBUcmFuc2l0aW9uLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydChpbmRleCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXQoSURMRSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbWl0KEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZ1bmN0aW9uIGp1bXAoaW5kZXgpIHtcbiAgICAgIHRyYW5zbGF0ZSh0b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihpbmRleCwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc2xhdGUocG9zaXRpb24sIHByZXZlbnRMb29wKSB7XG4gICAgICBpZiAoIVNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmlzKEZBREUpKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHByZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTG9vcCA/IHBvc2l0aW9uIDogbG9vcChwb3NpdGlvbik7XG4gICAgICAgIHN0eWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0LCAidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIigiICsgZGVzdGluYXRpb24gKyAicHgpIik7XG4gICAgICAgIHBvc2l0aW9uICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gJiYgZW1pdChFVkVOVF9TSElGVEVEKTtcbiAgICAgIH1cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gbG9vcChwb3NpdGlvbikge1xuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUyLmlzKExPT1ApKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRvSW5kZXgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uKTtcbiAgICAgICAgdmFyIGV4Y2VlZGVkTWF4ID0gaW5kZXggPiBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50czIuQ29udHJvbGxlci5nZXRFbmQoKTtcbiAgICAgICAgdmFyIGV4Y2VlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZE1pbiA9IGluZGV4IDwgMDtcblxuICAgICAgICBpZiAoZXhjZWVkZWRNaW4gfHwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4Y2VlZGVkTWF4KSB7XG4gICAgICAgICAgcG9zaXRpb24gPSBzaGlmdChwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sIGV4Y2VlZGVkTWF4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoaWZ0KHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiwgYmFja3dhcmRzKSB7XG4gICAgICB2YXIgZXhjZXNzID0gcG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gZ2V0TGltaXQoYmFja3dhcmRzKTtcbiAgICAgIHZhciBzaXplID0gc2xpZGVyU2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInemUoKTtcbiAgICAgIHBvc2l0aW9uIC09IG9yaWVudChzaXplICogKGNlaWwoYWJzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlc3MpIC8gc2l6ZSkgfHwgMSkpICogKGJhY2t3YXJkcyA/IDEgOiAtMSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWwoKSB7XG4gICAgICB0cmFuc2xhdGUoZ2V0UG9zaXRpb24oKSwgdHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgVHJhbnNpdGlvbi5jYW5jZWwoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdG9JbmRleChwb3NpdGlvbikge1xuICAgICAgdmFyIFNsaWRlcyA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5TbGlkZXMuZ2V0KCk7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGkgPCBTbGlkZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNsaWRlSW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ID0gU2xpZGVzW2ldLmluZGV4O1xuICAgICAgICB2YXIgZGlzdGFuY2UgPSBhYnMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvUG9zaXRpb24oc2xpZGVJbmRleCwgdHJ1ZSkgLSBwb3NpdGlvbik7XG5cbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmIChkaXN0YW5jZSA8PSBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgIG1pbkQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4ID0gc2xpZGVJbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdG9Qb3NpdGlvbihpbmRleCwgdHJpbW1pbmcpIHtcbiAgICAgIHZhciBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gPSBvcmllbnQodG90YWxTaXplKGluZGV4IC0gMSkgLSBvZmZzZXQoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KSk7XG4gICAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKHBvc2l0aW9uKSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQb3NpdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB2YXIgbGVmdCA9IHJlc29sdmUoImxlZnQiKTtcbiAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gcmVjdChsaXN0KVtsZWZ0XSAtIHJlY3QodHJhY2spW2xlZnRdICsgb3JpZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRQYWRkaW5nKGZhbHNlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocG9zaXRpb24pIHtcbiAgICAgIGlmIChvcHRpb25zLnRyaW1TcGFjZSAmJiBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMi5pcyhTTElERSkpIHtcbiAgICAgICAgcG9zaXRpb24gPSBjbGFtcChwb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24sIDAsIG9yaWVudChzbGlkZXJTaXplKHRydWUpIC0gbGlzdFNpemUoKSkpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH1cblxuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvZmZzZXQoaW5kZXgpIHtcbiAgICAgIHZhciBmb2N1cyA9IG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmZvY3VzO1xuICAgICAgcmV0dXJuIGZvY3VzID09PSAiY2VudGVyIiA/IChsaXN0UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUoKSAtIHNsaWRlU2l6ZShpbmRleCwgdHJ1ZSkpIC8gMiA6ICtmb2N1cyAqIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemUoaW5kZXgpIHx8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndExpbWl0KG1heCkge1xuICAgICAgcmV0dXJuIHRvUG9zaXRpb24obWF4ID8gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RW5kKCkgOiAwLCAhIW9wdGlvbnMudHJpbVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFjZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuU2hpZnQoYmFja3dhcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncykge1xuICAgICAgdmFyIHNoaWZ0ZWQgPSBvcmllbnQoc2hpZnQoZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCksIGJhY2t3YXJkcykpO1xuICAgICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkID49IDAgOiBzaGlmdGVkIDw9IGxpc3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgiKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddIC0gcmVjdCh0cmFjaylbcmVzb2x2ZSgid2lkdGgiKV07XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGV4Y2VlZGVkTGltaXQobWF4LCBwb3NpdGlvbikge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uID0gaXNVbmRlZmluZWQocG9zaXRpb24pID8gZ2V0UG9zaXRpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBwb3NpdGlvbjtcbiAgICAgIHZhciBleGNlZWRlZE1pbiA9IG1heCAhPT0gdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgJiYgb3JpZW50KHBvc2l0aW9uKSA8IG9yaWVudChnZXRMaW1pdChmYWxzZSkpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBleGNlZWRlZE1heCA9IG1heCAhPT0gZmFsc2UgJiYgb3JpZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwb3NpdGlvbikgPiBvcmllbnQoZ2V0TGltaXQodHJ1ZSkpO1xuICAgICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBleGNlZWRlZE1pbiB8fCBleGNlZWRlZE1heDtcbiAgICB9XG5cbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIG1vdmU6IG1vdmUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAganVtcDoganVtcCxcbiAgICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNoaWZ0OiBzaGlmdCxcbiAgICAgIGNhbmNlbDogY2FuY2VsLFxuICAgICAgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXg6IHRvSW5kZXgsXG4gICAgICB0b1Bvc2l0aW9uOiB0b1Bvc2l0aW9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbixcbiAgICAgIGdldExpbWl0OiBnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0TGltaXQsXG4gICAgICBleGNlZWRlZExpbWl0OiBleGNlZWRlZExpbWl0LFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJlcG9zaXRpb246IHJlcG9zaXRpb25cbiAgICB9O1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIENvbnRyb2xsZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIF9FdmVudEludGVyZmFjZTUgPSBFdmVudEludGVyZmFjZShTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNS5vbixcbiAgICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgPSBfRXZlbnRJbnRlcmZhY2U1LmVtaXQ7XG5cbiAgICB2YXIgTW92ZSA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMi5Nb3ZlO1xuICAgIHZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLFxuICAgICAgICBnZXRMaW1pdCA9IE1vdmUuZ2V0TGltaXQsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b1Bvc2l0aW9uID0gTW92ZS50b1Bvc2l0aW9uO1xuICAgIHZhciBfQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MyJFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcyxcbiAgICAgICAgaXNFbm91Z2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0NvbXBvbmVudHMyJFNsaWRlcy5pc0Vub3VnaCxcbiAgICAgICAgZ2V0TGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aCA9IF9Db21wb25lbnRzMiRTbGlkZXMuZ2V0TGVuZ3RoO1xuICAgIHZhciBvbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VuZCA9IG9wdGlvbnMub21pdEVuZDtcbiAgICB2YXIgaXNMb29wID0gU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoTE9PUCk7XG4gICAgdmFyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSURFKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIGdldE5leHQgPSBhcHBseShnZXRBZGphY2VudCwgZmFsc2UpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgZ2V0UHJldiA9IGFwcGx5KGdldEFkamFjZW50LCB0cnVlKTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cnJJbmRleCA9IG9wdGlvbnMuc3RhcnQgfHwgMDtcbiAgICB2YXIgZW5kSW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHZhciBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gICAgdmFyIHNsaWRlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50O1xuICAgIHZhciBwZXJNb3ZlO1xuICAgIHZhciBwZXJQYWdlO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oW0VWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19VUERBVEVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddLCBpbml0KTtcbiAgICAgIG9uKEVWRU5UX1JFU0laRUQsIG9uUmVzaXplZCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBzbGlkZUNvdW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGdldExlbmd0aCh0cnVlKTtcbiAgICAgIHBlck1vdmUgPSBvcHRpb25zLnBlck1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlO1xuICAgICAgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZTtcbiAgICAgIGVuZEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCA9IGdldEVuZCgpO1xuICAgICAgdmFyIGluZGV4ID0gY2xhbXAoY3VyckluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCwgMCwgb21pdEVuZCA/IGVuZEluZGV4IDogc2xpZGVDb3VudCAtIDEpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKGluZGV4ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgICAgY3VyckluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGluZGV4O1xuICAgICAgICBNb3ZlLnJlcG9zaXRpb24oKTtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgZnVuY3Rpb24gb25SZXNpemVkKCkge1xuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRJbmRleCAhPT0gZ2V0RW5kKCkpIHtcbiAgICAgICAgZW1pdChFVkVOVF9FTkRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lOREVYX0NIQU5HRUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnbyhjb250cm9sLCBhbGxvd1NhbWVJbmRleCwgY2FsbGJhY2spIHtcbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoIWlzQnVzeSgpKSB7XG4gICAgICAgIHZhciBkZXN0ID0gcGFyc2UoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB2YXIgaW5kZXggPSBsb29wKGRlc3QpO1xuXG4gICAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaW5kZXggPiAtMSAmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggIT09IGN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JySW5kZXgpKSB7XG4gICAgICAgICAgc2V0SW5kZXgoaW5kZXgpO1xuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlLm1vdmUoZGVzdCwgaW5kZXgsIHByZXZJbmRleCwgY2FsbGJhY2spO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbChkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBjYWxsYmFjaykge1xuICAgICAgQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLlNjcm9sbC5zY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hcCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnRvSW5kZXgoZ2V0UG9zaXRpb24oKSkpO1xuICAgICAgICBzZXRJbmRleChvbWl0RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCA/IG1pbihpbmRleCwgZW5kSW5kZXgpIDogaW5kZXgpO1xuICAgICAgICBjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBwYXJzZShjb250cm9sKSB7XG4gICAgICB2YXIgaW5kZXggPSBjdXJySW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4O1xuXG4gICAgICBpZiAoaXNTdHJpbmcoY29udHJvbCkpIHtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBfcmVmID0gY29udHJvbC5tYXRjaCgvKFsrXFwtPD5dKShcXGQrKT8vKSB8fCBbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10sXG4gICAgICAgICAgICBpbmRpY2F0b3IgPSBfcmVmWzFdLFxuICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciA9IF9yZWZbMl07XG5cbiAgICAgICAgaWYgKGluZGljYXRvciA9PT0gIisiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBpbmRpY2F0b3IgPT09ICItIikge1xuICAgICAgICAgIGluZGV4ID0gY29tcHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVEZXN0SW5kZXgoY3VyckluZGV4ICsgKygiIiArIGluZGljYXRvciArICgrbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciB8fCAxKSksIGN1cnJJbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRvciA9PT0gIj4iKSB7XG4gICAgICAgICAgaW5kZXggPSBudW1iZXIgPyB0b0luZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCgrbnVtYmVyKSA6IGdldE5leHQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGljYXRvciA9PT0gIjwiKSB7XG4gICAgICAgICAgaW5kZXggPSBnZXRQcmV2KHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKGNvbnRyb2wsIDAsIGVuZEluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZ2V0QWRqYWNlbnQocHJldiwgZGVzdGluYXRpb24pIHtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgbnVtYmVyID0gcGVyTW92ZSB8fCAoaGFzRm9jdXMoKSA/IDEgOiBwZXJQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB2YXIgZGVzdCA9IGNvbXB1dGVEZXN0SW5kZXgoY3VyckluZGV4ICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciAqIChwcmV2ID8gLTEgOiAxKSwgY3VyckluZGV4LCAhKHBlck1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IGhhc0ZvY3VzKCkpKTtcblxuICAgICAgaWYgKGRlc3QgPT09IC0xICYmIGlzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKSB7XG4gICAgICAgIGlmICghYXBwcm94aW1hdGVseUVxdWFsKGdldFBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbigpLCBnZXRMaW1pdCghcHJldiksIDEpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ID8gMCA6IGVuZEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gZGVzdGluYXRpb24gPyBkZXN0IDogbG9vcChkZXN0KTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgZnVuY3Rpb24gY29tcHV0ZURlc3RJbmRleChkZXN0LCBmcm9tLCBzbmFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BhZ2UpIHtcbiAgICAgIGlmIChpc0Vub3VnaCgpIHx8IGhhc0ZvY3VzKCkpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHZhciBpbmRleCA9IGNvbXB1dGVNb3ZhYmxlRGVzdEluZGV4KGRlc3QpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgICBpZiAoaW5kZXggIT09IGRlc3QpIHtcbiAgICAgICAgICBmcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbSA9IGRlc3Q7XG4gICAgICAgICAgZGVzdCA9IGluZGV4O1xuICAgICAgICAgIHNuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwUGFnZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc3QgPCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMCB8fCBkZXN0ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICBpZiAoIXBlck1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmIChiZXR3ZWVuKDAsIGRlc3QsIGZyb20sIHRydWUpIHx8IGJldHdlZW4oZW5kSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4LCBmcm9tLCBkZXN0LCB0cnVlKSkpIHtcbiAgICAgICAgICAgIGRlc3QgPSB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29JbmRleCh0b1BhZ2UoZGVzdCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgICAgICBkZXN0ID0gc25hcFBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gZGVzdCA8IDAgPyAtKHNsaWRlQ291bnQgJSBwZXJQYWdlIHx8IHBlclBhZ2UpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA6IHNsaWRlQ291bnQgOiBkZXN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5yZXdpbmQpIHtcbiAgICAgICAgICAgICAgZGVzdCA9IGRlc3QgPCAwID8gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZEluZGV4IDogMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc25hcFBhZ2UgJiYgZGVzdCAhPT0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20pIHtcbiAgICAgICAgICAgIGRlc3QgPSB0b0luZGV4KHRvUGFnZShmcm9tKSArICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA8IGZyb20gPyAtMSA6IDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0ID0gLTE7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZU1vdmFibGVEZXN0SW5kZXgoZGVzdCkge1xuICAgICAgaWYgKGlzU2xpZGUgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMudHJpbVNwYWNlID09PSAibW92ZSIgJiYgZGVzdCAhPT0gY3VyckluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCkge1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGlvbigpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgICB3aGlsZSAocG9zaXRpb24gPT09IHRvUG9zaXRpb24oZGVzdCwgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydWUpICYmIGJldHdlZW4oZGVzdCwgMCwgU3BsaWRlMi5sZW5ndGggLSAxLCAhb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMucmV3aW5kKSkge1xuICAgICAgICAgIGRlc3QgPCBjdXJySW5kZXggPyAtLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0IDogKytkZXN0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb29wKGluZGV4KSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIGlzTG9vcCA/IChpbmRleCArIHNsaWRlQ291bnQpICUgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQ291bnQgfHwgMCA6IGluZGV4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbmQoKSB7XG4gICAgICB2YXIgZW5kID0gc2xpZGVDb3VudCAtIChoYXNGb2N1cygpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBpc0xvb3AgJiYgcGVyTW92ZSA/IDEgOiBwZXJQYWdlKTtcblxuICAgICAgd2hpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlIChvbWl0RW5kICYmIGVuZC0tID4gMCkge1xuICAgICAgICBpZiAodG9Qb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oc2xpZGVDb3VudCAtIDEsIHRydWUpICE9PSB0b1Bvc2l0aW9uKGVuZCwgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpKSB7XG4gICAgICAgICAgZW5kKys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbGFtcChlbmQsIDAsIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUNvdW50IC0gMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbmRleChwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSkge1xuICAgICAgcmV0dXJuIGNsYW1wKGhhc0ZvY3VzKCkgPyBwYWdlIDogcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclBhZ2UgKiBwYWdlLCAwLCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHRvUGFnZShpbmRleCkge1xuICAgICAgcmV0dXJuIGhhc0ZvY3VzKCkgPyBtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGluZGV4LCBlbmRJbmRleCkgOiBmbG9vcigoaW5kZXggPj0gZW5kSW5kZXggPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVDb3VudCAtIDEgOiBpbmRleCkgLyBwZXJQYWdlKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZnVuY3Rpb24gdG9EZXN0KGRlc3RpbmF0aW9uKSB7XG4gICAgICB2YXIgY2xvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3QgPSBNb3ZlLnRvSW5kZXgoZGVzdGluYXRpb24pO1xuICAgICAgcmV0dXJuIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlID8gY2xhbXAoY2xvc2VzdCwgMCwgZW5kSW5kZXgpIDogY2xvc2VzdDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0SW5kZXgoaW5kZXgpIHtcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaW5kZXggIT09IGN1cnJJbmRleCkge1xuICAgICAgICBwcmV2SW5kZXggPSBjdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyckluZGV4O1xuICAgICAgICBjdXJySW5kZXggPSBpbmRleDtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXgocHJldikge1xuICAgICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBwcmV2ID8gcHJldkluZGV4IDogY3VyckluZGV4O1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgICAgIHJldHVybiAhaXNVbmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKG9wdGlvbnMuZm9jdXMpIHx8IG9wdGlvbnMuaXNOYXZpZ2F0aW9uO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiBpc0J1c3koKSB7XG4gICAgICByZXR1cm4gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuc3RhdGUuaXMoW01PVklORywgU0NST0xMSU5HXSkgJiYgISFvcHRpb25zLndhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0Rm9yVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50OiBtb3VudCxcbiAgICAgIGdvOiBnbyxcbiAgICAgIHNjcm9sbDogc2Nyb2xsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGdldE5leHQ6IGdldE5leHQsXG4gICAgICBnZXRQcmV2OiBnZXRQcmV2LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGdldEFkamFjZW50OiBnZXRBZGphY2VudCxcbiAgICAgIGdldEVuZDogZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEVuZCxcbiAgICAgIHNldEluZGV4OiBzZXRJbmRleCxcbiAgICAgIGdldEluZGV4OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0SW5kZXgsXG4gICAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICAgdG9QYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG9QYWdlLFxuICAgICAgdG9EZXN0OiB0b0Rlc3QsXG4gICAgICBoYXNGb2N1czogaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0ZvY3VzLFxuICAgICAgaXNCdXN5OiBpc0J1c3lcbiAgICB9O1xuICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBYTUxfTkFNRV9TUEFDRSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgUEFUSCA9ICJtMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41IDE0LjYtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LjQtMTQuNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictMTQuNnoiO1xuICB2YXIgU0laRSA9IDQwO1xuXG4gIGZ1bmN0aW9uIEFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXZlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICAgICAgZW1pdCA9IGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5lbWl0O1xuICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbGFzc2VzLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgRWxlbWVudHMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRWxlbWVudHMsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIuQ29udHJvbGxlcjtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5hcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3dzLFxuICAgICAgICB0cmFjayA9IEVsZW1lbnRzLnRyYWNrO1xuICAgIHZhciB3cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlciA9IHBsYWNlaG9sZGVyO1xuICAgIHZhciBwcmV2ID0gRWxlbWVudHMucHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIG5leHQgPSBFbGVtZW50cy5uZXh0O1xuICAgIHZhciBjcmVhdGVkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgd3JhcHBlckNsYXNzZXM7XG4gICAgdmFyIGFycm93cyA9IHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKEVWRU5UX1VQREFURUQsIHJlbW91bnQpO1xuICAgIH1cblxuICAgIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiByZW1vdW50KCkge1xuICAgICAgZGVzdHJveSgpO1xuICAgICAgbW91bnQoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBlbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlZCA9IG9wdGlvbnMuYXJyb3dzO1xuXG4gICAgICBpZiAoZW5hYmxlZCAmJiAhKHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2ICYmIG5leHQpKSB7XG4gICAgICAgIGNyZWF0ZUFycm93cygpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgICAgICBhc3NpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGFycm93cywge1xuICAgICAgICAgIHByZXY6IHByZXYsXG4gICAgICAgICAgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5leHRcbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BsYXkod3JhcHBlciwgZW5hYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPyAiIiA6ICJub25lIik7XG4gICAgICAgIGFkZENsYXNzKHdyYXBwZXIsIHdyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGVyQ2xhc3NlcyA9IENMQVNTX0FSUk9XUyArICItLSIgKyBvcHRpb25zLmRpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24pO1xuXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3RlbigpO1xuICAgICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICAgIHNldEF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUoW3ByZXYsIG5leHRdLCBBUklBX0NPTlRST0xTLCB0cmFjay5pZCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGVtaXQoRVZFTlRfQVJST1dTX01PVU5URUQsIHByZXYsIG5leHQpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgICAgcmVtb3ZlQ2xhc3Mod3JhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZXIsIHdyYXBwZXJDbGFzc2VzKTtcblxuICAgICAgaWYgKGNyZWF0ZWQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJlbW92ZShwbGFjZWhvbGRlciA/IFtwcmV2LCBuZXh0XSA6IHdyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVyKTtcbiAgICAgICAgcHJldiA9IG5leHQgPSBudWxsO1xuICAgICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHJlbW92ZUF0dHJpYnV0ZShbcHJldiwgbmV4dF0sIEFMTF9BVFRSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lCVVRFUyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdGVuKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddLCB1cGRhdGUpO1xuICAgICAgYmluZChuZXh0LCAiY2xpY2siLCBhcHBseShnbywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI+IikpO1xuICAgICAgYmluZChwcmV2LCAiY2xpY2siLCBhcHBseShnbywgIjwiKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdvKGNvbnRyb2wpIHtcbiAgICAgIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sbGVyLmdvKGNvbnRyb2wsIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjcmVhdGVBcnJvd3MoKSB7XG4gICAgICB3cmFwcGVyID0gcGxhY2Vob2xkZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IGNyZWF0ZSgiZGl2IiwgY2xhc3Nlcy5hcnJvd3MpO1xuICAgICAgcHJldiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcmVhdGVBcnJvdyh0cnVlKTtcbiAgICAgIG5leHQgPSBjcmVhdGVBcnJvdyhmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgICAgY3JlYXRlZCA9IHRydWU7XG4gICAgICBhcHBlbmQod3JhcHBlciwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1twcmV2LCBuZXh0XSk7XG4gICAgICAhcGxhY2Vob2xkZXIgJiYgYmVmb3JlKHdyYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGVyLCB0cmFjayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHByZXYyKSB7XG4gICAgICB2YXIgYXJyb3cgPSAiPGJ1dHRvbiBjbGFzcz1cXCIiICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldjIgPyBjbGFzc2VzLnByZXYgOiBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwZT1cXCJidXR0b25cXCI+PHN2ZyB4bWxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9XFwiIiArIFhNTF9OQU1FX1NQQUNFICsgIlxcIiB2aWV3Qm94PVxcIjAgMCAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArIFNJWkUgKyAiICIgKyBTSVpFICsgIlxcIiB3aWR0aD1cXCIiICsgU0laRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiXFwiIGhlaWdodD1cXCIiICsgU0laRSArICJcXCIgZm9jdXNhYmxlPVxcImZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZVxcIj48cGF0aCBkPVxcIiIgKyAob3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgIlxcIiAvPiI7XG4gICAgICByZXR1cm4gcGFyc2VIdG1sKGFycm93KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKHByZXYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmIG5leHQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gU3BsaWRlMi5pbmRleDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByZXYoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBuZXh0SW5kZXggPSBDb250cm9sbGVyLmdldE5leHQoKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBwcmV2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCA8IHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXggPyBpMThuLmxhc3QgOiBpMThuLnByZXY7XG4gICAgICAgIHZhciBuZXh0TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsID0gbmV4dEluZGV4ID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPyBpMTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5maXJzdCA6IGkxOG4ubmV4dDtcbiAgICAgICAgcHJldi5kaXNhYmxlZCA9IHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2SW5kZXggPCAwO1xuICAgICAgICBuZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XG4gICAgICAgIHNldEF0dHJpYnV0ZShwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVsKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKG5leHQsIEFSSUFfTEFCRUwsIG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0TGFiZWwpO1xuICAgICAgICBlbWl0KEVWRU5UX0FSUk9XU19VUERBVEVELCBwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgbmV4dCwgcHJldkluZGV4LCBuZXh0SW5kZXgpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJyb3dzOiBhcnJvd3MsXG4gICAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIHVwZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IHVwZGF0ZVxuICAgIH07XG4gIH1cblxuICB2YXIgSU5URVJWQUxfREFUQV9BVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUUklCVVRFID0gREFUQV9BVFRSSUJVVEUgKyAiLWludGVydmFsIjtcblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gQXV0b3BsYXkoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIF9FdmVudEludGVyZmFjZTYgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNi5vbixcbiAgICAgICAgYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfRXZlbnRJbnRlcmZhY2U2LmJpbmQsXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlNi5lbWl0O1xuXG4gICAgdmFyIGludGVydmFsID0gUmVxdWVzdEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbChvcHRpb25zLmludGVydmFsLCBTcGxpZGUyLmdvLmJpbmQoU3BsaWRlMiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+IiksIG9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIHZhciBpc1BhdXNlZCA9IGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbC5pc1BhdXNlZDtcbiAgICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudHMsXG4gICAgICAgIF9Db21wb25lbnRzMiRFbGVtZW50czQgPSBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czIuRWxlbWVudHMsXG4gICAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzNC5yb290LFxuICAgICAgICB0b2dnbGUgPSBfQ29tcG9uZW50czIkRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNC50b2dnbGU7XG4gICAgdmFyIGF1dG9wbGF5ID0gb3B0aW9ucy5hdXRvcGxheTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIGhvdmVyZWQ7XG4gICAgdmFyIGZvY3VzZWQ7XG4gICAgdmFyIHN0b3BwZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYXV0b3BsYXkgPT09ICJwYXVzZSI7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAoYXV0b3BsYXkpIHtcbiAgICAgICAgbGlzdGVuKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0b2dnbGUgJiYgc2V0QXR0cmlidXRlKHRvZ2dsZSwgQVJJQV9DT05UUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MsIEVsZW1lbnRzLnRyYWNrLmlkKTtcbiAgICAgICAgc3RvcHBlZCB8fCBwbGF5KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB1cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbGlzdGVuKCkge1xuICAgICAgaWYgKG9wdGlvbnMucGF1c2VPbkhvdmVyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBiaW5kKHJvb3QsICJtb3VzZWVudGVyIG1vdXNlbGVhdmUiLCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gKGUpIHtcbiAgICAgICAgICBob3ZlcmVkID0gZS50eXBlID09PSAibW91cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZW50ZXIiO1xuICAgICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wYXVzZU9uRm9jdXMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGJpbmQocm9vdCwgImZvY3VzaW4gZm9jdXNvdXQiLCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpIHtcbiAgICAgICAgICBmb2N1c2VkID0gZS50eXBlID09PSAiZm9jdXNpbiI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgIGJpbmQodG9nZ2xlLCAiY2xpY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BwZWQgPyBwbGF5KCkgOiBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2UodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBvbihbRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfUkVGUkVTSF0sIGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5yZXdpbmQpO1xuICAgICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgIGlmIChpc1BhdXNlZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSAmJiBDb21wb25lbnRzMi5TbGlkZXMuaXNFbm91Z2goKSkge1xuICAgICAgICBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJ2YWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQcm9ncmVzcyk7XG4gICAgICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpO1xuICAgICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1BMQVkpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKHN0b3AgPT09IHZvaWQgMCkge1xuICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICAgIHN0b3BwZWQgPSAhIXN0b3A7XG4gICAgICB1cGRhdGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgIGlmICghaXNQYXVzZWQoKSkge1xuICAgICAgICBpbnRlcnZhbC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2UoKTtcbiAgICAgICAgZW1pdChFVkVOVF9BVVRPUExBWV9QQVVTRSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF1dG9Ub2dnbGUoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKCFzdG9wcGVkKSB7XG4gICAgICAgIGhvdmVyZWQgfHwgZm9jdXNlZCA/IHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXVzZShmYWxzZSkgOiBwbGF5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIGlmICh0b2dnbGUpIHtcbiAgICAgICAgdG9nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dsZUNsYXNzKHRvZ2dsZSwgQ0xBU1NfQUNUSVZFLCAhc3RvcHBlZCk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzZXRBdHRyaWJ1dGUodG9nZ2xlLCBBUklBX0xBQkVMLCBvcHRpb25zLmkxOG5bJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0b3BwZWQgPyAicGxheSIgOiAicGF1c2UiXSk7XG4gICAgICB9XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUocmF0ZSkge1xuICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBiYXIgPSBFbGVtZW50cy5iYXI7XG4gICAgICBiYXIgJiYgc3R5bGUoYmFyLCAid2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoIiwgcmF0ZSAqIDEwMCArICIlIik7XG4gICAgICBlbWl0KEVWRU5UX0FVVE9QTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBWV9QTEFZSU5HLCByYXRlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGluZGV4KSB7XG4gICAgICB2YXIgU2xpZGUgPSBDb21wb25lbnRzMi5TbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0KGluZGV4KTtcbiAgICAgIGludGVydmFsLnNldChTbGlkZSAmJiArZ2V0QXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZShTbGlkZS5zbGlkZSwgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUpIHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLmludGVydmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG1vdW50OiBtb3VudCxcbiAgICAgIGRlc3Ryb3k6IGludGVydmFsLmNhbmNlbCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBwbGF5OiBwbGF5LFxuICAgICAgcGF1c2U6IHBhdXNlLFxuICAgICAgaXNQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2VkOiBpc1BhdXNlZFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb3ZlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX0V2ZW50SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZTcgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0V2ZW50SW50ZXJmYWNlNy5vbjtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGlmIChvcHRpb25zLmNvdmVyKSB7XG4gICAgICAgIG9uKEVWRU5UX0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVpZTE9BRF9MT0FERUQsIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAgICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwbHkoY292ZXIsIHRydWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY292ZXIoY292ZXIyKSB7XG4gICAgICBDb21wb25lbnRzMi5TbGlkZXMuZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2goZnVuY3Rpb24gKFNsaWRlKSB7XG4gICAgICAgIHZhciBpbWcgPSBjaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoU2xpZGUuY29udGFpbmVyIHx8IFNsaWRlLnNsaWRlLCAiaW1nIik7XG5cbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChpbWcgJiYgaW1nLnNyYykge1xuICAgICAgICAgIHRvZ2dsZShjb3ZlcjIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbWcsIFNsaWRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHRvZ2dsZShjb3ZlcjIsIGltZywgU2xpZGUpIHtcbiAgICAgIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5zdHlsZSgiYmFja2dyb3VuZCIsIGNvdmVyMiA/ICJjZW50ZXIvY292ZXIgbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLXJlcGVhdCB1cmwoXFwiIiArIGltZy5zcmMgKyAiXFwiKSIgOiAiIiwgdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgZGlzcGxheShpbWcsIGNvdmVyMiA/ICJub25lIiA6ICIiKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0cm95OiBhcHBseShjb3ZlciwgZmFsc2UpXG4gICAgfTtcbiAgfVxuXG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQk9VTkNFX0RJRkZfVEhSRVNIT0xEID0gMTA7XG4gIHZhciBCT1VOQ0VfRFVSQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OID0gNjAwO1xuICB2YXIgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xuICB2YXIgQkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0VfVkVMT0NJVFkgPSAxLjU7XG4gIHZhciBNSU5fRFVSQVRJT04gPSA4MDA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlOCA9IEV2ZW50SW50ZXJmYWNlKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm9uLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICAgIHZhciBzZXQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5zdGF0ZS5zZXQ7XG4gICAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5NbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZTtcbiAgICB2YXIgZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZ2V0TGltaXQgPSBNb3ZlLmdldExpbWl0LFxuICAgICAgICBleGNlZWRlZExpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pdCA9IE1vdmUuZXhjZWVkZWRMaW1pdCxcbiAgICAgICAgdHJhbnNsYXRlID0gTW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUudHJhbnNsYXRlO1xuICAgIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTElERScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHZhciBpbnRlcnZhbDtcbiAgICB2YXIgY2FsbGJhY2s7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBmcmljdGlvbiA9IDE7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihFVkVOVF9NT1ZFLCBjbGVhcik7XG4gICAgICBvbihbRVZFTlRfVVBEQVRFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsIEVWRU5UX1JFRlJFU0hdLCBjYW5jZWwpO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBzY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBvblNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCwgbm9Db25zdHJhaW4pIHtcbiAgICAgIHZhciBmcm9tID0gZ2V0UG9zaXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICBjbGVhcigpO1xuXG4gICAgICBpZiAoc25hcCAmJiAoIWlzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIHx8ICFleGNlZWRlZExpbWl0KCkpKSB7XG4gICAgICAgIHZhciBzaXplID0gQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkxheW91dC5zbGlkZXJTaXplKCk7XG4gICAgICAgIHZhciBvZmZzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gc2lnbihkZXN0aW5hdGlvbikgKiBzaXplICogZmxvb3IoYWJzKGRlc3RpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbikgLyBzaXplKSB8fCAwO1xuICAgICAgICBkZXN0aW5hdGlvbiA9IE1vdmUudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvUG9zaXRpb24oQ29tcG9uZW50czIuQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uICUgc2l6ZSkpICsgb2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICB2YXIgbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoZnJvbSwgZGVzdGluYXRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxKTtcbiAgICAgIGZyaWN0aW9uID0gMTtcbiAgICAgIGR1cmF0aW9uID0gbm9EaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UgPyAwIDogZHVyYXRpb24gfHwgbWF4KGFicyhkZXN0aW5hdGlvbiAtIGZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtKSAvIEJBU0VfVkVMT0NJVFksIE1JTl9EVVJBVElPTik7XG4gICAgICBjYWxsYmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2sgPSBvblNjcm9sbGVkO1xuICAgICAgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGR1cmF0aW9uLCBvbkVuZCwgYXBwbHkodXBkYXRlLCBmcm9tLCBkZXN0aW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sIG5vQ29uc3RyYWluKSwgMSk7XG4gICAgICBzZXQoU0NST0xMSU5HKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX1NDUk9MTCk7XG4gICAgICBpbnRlcnZhbC5zdGFydCgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbkVuZCgpIHtcbiAgICAgIHNldChJRExFKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgZW1pdChFVkVOVF9TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NST0xMRUQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZShmcm9tLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28sIG5vQ29uc3RyYWluLCByYXRlKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUG9zaXRpb24oKTtcbiAgICAgIHZhciB0YXJnZXQgPSBmcm9tICsgKHRvIC0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICogZWFzaW5nKHJhdGUpO1xuICAgICAgdmFyIGRpZmYgPSAodGFyZ2V0IC0gcG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKSAqIGZyaWN0aW9uO1xuICAgICAgdHJhbnNsYXRlKHBvc2l0aW9uICsgZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmYpO1xuXG4gICAgICBpZiAoaXNTbGlkZSAmJiAhbm9Db25zdHJhaW4gJiYgZXhjZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVkTGltaXQoKSkge1xuICAgICAgICBmcmljdGlvbiAqPSBGUklDVElPTl9GQUNUTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSO1xuXG4gICAgICAgIGlmIChhYnMoZGlmZikgPCBCT1VOQ0VfRElGRl9USFJFU0hPTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEKSB7XG4gICAgICAgICAgc2Nyb2xsKGdldExpbWl0KGV4Y2VlZGVkTGltaXQodHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpKSwgQk9VTkNFX0RVUkFUSU9OLCBmYWxzZSwgY2FsbGJhY2ssIHRydWUpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyKCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgICBpbnRlcnZhbC5jYW5jZWwoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChpbnRlcnZhbCAmJiAhaW50ZXJ2YWwuaXNQYXVzZWQoKSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY2xlYXIoKTtcbiAgICAgICAgb25FbmQoKTtcbiAgICAgIH1cbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZnVuY3Rpb24gZWFzaW5nKHQpIHtcbiAgICAgIHZhciBlYXNpbmdGdW5jID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZWFzaW5nRnVuYztcbiAgICAgIHJldHVybiBlYXNpbmdGdW5jID8gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coMSAtIHQsIDQpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3k6IGNsZWFyLFxuICAgICAgc2Nyb2xsOiBzY3JvbGwsXG4gICAgICBjYW5jZWw6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjYW5jZWxcbiAgICB9O1xuICB9XG5cbiAgdmFyIFNDUk9MTF9MSVNURU5FUl9PUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OUyA9IHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXJlOiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZVxuICB9O1xuXG4gIGZ1bmN0aW9uIERyYWcoU3BsaWRlMiwgQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGVyZmFjZTkgPSBFdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicub24sXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlOS5iaW5kLFxuICAgICAgICB1bmJpbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0V2ZW50SW50ZXJmYWNlOS51bmJpbmQ7XG5cbiAgICB2YXIgc3RhdGUgPSBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMi5zdGF0ZTtcbiAgICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTY3JvbGwgPSBDb21wb25lbnRzMi5TY3JvbGwsXG4gICAgICAgIENvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcixcbiAgICAgICAgdHJhY2sgPSBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czIuRWxlbWVudHMudHJhY2ssXG4gICAgICAgIHJlZHVjZSA9IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5NZWRpYS5yZWR1Y2U7XG4gICAgdmFyIF9Db21wb25lbnRzMiREaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW8yID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgICByZXNvbHZlID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiREaXJlY3RpbzIucmVzb2x2ZSxcbiAgICAgICAgb3JpZW50ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19Db21wb25lbnRzMiREaXJlY3RpbzIub3JpZW50O1xuICAgIHZhciBnZXRQb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgICBleGNlZWRlZExpbWl0ID0gTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUuZXhjZWVkZWRMaW1pdDtcbiAgICB2YXIgYmFzZVBvc2l0aW9uO1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYmFzZUV2ZW50O1xuICAgIHZhciBwcmV2QmFzZUV2ZW50O1xuICAgIHZhciBpc0ZyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICAgIHZhciBkcmFnZ2luZztcbiAgICB2YXIgZXhjZWVkZWQgPSBmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gICAgdmFyIGNsaWNrUHJldmVudGVkO1xuICAgIHZhciBkaXNhYmxlZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHRhcmdldDtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmQodHJhY2ssIFBPSU5URVJfTU9WRV9FVkVOVFMsIG5vb3AsIFNDUk9MTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX1VQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19FVkVOVFMsIG5vb3AsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKHRyYWNrLCBQT0lOVEVSX0RPV05fRVZFTlRTLCBvblBvaW50ZXJEb3duLCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgYmluZCh0cmFjaywgImNsaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInayIsIG9uQ2xpY2ssIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgYmluZCh0cmFjaywgImRyYWdzdGFydCIsIHByZXZlbnQpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXSwgaW5pdCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgZHJhZyA9IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmRyYWc7XG4gICAgICBkaXNhYmxlKCFkcmFnKTtcbiAgICAgIGlzRnJlZSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkcmFnID09PSAiZnJlZSI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Qb2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlckRvd24oZSkge1xuICAgICAgY2xpY2tQcmV2ZW50ZWQgPSBmYWxzZTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgdmFyIGlzVG91Y2ggPSBpc1QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VjaEV2ZW50KGUpO1xuXG4gICAgICAgIGlmIChpc0RyYWdnYWJsZShlLnRhcmdldCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIChpc1RvdWNoIHx8ICFlLmJ1dHRvbikpIHtcbiAgICAgICAgICBpZiAoIUNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm9sbGVyLmlzQnVzeSgpKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSBpc1RvdWNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IHRyYWNrIDogd2luZG93O1xuICAgICAgICAgICAgZHJhZ2dpbmcgPSBzdGF0ZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoW01PVklORywgU0NST0xMSU5HXSk7XG4gICAgICAgICAgICBwcmV2QmFzZUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IG51bGw7XG4gICAgICAgICAgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9NT1ZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19FVkVOVFMsIG9uUG9pbnRlck1vdmUsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgICAgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BvaW50ZXJVcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUuY2FuY2VsKCk7XG4gICAgICAgICAgICBTY3JvbGwuY2FuY2VsKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgc2F2ZShlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uUG9pbnRlck1vdmUoZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGlmICghc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICAgIHN0YXRlLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQoRFJBR0dJTkcpO1xuICAgICAgICBlbWl0KEVWRU5UX0RSQUcpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgaWYgKGUuY2FuY2VsYWJsZSkge1xuICAgICAgICBpZiAoZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWdnaW5nKSB7XG4gICAgICAgICAgTW92ZS50cmFuc2xhdGUoYmFzZVBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArIGNvbnN0cmFpbihkaWZmQ29vcmQoZSkpKTtcbiAgICAgICAgICB2YXIgZXhwaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgPSBkaWZmVGltZShlKSA+IExPR19JTlRFUlZBTDtcbiAgICAgICAgICB2YXIgaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0V4Y2VlZGVkID0gZXhjZWVkZWQgIT09IChleGNlZWRlZCA9IGV4Y2VlZGVkTGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCkpO1xuXG4gICAgICAgICAgaWYgKGV4cGlyZWQgfHwgaGFzRXhjZWVkZWQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgICAgICBzYXZlKGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGlja1ByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgZW1pdChFVkVOVF9EUkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0dJTkcpO1xuICAgICAgICAgIHByZXZlbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGlzU2xpZGVyRGlyZWN0aW9uKGUpKSB7XG4gICAgICAgICAgZHJhZ2dpbmcgPSBzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdWxkU3RhcnQoZSk7XG4gICAgICAgICAgcHJldmVudChlKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJVcChlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgaWYgKHN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgICBzdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2V0KElETEUpO1xuICAgICAgICBlbWl0KEVWRU5UX0RSQUdHRUQpO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgIG1vdmUoZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBwcmV2ZW50KGUpO1xuICAgICAgfVxuXG4gICAgICB1bmJpbmQodGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgUE9JTlRFUl9NT1ZFX0VWRU5UUywgb25Qb2ludGVyTW92ZSk7XG4gICAgICB1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiaW5kKHRhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkcmFnZ2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsaWNrKGUpIHtcbiAgICAgIGlmICghZGlzYWJsZWQgJiYgY2xpY2tQcmV2ZW50ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZ1bmN0aW9uIHNhdmUoZSkge1xuICAgICAgcHJldkJhc2VFdmVudCA9IGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlRXZlbnQ7XG4gICAgICBiYXNlRXZlbnQgPSBlO1xuICAgICAgYmFzZVBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGdldFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIHZlbG9jaXR5ID0gY29tcHV0ZVZlbG9jaXR5KGUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBkZXN0aW5hdGlvbiA9IGNvbXB1dGVEZXN0aW5hdGlvbih2ZWxvY2l0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgdmFyIHJld2luZCA9IG9wdGlvbnMucmV3aW5kICYmIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jld2luZEJ5RHJhZztcbiAgICAgIHJlZHVjZShmYWxzZSk7XG5cbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaXNGcmVlKSB7XG4gICAgICAgIENvbnRyb2xsZXIuc2Nyb2xsKGRlc3RpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgMCwgb3B0aW9ucy5zbmFwKTtcbiAgICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRkFERSkpIHtcbiAgICAgICAgQ29udHJvbGxlci5nbyhvcmllbnQoc2lnbih2ZWxvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHkpKSA8IDAgPyByZXdpbmQgPyAiPCIgOiAiLSIgOiByZXdpbmQgPyAiPiIgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIisiKTtcbiAgICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcyhTTElERSkgJiYgZXhjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkICYmIHJld2luZCkge1xuICAgICAgICBDb250cm9sbGVyLmdvKGV4Y2VlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZExpbWl0KHRydWUpID8gIj4iIDogIjwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBDb250cm9sbGVyLmdvKENvbnRyb2xsZXIudG9EZXN0KGRlc3RpbmF0aW9uKSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUpO1xuICAgICAgfVxuXG4gICAgICByZWR1Y2UodHJ1ZSk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIHNob3VsZFN0YXJ0KGUpIHtcbiAgICAgIHZhciB0aHJlc2hvbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IG9wdGlvbnMuZHJhZ01pblRocmVzaG9sZDtcbiAgICAgIHZhciBpc09iaiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc09iamVjdCh0aHJlc2hvbGRzKTtcbiAgICAgIHZhciBtb3VzZSA9IGlzT2JqICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aHJlc2hvbGRzLm1vdXNlIHx8IDA7XG4gICAgICB2YXIgdG91Y2ggPSAoaXNPYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gdGhyZXNob2xkcy50b3VjaCA6ICt0aHJlc2hvbGRzKSB8fCAxMDtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gYWJzKGRpZmZDb29yZChlKSkgPiAoaXNUb3VjaEV2ZW50KGUpID8gdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWNoIDogbW91c2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2xpZGVyRGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbihlKSB7XG4gICAgICByZXR1cm4gYWJzKGRpZmZDb29yZChlKSkgPiBhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKGRpZmZDb29yZChlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXB1dGVWZWxvY2l0eShlKSB7XG4gICAgICBpZiAoU3BsaWRlMi5pcyhMT09QKSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgIWV4Y2VlZGVkKSB7XG4gICAgICAgIHZhciB0aW1lID0gZGlmZlRpbWUoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICAgIGlmICh0aW1lICYmIHRpbWUgPCBMT0dfSU5URVJWQUwpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgcmV0dXJuIGRpZmZDb29yZChlKSAvIHRpbWU7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjb21wdXRlRGVzdGluYXRpb24odmVsb2NpdHkpIHtcbiAgICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UG9zaXRpb24oKSArIHNpZ24odmVsb2NpdHkpICogbWluKGFicyh2ZWxvY2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kpICogKG9wdGlvbnMuZmxpY2tQb3dlciB8fCA2MDApLCBpc0ZyZWUgPyBJbmZpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdHkgOiBDb21wb25lbnRzMi5MYXlvdXQubGlzdFNpemUoKSAqIChvcHRpb25zLmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlja01heFBhZ2VzIHx8IDEpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZkNvb3JkKGUsIG9ydGhvZ29uYWwpIHtcbiAgICAgIHJldHVybiBjb29yZE9mKGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnRob2dvbmFsKSAtIGNvb3JkT2YoZ2V0QmFzZUV2ZW50KGUpLCBvcnRob2dvbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0aW1lT2YoZSkgLSB0aW1lT2YoZ2V0QmFzZUV2ZW50KGUpKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gZ2V0QmFzZUV2ZW50KGUpIHtcbiAgICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gYmFzZUV2ZW50ID09PSBlICYmIHByZXZCYXNlRXZlbnQgfHwgYmFzZUV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICByZXR1cm4gKGlzVG91Y2hFdmVudChlKSA/IGUuY2hhbmdlZFRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzWzBdIDogZSlbInBhZ2UiICsgcmVzb2x2ZShvcnRob2dvbmFsID8gIlkiIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJYIildO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnN0cmFpbihkaWZmKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgcmV0dXJuIGRpZmYgLyAoZXhjZWVkZWQgJiYgU3BsaWRlMi5pcyhTTEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREUpID8gRlJJQ1RJT04gOiAxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnZ2FibGUodGFyZ2V0Mikge1xuICAgICAgdmFyIG5vRHJhZyA9IG9wdGlvbnMubicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvRHJhZztcbiAgICAgIHJldHVybiAhbWF0Y2hlcyh0YXJnZXQyLCAiLiIgKyBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUEFHSU5BVElPTl9QQUdFICsgIiwgLiIgKyBDTEFTU19BUlJPVykgJiYgKCFubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEcmFnIHx8ICFtYXRjaGVzKHRhcmdldDIsIG5vRHJhZykpO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBpc1RvdWNoRXZlbnQoZSkge1xuICAgICAgcmV0dXJuIHR5cGVvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgVG91Y2hFdmVudCAhPT0gInVuZGVmaW5lZCIgJiYgZSBpbnN0YW5jZW9mIFRvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaEV2ZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIGRyYWdnaW5nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNhYmxlKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2FibGU6IGRpc2FibGUsXG4gICAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG4gIH1cblxuICB2YXIgTk9STUFMSVpBVElPTl9NQVAgPSB7XG4gICAgU3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlYmFyOiAiICIsXG4gICAgUmlnaHQ6IEFSUk9XX1JJR0hULFxuICAgIExlZnQ6IEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPV19MRUZULFxuICAgIFVwOiBBUlJPV19VUCxcbiAgICBEb3duOiBBUlJPV19ET1dOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICBrZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5ID0gaXNTdHJpbmcoa2V5KSA/IGtleSA6IGtleS5rZXk7XG4gICAgcmV0dXJuIE5PJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JNQUxJWkFUSU9OX01BUFtrZXldIHx8IGtleTtcbiAgfVxuXG4gIHZhciBLRVlCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BUkRfRVZFTlQgPSAia2V5ZG93biI7XG5cbiAgZnVuY3Rpb24gS2V5Ym9hcmQoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UxMCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfRXZlbnRJbnRlcmZhY2UxMC5vbixcbiAgICAgICAgYmluZCA9IF9FdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UxMC5iaW5kLFxuICAgICAgICB1bmJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5iaW5kO1xuXG4gICAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvb3Q7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciB0YXJnZXQ7XG4gICAgdmFyIGRpc2FibGVkO1xuXG4gICAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oRVZFTlRfVVBEQVRFRCwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3kpO1xuICAgICAgb24oRVZFTlRfVVBEQVRFRCwgaW5pdCk7XG4gICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdCgpIHtcbiAgICAgIHZhciBrZXlib2FyZCA9IG9wdGlvbnMua2V5Ym9hcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICBpZiAoa2V5Ym9hcmQpIHtcbiAgICAgICAgdGFyZ2V0ID0ga2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWJvYXJkID09PSAiZ2xvYmFsIiA/IHdpbmRvdyA6IHJvb3Q7XG4gICAgICAgIGJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93bik7XG4gICAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB1bmJpbmQodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgS0VZQk9BUkRfRVZFTlQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgICB2YXIgX2Rpc2FiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZCA9IGRpc2FibGVkO1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGlzYWJsZWQgPSBfZGlzYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHZhciBrZXkgPSBub3JtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsaXplS2V5KGUpO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQpKSB7XG4gICAgICAgICAgU3BsaWRlMi5nbygiPCIpO1xuICAgICAgICB9IGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfUklHSFQpKSB7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTIuZ28oIj4iKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3ksXG4gICAgICBkaXNhYmxlOiBkaXNhYmxlXG4gICAgfTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgU1JDX0RBVEFfQVRUUklCVVRFID0gREFUQV9BVFRSSUJVVEUgKyAiLWxheicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcbiAgdmFyIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSA9IFNSQ19EQVRBX0FUVFJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JVVEUgKyAiLXNyY3NldCI7XG4gIHZhciBJTUFHRV9TRUxFQ1RPUiA9ICJbIiArIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkNfREFUQV9BVFRSSUJVVEUgKyAiXSwgWyIgKyBTUkNTRVRfREFUQV9BVFRSSUJVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFICsgIl0iO1xuXG4gIGZ1bmN0aW9uIExhenlMb2FkKFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UxMSA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMTEub24sXG4gICAgICAgIG9mZiA9IF9FdmVudEludGVyZmFjZTExLm9mZixcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMS5iaW5kLFxuICAgICAgICBlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9FdmVudEludGVyZmFjZTExLmVtaXQ7XG5cbiAgICB2YXIgaXNTZXF1ZW50aWFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG9wdGlvbnMubGF6eUxvYWQgPT09ICJzZXF1ZW50aWFsIjtcbiAgICB2YXIgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cyA9IFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdO1xuICAgIHZhciBlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKG9wdGlvbnMubGF6eUxvYWQpIHtcbiAgICAgICAgaW5pdCgpO1xuICAgICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGluaXQoKSB7XG4gICAgICBlbXB0eShlbnRyaWVzKTtcbiAgICAgIHJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RlcigpO1xuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsKSB7XG4gICAgICAgIGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2FkTmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2ZmKGV2ZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgICBvbihldmVudHMsIGNoZWNrKTtcbiAgICAgICAgY2hlY2soJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnaXN0ZXIoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgQ29tcG9uZW50czIuU2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICBxdWVyeUFsbChTbGlkZS5zbGlkZSwgSU1BR0VfU0VMRUNUT1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKS5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgICB2YXIgc3JjID0gZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZShpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBzcmNzZXQgPSBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCVVRFKTtcblxuICAgICAgICAgIGlmIChzcmMgIT09IGltZy5zcmMgfHwgc3Jjc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichPT0gaW1nLnNyY3NldCkge1xuICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmNsYXNzZXMuc3Bpbm5lcjtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1nLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB2YXIgc3Bpbm5lciA9IGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZChwYXJlbnQsICIuIiArIGNsYXNzTmFtZSkgfHwgY3JlYXRlKCJzcGFuIiwgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzTmFtZSwgcGFyZW50KTtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChbaW1nLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU2xpZGUsIHNwaW5uZXJdKTtcbiAgICAgICAgICAgIGltZy5zcmMgfHwgZGlzcGxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koaW1nLCAibm9uZSIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICBlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgZGlzdGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgKiAoKG9wdGlvbnMucHJlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYWRQYWdlcyB8fCAxKSArIDEpIC0gMTtcbiAgICAgICAgcmV0dXJuIGRhdGFbMV0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzV2l0aGluKFNwbGlkZTIuaW5kZXgsIGRpc3RhbmNlKSA/IGxvYWQoZGF0YSkgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgZW50cmllcy5sZW5ndGggfHwgb2ZmKGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWQoZGF0YSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbWcgPSBkYXRhWzBdO1xuICAgICAgYWRkQ2xhc3MoZGF0YVsxXS5zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0xPQURJTkcpO1xuICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KG9uTG9hZCwgZGF0YSkpO1xuICAgICAgc2V0QXR0cmlidXRlKGltZywgInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmMiLCBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUoaW1nLCAic3Jjc2V0IiwgZ2V0QXR0cmlidXRlKGltZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSkpO1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZywgU1JDU0VUX0RBVEFfQVRUUklCVVRFKTtcbiAgICB9XG5cbiAgICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gb25Mb2FkKGRhdGEsIGUpIHtcbiAgICAgIHZhciBpbWcgPSBkYXRhWzBdLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICBTbGlkZSA9IGRhdGFbMV07XG4gICAgICByZW1vdmVDbGFzcyhTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuc2xpZGUsIENMQVNTX0xPQURJTkcpO1xuXG4gICAgICBpZiAoZS50eXBlICE9PSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImVycm9yIikge1xuICAgICAgICByZW1vdmUoZGF0YVsyXSk7XG4gICAgICAgIGRpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5KGltZywgIiIpO1xuICAgICAgICBlbWl0KEVWRU5UX0xBWllMT0FEX0xPQURFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGltZywgU2xpZGUpO1xuICAgICAgICBlbWl0KEVWRU5UX1JFU0laRSk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgICBpc1NlcXVlbnRpYWwgJiYgbG9hZE5leHQoKTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZnVuY3Rpb24gbG9hZE5leHQoKSB7XG4gICAgICBlbnRyaWVzLmxlbmd0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgbG9hZChlbnRyaWVzLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogYXBwbHkoZW1wdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBlbnRyaWVzKSxcbiAgICAgIGNoZWNrOiBjaGVja1xuICAgIH07XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gUGFnaW5hdGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIG9uID0gZXZlbnQub24sXG4gICAgICAgIGVtaXQgPSBldmVudC5lbWl0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgYmluZCA9IGV2ZW50LmJpbmQ7XG4gICAgdmFyIFNsaWRlcyA9IENvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnRzMi5TbGlkZXMsXG4gICAgICAgIEVsZW1lbnRzID0gQ29tcG9uZW50czIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzLFxuICAgICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xsZXI7XG4gICAgdmFyIGhhc0ZvY3VzID0gQ29udHJvbGxlci5oYXNGb2N1cyxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGdldEluZGV4ID0gQ29udHJvbGxlci5nZXRJbmRleCxcbiAgICAgICAgZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvID0gQ29udHJvbGxlci5nbztcbiAgICB2YXIgcmVzb2x2ZSA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5EaXJlY3Rpb24ucmVzb2x2ZTtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMucGFnaW5hdGlvbjtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgbGlzdDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHBhZ2luYXRpb25DbGFzc2VzO1xuXG4gICAgZnVuY3Rpb24gbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KCkge1xuICAgICAgZGVzdHJveSgpO1xuICAgICAgb24oW0VWRU5UX1VQREFURUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRF0sIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMucGFnaW5hdGlvbjtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KHBsYWNlaG9sZGVyLCBlbmFibGVkID8gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIDogIm5vbmUiKTtcblxuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKFtFVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVEXSwgdXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGF0ZSk7XG4gICAgICAgIGNyZWF0ZVBhZ2luYXRpb24oKTtcbiAgICAgICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpO1xuICAgICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSwgZ2V0QXQoU3BsaWRlMi5pbmRleCkpO1xuICAgICAgfVxuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgaWYgKGxpc3QpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlbW92ZShwbGFjZWhvbGRlciA/IHNsaWNlKGxpc3QuY2hpbGRyZW4pIDogbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3QpO1xuICAgICAgICByZW1vdmVDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpO1xuICAgICAgICBlbXB0eShpdGVtcyk7XG4gICAgICAgIGxpc3QgPSBudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbDtcbiAgICAgIH1cblxuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uKCkge1xuICAgICAgdmFyIGxlbmd0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBTcGxpZGUyLmxlbmd0aDtcbiAgICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NlcyxcbiAgICAgICAgICBpMThuID0gb3B0aW9ucy5pMThuLFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgICAgdmFyIG1heCA9IGhhc0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cygpID8gQ29udHJvbGxlci5nZXRFbmQoKSArIDEgOiBjZWlsKGxlbmd0aCAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwZXJQYWdlKTtcbiAgICAgIGxpc3QgPSBwbGFjZWhvbGRlciB8fCBjcmVhdGUoInUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCIsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbWVudHMudHJhY2sucGFyZW50RWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQpO1xuICAgICAgYWRkQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsYXNzZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfUEFHSU5BVElPTiArICItLSIgKyBnZXREaXJlY3Rpb24oKSk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKGxpc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0KTtcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUobGlzdCwgQVJJQV9PUklFTlRBVElPTiwgZ2V0RGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuXG4gICAgICBmb3IgKHZhciBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICB2YXIgbGkgPSBjcmVhdGUoImwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSIsIG51bGwsIGxpc3QpO1xuICAgICAgICB2YXIgYnV0dG9uID0gY3JlYXRlKCJidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dG9uIiwge1xuICAgICAgICAgIGNsYXNzOiBjbGFzc2VzLnBhZ2UsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHR5cGU6ICJidXR0b24iXG4gICAgICAgIH0sIGxpKTtcbiAgICAgICAgdmFyIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm9scyA9IFNsaWRlcy5nZXRJbihpKS5tYXAoZnVuY3Rpb24gKFNsaWRlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIHJldHVybiBTbGlkZS5zbGlkZS5pZDtcbiAgICAgICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgdGV4dCA9ICFoYXNGb2N1cygpICYmIHBlclBhZ2UgPiAxID8gaTE4bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucGFnZVggOiBpMThuLnNsaWRlWDtcbiAgICAgICAgYmluZChidXR0b24sICJjbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2siLCBhcHBseShvbkNsaWNrLCBpKSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb25LZXlib2FyZCkge1xuICAgICAgICAgIGJpbmQoYnV0dG9uLCAia2V5ZG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd24iLCBhcHBseShvbktleWRvd24sIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzZXRBdHRyaWJ1dGUobGksIFJPTEUsICJwcmVzZW50YXRpb24iKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEF0dHJpYnV0ZShidXR0b24sIFJPTEUsICJ0YWIiKTtcbiAgICAgICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShidXR0b24sIEFSSUFfQ09OVFJPTFMsIGNvbnRyb2xzLmpvaW4oIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIikpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0xBQkVMLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ybWF0KHRleHQsIGkgKyAxKSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShidXR0b24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBUQUJfSU5ERVgsIC0xKTtcbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxpOiBsaSxcbiAgICAgICAgICBidXR0b246IGJ1dHRvbixcbiAgICAgICAgICBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogaVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25DbGljayhwYWdlKSB7XG4gICAgICBnbygiPiIgKyBwYWdlLCB0cnVlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKHBhZ2UsIGUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgbGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIGtleSA9IG5vcm1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpemVLZXkoZSk7XG4gICAgICB2YXIgZGlyID0gZ2V0RGlyZWN0aW9uKCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIG5leHRQYWdlID0gLTE7XG5cbiAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSUk9XX1JJR0hULCBmYWxzZSwgZGlyKSkge1xuICAgICAgICBuZXh0UGFnZSA9ICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK3BhZ2UgJSBsZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoQVJST1dfTEVGVCwgZmFsc2UsIGRpcikpIHtcbiAgICAgICAgbmV4dFBhZ2UgPSAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0tcGFnZSArIGxlbmd0aCkgJSBsZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGtleSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT09ICJIb21lIikge1xuICAgICAgICBuZXh0UGFnZSA9IDA7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChrZXkgPT09ICJFbmQiKSB7XG4gICAgICAgIG5leHRQYWdlID0gbGVuZ3RoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIDE7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtID0gaXRlbXNbbmV4dFBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlXTtcblxuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgZm9jdXMoaXRlbS5idScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dG9uKTtcbiAgICAgICAgZ28oIj4iICsgbmV4dFBhZ2UpO1xuICAgICAgICBwcmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudChlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucGFnaW5hdGlvbkRpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24gfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGdldEF0KGluZGV4KSB7XG4gICAgICByZXR1cm4gaXRlbXNbQ29udHJvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IudG9QYWdlKGluZGV4KV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICAgIHZhciBwcmV2ID0gZ2V0QXQoZ2V0SW5kZXgodHJ1ZSkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBjdXJyID0gZ2V0QXQoZ2V0SW5kZXgoKSk7XG5cbiAgICAgIGlmIChwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICB2YXIgYnV0dG9uID0gcHJldi5idXR0b247XG4gICAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVDbGFzcyhidXR0b24sIENMQVNTX0FDVElWRSk7XG4gICAgICAgIHJlbW92ZUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRyaWJ1dGUoYnV0dG9uLCBBUklBX1NFTEVDVEVEKTtcbiAgICAgICAgc2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZShidXR0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgICAgfVxuXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKGN1cnIpIHtcbiAgICAgICAgdmFyIF9idXR0b24gPSBjdXJyLmJ1dHRvbjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGFkZENsYXNzKF9idXR0b24sIENMQVNTX0FDVElWRSk7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgQVJJQV9TRUxFQ1RFRCwgdHJ1ZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVEFCX0lOREVYLCAiIik7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCwge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldiwgY3Vycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInczogaXRlbXMsXG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSxcbiAgICAgIGdldEF0OiBnZXRBdCxcbiAgICAgIHVwZGF0ZTogdXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZVxuICAgIH07XG4gIH1cblxuICB2YXIgVFJJR0dFUl9LRVlTID0gWyIgIiwgIkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlciJdO1xuXG4gIGZ1bmN0aW9uIFN5bmMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKSB7XG4gICAgdmFyIGlzTmF2aWdhdGlvbiA9IG9wdGlvbnMuaXNOYXZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbixcbiAgICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGb2N1cztcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGV2ZW50cyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgU3BsaWRlMi5zcGxpZGVzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuaXNQYXJlbnQpIHtcbiAgICAgICAgICBzeW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYyhTcGxpZGUyLCB0YXJnZXQuc3BsaWRlKTtcbiAgICAgICAgICBzeW5jKHRhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlLCBTcGxpZGUyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoaXNOYXZpZ2F0aW9uKSB7XG4gICAgICAgIG5hdmlnYXRlKCk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LmRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95KCk7XG4gICAgICB9KTtcbiAgICAgIGVtcHR5KGV2ZW50cyk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgICBkZXN0cm95KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgbW91bnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzeW5jKHNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHRhcmdldCkge1xuICAgICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2Uoc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk7XG4gICAgICBldmVudC5vbihFVkVOVF9NT1ZFLCBmdW5jdGlvbiAoaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4LCBwcmV2LCBkZXN0KSB7XG4gICAgICAgIHRhcmdldC5nbyh0YXJnZXQuaXMoTE9PJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ApID8gZGVzdCA6IGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgZXZlbnRzLnB1c2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igb24gPSBldmVudC5vbjtcbiAgICAgIG9uKEVWRU5UX0NMSUNLLCBvbkNsaWNrKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBvbihFVkVOVF9TTElERV9LRVlET1dOLCBvbktleWRvd24pO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXSwgdXBkYXRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBldmVudHMucHVzaChldmVudCk7XG4gICAgICBldmVudC5lbWl0KEVWRU5UX05BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZJR0FUSU9OX01PVU5URUQsIFNwbGlkZTIuc3BsaWRlcyk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHNldEF0dHJpYnV0ZShDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuRWxlbWVudHMubGlzdCwgQVJJQV9PUklFTlRBVElPTiwgb3B0aW9ucy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBvbkNsaWNrKFNsaWRlKSB7XG4gICAgICBTcGxpZGUyLmdvKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5pbmRleCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgZSkge1xuICAgICAgaWYgKGluY2x1ZGVzKFRSSUdHRVJfS0VZUywgbm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbGl6ZUtleShlKSkpIHtcbiAgICAgICAgb25DbGljayhTbGlkZSk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2ZW50KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2V0dXA6IGFwcGx5KENvbXBvbmVudHMyLk1lZGlhLnNldCwge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVGb2N1czogaXNVbmRlZmluZWQoc2xpZGVGb2N1cykgPyBpc05hdmlnYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIDogc2xpZGVGb2N1c1xuICAgICAgfSwgdHJ1ZSksXG4gICAgICBtb3VudDogbW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIHJlbW91bnQ6IHJlbW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFdoZWVsKFNwbGlkZTIsIENvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UxMiA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgYmluZCA9IF9FdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UxMi5iaW5kO1xuXG4gICAgdmFyIGxhc3RUaW1lID0gMDtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmIChvcHRpb25zLndoZWVsKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLCAid2hlZWwiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICAgIGlmIChlLmNhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZWxhYmxlKSB7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmRlbHRhWTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgICB2YXIgdGltZVN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtcCA9IHRpbWVPZihlKTtcblxuICAgICAgICB2YXIgX21pbiA9IG9wdGlvbnMud2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsTWluVGhyZXNob2xkIHx8IDA7XG5cbiAgICAgICAgdmFyIHNsZWVwID0gb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mud2hlZWxTbGVlcCB8fCAwO1xuXG4gICAgICAgIGlmIChhYnMoZGVsdGFZKSA+IF9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luICYmIHRpbWVTdGFtcCAtIGxhc3RUaW1lID4gc2xlZXApIHtcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5nbyhiYWNrd2FyZHMgPyAiPCIgOiAiPiIpO1xuICAgICAgICAgIGxhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0VGltZSA9IHRpbWVTdGFtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNob3VsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQcmV2ZW50KGJhY2t3YXJkcykgJiYgcHJldmVudChlKTtcbiAgICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkUHJldmVudChiYWNrd2FyZHMpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gIW9wdGlvbnMucmVsZWFzZVdoZWVsIHx8IFNwbGlkZTIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlLmlzKE1PVklORykgfHwgQ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRBZGonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlbnQoYmFja3dhcmRzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBtb3VudDogbW91bnRcbiAgICB9O1xuICB9XG5cbiAgdmFyIFNSX1JFTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVkFMX0RFTEFZID0gOTA7XG5cbiAgZnVuY3Rpb24gTGl2ZShTcGxpZGUyLCBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlMTMgPSBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZTEzLm9uO1xuXG4gICAgdmFyIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyYWNrO1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5saXZlICYmICFvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5pc05hdmlnYXRpb247XG4gICAgdmFyIHNyID0gY3JlYXRlKCJzcGFuIiwgQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1NSKTtcbiAgICB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoU1JfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTU9WQUxfREVMQVksIGFwcGx5KHRvZ2dsZSwgZmFsc2UpKTtcblxuICAgIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtb3VudCgpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIGRpc2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCFDb21wb25lbnRzMi5BdXRvcGxheS5pc1BhdXNlZCgpKTtcbiAgICAgICAgc2V0QScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZSh0cmFjaywgQVJJQV9BVE9NSUMsIHRydWUpO1xuICAgICAgICBzci50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dENvbnRlbnQgPSAiXFx1MjAyNiI7XG4gICAgICAgIG9uKEVWRU5UX0FVVE9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QTEFZLCBhcHBseShkaXNhYmxlLCB0cnVlKSk7XG4gICAgICAgIG9uKEVWRU5UX0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVRPUExBWV9QQVVTRSwgYXBwbHkoZGlzYWJsZSwgZmFsc2UpKTtcbiAgICAgICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdLCBhcHBseSh0b2dnbGUsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9nZ2xlKGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUpIHtcbiAgICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9CVVNZLCBhY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlKTtcblxuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhcHBlbmQodHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrLCBzcik7XG4gICAgICAgIGludGVydmFsLnN0YXJ0KCk7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgcmVtb3ZlKHNyKTtcbiAgICAgICAgaW50ZXJ2YWwuY2FuY2VsKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVtb3ZlQXR0cmlidXRlKHRyYWNrLCBbQVJJQV9MSVZFLCBBUklBX0FUT00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUMsIEFSSUFfQlVTWV0pO1xuICAgICAgcmVtb3ZlKHNyKTtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gZGlzYWJsZShkaXNhYmxlZCkge1xuICAgICAgaWYgKGVuYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9MSVZFLCBkaXNhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPyAib2ZmIiA6ICJwb2xpdGUiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGRpc2FibGU6IGRpc2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlLFxuICAgICAgZGVzdHJveTogZGVzdHJveVxuICAgIH07XG4gIH1cblxuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIENvbXBvbmVudENvbnN0cnVjdG9ycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIE1lZGlhOiBNZWRpYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgRGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gICAgRWxlbWVudHM6IEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyxcbiAgICBTbGlkZXM6IFNsaWRlcyxcbiAgICBMYXlvdXQ6IExheW91dCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgQ2xvbmVzOiBDbG9uZXMsXG4gICAgTW92ZTogTW92ZSxcbiAgICBDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcjogQ29udHJvbGxlcixcbiAgICBBcnJvd3M6IEFycm93cyxcbiAgICBBdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEF1dG9wbGF5LFxuICAgIENvdmVyOiBDb3ZlcixcbiAgICBTY3JvbGw6IFNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgRHJhZzogRHJhZyxcbiAgICBLZXlib2FyZDogS2V5Ym9hcmQsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIExhenlMb2FkOiBMYXp5TG9hZCxcbiAgICBQYWdpbmF0aW9uOiBQYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBTeW5jOiBTeW5jLFxuICAgIFdoZWVsOiBXaGVlbCxcbiAgICBMaXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogTGl2ZVxuICB9KTtcbiAgdmFyIEkxOE4gPSB7XG4gICAgcHJldjogIlByZXZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291cyBzbGlkZSIsXG4gICAgbmV4dDogIk5leHQgc2xpZGUiLFxuICAgIGZpcnN0OiAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dvIHRvIGZpcnN0IHNsaWRlIixcbiAgICBsYXN0OiAiR28gdG8gbGFzdCBzbGlkZSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHNsaWRlWDogIkdvIHRvIHNsaWRlICVzIixcbiAgICBwYWdlWDogIkdvIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbyBwYWdlICVzIixcbiAgICBwbGF5OiAiU3RhcnQgYXV0b3BsYXkiLFxuICAgIHBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogIlBhdXNlIGF1dG9wbGF5IixcbiAgICBjYXJvdXNlbDogImNhcm91c2VsIixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2xpZGU6ICJzbGlkZSIsXG4gICAgc2VsZWN0OiAiU2VsZWN0IGEgc2xpZGUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHNob3ciLFxuICAgIHNsaWRlTGFiZWw6ICIlcyBvZiAlcyJcbiAgfTtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBERUZBVUxUUyA9IHtcbiAgICB0eXBlOiAic2xpZGUiLFxuICAgIHJvbGU6ICJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaW9uIixcbiAgICBzcGVlZDogNDAwLFxuICAgIHBlclBhZ2U6IDEsXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lU3RhdHVzOiB0cnVlLFxuICAgIGFycm93czogdHJ1ZSxcbiAgICBwYWdpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogdHJ1ZSxcbiAgICBwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXG4gICAgaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydmFsOiA1ZTMsXG4gICAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAgIHBhdXNlT25GbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXM6IHRydWUsXG4gICAgcmVzZXRQcm9ncmVzczogdHJ1ZSxcbiAgICBlYXNpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgMSkiLFxuICAgIGRyYWc6IHRydWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGRpcmVjdGlvbjogImx0ciIsXG4gICAgdHJpbVNwYWNlOiB0cnVlLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmb2N1c2FibGVOb2RlczogImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0LCBpZnJhbWUiLFxuICAgIGxpdmU6IHRydWUsXG4gICAgY2xhc3NlczogQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTRVMsXG4gICAgaTE4bjogSTE4TixcbiAgICByZWR1Y2VkTW90aW9uOiB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc3BlZWQ6IDAsXG4gICAgICByZXdpbmRTcGVlZDogMCxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhdXRvcGxheTogInBhdXNlIlxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBGYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzID0gQ29tcG9uZW50czIuU2xpZGVzO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikub24oW0VWRU5UX01PVU5URUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFVkVOVF9SRUZSRVNIXSwgaW5pdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluaXQoKSB7XG4gICAgICBTbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIFNsaWRlLnN0eWxlKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlWCgtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIgKyAxMDAgKiBTbGlkZS5pbmRleCArICIlKSIpO1xuICAgICAgfSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0KGluZGV4LCBkb25lKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVzLnN0eWxlKCJ0cmFuc2l0aW9uIiwgIm9wYWNpdHkgIiArIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhc2luZyk7XG4gICAgICBuZXh0VGljaygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG9uZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBjYW5jZWw6IG5vb3BcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFNsaWRlKFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICAgIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgU2Nyb2xsID0gQ29tcG9uZW50czIuU2Nyb2xsO1xuICAgIHZhciBsaXN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IENvbXBvbmVudHMyLkVsZW1lbnRzLmxpc3Q7XG4gICAgdmFyIHRyYW5zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gYXBwbHkoc3R5bGUsIGxpc3QsICJ0cmFuc2l0aW9uIik7XG4gICAgdmFyIGVuZEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlKFNwbGlkZTIpLmJpbmQobGlzdCwgInRyYW5zaXRpb25lbmQiLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBsaXN0ICYmIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRDYWxsYmFjaykge1xuICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICAgIGVuZEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gc3RhcnQoaW5kZXgsIGRvbmUpIHtcbiAgICAgIHZhciBkZXN0aW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPSBNb3ZlLnRvUG9zaXRpb24oaW5kZXgsIHRydWUpO1xuICAgICAgdmFyIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24oKTtcbiAgICAgIHZhciBzcGVlZCA9IGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGVlZChpbmRleCk7XG5cbiAgICAgIGlmIChhYnMoZGVzdGluYXRpb24gLSBwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24pID49IDEgJiYgc3BlZWQgPj0gMSkge1xuICAgICAgICBpZiAob3B0aW9ucy51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlU2Nyb2xsKSB7XG4gICAgICAgICAgU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwZWVkLCBmYWxzZSwgZG9uZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zaXRpb24oInRyYW5zZm9ybSAiICsgc3BlZWQgKyAibXMgIiArIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmVhc2luZyk7XG4gICAgICAgICAgTW92ZS50cmFuc2xhdGUoZGVzdGluYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlKTtcbiAgICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XG4gICAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBNb3ZlLmp1bXAoaW5kZXgpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWwoKSB7XG4gICAgICB0cmFuc2l0aW9uKCIiKTtcbiAgICAgIFNjcm9sbC5jYW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3BlZWQoaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgcmV3aW5kU3BlZWQgPSBvcHRpb25zLnJld2luZFNwZWVkO1xuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIHJld2luZFNwZWVkKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgcHJldiA9IENvbnRyb2xsZXIuZ2V0SW5kZXgodHJ1ZSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZW5kID0gQ29udHJvbGxlci5nZXRFbmQoKTtcblxuICAgICAgICBpZiAocHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kIHx8IHByZXYgPj0gZW5kICYmIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXdpbmRTcGVlZDtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc3BlZWQ7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnQ6IHN0YXJ0LFxuICAgICAgY2FuY2VsOiBjYW5jZWxcbiAgICB9O1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBfU3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gX1NwbGlkZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gRXZlbnRJbnRlcmZhY2UoKTtcbiAgICAgIHRoaXMuQ29tcG9uZW50cyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7fTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZShDUkVBVEVEKTtcbiAgICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnNwbGlkZXMgPSBbXTtcbiAgICAgIHRoaXMuX28gPSB7fTtcbiAgICAgIHRoaXMuXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFID0ge307XG4gICAgICB2YXIgcm9vdCA9IGlzU3RyaW5nKHRhcmdldCkgPyBxdWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koZG9jdW1lbnQsIHRhcmdldCkgOiB0YXJnZXQ7XG4gICAgICBhc3NlcnQocm9vdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QgKyAiIGlzIGludmFsaWQuIik7XG4gICAgICB0aGlzLnJvb3QgPSByb290OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9wdGlvbnMgPSBtZXJnZSh7XG4gICAgICAgIGxhYmVsOiBnZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHJvb3QsIEFSSUFfTEFCRUwpIHx8ICIiLFxuICAgICAgICBsYWJlbGxlZGJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogZ2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUxMRURCWSkgfHwgIiJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LCBERUZBVUxUUywgX1NwbGlkZS5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICB0cnkge1xuICAgICAgICBtZXJnZShvcHRpb25zLCBKU09OLnBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzZShnZXRBdHRyaWJ1dGUocm9vdCwgREFUQV9BVFRSSUJVVEUpKSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSBjYXRjaCAoZSkge1xuICAgICAgICBhc3NlcnQoZmFsc2UsICJJbnZhbGlkIEpTTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX28gPSBPYmplY3QuY3JlYXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZXJnZSh7fSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX1NwbGlkZS5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW91bnQoRXh0ZW5zaW9ucywgVHJhbnNpdGlvbikge1xuICAgICAgdmFyIF90aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHRoaXM7XG5cbiAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIENvbXBvbmVudHMyID0gdGhpcy5Db21wb25lbnRzO1xuICAgICAgYXNzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChzdGF0ZS5pcyhbQ1JFQVRFRCwgREVTVFJPWUVEXSksICJBbHJlYWR5IG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkISIpO1xuICAgICAgc3RhdGUuc2V0KENSRUFURUQpO1xuICAgICAgdGhpcy5fQyA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDb21wb25lbnRzMjtcbiAgICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLl9UIHx8ICh0aGlzLmlzKEZBREUpID8gRmFkZSA6IFNsaWRlKTtcbiAgICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xuICAgICAgdmFyIENvbnN0cnVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcnMgPSBhc3NpZ24oe30sIENvbXBvbmVudENvbnN0cnVjdG9ycywgdGhpcy5fRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHtcbiAgICAgICAgVHJhbnNpdGlvbjogdGhpcy5fVFxuICAgICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZm9yT3duKENvbnN0cnVjdG9ycywgZnVuY3Rpb24gKENvbXBvbmVudCwga2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSkge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gQ29tcG9uZW50KF90aGlzLCBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czIsIF90aGlzLl9vKTtcbiAgICAgICAgQ29tcG9uZW50czJba2V5XSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb21wb25lbnQ7XG4gICAgICAgIGNvbXBvbmVudC5zZXR1cCAmJiBjb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNldHVwKCk7XG4gICAgICB9KTtcbiAgICAgIGZvck93bihDb21wb25lbnRzMiwgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50Lm1vdW50ICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnQubW91bnQoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbWl0KEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1VOVEVEKTtcbiAgICAgIGFkZENsYXNzKHRoaXMucm9vdCwgQ0xBU1NfSU5JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RJQUxJWkVEKTtcbiAgICAgIHN0YXRlLnNldChJRExFKTtcbiAgICAgIHRoaXMuZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoRVZFTlRfUkVBRFkpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBfcHJvdG8uc3luYyA9IGZ1bmN0aW9uIHN5bmMoc3BsaWRlKSB7XG4gICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5zcGxpZGVzLnB1c2goe1xuICAgICAgICBzcGxpZGU6IHNwbGlkZVxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgICAgc3BsaWRlLnNwbGlkZXMucHVzaCh7XG4gICAgICAgIHNwbGlkZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMsXG4gICAgICAgIGlzUGFyZW50OiB0cnVlXG4gICAgICB9KTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmICh0aGlzLnN0YXRlLmlzKElETEUpKSB7XG4gICAgICAgIHRoaXMuX0MuU3luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MucmVtb3VudCgpO1xuXG4gICAgICAgIHNwbGlkZS5Db21wb25lbnRzLlN5bmMucmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBfcHJvdG8uZ28gPSBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgICB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5fQy5Db250cm9sbGVyLmdvKGNvbnRyb2wpO1xuXG4gICAgICByZXR1cm4gdGhpczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfTtcblxuICAgIF9wcm90by5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV2ZW50Lm9uKGV2ZW50cywgY2FsbGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8ub2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiA9IGZ1bmN0aW9uIG9mZihldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnQub2ZmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYickZXZlbnQ7XG5cbiAgICAgIChfdGhpcyRldmVudCA9IHRoaXMuZXZlbnQpLmVtaXQuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KF90aGlzJGV2ZW50LCBbZXZlbnRdLmNvbmNhdChzbGljZShhcmd1bWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKSkpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3BybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0by5hZGQgPSBmdW5jdGlvbiBhZGQoc2xpZGVzLCBpbmRleCkge1xuICAgICAgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuX0MuU2xpZGVzLmFkZChzbGlkZXMsIGluZGV4KTtcblxuICAgICAgcmV0dXJuIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzO1xuICAgIH07XG5cbiAgICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZShtYXRjaGVyKSB7XG4gICAgICB0aGlzLl9DLlNsaWRlcy5yZW1vdmUobWF0Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3Byb3RvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyA9IGZ1bmN0aW9uIGlzKHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vLnR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlID09PSB0eXBlO1xuICAgIH07XG5cbiAgICBfcHJvdG8ucmVmcmVzaCA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdGhpcy5lbWl0KEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcGxldGVseSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbXBsZXRlbHkgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5ldmVudCxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKENSRUFURUQpKSB7XG4gICAgICAgIEV2ZW50SW50ZXJmYWNlKHRoaXMpLm9uKEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRUFEWSwgdGhpcy5kZXN0cm95LmJpbmQodGhpcywgY29tcGxldGVseSkpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvck93bih0aGlzLl9DLCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbXBvbmVudC5kZXN0cm95ICYmIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQuZGVzdHJveShjb21wbGV0ZWx5KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBldmVudC5lbWl0KEVWRU5UX0RFU1RST1kpO1xuICAgICAgICBldmVudC5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSgpO1xuICAgICAgICBjb21wbGV0ZWx5ICYmIGVtcHR5KHRoaXMuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMpO1xuICAgICAgICBzdGF0ZS5zZXQoREVTVFJPWUVEKTtcbiAgICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19TcGxpZGUsIFt7XG4gICAgICBrZXk6ICJvcHRpb25zIixcbiAgICAgIGdldDogZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX287XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgICAgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuX0MuTWVkaWEuc2V0KG9wdGlvbnMsIHRydWUsIHRydWUpO1xuICAgICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LCB7XG4gICAgICBrZXk6ICJsZW5ndGgiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fQy5TbGlkZXMuZ2V0TGVuZ3RoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICJpbmRleCIsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQy5Db250cm9sbGVyLmdldEluZGV4KCk7XG4gICAgICB9XG4gICAgfV0pO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBfU3BsaWRlO1xuICB9KCk7XG5cbiAgdmFyIFNwbGlkZSA9IF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlO1xuICBTcGxpZGUuZGVmYXVsdHMgPSB7fTtcbiAgU3BsaWRlLlNUQVRFUyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBTVEFURVM7XG4gIHJldHVybiBTcGxpZGU7XG59KTtcbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAzMDogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGIneyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaWRlLXJlbmRlcmVyLm1pbi5qcyIsInNvdXJjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIjpbIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0Fycm93cy9wYXRoLnRzIiwiLi4vLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NyYy9qcy9jb25zdGFudHMvZGlyZWN0aW9ucy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy9EaXJlY3Rpb24vRGlyZWN0aW9uLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicvYXJyb3dzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9wcm9qZWN0LnRzIiwiLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uL3NyYy9qcy9jb25zdGFudHMvY2xhc3Nlcy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzL2RlZmF1bHRzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9pMThuLnRzIiwiLicKICAgICAgICAgICAgICAgICAgICAgICAgYicuLy4uL3NyYy9qcy91dGlscy9hcnJheUxpa2Uvc2xpY2Uvc2xpY2UudHMiLCIuLi8uLi9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjL2pzL3V0aWxzL2Z1bmN0aW9uL2FwcGx5L2FwcGx5LnRzIiwiLi4vLi4vc3JjL2pzL3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlscy90eXBlL3R5cGUudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvYXJyYXkvdG9BcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicvdG9BcnJheS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9mb3JFYWNoL2ZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L3B1c2gvcHVzaC50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvdXRpbHMvZG9tL21hdGNoZXMvbWF0Y2hlcy50cyIsIi4uLy4uL3NyYy9qcycKICAgICAgICAgICAgICAgICAgICAgICAgYicvdXRpbHMvZG9tL2NoaWxkL2NoaWxkLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW4vY2hpbGRyZW4udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvb2JqZWN0L293bksnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXlzL293bktleXMudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvb2JqZWN0L2Zvck93bi9mbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyT3duLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdC9hc3NpZ24vYXNzaWduLnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsIi4uLy4uL3NyYy9qcy91dGlscy9vYmplY3QvbWVyZ2UvbWVyZ2UudHMiLCIuLi8uLi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjL2pzL3V0aWxzL2RvbS9yZW1vdmUvcmVtb3ZlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidscy9kb20vdW5pdC91bml0LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Vycm9yL2Fzc2VyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QvYXNzZXJ0LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvbWF0aC9tYXRoLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy91dGlscy9zdHJpbmcvY2FtZWxUb0tlYmFiL2NhbWVsVG9LZWJhYicKICAgICAgICAgICAgICAgICAgICAgICAgYicudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3VuaXF1ZUlkL3VuaXF1ZUlkLnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsIi4uLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvRXZlbnRCaW5kZXIvRXZlbnRCaW5kZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L2VtcHR5L2VtcHR5LnRzIiwiLi4vLicKICAgICAgICAgICAgICAgICAgICAgICAgYicuL3NyYy9qcy9jb25zdHJ1Y3RvcnMvRXZlbnRJbnRlcmZhY2UvRXZlbnRJbnRlcmZhY2UuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9ldmVudHMudHMiLCIuLi8uLi9zcmMvanMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3JlbmRlcmVyL2NvbnN0YW50cy9jbGFzc2VzLnRzIiwiLi4vLi4vc3JjL2pzL3JlbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlci9jb25zdGFudHMvZGVmYXVsdHMudHMiLCIuLi8uLi9zcmMvanMvcmVuZGVyZXIvU3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlL1N0eWxlLnRzIiwiLi4vLi4vc3JjL2pzL3JlbmRlcmVyL1NwbGlkZVJlbmRlcmVyL1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVSZW5kZXJlci50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9zdHJpbmcvcGFkL3BhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3F1ZXJ5QWxsL3F1ZXJ5QWxsLnRzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uLy4uL3NyYy9qcy9jb25zdGFudHMvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIi8qKlxcclxcbiAqIFRoZSBuYW1lc3BhY2UgZm9yIFNWRyBlbGVtZW50cy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYiIvXFxyXFxuZXhwb3J0IGNvbnN0IFhNTF9OQU1FX1NQQUNFID0gJ2h0dHA6Ly93d3cudyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIzLm9yZy8yMDAwL3N2Zyc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFycm93ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwYXRoLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQQVRIID0gJ20xNS41IDAuOTMyIgogICAgICAgICAgICAgICAgICAgICAgICBiJy00LjMgNC4zOCAxNC41IDE0LjYtMTQuNSAxNC41IDQuMyA0LjQgMTQuNi0xNC42IDQuNC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiNC4zLTQuNC00LjQtMTQuNi0xNC42eic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU1YiCiAgICAgICAgICAgICAgICAgICAgICAgIGInRyB3aWR0aCBhbmQgaGVpZ2h0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTSVpFICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IDQwO1xcclxcbiIsIi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgc2xpZGVzIGZyb20gbGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgdG8gcmlnaHQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IExUUiA9ICdsdHInO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBmcm9tIHJpZ2h0IHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiIiBsZWZ0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBSVEwgPSAncnRsJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogRW51bWVyYXRlcyBzbGlkZXMgaW4gYSBjb2wuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBUVEIgPSBcJ3R0YlwnO1xcclxcbiIsImltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7XFxyXFxuaW1wb3J0IHsgUlQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTCwgVFRCIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpcmVjdGlvbnMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGludGVyZmFjZSBmb3IgdGhlIERpcmVjdGlvbiBjb21wb25lbnQuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgcmVzb2x2ZSggcHJvcDogc3RyaW5nLCBheGlzT25seT86IGJvb2xlYW4sIGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpb24/OiBPcHRpb25zWydkaXJlY3Rpb24nXSApOiBzdHJpbmc7XFxyXFxuICBvcmllbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCB2YWx1ZTogbnVtYmVyICk6IG51bWJlcjtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIFRoZSB0cmFuc2xhdGlvbiBtYXAgZm9yIGRpcmVjdGlvbnMuXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE9SSUVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJBVElPTl9NQVAgPSB7XFxyXFxuICB3aWR0aCAgICAgOiBbICdoZWlnaHQnIF0sXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgbGVmdCAgICAgIDogWyAndG9wJywgJ3JpZ2h0JyBdLFxcclxcbiAgcmlnaHQgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA6IFsgJ2JvdHRvbScsICdsZWZ0JyBdLFxcclxcbiAgeCAgICAgICAgIDogWyAneScgIgogICAgICAgICAgICAgICAgICAgICAgICBiIl0sXFxyXFxuICBYICAgICAgICAgOiBbICdZJyBdLFxcclxcbiAgWSAgICAgICAgIDogWyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ1gnIF0sXFxyXFxuICBBcnJvd0xlZnQgOiBbIEFSUk9XX1VQLCBBUlJPV19SSUdIVCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSxcXHJcXG4gIEFycm93UmlnaHQ6IFsgQVJST1dfRE9XTiwgQVJST1dfTEVGVCBdLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG59O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgdGhhdCBhYicKICAgICAgICAgICAgICAgICAgICAgICAgYidzb3JicyB0aGUgZGlmZmVyZW5jZSBhbW9uZyBkaXJlY3Rpb25zLlxcclxcbiAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBEaXJlY3Rpb24gY29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIERpcmVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24oIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9ucyApOiBEaXJlY3Rpb25Db21wb25lbnQge1xcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVzb2x2ZXMgdGhlIHByb3ZpZGVkIHByb3BlcnR5IG5hbWUuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBwcm9wICAgICAgLSBBIHByb3BlcnR5IG5hbWUgdG8gdHJhbnNsYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gICAqIEBwYXJhbSBheGlzT25seSAgLSBPcHRpb25hbC4gSWYgYHR1cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCwgcmV0dXJucyB0aGUgc2FtZSBwcm9wZXJ0eSBmb3IgTFRSIGFuZCBSVEwuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogQHBhcmFtIGRpcmVjdGlvbiAtIE9wdGlvbmFsLiBTcGVjaWZ5IHRoZSBkaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYGRpcmVjdGlvbmAgb3B0aW9uLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzb2x2ZSggcHJvcDogc3RyaW5nLCBheGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIic09ubHk/OiBib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpb25zWydkaXJlY3Rpb24nXSApOiIKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nIHtcXHJcXG4gICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgaW5kZXggPSBkaXJlY3Rpb24gPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidSVEwgJiYgISBheGlzT25seSA/IDEgOiBkaXJlY3Rpb24gPT09IFRUQiA/IDAgOiAtMTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAgIHJldHVybiBPUklFTlRBVElPTl9NQVBbIHByb3AgXSAmJiBPUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UQVRJT05fTUFQWyBwcm9wIF1bIGluZGV4IF1cXHJcXG4gICAgICB8fCBwcm9wLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXBsYWNlKCAvd2lkdGh8bGVmdHxyaWdodC9pLCAoIG1hdGNoLCBvZmZzZXQgKSA9PiB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBPUklFTlRBVElPTl9NQVBbIG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaC50b0xvd2VyQ2FzZSgpIF1bIGluZGV4IF0gfHwgbWF0Y2g7XFxyXFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIG9mZnNldCA+IDAgPyByZXBsYWNlbWVudC5jaGFyQXQoIDAgKS50b1VwcGVyQycKICAgICAgICAgICAgICAgICAgICAgICAgYidhc2UoKSArIHJlcGxhY2VtZW50LnNsaWNlKCAxICkgOiByZXBsYWNlbWVudDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBPcmllJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyB0aGUgdmFsdWUgdG93YXJkcyB0aGUgY3VycmVudCBkaXJlY3Rpb24uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgdmFsdWUgdG8gb3JpZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBvcmllbnRlZCB2YWx1ZS5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIG9yaWVudCggdmFsdWU6IG51bWJlciApOiBudW1iZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHtcXHJcXG4gICAgcmV0dXJuIHZhbHVlICogKCBvcHRpb25zLmRpcmVjdGlvbiA9PScKICAgICAgICAgICAgICAgICAgICAgICAgYic9IFJUTCA/IDEgOiAtMSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHJlc29sdmUsXFxyXFxuICAgIG9yaWVudCxcXHJcXG4gIH07XFxyXFxufVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4iLCJjb25zdCBBUlJPVyA9IFwnQXJyb3dcJztcXHJcXG5leHBvcnQgY29uc3QgQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidXX0xFRlQgID0gYCR7IEFSUk9XIH1MZWZ0YDtcXHJcXG5leHBvcnQgY29uc3QgQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidXX1JJR0hUID0gYCR7IEFSUk9XIH1SaWdodGA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUicKICAgICAgICAgICAgICAgICAgICAgICAgYidPV19VUCAgICA9IGAkeyBBUlJPVyB9VXBgO1xcclxcbmV4cG9ydCBjb25zdCBBUlJPVycKICAgICAgICAgICAgICAgICAgICAgICAgYidfRE9XTiAgPSBgJHsgQVJST1cgfURvd25gOyIsIi8qKlxcclxcbiAqIFRoZSBwcm9qZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdCBjb2RlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiImV4cG9ydCBjb25zdCBQUk9KRUNUX0NPREUgPSAnc3BsaWRlJztcXHJcXG5cXHJcXG4vKioiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlIHByZWZpeC5cXHJcXG4gKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgREFUQV9BVFRSSScKICAgICAgICAgICAgICAgICAgICAgICAgYidCVVRFID0gYGRhdGEtJHsgUFJPSkVDVF9DT0RFIH1gO1xcclxcbiIsImltcG9ydCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJQUk9KRUNUX0NPREUgfSBmcm9tICcuL3Byb2plY3QnO1xcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgcHJlZml4IGZvciBjbGFzc2VzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA0LjEuMFxcclxcbiAqL1xcclxcbmNvbnN0IENMQVNTX1BSRUZJWCA9IGAkeyBQUk9KRUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9DT0RFIH1fX2A7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHByZWZpeCBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXR1cyBjbGFzc2VzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMS4wXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibiAqL1xcclxcbmNvbnN0IFNUQVRVU19DTEFTU19QUkVGSVggPSAnaXMtJztcXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogQWxsIGNsYXNzZXMgYXMgY29uc3RhbnRzLlxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfUk9PVCAgICAgICAgICAgID0gUFJPSkVDVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09ERTtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVFJBQ0sgICAgICAgICAgID0gYCcKICAgICAgICAgICAgICAgICAgICAgICAgYickeyBDTEFTU19QUkVGSVggfXRyYWNrYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJU1QgICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWxpc3RgO1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgY29uc3QgQ0xBU1NfU0xJREUgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQ0xPTkUgICAgICAgICAgID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AkeyBDTEFTU19TTElERSB9LS1jbG9uZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UQUlORVIgICAgICAgPSBgJHsgQ0xBU1NfU0xJREUgfV9fY29udGFpbmVyYCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XUyAgICAgICAgICA9IGAkeyBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUFJFRklYIH1hcnJvd3NgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPVycKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9YXJyb3dgO1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ0xBU1NfQVJST1dfUFJFViAgICAgID0gYCR7IENMQVNTX0FSUk9XIH0tLXByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2YDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQVJST1dfTkVYVCAgICAgID0gYCR7JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19BUlJPVyB9LS1uZXh0YDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfUEFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOQVRJT04gICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXBhZ2luYXRpb25gO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgY29uc3QgQ0xBU1NfUEFHSU5BVElPTl9QQUdFID0gYCR7IENMQVNTX1BBR0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkFUSU9OIH1fX3BhZ2VgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QUk9HUkVTUyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9cHJvZ3Jlc3NgO1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgQ0xBU1NfUFJPR1JFU1NfQkFSICAgID0gYCR7IENMQVNTX1BST0dSRVNTIH1fXycKICAgICAgICAgICAgICAgICAgICAgICAgYidiYXJgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19UT0dHTEUgICAgICAgICAgPSBgJCcKICAgICAgICAgICAgICAgICAgICAgICAgYid7IENMQVNTX1BSRUZJWCB9dG9nZ2xlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPR0dMRV9QTEFZICAgICA9IGAkeyBDTEFTU19UT0dHTEUgfV9fcGxheWA7XFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBjb25zdCBDTEFTU19UT0dHTEVfUEFVU0UgICAgPSBgJHsgQ0xBU1NfVE9HR0xFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9X19wYXVzZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1NQSU5ORVIgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgPSBgJHsgQ0xBU1NfUFJFRklYIH1zcGlubmVyYDtcXHJcXG5leHBvcnQgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX1NSICAgICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXNyYDtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuZXhwb3J0IGNvbnN0IENMQVNTX0lOSVRJQUxJWkVEICAgICA9IGAkeyBTVEFUVVNfQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1BSRUZJWCB9aW5pdGlhbGl6ZWRgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNUSVZFICAgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfWFjdGl2ZWA7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBDTEFTU19QUkVWICAgICAgICAgICAgPSBgJHsgU1RBVFVTX0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19QUkVGSVggfXByZXZgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19ORVhUICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW5leHRgO1xcclxcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnQgY29uc3QgQ0xBU1NfVklTSUJMRSAgICAgICAgID0gYCR7IFNUQVRVU19DTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfUFJFRklYIH12aXNpYmxlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTE9BRElORycKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1sb2FkaW5nYDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXhwb3J0IGNvbnN0IENMQVNTX0ZPQ1VTX0lOICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1BSRUZJWCB9Zm9jdXMtaW5gO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19PVkVSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ZMT1cgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW92ZXJmbG93YCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFycmF5IHdpdGggYWxsIHN0YXR1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xhc3NlcyBleGNlcHQgZm9yIGBpcy1pbml0aWFsaXplZGAuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNUQVRVU19DTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NFUyA9IFtcXHJcXG4gIENMQVNTX0FDVElWRSxcXHJcXG4gIENMQVNTX1ZJU0lCTEUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgQ0xBU1NfUFJFVixcXHJcXG4gIENMQVNTX05FWFQsXFxyXFxuICBDTEFTU19MT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRElORyxcXHJcXG4gIENMQVNTX0ZPQ1VTX0lOLFxcclxcbiAgQ0xBU1NfT1ZFUkZMT1csXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbl07XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbGxlY3Rpb24gb2YgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMgZm9yIGVsZW1lbnRzIHRoYXQgU3BsaWRlIGR5bmFtaWNhbGx5IGNyZWF0ZXMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBDTEFTU0VTID0ge1xcclxcbiAgc2xpZGUgICAgIDogQ0xBU1NfU0xJREUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY2xvbmUgICAgIDogQ0xBU1NfQ0xPTkUsXFxyXFxuICBhcnJvd3MgICAgOiBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfQVJST1dTLFxcclxcbiAgYXJyb3cgICAgIDogQ0xBU1NfQVJST1csXFxyXFxuICBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndiAgICAgIDogQ0xBU1NfQVJST1dfUFJFVixcXHJcXG4gIG5leHQgICAgICA6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19BUlJPV19ORVhULFxcclxcbiAgcGFnaW5hdGlvbjogQ0xBU1NfUEFHSU5BVElPTiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBwYWdlICAgICAgOiBDTEFTU19QQUdJTkFUSU9OX1BBR0UsXFxyXFxuICBzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbm5lciAgIDogQ0xBU1NfU1BJTk5FUixcXHJcXG59O1xcclxcbiIsImltcG9ydCB7IE9wJwogICAgICAgICAgICAgICAgICAgICAgICBiInRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IENMQVNTRVMgfSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi9jbGFzc2VzJztcXHJcXG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi9pMThuIgogICAgICAgICAgICAgICAgICAgICAgICBiIic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbGxlY3Rpb24gb2YgZGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmF1bHQgb3B0aW9ucy5cXHJcXG4gKiBOb3RlIHRoYXQgdGhpcyBjb2xsZWN0aW9uIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2VzIG5vdCBjb250YWluIGFsbCBvcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYiczLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBERUZBVUxUUzogT3B0aW9ucyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiIiB7XFxyXFxuICB0eXBlICAgICAgICAgICAgICA6ICdzbGlkZScsXFxyXFxuICByb2xlICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgICAgOiAncmVnaW9uJyxcXHJcXG4gIHNwZWVkICAgICAgICAgICAgIDoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDQwMCxcXHJcXG4gIHBlclBhZ2UgICAgICAgICAgIDogMSxcXHJcXG4gIGNsb25lU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cyAgICAgICA6IHRydWUsXFxyXFxuICBhcnJvd3MgICAgICAgICAgICA6IHRydWUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcGFnaW5hdGlvbiAgICAgICAgOiB0cnVlLFxcclxcbiAgcGFnaW5hdGlvbktlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lib2FyZDogdHJ1ZSxcXHJcXG4gIGludGVydmFsICAgICAgICAgIDogNTAwMCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBwYXVzZU9uSG92ZXIgICAgICA6IHRydWUsXFxyXFxuICBwYXVzZU9uRm9jdXMgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgOiB0cnVlLFxcclxcbiAgcmVzZXRQcm9ncmVzcyAgICAgOiB0cnVlLFxcclxcbiAgZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJhc2luZyAgICAgICAgICAgIDogJ2N1YmljLWJlemllcigwLjI1LCAxLCAwLjUsIDEpJyxcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBkcmFnICAgICAgICAgICAgICA6IHRydWUsXFxyXFxuICBkaXJlY3Rpb24gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgOiAnbHRyJyxcXHJcXG4gIHRyaW1TcGFjZSAgICAgICAgIDogdHJ1ZSxcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuICBmb2N1c2FibGVOb2RlcyAgICA6ICdhLCBidXR0b24sIHRleHRhcmVhLCBpbnB1dCwgIgogICAgICAgICAgICAgICAgICAgICAgICBiInNlbGVjdCwgaWZyYW1lJyxcXHJcXG4gIGxpdmUgICAgICAgICAgICAgIDogdHJ1ZSxcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjbGFzc2VzICAgICAgICAgICA6IENMQVNTRVMsXFxyXFxuICBpMThuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgOiBJMThOLFxcclxcbiAgcmVkdWNlZE1vdGlvbjoge1xcclxcbiAgICBzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZWQgICAgICA6IDAsXFxyXFxuICAgIHJld2luZFNwZWVkOiAwLFxcclxcbiAgICBhdXRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXkgICA6IFwncGF1c2VcJyxcXHJcXG4gIH0sXFxyXFxufTsiLCIvKipcXHJcXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGNvbGxlY3Rpb24gb2YgaTE4biBzdHJpbmdzLlxcclxcbiAqXFxyXFxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJMThOID0ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgIHByZXYgICAgICA6ICdQcmV2aW91cyBzbGlkZScsXFxyXFxuICBuZXh0ICAgICAgOiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ05leHQgc2xpZGUnLFxcclxcbiAgZmlyc3QgICAgIDogJ0dvIHRvIGZpcnN0IHNsaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJkZScsXFxyXFxuICBsYXN0ICAgICAgOiAnR28gdG8gbGFzdCBzbGlkZScsXFxyXFxuICBzIgogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGVYICAgIDogJ0dvIHRvIHNsaWRlICVzJyxcXHJcXG4gIHBhZ2VYICAgICA6ICdHIgogICAgICAgICAgICAgICAgICAgICAgICBiIm8gdG8gcGFnZSAlcycsXFxyXFxuICBwbGF5ICAgICAgOiAnU3RhcnQgYXV0b3BsYXknIgogICAgICAgICAgICAgICAgICAgICAgICBiIixcXHJcXG4gIHBhdXNlICAgICA6ICdQYXVzZSBhdXRvcGxheScsXFxyXFxuICBjYXJvdXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZWwgIDogJ2Nhcm91c2VsJyxcXHJcXG4gIHNsaWRlICAgICA6ICdzbGlkZScsXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgc2VsZWN0ICAgIDogJ1NlbGVjdCBhIHNsaWRlIHRvIHNob3cnLFxcclxcbiAgc2xpZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJlTGFiZWw6ICclcyBvZiAlcycsIC8vIFsgc2xpZGUgbnVtYmVyIF0gLyBbIHNsaWRlIHNpIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3plIF1cXHJcXG59O1xcclxcbiIsIi8qKlxcclxcbiAqIFRoZSBzbGljZSBtZXRob2QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciBhbiBhcnJheS1saWtlIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXlMaWtlIC0gQW4gYXJyYXktbGlrZSBvYmplY3QuXFxyXFxuICogQHBhcmFtIHN0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCAgICAgLSBPcHRpb25hbC4gQSBzdGFydCBpbmRleC5cXHJcXG4gKiBAcGFyYW0gZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCAgICAgICAtIE9wdGlvbmFsLiBBIGVuZCBpbmRleC5cXHJcXG4gKlxcclxcbiAqIEByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIEFuIGFycmF5IHdpdGggc2xpY2VkIGVsZW1lbnRzLlxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgZnVuY3Rpb24gc2xpY2U8VD4oIGFycmF5TGlrZTogQXJyYXlMaWtlPFQ+LCBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnQ/OiBudW1iZXIsIGVuZD86IG51bWJlciApOiBUW10ge1xcclxcbiAgcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCggYXJyYXlMaWtlLCBzdGFydCwgZW5kICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBbnlGdW5jdGlvbiwgU2hpZnROIH0gZnJvbSBcJycKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvYXJyYXlMaWtlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDcmVhdGUgYSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gd2hlcmUgcHJvdmlkZWQgYXJndW1lbnRzIGFyZSBib3VuZC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogYHRoaXNgIHBhcmFtZXRlciB3aWxsIGJlIGFsd2F5cyBudWxsLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBwYXJhbSBmdW5jIC0gQSBmdW5jdGlvbi5cXHJcXG4gKiBAcGFyYW0gYXJncyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBcmd1bWVudHMgdG8gYmluZCB0byB0aGUgZnVuY3Rpb24uXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBBIGZ1bmN0aW9uIHdoZXJlIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhcHBseTxGIGV4dGVuZHMgQW55RnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCBBIGV4dGVuZHMgYW55W10gPSBhbnlbXT4oXFxyXFxuICBmdW5jOiBGLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC4uLmFyZ3M6IEFcXHJcXG4pOiAoIC4uLmFyZ3M6IFNoaWZ0TjxQYXJhbWV0ZXJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxGPiwgQVtcXCJsZW5ndGhcXCJdPiApID0+IFJldHVyblR5cGU8Rj47XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbi8qKlxcclxcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoZXJlIHByb3ZpZGVkIGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2d1bWVudHMgYXJlIGJvdW5kLlxcclxcbiAqIGB0aGlzYCBwYXJhbWV0ZXIgd2lsbCBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYWx3YXlzIG51bGwuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZnVuYyAtIEEgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhcHBseSggZnVuYzogQW55RicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICk6IGFueSB7XFxyXFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByZWZlci1yZXN0LXBhcmFtcywgcHJlZmVyLXNwcmVhZFxcclxcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jLmJpbmQoIG51bGwsIC4uLnNsaWNlKCBhcmd1bWVudHMsIDEgKSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24gfSBmcm9tIFwnLi4vLi4vdHlwZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyBhcHBseSB9IGZyb20gJy4uL2Z1bmN0aW9uJztcXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFsaWFzIG9mIHRoZSB0eXBlIGNoZWNrIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbi5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB0eXBlICAgIC0gQSB0eXBlLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyB0aGUgc3BlY2lmaWVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlLlxcclxcbiAqL1xcclxcbmZ1bmN0aW9uIHR5cGVPZiggdHlwZTogc3RyaW5nLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdDogdW5rbm93biApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiB0eXBlb2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YmplY3QgPT09IHR5cGU7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidja3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYW4gb2JqZWN0IG9yIG5vdC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGlzT2JqZWN0KCBzdWJqZWN0OiB1bmtub3duICk6IHN1YmplY3QgaXMgb2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdCB7XFxyXFxuICByZXR1cm4gISBpc051bGwoIHN1YmplY3QgKSAmJiB0eXBlT2YoICcKICAgICAgICAgICAgICAgICAgICAgICAgYiInb2JqZWN0Jywgc3ViamVjdCApO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIGFycmF5IG9yIG5vdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXksIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgaXNBcnJheTogPFQ+KCBzdWJqZWN0OiB1bmtub3duICkgPT4gc3ViamVjdCBpcyBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tdID0gQXJyYXkuaXNBcnJheTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVja3MgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGEgZnVuY3Rpb24gb3Igbm90LlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGEgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGlzRnVuY3Rpb24gPSA8KCBzdWJqZWN0OiB1bmtub3duICkgPT4gc3ViamVjdCBpcyBBJwogICAgICAgICAgICAgICAgICAgICAgICBiIm55RnVuY3Rpb24+YXBwbHkoIHR5cGVPZiwgJ2Z1bmN0aW9uJyApO1xcclxcblxcclxcbi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYSBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCBpcyBhIHN0cmluZywgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBpc1N0cmluZyA9IDwoIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdScKICAgICAgICAgICAgICAgICAgICAgICAgYiJiamVjdCBpcyBzdHJpbmc+YXBwbHkoIHR5cGVPZiwgJ3N0cmluZycgKTtcXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGB1bmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmVkYCBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHN1YmplY3QgaXMgYHVuZGVmaW5lZGAsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSA8KCBzdWJqZWN0OicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdW5rbm93biApID0+IHN1YmplY3QgaXMgdW5kZWZpbmVkPmFwcGx5KCB0eXBlT2YsICd1IgogICAgICAgICAgICAgICAgICAgICAgICBiIm5kZWZpbmVkJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpdmVuIHN1YmplY3QgaXMgYG51bGxgIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBgbnVsbGAsIG9yIG90aGVyd2lzZSBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsKCBzdWJqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDogdW5rbm93biApOiBzdWJqZWN0IGlzIG51bGwge1xcclxcbiAgcmV0dXJuIHN1YmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0ID09PSBudWxsO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVja3MgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIEhUTUxFbGVtZW50IGluc3RhbmNlIG9yIG5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICogVGhpcyBtZXRob2QgdGFrZXMgaW50byBhY2NvdW50IHdoaWNoIGB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZG93YCB0aGUgbm9kZSBiZWxvbmdzIHRvLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGFuIEhUTUxFbGVtZW50IGluc3RhbmNlLCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0hUTUxFbGVtZW50KCBzdWJqZWN0OiB1bmtub3duICk6IHN1YmplY3QgaXMgSFRNTEVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50IHtcXHJcXG4gIHRyeSB7XFxyXFxuICAgIHJldHVybiBzdWJqZWN0IGluc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mICggKCBzdWJqZWN0IGFzIE5vZGUgKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfCB3aW5kb3cgKS5IVE1MRWxlbWVudDtcXHJcXG4gIH0gY2F0Y2ggKCBlICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGZhbHNlO1xcclxcbiAgfVxcclxcbn0iLCJpbXBvcnQgeyBpc0FycmF5JwogICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIFB1c2ggdGhlIHByb3ZpZGVkIHZhbHVlIHRvIGFuIGFycmF5IGlmIHRoZSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaXMgbm90IGFuIGFycmF5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlIC0gQSB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUgdG8gcHVzaC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgY29udGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pbmcgdGhlIHZhbHVlLCBvciB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0IGlzIGFscmVhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5IGFuIGFycmF5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5PFQ+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyggdmFsdWU6IFQgfCBUW10gKTogVFtdIHtcXHJcXG4gIHJldHVybiBpc0FycmF5KCB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUgKSA/IHZhbHVlIDogWyB2YWx1ZSBdO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG9BcnJheSB9IGZyb20gJy4uL3RvQXJyYXkvdG9BcnJheSc7XFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbi8qKlxcclxcbiAqIFRoZSBleHRlbmRlZCBgQXJyYXkjZm9yRWFjaGAgbWV0aG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgdmFsdWUgYXMgYW4gYXJndW1lbnQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlcyAgIC0gQSB2YWx1ZSBvciB2YWx1ZXMgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGl0ZXJhdGUgb3Zlci5cXHJcXG4gKiBAcGFyYW0gaXRlcmF0ZWUgLSBBbiBpdGVyYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWUgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2g8VCcKICAgICAgICAgICAgICAgICAgICAgICAgYic+KCB2YWx1ZXM6IFQgfCBUW10sIGl0ZXJhdGVlOiAoIHZhbHVlOiBULCBpbmRleDogbnVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciwgYXJyYXk6IFRbXSApID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuICB0b0FycmF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyggdmFsdWVzICkuZm9yRWFjaCggaXRlcmF0ZWUgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IHRvQXJyYXkgfSBmcm9tICcuLi90b0FycmF5L3RvQXJyYXknO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBFeHRlbmRlZCBgQXJyYXkjcHVzaCgpYCB0aGF0IGFjY2VwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIGFuIGl0ZW0gb3IgYW4gYXJyYXkgd2l0aCBpdGVtcy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gYXJyYXkgLSBBbiBhcnJheSB0byBwdXNoIGl0ZW1zLlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gaXRlbXMgLSBBbiBpdGVtIG9yIGl0ZW1zIHRvIHB1c2guXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBBIHByb3ZpZGVkIGFycmF5IGl0c2VsZi5cXHJcXG4gKi9cXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGZ1bmN0aW9uIHB1c2g8VD4oIGFycmF5OiBUW10sIGl0ZW1zOiBUIHwgVFtdICk6IFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW10ge1xcclxcbiAgYXJyYXkucHVzaCggLi4udG9BcnJheSggaXRlbXMgKSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBhcnJheTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNIVE1MRWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgY2FuIGJlIHNlbGVjdGVkIGJ5IHRoZSBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmlkZWQgc2VsZWN0b3Igb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGVsbSAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAtIEFuIGVsZW1lbnQgdG8gY2hlY2suXFxyXFxuICogQHBhcmFtIHNlbGVjdG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAtIEEgc2VsZWN0b3IgdG8gdGVzdC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCwgb3Igb3RoZXJ3aXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVzKCBlbG06JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFbGVtZW50IHwgRXZlbnRUYXJnZXQsIHNlbGVjdG9yOiBzdHJpbmcgKTogYm9vbGVhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIie1xcclxcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoIGVsbSApICYmICggZWxtWyAnbXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTWF0Y2hlc1NlbGVjdG9yJyBdIHx8IGVsbS5tYXRjaGVzICkuY2FsbCggZWxtLCBzZWxlYyIKICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgY2hpbGRyZW4gfSBmcm9tIFwnLi4vYycKICAgICAgICAgICAgICAgICAgICAgICAgYiJoaWxkcmVuL2NoaWxkcmVuJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1IgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JucyBhIGNoaWxkIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgdGFnIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHBhcmVudCAgIC0gQSBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBzZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIG1hdGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGNoaWxkIGVsZW1lbnQgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYHVuZGVmaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjaGlsZDxFIGV4dGVuZHMgSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUTUxFbGVtZW50PiggcGFyZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I/OiBzdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IEUgfCB1bmRlZmluZWQge1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VuPEU+KCBwYXJlbnQsIHNlbGVjdG9yIClbIDAgXSA6IHBhcmVudC5maXJzdEVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hpbGQgYXMgRTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgc2xpY2UgfSBmcm9tIFwnLi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLy4uL2FycmF5TGlrZSc7XFxyXFxuaW1wb3J0IHsgbWF0Y2hlcyB9IGZyb20gJy4uL20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYXRjaGVzL21hdGNoZXMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEZpbmRzICIKICAgICAgICAgICAgICAgICAgICAgICAgYidjaGlsZHJlbiB0aGF0IGhhcyB0aGUgc3BlY2lmaWVkIHRhZyBvciBjbGFzcyBuYW1lLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEBwYXJhbSBzZWxlY3RvciAtIE9wdGlvbmFsLiBBIHNlbGVjdG9yIHRvIGZpbHRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgY2hpbGRyZW4uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmF5IHdpdGggZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHRlcmVkIGNoaWxkcmVuLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW48RSBleHRlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIVE1MRWxlbWVudCwgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdG9yPzogc3RyaW5nICk6IEVbXSB7XFxyXFxuICBjb25zdCBjaGlsZHJlbiA9IHBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQgPyBzbGljZSggcGFyZW50LmNoaWxkcmVuICkgYXMgRVtdIDogW107XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4uZmlsdGVyKCBjaGlsZCA9PiBtYXRjaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyggY2hpbGQsIHNlbGVjdG9yICkgKSA6IGNoaWxkcmVuO1xcclxcbn1cXHJcXG4iLCIvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQW4gYWxpYXMgb2YgYE9iamVjdC5rZXlzKClgXFxyXFxuICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBjb25zdCBvd25LZXlzID0gT2JqZWN0LmtleXM7IiwiaW1wb3J0IHsgb3duJwogICAgICAgICAgICAgICAgICAgICAgICBiIktleXMgfSBmcm9tICcuLi9vd25LZXlzL293bktleXMnO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBJdGVyYXRlcyBvdmVyIHRoZSBwcm92aWRlZCBvYmplY3QgYnkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293biBlbnVtZXJhYmxlIGtleXMgd2l0aCBjYWxsaW5nIHRoZSBpdGVyYXRlZSBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gb2JqZWN0ICAgLSBBbiBvYmplY3QgdG8gaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJhdGUgb3Zlci5cXHJcXG4gKiBAcGFyYW0gaXRlcmF0ZWUgLSBBbiBpdGVyYXRlZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gdGhhdCB0YWtlcyBgdmFsdWVgIGFuZCBga2V5YCBhcyBhcmd1bWVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSByaWdodCAgICAtIElmIGB0cnVlYCwgdGhlIG1ldGhvZCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmF0ZXMgb3ZlciB0aGUgb2JqZWN0IGZyb20gdGhlIGVuZCBsaWtlIGBmb3JFYWNoUmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0KClgLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIHByb3ZpZGVkIG9iamVjdCBpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxmLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JPd248VCBleHRlbmRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3Q+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgaXRlcmF0ZWU6ICggdmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBUWyBrZXlvZiBUIF0sIGtleTogc3RyaW5nICkgPT4gYm9vbGVhbiB8IHZvaWQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgcmlnaHQ/OiBib29sZWFuXFxyXFxuKTogVCB7XFxyXFxuICBpZiAoIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgKSB7XFxyXFxuICAgICggcmlnaHQgPyBvd25LZXlzKCBvYmplY3QgKS5yZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzZSgpIDogb3duS2V5cyggb2JqZWN0ICkgKS5mb3JFYWNoKCBrZXkgPT4ge1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiIm4gICAgICBrZXkgIT09ICdfX3Byb3RvX18nICYmIGl0ZXJhdGVlKCBvYmplY3RbIGtleSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSwga2V5ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBDYXN0LCBIZWFkLCBQdXNoLCBSJwogICAgICAgICAgICAgICAgICAgICAgICBiImVzb2x2ZSwgU2hpZnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IgogICAgICAgICAgICAgICAgICAgICAgICBiIiB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJztcXHJcXG5pbXBvcnQgeyBmIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9yT3duIH0gZnJvbSAnLi4vZm9yT3duL2Zvck93bic7XFxyXFxuXFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIEFzc2lnbnMgVSB0byBULlxcclxcbiAqXFxyXFxuICogQHR5cGVQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gVCAtIEFuIG9iamVjdCB0byBhc3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20gVSAtIEFuIG9iamVjdCB0byBhc3NpZ24uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhc3NpZ25lZCBvYmplY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBBcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzaWduPFQsIFU+ID0gT21pdDxULCBrZXlvZiBVPiAmIFU7XFxyXFxuXFxyXFxuLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFJlY3Vyc2l2ZWx5IGFzc2lnbnMgVVtdIHRvIFQuXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHR5cGVQYXJhbSBUIC0gQW4gb2JqZWN0IHRvIGFzc2lnbiB0by5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHR5cGVQYXJhbSBVIC0gQSB0dXBsZSBjb250YWlucyBvYmplY3RzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEByZXR1cm4gQW4gYXNzaWduZWQgb2JqZWN0IHR5cGUuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCB0eXBlIEFzc2lnbmVkPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2JqZWN0W10sIE4gZXh0ZW5kcyBudW1iZXIsIEMgZXh0ZW5kcyBhbnlbXSA9IFtdPiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAwOiBULFxcclxcbiAgMTogQXNzaWduZWQ8QXNzaWduPFQsIEhlYWQ8VT4+JwogICAgICAgICAgICAgICAgICAgICAgICBiIiwgU2hpZnQ8VT4sIE4sIFB1c2g8Qz4+LFxcclxcbn1bIENbJ2xlbmd0aCddIGV4dGVuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIE4gPyAwIDogMSBdIGV4dGVuZHMgaW5mZXIgQSA/IENhc3Q8QSwgYW55PiA6IG5ldmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0Piggb2JqZWN0OiBUICk6IFQ7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ248VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdPihcXHJcXG4gIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Q6IFQsXFxyXFxuICAuLi5zb3VyY2VzOiBVXFxyXFxuKTogUmVzb2x2ZTxBc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZWQ8VCwgVSwgVVsnbGVuZ3RoJ10+Plxcclxcblxcclxcbi8qKlxcclxcbiAqIEFzc2kiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ25zIGFsbCBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFsbCBzb3VyY2Ugb2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdHMgdG8gdGhlIHByb3ZpZGVkIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IC0gQW4gb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEByZXR1cm4gQW4gb2JqZWN0IGFzc2lnbmVkIHByb3BlcnRpZXMgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzb3VyY2VzIHRvLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTogYW55IHtcXHJcXG4gIC8vIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zLCBwcmVmZXItcycKICAgICAgICAgICAgICAgICAgICAgICAgYidwcmVhZFxcclxcbiAgc2xpY2UoIGFyZ3VtZW50cywgMSApLmZvckVhY2goIHNvdXJjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPT4ge1xcclxcbiAgICBmb3JPd24oIHNvdXJjZSwgKCB2YWx1ZSwga2V5ICkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBvYmplY3RbIGtleSBdID0gc291cmNlWyBrZXkgXTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30gKTtcXHJcXG4gIH0gKTtcXHJcXG5cXHJcXG4gIHJldHVybiBvYmplY3Q7XFxyXFxufVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4iLCJpbXBvcnQgeyBDYXN0LCBIZWFkLCBQdXNoLCBSZXNvbHZlLCBTaGlmdCB9IGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4vLi4vYXJyYXlMaWtlJztcXHJcXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcbmltcG9ydCB7IGZvck93biB9IGZyIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi9mb3JPd24vZm9yT3duJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInTWVyZ2VzIFUgdG8gVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtIEFuIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QgdG8gbWVyZ2UgVSBpbnRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEFuIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QgdG8gbWVyZ2UgcHJvcGVydGllcyBmcm9tLlxcclxcbiAqXFxyXFxuICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gQSBtZXJnZWQgb2JqZWN0IHR5cGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgTWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmdlPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmplY3Q+ID0gT21pdDxULCBrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5b2YgVT4gJiB7XFxyXFxuICBbIEsgaW4gKCBrZXlvZiBUICYga2V5b2YgVSApIF06ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidVWyBLIF0gZXh0ZW5kcyBvYmplY3RcXHJcXG4gICAgPyBVWyBLIF0gZXh0ZW5kcyBhbicKICAgICAgICAgICAgICAgICAgICAgICAgYid5W11cXHJcXG4gICAgICA/IFVbIEsgXVxcclxcbiAgICAgIDogVFsgSyBdIGV4dGVuZHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdFxcclxcbiAgICAgICAgPyBNZXJnZTxUWyBLIF0sIFVbIEsgXT4gZXh0ZW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgaW5mZXIgQSA/IFJlc29sdmU8Q2FzdDxBLCBvYmplY3Q+PiA6IG5ldmVyXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgOiBVWyBLIF1cXHJcXG4gICAgOiBVWyBLIF07XFxyXFxufSAmIE9taXQ8VSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGtleW9mIFQ+O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2l2ZWx5IG1lcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgVVtdIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIGFzc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBIHR1cGxlIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0YWlucyBvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhc3NpZ25lZCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHR5cGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgTWVyZ2VkPFQgZXh0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0W10sIE4gZXh0ZW5kcyBudW1iZXIsIEMgZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgYW55W10gPSBbXT4gPSB7XFxyXFxuICAwOiBULFxcclxcbiAgMTogTWVyZ2VkJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxNZXJnZTxULCBIZWFkPFU+PiwgU2hpZnQ8VT4sIE4sIFB1c2g8Qz4+LFxcclxcbn1bJwogICAgICAgICAgICAgICAgICAgICAgICBiIiBDWydsZW5ndGgnXSBleHRlbmRzIE4gPyAwIDogMSBdIGV4dGVuZHMgaW5mZXIgQSA/IEMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXN0PEEsIGFueT4gOiBuZXZlcjtcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gbWVyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTogVDtcXHJcXG5cXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGZ1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW10+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgLi4uc291cmNlczogVVxcclxcbiknCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOiBSZXNvbHZlPE1lcmdlZDxULCBVLCBVWydsZW5ndGgnXT4+XFxyXFxuXFxyXFxuLyoqXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIFJlY3Vyc2l2ZWx5IG1lcmdlcyBzb3VyY2UgcHJvcGVydGllcyB0byB0aGUgb2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKiBCZSBhd2FyZSB0aGF0IHRoaXMgbWV0aG9kIGRvZXMgbm90IG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJnZSBhcnJheXMuIFRoZXkgYXJlIGp1c3QgZHVwbGljYXRlZCBieSBgc2xpY2UoKWAuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAtIEFuIG9iamVjdCB0byBtZXJnZSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcGVydGllcyB0by5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBuZXcgb2JqZWN0IHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIG1lcmdlZCBwcm9wZXJ0aWVzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWVyZ2U8VCBleHRlbmRzIG9iamVjdD4oIG9iamVjdDogVCApOiBhbnkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBzbGljZSggYXJndW1lbnRzLCAxICkuZm9yRWFjaCggc291cmNlID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvck93biggc291cmNlLCAoIHZhbHVlLCBrZXkgKSA9PiB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGlmICggaXNBcnJheSggdmFsdWUgKSApIHtcXHJcXG4gICAgICAgIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbIGtleSBdID0gdmFsdWUuc2xpY2UoKTtcXHJcXG4gICAgICB9IGVsc2UgaWYgKCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidPYmplY3QoIHZhbHVlICkgKSB7XFxyXFxuICAgICAgICBvYmplY3RbIGtleSBdID0gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmdlKCB7fSwgaXNPYmplY3QoIG9iamVjdFsga2V5IF0gKSA/IG9iamVjdFsga2V5IF0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJzoge30sIHZhbHVlICk7XFxyXFxuICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RbIGtleSBdID0gdmFsdWU7XFxyXFxuICAgICAgfVxcclxcbiAgICB9ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfSApO1xcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59XFxyXFxuIiwiaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IGZvckVhY2ggfSBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKlxcclxcbiAqIFJlbW92ZXMgdGhlIHByb3ZpZGVkIG5vZGUgZnJvbSBpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHBhcmVudC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBub2RlcyAtIEEgbm9kZSBvciBuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBub2RlczogTm9kZSB8IE5vZGVbXSApOiB2b2lkIHtcXHJcXG4gIGZvckVhY2goIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2Rlcywgbm9kZSA9PiB7XFxyXFxuICAgIGlmICggbm9kZSAmJiBub2RlLnBhcmVudE4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlICkge1xcclxcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfSApO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBBcHBlbmRzIGBweGAgdG8gdGhlIHByb3ZpZGVkIG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgc3RyaW5nLCBqdXN0IHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm5zIGl0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZW5kIGBweGAgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgc3RyaW5nIHdpdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBDU1MgdW5pdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdW5pdCggdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlOiBudW1iZXIgfCBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYiJTdHJpbmcoIHZhbHVlICkgPyB2YWx1ZSA6IHZhbHVlID8gYCR7IHZhbHVlIH1weGAgOiAnIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1wnO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBQUk9KRUNUX0NPREUgfSBmcm9tIFwnJwogICAgICAgICAgICAgICAgICAgICAgICBiIi4uLy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBjb25kaXRpb24gaXMgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHN5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGNvbmRpdGlvbiAtIElmIGZhbHN5LCBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXJyb3IgaXMgdGhyb3duLlxcclxcbiAqIEBwYXJhbSBtZXNzYWdlICAgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwuIEEgbWVzc2FnZSB0byBkaXNwbGF5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gYXNzZXJ0KCBjb25kaXRpb246IGFueSwgbWVzc2FnZT86IHN0cmluZyApOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZCB7XFxyXFxuICBpZiAoICEgY29uZGl0aW9uICkge1xcclxcbiAgICB0aHJvdyBuZXcgJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVycm9yKCBgWyR7IFBST0pFQ1RfQ09ERSB9XSAkeyBtZXNzYWdlIHx8ICcnIH1gICk7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcbn1cXHJcXG4iLCJleHBvcnQgY29uc3QgeyBtaW4sIG1heCwgZmxvb3IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjZWlsLCBhYnMgfSA9IE1hdGg7XFxyXFxuIiwiLyoqXFxyXFxuICogQ29udmVydHMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBwcm92aWRlZCBzdHJpbmcgaW4gdGhlIGNhbWVsIGNhc2UgdG8gdGhlIGtlYmFiIGNhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidlLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN0cmluZyAtIEEgc3RyaW5nIHRvIGNvbnZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjYW1lbFRvS2ViYWIoIHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmc6IHN0cmluZyApOiBzdHJpbmcge1xcclxcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSggLyhbYS16MC05XSkoW0EtWl0pL2csICckMS0kMicgKS50b0xvd2VyQ2FzZSgpIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgcGFkIH0gZnJvbSBcJy4uL3BhZC9wYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTdG9yZXMgdW5pcXVlIElEcy5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBpZHM6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XFxyXFxuXFxyXFxuLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFJldHVybnMgYSBzZXF1ZW50aWFsIHVuaXF1ZSBJRCBhcyBcXCJ7IHByZWZpeCB9LXsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciB9XFwiLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHByZWZpeCAtIEEgcHJlZml4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgdGhlIElELlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVJZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZWZpeDogc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gYCR7IHByZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXggfSR7IHBhZCggKCBpZHNbIHByZWZpeCBdID0gKCBpZHNbIHByZWZpeCBdIHx8IDAgKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAxICkgKSB9YDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24gfSBmJwogICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGVtcHR5LCBmb3JFYWNoIH0gIgogICAgICAgICAgICAgICAgICAgICAgICBiImZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUgZm9yIGFuIEV2ZW50VGFyZ2V0IG9yIGFuIGFycmF5IHdpdGggRXZlbnRUYXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9iamVjdHMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxudHlwZSBFdmVudFRhcmdldHMgPSBFdmVudFRhcmdldCB8IEV2ZW50VGFyZ2V0WycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRCaW5kZXIgb2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRCaW5kZXJPYmplY3Qge1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGJpbmQoIHRhcmdldDogRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLCBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJPcHRpb25zICk6IHZvaWRcXHJcXG4gIHVuYmluZCggdGFyZ2V0OiBFdmVudFRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQgfCBFdmVudFRhcmdldFtdLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkO1xcclxcbiAgZGlzcGF0Y2g8VD4oIHRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW5nLCBkZXRhaWw/OiBUICk6IHZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgZGVzdHJveSgpOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIHByb3ZpZGUgbWV0aG9kcyB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3Vic2NyaWJlIG5hdGl2ZSBldmVudHMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4wXFxyXFxuICogQGNvbnN0cnVjdG9yXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEJpbmRlciBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEJpbmRlcigpOiBFdmVudEJpbmRlck9iamVjdCB7XFxyXFxuICAvKipcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBTdG9yZXMgYWxsIGhhbmRsZXJzIHRoYXQgbGlzdGVuIHRvIG5hdGl2ZSBldmVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogYFsgdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZXIgXWBcXHJcXG4gICAqL1xcclxcbiAgbGV0IGxpc3RlbmVyczogWyBFdmVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQsIHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkLCBBbnlGdW5jdGlvbiwgKCkgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHZvaWQgXVtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRvIG5hdGl2ZSBldmVudHMuXFxyXFxuICAgKiAtIGBkZXN0cm95KClgIGNhbiB1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdWJzY3JpYmUgYWxsIGV2ZW50cy5cXHJcXG4gICAqIC0gSW4gSUUsIG1lZGlhUXVlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid5TGlzdCBkb2VzIG5vdCBpbmhlcml0IEV2ZW50VGFyZ2V0LFxcclxcbiAgICogICBhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkIG9ubHkgc3VwcG9ydHMgZGVwcmVjYXRlZCBgYWRkTGlzdGVuZXJgIGFuZCBgcmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xpc3RlbmVyYC5cXHJcXG4gICAqXFxyXFxuICAgKiBAbGluayBodHRwczovL2RldmVsb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01lZGlhUXVlcnlMaXN0L2FkZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMaXN0ZW5lclxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldCBlbGVtZW50LCB0aGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG9yIGV2ZW50cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gbGlzdGVuIHRvLlxcclxcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSBjYWxsYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2sgZnVuY3Rpb24uXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAgLSBPcHRpb25hbC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoZSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGBhZGRFdmVudExpc3RlbmVyYCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGJpbmQoXFxyXFxuICAgIHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRzOiBFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZ1tdLFxcclxcbiAgICBjYWxsYmFjazogQW55RnVuY3Rpb24sXFxyXFxuICAgIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNcXHJcXG4gICk6IHZvaWQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZm9yRWFjaEV2ZW50KCB0YXJnZXRzLCBldmVudHMsICggdGFyZ2V0LCBldmVudCwgbicKICAgICAgICAgICAgICAgICAgICAgICAgYiJhbWVzcGFjZSApID0+IHtcXHJcXG4gICAgICBjb25zdCBpc0V2ZW50VGFyZ2V0ID0gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhZGRFdmVudExpc3RlbmVyJyBpbiB0YXJnZXQ7XFxyXFxuICAgICAgY29uc3QgcmVtbyIKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIgPSBpc0V2ZW50VGFyZ2V0XFxyXFxuICAgICAgICA/IHRhcmdldC5yZW1vdmVFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRMaXN0ZW5lci5iaW5kKCB0YXJnZXQsIGV2ZW50LCBjYWxsYmFjaywgb3B0aW9ucyApJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgICAgICAgOiB0YXJnZXRbICdyZW1vdmVMaXN0ZW5lcicgXS5iaW5kKCB0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0LCBjYWxsYmFjayApO1xcclxcblxcclxcbiAgICAgIGlzRXZlbnRUYXJnZXQgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIGV2ZW50LCBjYWxsYmFjaywgb3B0aW9ucyApICcKICAgICAgICAgICAgICAgICAgICAgICAgYiI6IHRhcmdldFsgJ2FkZExpc3RlbmVyJyBdKCBjYWxsYmFjayApO1xcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0ZW5lcnMucHVzaCggWyB0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UsIGNhbGxiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcmVtb3ZlciBdICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIFJlbW92ZXMgdGhlIGV2ZW50IGhhbmRsZXIuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMgdG8gcmVtb3ZlLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsLiBTcGVjaWZ5IHRoZSBjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2sgdG8gcmVtb3ZlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB1bmJpbmQoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXRzOiBFdmVudFRhcmdldHMsIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaz86IEFueUZ1bmN0aW9uICk6IHZvaWQge1xcclxcbiAgICBmb3JFYWNoRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCB0YXJnZXRzLCBldmVudHMsICggdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlICkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKCBsaXN0ZW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgPT4ge1xcclxcbiAgICAgICAgaWYgKCBsaXN0ZW5lclsgMCBdID09PSB0YXJnZXRcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgICAgICYmIGxpc3RlbmVyWyAxIF0gPT09IGV2ZW50XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAmJiBsaXN0ZW5lclsgMiBdID09PSBuYW1lc3BhY2VcXHJcXG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICYmICggISBjYWxsYmFjayB8fCBsaXN0ZW5lclsgMyBdID09PSBjYWxsYmFjayApJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgICAgKSB7XFxyXFxuICAgICAgICAgIGxpc3RlbmVyWyA0IF0oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXHJcXG4gICAgICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERpc3BhdGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGEgY3VzdG9tIGV2ZW50IG9mIHRoZSB0YXJnZXQuXFxyXFxuICAgKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSB0YXJnZXQgLSBBbiBldmVudCB0YXJnZXQuXFxyXFxuICAgKiBAcGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUgICAtIEFuIGV2ZW50IHR5cGUuXFxyXFxuICAgKiBAcGFyYW0gZGV0YWlsIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIE9wdGlvbmFsLiBUaGUgYGRldGFpbGAgb2JqZWN0IG9mIHRoZSBldmVudC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHJldHVybiBBbiBldmVudCBvYmplY3QuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBkaXNwYXRjaDxUPiggdGFyZ2V0OiBFdmVudFRhcmdldCwgdHlwZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZywgZGV0YWlsPzogVCApOiBDdXN0b21FdmVudCB7XFxyXFxuICAgIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogQ3VzdG9tRXZlbnQ7XFxyXFxuICAgIGNvbnN0IGJ1YmJsZXMgPSB0cnVlO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgaWYgKCB0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICdmdW5jdGlvbicgKSIKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgICAgIGUgPSBuZXcgQ3VzdG9tRXZlbnQoIHR5cGUsIHsgYnViYmxlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGRldGFpbCB9ICk7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZSA9IGRvY3VtJwogICAgICAgICAgICAgICAgICAgICAgICBiImVudC5jcmVhdGVFdmVudCggJ0N1c3RvbUV2ZW50JyApO1xcclxcbiAgICAgIGUuaW5pIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RDdXN0b21FdmVudCggdHlwZSwgYnViYmxlcywgZmFsc2UsIGRldGFpbCApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgfVxcclxcblxcclxcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudCggZSApOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuIGU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBJdGVyYXRlcyBvdmVyIGVhY2ggdGFyZ2V0IGFuZCBldmVudC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldHMgIC0gQSB0YXJnZXQgZWxlbWVudCwgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB3aW5kb3cgb2JqZWN0IG9yIHRoZSBkb2N1bWVudCBvYmplY3QuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIGV2ZW50cyAgIC0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcy5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcGFyYW0gaXRlcmF0ZWUgLSBBbiBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIGZvckVhY2hFdmVudChcXHJcXG4gICAgdGFyZ2V0czogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50VGFyZ2V0cyxcXHJcXG4gICAgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGl0ZXJhdGVlOiAoIHRhcmdldDogRXZlbnRUYXJnZXQsIGV2ZW50OiBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnLCBuYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZCApID0+IHZvaWRcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaCggdGFyZ2V0cywgdGFyZ2V0ID0+IHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgdGFyZ2V0ICYmIGZvckVhY2goIGV2ZW50cywgZXZlbnRzID0+IHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgICAgICBldmVudHMuc3BsaXQoICcgJyApLmZvckVhY2goIGV2ZW50TlMgPSIKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcXHJcXG4gICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBldmVudE5TLnNwbGl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4nICk7XFxyXFxuICAgICAgICAgIGl0ZXJhdGVlKCB0YXJnZXQsIGZyYWdtZW50WyIKICAgICAgICAgICAgICAgICAgICAgICAgYicgMCBdLCBmcmFnbWVudFsgMSBdICk7XFxyXFxuICAgICAgICB9ICk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30gKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgbGlzdGVuZXJzLmZvckVhY2goIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRhID0+IHsgZGF0YVsgNCBdKCkgfSApO1xcclxcbiAgICBlbXB0eSggbGlzdGVuZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgYmluZCxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHVuYmluZCxcXHJcXG4gICAgZGlzcGF0Y2gsXFxyXFxuICAgIGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5LFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogRW1wdGllcyB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGFycmF5IC0gQSBhcnJheSB0byBlbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHkuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5KCBhcnJheTogYW55WycKICAgICAgICAgICAgICAgICAgICAgICAgYiddICk6IHZvaWQge1xcclxcbiAgYXJyYXkubGVuZ3RoID0gMDtcXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydCB7IEVWRU5UX0RFU1RST1kgfSBmcm9tIFwnLi4vLi4vY29uc3RhbnRzL2V2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJudHMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0aW9uLCBFdmVudE1hcCB9ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHksIGFzc2lnbiwgaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzQXJyYXksIHNsaWNlLCB0b0FycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpbXBvcnQgeyBFdmVudEJpbmRlciwgRXZlbnRCaW5kZXJPYmplY3QgfSBmcm9tICcuLi9FIgogICAgICAgICAgICAgICAgICAgICAgICBiInZlbnRCaW5kZXIvRXZlbnRCaW5kZXInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRJbnRlcmZhY2Ugb2JqZWN0LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWN0IGV4dGVuZHMgRXZlbnRCaW5kZXJPYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHtcXHJcXG4gIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50OiBLLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FsbGJhY2s6IEV2ZW50TWFwWyBLIF0gKTogdm9pZDtcXHJcXG4gIG9uKCBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6IHZvaWQ7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50czogSyB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBLW10gfCBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkO1xcclxcbiAgZW1pdDxLIGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssIC4uLmFyZ3M6IFBhcmFtZXRlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPEV2ZW50TWFwWyBLIF0+ICk6IHZvaWRcXHJcXG4gIGVtaXQoIGV2ZW50OiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCAuLi5hcmdzOiBhbnlbXSApOiB2b2lkO1xcclxcblxcclxcbiAgLyoqIEBpbnRlcm5hbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGJ1czogRG9jdW1lbnRGcmFnbWVudDtcXHJcXG59XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0aGF0IHByb3ZpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnRlcmZhY2UgZm9yIGludGVybmFsIGFuZCBuYXRpdmUgZXZlbnRzLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqIEBjb25zdHJ1Y3RvclxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBTcGxpZGUgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAcmV0dXJuIEEgY29sbGVjdGlvbiBvZiBpbnRlcmZhY2UgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoIFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGU/OiBTcGxpZGUgKTogRXZlbnRJbnRlcmZhY2VPYmplY3Qge1xcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhlIGRvY3VtZW50IGZyYWdtZW50IGZvciBpbnRlcm5hbCBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAgICogUHJvdmlkZSB0aGUgU3BsaWRlIGluc3RhbmNlIHRvIHNoYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYnVzLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBidXMgPSBTcGxpZGUgPyBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLmV2ZW50LmJ1cyA6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFuIGV2ZW50IGJpbmRlciBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBjb25zdCBiaW5kZXIgPSBFdmVudEJpbmRlcigpO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTGlzdGVucyB0byBhbiBpbnRlcm5hbCBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgZXZlbnRzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBldmVudHMgICAtIEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudCBuYW1lIG9yIG5hbWVzIHNlcGFyYXRlZCBieSBzcGFjZXMuIFVzZSBhIGRvdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLikgdG8gYWRkIGEgbmFtZXNwYWNlLlxcclxcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXFxyXFxuICAgKi9cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBvbiggZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgYmluZGVyLmJpbmQoIGJ1cywgdG9BJwogICAgICAgICAgICAgICAgICAgICAgICBiInJyYXkoIGV2ZW50cyApLmpvaW4oICcgJyApLCBlID0+IHtcXHJcXG4gICAgICBjYWxsIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2suYXBwbHkoIGNhbGxiYWNrLCBpc0FycmF5KCBlLmRldGFpbCApID8gZS5kZXRhaWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDogW10gKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogVHJpZ2dlcnMgY2FsbGJhY2sgZnVuY3Rpb25zLlxcclxcbiAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgYWNjZXB0cyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhbmQgcGFzc2VzIHRoZW0gdG8gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhbGxiYWNrcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnQgLSBBbiBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgbmFtZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZW1pdCggZXZlbnQ6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgKTogdm9pZCB7XFxyXFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJlZmVyLXJlc3QtcGFyYW1zLCBwcmVmZXItc3ByZWFkXFxyXFxuICAgIGJpbmRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzcGF0Y2goIGJ1cywgZXZlbnQsIHNsaWNlKCBhcmd1bWVudHMsIDEgKSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIGlmICggU3BsaWRlICkge1xcclxcbiAgICBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmV2ZW50Lm9uKCBFVkVOVF9ERVNUUk9ZLCBiaW5kZXIuZGVzdHJveSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIHJldHVybiBhc3NpZ24oIGJpbmRlciwge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnVzLFxcclxcbiAgICBvbixcXHJcXG4gICAgb2ZmOiBhcHBseSggYmluZGVyLnVuYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGJ1cyApLFxcclxcbiAgICBlbWl0LFxcclxcbiAgfSApO1xcclxcbn0iLCJleHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IGNvbnN0IEVWRU5UX01PVU5URUQgICAgICAgICAgICA9ICdtb3VudGVkJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuZXhwb3J0IGNvbnN0IEVWRU5UX1JFQURZICAgICAgICAgICAgICA9ICdyZWFkeSciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9NT1ZFICAgICAgICAgICAgICAgPSAnbW8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidmUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9NT1ZFRCAgICAgICAgICAgICAgPSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ21vdmVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQ0xJQ0sgICAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICA9ICdjbGljayc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FDVElWRSAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgPSAnYWN0aXZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfSU5BQ1RJVkUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgICA9ICdpbmFjdGl2ZSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1YiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiSVNJQkxFICAgICAgICAgICAgPSAndmlzaWJsZSc7XFxyXFxuZXhwb3J0IGNvbnN0IEUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiVkVOVF9ISURERU4gICAgICAgICAgICAgPSAnaGlkZGVuJztcXHJcXG5leHBvcnQgY28iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnN0IEVWRU5UX1JFRlJFU0ggICAgICAgICAgICA9ICdyZWZyZXNoJztcXHJcXG5leHAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3J0IGNvbnN0IEVWRU5UX1VQREFURUQgICAgICAgICAgICA9ICd1cGRhdGVkJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFU0laRSAgICAgICAgICAgICA9ICdyZXNpemUnOyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUkVTSVpFRCAgICAgICAgICAgID0gJ3JlcyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpemVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBRyAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiI9ICdkcmFnJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBR0dJTkcgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICA9ICdkcmFnZ2luZyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RSQUdHRUQgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgICAgPSAnZHJhZ2dlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NDUiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJPTEwgICAgICAgICAgICAgPSAnc2Nyb2xsJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJUX1NDUk9MTEVEICAgICAgICAgICA9ICdzY3JvbGxlZCc7XFxyXFxuZXhwb3J0IGNvbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzdCBFVkVOVF9PVkVSRkxPVyAgICAgICAgICAgPSAnb3ZlcmZsb3cnO1xcclxcbmV4cCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgY29uc3QgRVZFTlRfREVTVFJPWSAgICAgICAgICAgID0gJ2Rlc3Ryb3knO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5leHBvcnQgY29uc3QgRVZFTlRfQVJST1dTX01PVU5URUQgICAgID0gJ2Fycm93czptIgogICAgICAgICAgICAgICAgICAgICAgICBiIm91bnRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FSUk9XU19VUERBVEVEICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgPSAnYXJyb3dzOnVwZGF0ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9QQUdJIgogICAgICAgICAgICAgICAgICAgICAgICBiIk5BVElPTl9NT1VOVEVEID0gJ3BhZ2luYXRpb246bW91bnRlZCc7XFxyXFxuZXhwb3J0IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQgPSAncGFnaW5hdGlvbjp1cGRhdGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCA9ICciCiAgICAgICAgICAgICAgICAgICAgICAgIGIibmF2aWdhdGlvbjptb3VudGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQVVUT1AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTEFZX1BMQVkgICAgICA9ICdhdXRvcGxheTpwbGF5JztcXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgICA9ICdhdXRvcGxheTpwbGF5aW5nJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QTEFZX1BBVVNFICAgICA9ICdhdXRvcGxheSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI6cGF1c2UnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9MQVpZTE9BRF9MT0FERUQgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgID0gJ2xhenlsb2FkOmxvYWRlZCc7XFxyXFxuXFxyXFxuLyoqIEBpbnRlcm5hbCAqL1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5leHBvcnQgY29uc3QgRVZFTlRfU0xJREVfS0VZRE9XTiAgICAgPSAnc2snO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5leHBvcnQgY29uc3QgRVZFTlRfU0hJRlRFRCAgICAgICAgICAgPSAnc2gnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5leHBvcnQgY29uc3QgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQgPSAnZWknO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4iLCJleHBvcnQgY29uc3QgQ0xBU1NfUkVOREVSRUQgPSBcJ2lzLXJlbmRlcmVkXCcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiIsImltcG9ydCB7IFJlbmRlcmVyQ29uZmlnIH0gZnJvbSBcJy4uL3R5cGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiIi90eXBlcyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRGVmYXVsdCBvcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBmb3IgZ2VuZXJhdGluZyBzdGF0aWMgSFRNTC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgUkVOREVSRVJfREVGQVVMVF9DJwogICAgICAgICAgICAgICAgICAgICAgICBiIk9ORklHOiBSZW5kZXJlckNvbmZpZyA9IHtcXHJcXG4gIGxpc3RUYWcgOiAndWwnLFxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNsaWRlVGFnOiBcJ2xpXCcsXFxyXFxufTtcXHJcXG4iLCJpbXBvcnQgeyBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBmb3JPd24gfSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbmludGVyZmFjZSBTdHkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVzIHtcXHJcXG4gIFsgYnJlYWtwb2ludDogc3RyaW5nIF06IHtcXHJcXG4gICAgWyBzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3I6IHN0cmluZyBdOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPlxcclxcbiAgfTtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBmb3IgZ2VuZXJhdGluZyBzdHlsZXMgYXMgYSBzdHJpbmcuXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNsYXNzIFN0eWxlIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBjb2xsZWN0aW9uIG9mIHJlZ2lzdGVyZWQgcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlcyBjYXRlZ29yaXplZCBieSBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlczogU3R5bGVzID0ge307XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBUaGUgSUQgb2YgdGhlIHNsaWRlci5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgaWQ6IHN0cmluZztcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAvKipcXHJcXG4gICAqIEhvbGRzIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnM7XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBUaGUgU3R5bGUgY29uc3RydWN0b3IuXFxyXFxuICAgKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBpZCAgICAgIC0gQSBzbGlkZXIgSUQuXFxyXFxuICAgKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICovXFxyXFxuICBjb25zdHJ1Y3RvciggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkOiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMgKSB7XFxyXFxuICAgIHRoaXMuaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgPSBpZDtcXHJcXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBhIENTUyBydWxlLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdG9yLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBwcm9wXFxyXFxuICAgKiBAcGFyYW0gdmFsdWVcXHJcXG4gICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gYnJlYWtwb2ludFxcclxcbiAgICovXFxyXFxuICBydWxlKCBzZWxlY3RvcjogcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZywgcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCBicmVha3BvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ludD86IHN0cmluZyApOiB2b2lkIHtcXHJcXG4gICAgYnJlYWtwb2ludCA9IGJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICBiInBvaW50IHx8ICdkZWZhdWx0JztcXHJcXG4gICAgY29uc3Qgc2VsZWN0b3JzID0gKCB0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5zdHlsZXNbIGJyZWFrcG9pbnQgXSA9IHRoaXMuc3R5bGVzWyBicmVha3BvaW50IF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IHt9ICk7XFxyXFxuICAgIGNvbnN0IHN0eWxlcyAgICA9ICggc2VsZWN0b3JzWyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IgXSA9IHNlbGVjdG9yc1sgc2VsZWN0b3IgXSB8fCB7fSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3R5bGVzWyBwcm9wIF0gPSB2YWx1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIEJ1aWxkcyBzdHlsZXMgYXMgYSBzaW5nbGUgc3RyaW5nLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXFxyXFxuICAgKiBAcmV0dXJuIEJ1aWx0IHN0eWxlcy5cXHJcXG4gICAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gIGJ1aWxkKCk6IHN0cmluZyB7XFxyXFxuICAgIGxldCBjc3MgPSAnJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAgIGlmICggdGhpcy5zdHlsZXMuZGVmYXVsdCApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY3NzICs9IHRoaXMuYnVpbGRTZWxlY3RvcnMoIHRoaXMuc3R5bGVzLmRlZmF1bHQgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgT2JqZWN0LmtleXMoIHRoaXMuc3R5bGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApXFxyXFxuICAgICAgLnNvcnQoICggbiwgbSApID0+IHRoaXMub3B0aW9ucy5tZWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiImFRdWVyeSA9PT0gJ21pbicgPyArbiAtICttIDogK20gLSArbiApXFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJy5mb3JFYWNoKCBicmVha3BvaW50ID0+IHtcXHJcXG4gICAgICAgIGlmICggYnJlYWtwJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9pbnQgIT09ICdkZWZhdWx0JyApIHtcXHJcXG4gICAgICAgICAgY3NzICs9IGBAbWVkIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogJHsgYnJlYWtwb2ludCB9cHgpIHtgOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgICAgY3NzICs9IHRoaXMuYnVpbGRTZWxlY3RvcnMoIHRoaXMucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc1sgYnJlYWtwb2ludCBdICk7XFxyXFxuICAgICAgICAgIGNzcyArPSBgfWA7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgfVxcclxcbiAgICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjc3M7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEJ1aWxkcyBzdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVzIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvcnMgLSBBbiBvYmplY3Qgd2l0aCBzdHlsZXMuXFxyXFxuICAgKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gQnVpbHQgc3R5bGVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWlsZFNlbGVjdG9ycyggc2VsZWN0b3JzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZywgc3RyaW5nIHwgbnVtYmVyPj4gKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0IGNzcycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgPSAnJztcXHJcXG5cXHJcXG4gICAgZm9yT3duKCBzZWxlY3RvcnMsICggc3R5bGVzLCBzIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3IgKSA9PiB7XFxyXFxuICAgICAgc2VsZWN0b3IgPSBgIyR7IHRoaXMuaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30gJHsgc2VsZWN0b3IgfWAudHJpbSgpO1xcclxcbiAgICAgIGNzcyArPSBgJHsgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdG9yIH0ge2A7XFxyXFxuXFxyXFxuICAgICAgZm9yT3duKCBzdHlsZXMsICggdmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBwcm9wICkgPT4ge1xcclxcbiAgICAgICAgaWYgKCB2YWx1ZSB8fCB2YWx1ZSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAgKSB7XFxyXFxuICAgICAgICAgIGNzcyArPSBgJHsgcHJvcCB9OiAkeyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfTtgO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgY3NzICs9ICd9JztcXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICByZXR1cm4gYyIKICAgICAgICAgICAgICAgICAgICAgICAgYidzcztcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgUEFUSCwgU0laRSwgWCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJNTF9OQU1FX1NQQUNFIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9BcnJvd3MvcGF0aCc7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uQ29tcG9uZW50IH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbXBvbmVudHMvRGlyZWN0aW9uL0RpcmVjdGlvbic7XFxyXFxuaW1wIgogICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCB7IENMQVNTX0FDVElWRSwgQ0xBU1NfQ0xPTkUsIENMQVNTX0xJU1QsIENMQVNTX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGIiT09ULCBDTEFTU19TTElERSwgQ0xBU1NfVFJBQ0sgfSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7IERFRkFVTFRTIH0gZnJvbSAnLi4vLi4vYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbnN0YW50cy9kZWZhdWx0cyc7XFxyXFxuaW1wb3J0IHsgVFRCIH0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0YW50cy9kaXJlY3Rpb25zJztcXHJcXG5pbXBvcnQgeyBFVkVOVF9NT1VOVCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJMT09QLCBTTElERSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb3J0IHtcXHJcXG4gIGFzc2VydCxcXHJcXG4gIGFzc2lnbixcXHJcXG4gIGNhbWVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RvS2ViYWIsXFxyXFxuICBjaGlsZCxcXHJcXG4gIGZvck93bixcXHJcXG4gIGlzT2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCxcXHJcXG4gIGlzU3RyaW5nLFxcclxcbiAgbWF4LFxcclxcbiAgbWVyZ2UsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgcHVzaCxcXHJcXG4gIHF1ZXJ5QWxsLFxcclxcbiAgcmVtb3ZlLFxcclxcbiAgdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaXF1ZUlkLFxcclxcbiAgdW5pdCxcXHJcXG59IGZyb20gJy4uLy4uL3V0aWxzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuaW1wb3J0IHsgQ0xBU1NfUkVOREVSRUQgfSBmcm9tICcuLi9jb25zdGFudHMvY2xhcyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzZXMnO1xcclxcbmltcG9ydCB7IFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHIH0gZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uL2NvbnN0YW50cy9kZWZhdWx0cyc7XFxyXFxuaW1wb3J0IHsgU3R5bGUgfSBmciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbSAnLi4vU3R5bGUvU3R5bGUnO1xcclxcbmltcG9ydCB7IFJlbmRlcmVyQ29uZmlnLCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgU2xpZGVDb250ZW50IH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xcclxcblxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4vKipcXHJcXG4gKiBUaGUgY2xhc3MgdG8gZ2VuZXJhdGUgc3RhdGljIEhUTUwgb2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBzbGlkZXIgZm9yIHRoZSBmaXJzdCB2aWV3LlxcclxcbiAqXFxyXFxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbGFzcyBTcGxpZGVSZW5kZXJlciB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZW1vdmVzIGEgc3R5bGUgZWxlbWVudCBhbmQgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc3BsaWRlIC0gQSBTcGxpZGUgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3RhbmNlLlxcclxcbiAgICovXFxyXFxuICBzdGF0aWMgY2xlYW4oIHNwbGlkZTogU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBvbiB9ID0gRXZlbnRJbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKCBzcGxpZGUgKTtcXHJcXG4gICAgY29uc3QgeyByb290IH0gPSBzcGxpZGU7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBjb25zdCBjbG9uZXMgPSBxdWVyeUFsbCggcm9vdCwgYC4keyBDTEFTU19DTE9ORScKICAgICAgICAgICAgICAgICAgICAgICAgYicgfWAgKTtcXHJcXG5cXHJcXG4gICAgb24oIEVWRU5UX01PVU5URUQsICgpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgICAgcmVtb3ZlKCBjaGlsZCggcm9vdCwgJ3N0eWxlJyApICk7XFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJlbW92ZSggY2xvbmVzICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyBzbGlkZSBjb250ZW50cy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGVudHM6IHN0cmluZ1tdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8IFNsaWRlQ29udGVudFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGRhdGEgb2Ygc2xpZGVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSBzbGlkZXM6IFNsaWRlQ29udGVudFtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBUaGUgRGlyZWN0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaXZhdGUgcmVhZG9ubHkgRGlyZWN0aW9uOiBEaXJlY3Rpb25Db21wb25lbnQ7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyB0aGUgU3R5bGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IFN0eWxlOiBTdHlsZTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG9wdGlvbnMuXFxyXFxuICAgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnMgPSB7fTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG9wdGlvbnMgZm9yIHRoaXMgaW5zdGFuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogUmVuZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyQ29uZmlnO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgc2xpZGVyIElEJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBpZDogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQW4gYXJyYXkgd2l0aCBvcHRpb25zICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IgZWFjaCBicmVha3BvaW50LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25seSBicmVha3BvaW50czogWyBzdHJpbmcsIE9wdGlvbnMgXVtdID0gW107XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgU3BsaWRlUmVuZGVyZXIgY29uc3RydWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjb250ZW50cyAtIEFuIGFycmF5IHdpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIHNsaWRlIGNvbnRlbnRzLiBFYWNoIGl0ZW0gbXVzdCBiZSBhbiBIVE1MIG9yIGEgcGxhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luIHRleHQuXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAgLSBPcHRpb25hbC4gU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciBvcHRpb25zLlxcclxcbiAgICogQHBhcmFtIGNvbmZpZyAgIC0gU3RhdGljIGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhdWx0IG9wdGlvbnMuXFxyXFxuICAgKiBAcGFyYW0gZGVmYXVsdHMgLSBEZWZhdWx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zIGZvciB0aGUgc2xpZGVyLiBQYXNzIGBTcGxpZGUuZGVmYXVsdHNgIGlmIHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3UgYXJlIHVzaW5nIGl0LlxcclxcbiAgICovXFxyXFxuICBjb25zdHJ1Y3RvciggY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzOiBzdHJpbmdbXSB8IFNsaWRlQ29udGVudFtdLCBvcHRpb25zPzogT3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmZpZz86IFJlbmRlcmVyQ29uZmlnLCBkZWZhdWx0cz86IE9wdGlvbnMgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBtZXJnZSggREVGQVVMVFMsIGRlZmF1bHRzIHx8IHt9ICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtZXJnZSggbWVyZ2UoIHRoaXMub3B0aW9ucywgREVGQVVMVFMgKSwgb3B0aW9ucyB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne30gKTtcXHJcXG5cXHJcXG4gICAgdGhpcy5jb250ZW50cyAgPSBjb250ZW50cztcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHRoaXMuY29uZmlnICAgID0gYXNzaWduKCB7fSwgUkVOREVSRVJfREVGQVVMVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09ORklHLCBjb25maWcgfHwge30gKTtcXHJcXG4gICAgdGhpcy5pZCAgICAgICAgPScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdGhpcy5jb25maWcuaWQgfHwgdW5pcXVlSWQoICdzcGxpZGUnICk7XFxyXFxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLlN0eWxlICAgICA9IG5ldyBTdHlsZSggdGhpcy5pZCwgdGhpcy5vcHRpb25zICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLkRpcmVjdGlvbiA9IERpcmVjdGlvbiggbnVsbCwgbnVsbCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMub3B0aW9ucyApO1xcclxcblxcclxcbiAgICBhc3NlcnQoIHRoaXMuY29udGVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLmxlbmd0aCwgJ1Byb3ZpZGUgYXQgbGVhc3QgMSBjb250ZW50LicgKTtcXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIHRoaXMuaW5pdCgpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogSW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlLlxcclxcbiAgICovXFxyXFxuICBwcml2YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbml0KCk6IHZvaWQge1xcclxcbiAgICB0aGlzLnBhcnNlQnJlYWtwb2ludHMoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHRoaXMuaW5pdFNsaWRlcygpO1xcclxcbiAgICB0aGlzLnJlZ2lzdGVyUicKICAgICAgICAgICAgICAgICAgICAgICAgYidvb3RTdHlsZXMoKTtcXHJcXG4gICAgdGhpcy5yZWdpc3RlclRyYWNrU3R5bGVzKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB0aGlzLnJlZ2lzdGVyU2xpZGVTdHlsZXMoKTtcXHJcXG4gICAgdGhpcy5yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VnaXN0ZXJMaXN0U3R5bGVzKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBJbml0aWFsaXplcyBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduaXRTbGlkZXMoKTogdm9pZCB7XFxyXFxuICAgIHB1c2goIHRoaXMuc2xpZGVzLCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5jb250ZW50cy5tYXAoICggY29udGVudCwgaW5kZXggKSA9PiB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbnRlbnQgPSBpc1N0cmluZyggY29udGVudCApID8geyBodG1sOiBjb250ZW50IH0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogY29udGVudDtcXHJcXG4gICAgICBjb250ZW50LnN0eWxlcyA9IGNvbnRlbnQuc3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlcyB8fCB7fTtcXHJcXG4gICAgICBjb250ZW50LmF0dHJzICA9IGNvbnRlbnQuYXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzIHx8IHt9O1xcclxcblxcclxcbiAgICAgIHRoaXMuY292ZXIoIGNvbnRlbnQgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAgICAgY29uc3QgY2xhc3NlcyA9IGAkeyB0aGlzLm9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiImNsYXNzZXMuc2xpZGUgfSAkeyBpbmRleCA9PT0gMCA/IENMQVNTX0FDVElWRSA6ICcnIH0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInYDtcXHJcXG5cXHJcXG4gICAgICBhc3NpZ24oIGNvbnRlbnQuYXR0cnMsIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBjbGFzczogYCR7IGNsYXNzZXMgfSAkeyBjb250ZW50LmF0dHJzLmNsYXNzICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ8fCAnJyB9YC50cmltKCksXFxyXFxuICAgICAgICBzdHlsZTogdGhpcy5idWlsZFN0eSIKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXMoIGNvbnRlbnQuc3R5bGVzICksXFxyXFxuICAgICAgfSApO1xcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZXR1cm4gY29udGVudDtcXHJcXG4gICAgfSApICk7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoIHRoaXMuaXNMb29wKCkgKSB7XFxyXFxuICAgICAgdGhpcy5nZW5lcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDbG9uZXMoIHRoaXMuc2xpZGVzICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBzdHlsZXMgZm9yIHRoZSByb290IGVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlZ2lzdGVyUm9vdFN0eWxlcygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaCggKCBbIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCwgb3B0aW9ucyBdICkgPT4ge1xcclxcbiAgICAgIHRoaXMuU3R5bGUucnVsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcgJywgJ21heC13aWR0aCcsIHVuaXQoIG9wdGlvbnMud2lkdGggKSwgd2lkdGggKTtcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVnaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVycyBzdHlsZXMgZm9yIHRoZSB0cmFjayBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJpdmF0ZSByZWdpc3RlclRyYWNrU3R5bGVzKCk6IHZvaWQge1xcclxcbiAgICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgeyBTdHlsZSB9ID0gdGhpcztcXHJcXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgLicKICAgICAgICAgICAgICAgICAgICAgICAgYickeyBDTEFTU19UUkFDSyB9YDtcXHJcXG5cXHJcXG4gICAgdGhpcy5icmVha3BvaW50cy5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaCggKCBbIHdpZHRoLCBvcHRpb25zIF0gKSA9PiB7XFxyXFxuICAgICAgU3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiImxlLnJ1bGUoIHNlbGVjdG9yLCB0aGlzLnJlc29sdmUoICdwYWRkaW5nTGVmdCcgKSwgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuY3NzUGFkZGluZyggb3B0aW9ucywgZmFsc2UgKSwgd2lkdGggKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgU3R5bGUucnVsZSggc2VsZWN0b3IsIHRoaXMucmVzb2x2ZSggJ3BhZGRpbmdSaWdodCIKICAgICAgICAgICAgICAgICAgICAgICAgYiInICksIHRoaXMuY3NzUGFkZGluZyggb3B0aW9ucywgdHJ1ZSApLCB3aWR0aCApO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgICBTdHlsZS5ydWxlKCBzZWxlY3RvciwgJ2hlaWdodCcsIHRoaXMuY3NzVHJhIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2NrSGVpZ2h0KCBvcHRpb25zICksIHdpZHRoICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBzdHlsZXMgZm9yIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgbGlzdCBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlZ2lzdGVyTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3RTdHlsZXMoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgU3R5bGUgfSA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xcclxcbiAgICBjb25zdCBzZWxlY3RvciA9IGAuJHsgQ0xBU1NfTElTVCB9YDtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaCggKCBbIHdpZHRoLCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiInB0aW9ucyBdICkgPT4ge1xcclxcbiAgICAgIFN0eWxlLnJ1bGUoIHNlbGVjdG9yLCAnIgogICAgICAgICAgICAgICAgICAgICAgICBiInRyYW5zZm9ybScsIHRoaXMuYnVpbGRUcmFuc2xhdGUoIG9wdGlvbnMgKSwgd2lkdGggKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCAhIHRoaXMuY3NzU2xpZGVIZWlnaHQoIG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYiJzICkgKSB7XFxyXFxuICAgICAgICBTdHlsZS5ydWxlKCBzZWxlY3RvciwgJ2FzcGVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgYiItcmF0aW8nLCB0aGlzLmNzc0FzcGVjdFJhdGlvKCBvcHRpb25zICksIHdpZHRoICkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogUmVnaXN0ZXJzIHN0eWxlcyBmb3Igc2xpZGVzIGFuZCBjbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlZ2lzdGVyU2xpZGVTdHlsZXMoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IFN0eWxlIH0gPSB0aGlzO1xcclxcbiAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3Qgc2VsZWN0b3IgPSBgLiR7IENMQVNTX1NMSURFIH1gO1xcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5icmVha3BvaW50cy5mb3JFYWNoKCAoIFsgd2lkdGgsIG9wdGlvbnMgXSApID0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7XFxyXFxuICAgICAgU3R5bGUucnVsZSggc2VsZWN0b3IsICd3aWR0aCcsIHRoaXMuYyIKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1NsaWRlV2lkdGgoIG9wdGlvbnMgKSwgd2lkdGggKTtcXHJcXG4gICAgICBTdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIucnVsZSggc2VsZWN0b3IsICdoZWlnaHQnLCB0aGlzLmNzc1NsaWRlSGVpZ2h0KCBvcHRpIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9ucyApIHx8ICcxMDAlJywgd2lkdGggKTtcXHJcXG4gICAgICBTdHlsZS5ydWxlKCBzIgogICAgICAgICAgICAgICAgICAgICAgICBiImVsZWN0b3IsIHRoaXMucmVzb2x2ZSggJ21hcmdpblJpZ2h0JyApLCB1bml0KCBvcHRpb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIicy5nYXAgKSB8fCAnMHB4Jywgd2lkdGggKTtcXHJcXG4gICAgICBTdHlsZS5ydWxlKCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYCR7IHNlbGVjdG9yIH0gPiBpbWdgLCAnZGlzcGxheScsIG9wdGlvbnMuY292ZXIgPyAnbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbmUnIDogJ2lubGluZScsIHdpZHRoICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEJ1aWxkcyBtdWx0aXBsZSBgdHJhbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF0ZVhgIGZvciB0aGUgbGlzdCBlbGVtZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBBIHN0cmluZyB3aXRoIG11bHRpcGxlIHRyYW5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUgZnVuY3Rpb25zLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGJ1aWxkVHJhbnNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXNvbHZlLCBvcmllbnQgfSA9IHRoaXMuRGlyZWN0aW9uO1xcclxcbiAgICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdmFsdWVzID0gW107XFxyXFxuXFxyXFxuICAgIHZhbHVlcy5wdXNoKCB0aGlzLmNzc08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZzZXRDbG9uZXMoIG9wdGlvbnMgKSApO1xcclxcbiAgICB2YWx1ZXMucHVzaCggdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuY3NzT2Zmc2V0R2Fwcyggb3B0aW9ucyApICk7XFxyXFxuXFxyXFxuICAgIGlmICggdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuaXNDZW50ZXIoIG9wdGlvbnMgKSApIHtcXHJcXG4gICAgICB2YWx1ZXMucHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIoIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50KCAtNTAgKSwgJyUnICkgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgdmFsdWVzLnB1c2goIC4uLnRoaXMuY3NzT2Zmc2V0Q2VudGVyKCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHZhbHVlc1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAuZmlsdGVyKCBCb29sZWFuIClcXHJcXG4gICAgICAubWFwKCB2YWx1ZSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYHRyYW5zbGF0ZSR7IHJlc29sdmUoICdYJyApIH0oJHsgdmFsdWUgfSlgIClcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgLmpvaW4oICcgJyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogUmV0dXJucyBvZmZzZXQgZm9yIHRoZSBsaXN0IGVsZW1lbnQuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGdhcHMgYmVjYXVzZSBpdCBjYW4gbm90IGJlIGNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ252ZXJ0ZWQgaW50byBwZXJjZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBUaGUgb2Zmc2V0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NPZmZzZXRDbG9uZXMoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3RyaW5nIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGNvbnN0IHsgcmVzb2x2ZSwgb3JpZW50IH0gPSB0aGlzLkRpcmVjdGlvbjtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGNvbnN0IGNsb25lQ291bnQgPSB0aGlzLmdldENsb25lQ291bnQoKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIGlmICggdGhpcy5pc0ZpeGVkV2lkdGgoIG9wdGlvbnMgKSApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgY29uc3QgeyB2YWx1ZSwgdW5pdCB9ID0gdGhpcy5wYXJzZUNzc1ZhbHVlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgb3B0aW9uc1sgcmVzb2x2ZSggJ2ZpeGVkV2lkdGgnICkgXSApO1xcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKCBvcmllbnQoIHZhbHVlICkgKiBjbG9uZUNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCwgdW5pdCApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGNvbnN0IHBlcmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ID0gMTAwICogY2xvbmVDb3VudCAvIG9wdGlvbnMucGVyUGFnZTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBgJHsgb3JpZW50KCBwZXJjZW50ICkgfSVgO1xcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBvZmZzZXQgZm9yIGNlbnRlcmluZyB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGFjdGl2ZSBzbGlkZS5cXHJcXG4gICAqXFxyXFxuICAgKiBOb3RlOlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqICggMTAwJSArIGdhcCApIC8gcGVyUGFnZSAtIGdhcFxcclxcbiAgICogMTAwJSAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwZXJQYWdlICsgZ2FwIC8gcGVyUGFnZSAtIGdhcDtcXHJcXG4gICAqIDUwJSAvIHBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JQYWdlICsgKCBnYXAgLyBwZXJQYWdlIC0gZ2FwICkgLyAyO1xcclxcbiAgICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgb2Zmc2V0LlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcHJpdmF0ZSBjc3NPZmZzZXRDZW50ZXIoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZ1tdIHtcXHJcXG4gICAgY29uc3QgeyByZXNvbHZlLCBvcmllbnQgfSA9IHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLkRpcmVjdGlvbjtcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGlzLmlzRml4ZWRXaWR0aCggbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMgKSApIHtcXHJcXG4gICAgICBjb25zdCB7IHZhbHVlLCB1bml0IH0gPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpcy5wYXJzZUNzc1ZhbHVlKCBvcHRpb25zWyByZXNvbHZlKCAnZml4ZWRXaWR0aCcgKSBdIgogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICAgIHJldHVybiBbIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJyggdmFsdWUgLyAyICksIHVuaXQgKSBdO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCB2YWx1ZXMgPSBbXTtcXHJcXG4gICAgY29uc3QgeyBwZXJQYWdlLCBnYXAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30gPSBvcHRpb25zO1xcclxcblxcclxcbiAgICB2YWx1ZXMucHVzaCggYCR7IG9yaWVudCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDUwIC8gcGVyUGFnZSApIH0lYCApO1xcclxcblxcclxcbiAgICBpZiAoIGdhcCApIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgY29uc3QgeyB2YWx1ZSwgdW5pdCB9ID0gdGhpcy5wYXJzZUNzc1ZhbHVlKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwICk7XFxyXFxuICAgICAgY29uc3QgZ2FwT2Zmc2V0ID0gKCB2YWx1ZSAvIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlIC0gdmFsdWUgKSAvIDI7XFxyXFxuICAgICAgdmFsdWVzLnB1c2goIHRoaXMuYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkQ3NzVmFsdWUoIG9yaWVudCggZ2FwT2Zmc2V0ICksIHVuaXQgKSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gdmFsdWVzO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBvZmZzZXQgZm9yIGdhcHMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZWFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggYnJlYWtwb2ludC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzIGBjYWxjKClgLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNzc09mZnNldEdhcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBvcHRpb25zOiBPcHRpb25zICk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IGNsbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZUNvdW50ID0gdGhpcy5nZXRDbG9uZUNvdW50KCk7XFxyXFxuXFxyXFxuICAgIGlmICggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lQ291bnQgJiYgb3B0aW9ucy5nYXAgKSB7XFxyXFxuICAgICAgY29uc3QgeyBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpZW50IH0gPSB0aGlzLkRpcmVjdGlvbjtcXHJcXG4gICAgICBjb25zdCB7IHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdW5pdCB9ID0gdGhpcy5wYXJzZUNzc1ZhbHVlKCBvcHRpb25zLmdhcCApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgICBpZiAoIHRoaXMuaXNGaXhlZFdpZHRoKCBvcHRpb25zICkgKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50KCB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUgKiBjbG9uZUNvdW50ICksIHVuaXQgKTtcXHJcXG4gICAgICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHsgcGVyUGFnZSB9ID0gb3B0aW9ucztcXHJcXG4gICAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgZ2FwcyA9IGNsb25lQ291bnQgLyBwZXJQYWdlO1xcclxcbiAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdGhpcy5idWlsZENzc1ZhbHVlKCBvcmllbnQoIGdhcHMgKiB2YWx1ZSApLCB1bml0ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiAnJztcXHJcXG4gIH1cXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlc29sdmVzIHRoZSBwcm9wIGZvciB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1cnJlbnQgZGlyZWN0aW9uIGFuZCBjb252ZXJ0cyBpdCBpbnRvIHRoZSBLZWJhYiBjYXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJvcCAtIEEgcHJvcGVydHkgbmFtZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gcmVzb2x2ZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3BlcnR5IG5hbWUgaW4gdGhlIEtlYmFiIGNhc2UuXFxyXFxuICAgKi9cXHJcXG4gIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2YXRlIHJlc29sdmUoIHByb3A6IHN0cmluZyApOiBzdHJpbmcge1xcclxcbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGNhbWVsVG9LZWJhYiggdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSggcHJvcCApICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHBhZGRpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucyAtIE9wdGlvbnMuXFxyXFxuICAgKiBAcGFyYW0gcmlnaHQgICAtIERldGVybWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHdoZXRoZXIgdG8gZ2V0IHBhZGRpbmcgcmlnaHQgb3IgbGVmdC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHJldHVybiBQYWRkaW5nIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NQYWRkaW5nKCBvcHRpb25zOiBPcHRpb25zLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmlnaHQ6IGJvb2xlYW4gKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyBwYWRkaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyB9ID0gb3B0aW9ucztcXHJcXG4gICAgY29uc3QgcHJvcCA9IHRoaXMuRGlyZWN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIibi5yZXNvbHZlKCByaWdodCA/ICdyaWdodCcgOiAnbGVmdCcsIHRydWUgKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQoIHBhZGRpbmdbIHByb3AgXSB8fCAoIGlzTycKICAgICAgICAgICAgICAgICAgICAgICAgYiJiamVjdCggcGFkZGluZyApID8gMCA6IHBhZGRpbmcgKSApIHx8ICcwcHgnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBoZWlnaHQgb2YgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB0cmFjayBlbGVtZW50IGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcclxcbiAgICogQHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gSGVpZ2h0IGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICovXFxyXFxuICBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmF0ZSBjc3NUcmFja0hlaWdodCggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmcge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gICAgbGV0IGhlaWdodCA9ICcnO1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMuaXNWZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidydGljYWwoKSApIHtcXHJcXG4gICAgICBoZWlnaHQgPSB0aGlzLmNzc0hlaWdodCggbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMgKTtcXHJcXG4gICAgICBhc3NlcnQoIGhlaWdodCwgXCdcXCJoZWlnaHRcXCIgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJzIG1pc3NpbmcuJyApO1xcclxcbiAgICAgIGhlaWdodCA9IGBjYWxjKCR7IGhlaWdodCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgfSAtICR7IHRoaXMuY3NzUGFkZGluZyggb3B0aW9ucywgZmFsc2UgKSB9IC0gJHsgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuY3NzUGFkZGluZyggb3B0aW9ucywgdHJ1ZSApIH0pYDtcXHJcXG4gICAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgcmV0dXJuIGhlaWdodDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIFJldHVybnMgaGVpZ2h0IHByb3ZpZGVkIHRob3VnaCBvcHRpb25zIGluIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1NTIGZvcm1hdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gSGVpZ2h0IGluIHRoZSBDU1MgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zvcm1hdC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NIZWlnaHQoIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBPcHRpb25zICk6IHN0cmluZyB7XFxyXFxuICAgIHJldHVybiB1bml0KCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5oZWlnaHQgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgd2lkdGggb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcmV0dXJuIFdpZHRoIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgcHJpdmF0ZSBjc3NTbGlkZVdpZHRoKCBvcHRpb25zOiBPcHRpb25zICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBzdHJpbmcge1xcclxcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGhcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgPyAnJ1xcclxcbiAgICAgIDogdW5pdCggb3B0aW9ucy5maXhlZFdpZHRoICkgIgogICAgICAgICAgICAgICAgICAgICAgICBiInx8ICggdGhpcy5pc1ZlcnRpY2FsKCkgPyAnJyA6IHRoaXMuY3NzU2xpZGVTaXplKCBvcHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGhlaWdodCBvZiBlYWNoIHNsaWRlIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEByZXR1cm4gSGVpZ2h0IGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgcHJpdmF0ZSBjc3NTbGlkZUhlaWdodCggb3B0aW9uczogT3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogc3RyaW5nIHtcXHJcXG4gICAgcmV0dXJuIHVuaXQoIG9wdGlvbnMuZml4ZWRIZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0IClcXHJcXG4gICAgICB8fCAoIHRoaXMuaXNWZXJ0aWNhbCgpXFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgPyAoIG9wdGlvbnMuYXV0b0hlaWdodCA/ICcnIDogdGhpcy5jc3NTbGlkZVNpemUoIG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zICkgKVxcclxcbiAgICAgICAgOiB0aGlzLmNzc0hlaWdodCggb3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKVxcclxcbiAgICAgICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBSZXR1cm5zIHdpZHRoIG9yIGhlaWdodCBvZiBlYWNoIHNsaWRlIGluIHRoZSBDU1MgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcm1hdCwgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgZGlyZWN0aW9uLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEByZXR1cm4gV2lkdGggb3IgaGVpZ2h0IGluIHRoZSBDU1MgZm9ybWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NTbGlkZVNpemUoIG9wdGlvbnM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25zICk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IGdhcCA9IHVuaXQoIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmdhcCApO1xcclxcbiAgICByZXR1cm4gYGNhbGMoKDEwMCUkeyBnYXAgJiYgYCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAkeyBnYXAgfWAgfSkvJHsgb3B0aW9ucy5wZXJQYWdlIHx8IDEgfSR7IGdhcCAmJiBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAtICR7IGdhcCB9YCB9KWA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBSZXR1cm5zIHRoZSBhc3BlY3RSYXRpbyB2YWx1ZSB0byBzaW11bGF0ZSB0aGUgYGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHRSYXRpb2Agb3B0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBhc3BlY3RSYXRpbyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gdGhlIENTUyBmb3JtYXQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgY3NzQXNwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdFJhdGlvKCBvcHRpb25zOiBPcHRpb25zICk6IHN0cmluZyB7XFxyXFxuICAgIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB7IGhlaWdodFJhdGlvIH0gPSBvcHRpb25zO1xcclxcbiAgICByZXR1cm4gaGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYiJodFJhdGlvID8gYCR7IDEgLyBoZWlnaHRSYXRpbyB9YCA6ICcnO1xcclxcbiAgfVxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogQnVpbGRzIHRoZSBjc3MgdmFsdWUgYnkgdGhlIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm92aWRlZCB2YWx1ZSBhbmQgdW5pdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIC0gQSB2YWx1ZS5cXHJcXG4gICAqIEBwYXJhbSB1bml0ICAtIEEgQ1NTIHVuaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBidWlsdCB2YWx1ZSBmb3IgYSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTIHZhbHVlLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGJ1aWxkQ3NzVmFsdWUoIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBgJHsgdmFsdWUgfSR7IHVuaXQgfWA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICAgKiBQYXJzZXMgdGhlIENTUyB2YWx1ZSBpbnRvIG51bWJlciBhbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHVuaXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyc2UuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBbiBvYmplY3Qgd2l0aCB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUgYW5kIHVuaXQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcGFyc2VDc3NWYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUoIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgKTogeyB2YWx1ZTogbnVtYmVyLCB1bml0OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nIH0ge1xcclxcbiAgICBpZiAoIGlzU3RyaW5nKCB2YWx1ZSApICkge1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICBjb25zdCBudW1iZXIgPSBwYXJzZUZsb2F0KCB2YWx1ZSApIHx8IDA7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHVuaXQgICA9IHZhbHVlLnJlcGxhY2UoIC9cXFxcZCooXFxcXC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxcXGQqKT8vLCAnJyApIHx8ICdweCc7XFxyXFxuICAgICAgcmV0dXJuIHsgdmFsdWU6ICIKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIsIHVuaXQgfTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4geycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdmFsdWUsIHVuaXQ6ICdweCcgfTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIFBhcnNlcyBicmVha3BvaW50cyBhbmQgZ2VuZXJhdGUgb3B0aW9ucyBmb3IgZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggYnJlYWtwb2ludC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBwYXJzZUJyZWFrcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvaW50cygpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBicmVha3BvaW50cyB9ID0gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMub3B0aW9ucztcXHJcXG5cXHJcXG4gICAgdGhpcy5icmVha3BvaW50cy5wdXNoKCBbJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAnZGVmYXVsdCcsIHRoaXMub3B0aW9ucyBdICk7XFxyXFxuXFxyXFxuICAgIGlmICggYnIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzICkge1xcclxcbiAgICAgIGZvck93biggYnJlYWtwb2ludHMsICggb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsIHdpZHRoICkgPT4ge1xcclxcbiAgICAgICAgdGhpcy5icmVha3BvaW50cy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHVzaCggWyB3aWR0aCwgbWVyZ2UoIG1lcmdlKCB7fSwgdGhpcy5vcHRpb25zICksIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zICkgXSApO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZSB3aWR0aCBpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZml4ZWQgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgc2xpZGUgd2lkdGggaXMgZml4ZWQsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBpc0ZpeGVkV2lkdGgoIG9wdGlvbnM6IE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zICk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gISEgb3B0aW9uc1sgdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYiIuRGlyZWN0aW9uLnJlc29sdmUoICdmaXhlZFdpZHRoJyApIF07XFxyXFxuICB9XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIHNsaWRlciB0eXBlIGlzIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb29wIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHNsaWRlciB0eXBlIGlzIGxvb3AsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xcclxcbiAgcHJpdmF0ZSBpc0xvb3AoKTogYm9vbGVhbiB7XFxyXFxuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IExPT1A7XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIGFjdGl2ZSBzbGlkZSBzaG91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkIGJlIGNlbnRlcmVkIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZWAgaWYgdGhlIHNsaWRlIHNob3VsZCBiZSBjZW50ZXJlZCwgb3Igb3RoZXJ3aXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGlzQ2VudGVyKCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogT3B0aW9ucyApOiBib29sZWFuIHtcXHJcXG4gICAgaWYoIG9wdGlvbnMuZm9jdXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiIj09PSAnY2VudGVyJyApIHtcXHJcXG4gICAgICBpZiAoIHRoaXMuaXNMb29wKCkgKSB7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoIHRoaXMub3B0aW9ucy50eXBlID09PSBTTElERSApIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZXR1cm4gISB0aGlzLm9wdGlvbnMudHJpbVNwYWNlO1xcclxcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIGZhbHNlO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBkaXJlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGlzIFRUQiBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIHRoZSBkaXJlY3Rpb24gaXMgVFRCLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgaXNWZXJ0aWNhbCgpOiBib29sZWFuIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBCdWlsZHMgY2xhc3NlcyBvZiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHJvb3QgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIENsYXNzZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciB0aGUgcm9vdCBlbGVtZW50IGFzIGEgc2luZ2xlIHN0cmluZy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIHByaXZhdGUgYnVpbGRDbGFzc2VzKCk6IHN0cmluZyB7XFxyXFxuICAgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCB7IG9wdGlvbnMgfSA9IHRoaXM7XFxyXFxuXFxyXFxuICAgIHJldHVybiBbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIENMQVNTX1JPT1QsXFxyXFxuICAgICAgYCR7IENMQVNTX1JPT1QgfS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSR7IG9wdGlvbnMudHlwZSB9YCxcXHJcXG4gICAgICBgJHsgQ0xBU1NfUk9PVCB9LS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgb3B0aW9ucy5kaXJlY3Rpb24gfWAsXFxyXFxuICAgICAgb3B0aW9ucy5kcmFnICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBgJHsgQ0xBU1NfUk9PVCB9LS1kcmFnZ2FibGVgLFxcclxcbiAgICAgIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzTmF2aWdhdGlvbiAmJiBgJHsgQ0xBU1NfUk9PVCB9LS1uYXZgLFxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBDTEFTU19BQ1RJVkUsXFxyXFxuICAgICAgISB0aGlzLmNvbmZpZy5oaWRkZW4gJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1JFTkRFUkVELFxcclxcbiAgICBdLmZpbHRlciggQm9vbGVhbiApLmpvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCAnICcgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ29udmVydCIKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHByb3ZpZGVkIGF0dHJpYnV0ZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBhdHRycyAtIEFuIG9iamVjdCB3aXRoIGF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGJ1aWxkQXR0cnMoIGF0dHJzOiBSZWNvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gKTogc3RyaW5nIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgIGxldCBhdHRyID0gJyc7XFxyXFxuXFxyXFxuICAgIGZvck93biggYXQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJzLCAoIHZhbHVlLCBrZXkgKSA9PiB7XFxyXFxuICAgICAgYXR0ciArPSB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyBgICR7IGNhbWVsVG9LZWJhYigga2V5ICkgfT1cXCIkeyB2YWx1ZSB9XFwiYCA6IFwnJwogICAgICAgICAgICAgICAgICAgICAgICBiIic7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGF0dHIudHJpbSgpIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ29udmVydHMgcHJvdmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVkIHN0eWxlcyBpbnRvIGEgc2luZ2xlIHN0cmluZy5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIHN0eWxlcyAtIEFuIG9iamVjdCB3aXRoIHN0eWxlcy5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHJldHVybiBBIGJ1aWx0IHN0cmluZy5cXHJcXG4gICAqL1xcclxcbiAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZhdGUgYnVpbGRTdHlsZXMoIHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ1bWJlcj4gKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0IHN0eWxlID0gJyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICBmb3JPd24oIHN0eWxlcywgKCB2YWx1ZSwga2V5ICkgPT4ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBzdHlsZSArPSBgICR7IGNhbWVsVG9LZWJhYigga2V5ICkgfTokeyB2YWx1ZSB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztgO1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJldHVybiBzdHlsZS50cmltJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBHZW5lcmF0ZXMgSFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTUwgb2Ygc2xpZGVzIHdpdGggaW5zZXJ0aW5nIHByb3ZpZGVkIGNvbnRlbnRzLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBIVE1MIGZvciBhbGwgc2xpZGVzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgY2xvbmVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlbmRlclNsaWRlcygpOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyBzbGlkZVRhZzogdGFnIH0gPSB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25maWc7XFxyXFxuXFxyXFxuICAgIHJldHVybiB0aGlzLnNsaWRlcy5tYXAoIGNvbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ID0+IHtcXHJcXG4gICAgICByZXR1cm4gYDwkeyB0YWcgfSAkeyB0aGlzLmJ1aWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiIkF0dHJzKCBjb250ZW50LmF0dHJzICkgfT4keyBjb250ZW50Lmh0bWwgfHwgJycgfTwvJHsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRhZyB9PmA7XFxyXFxuICAgIH0gKS5qb2luKCAnJyApO1xcclxcbiAgfVxcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogQWRkIHRoZSBgYmFja2dyb3VuZGAgc3R5bGUgZm9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgY292ZXIgbW9kZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29udGVudCAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIHNsaWRlIGNvbnRlbnQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgY292ZXIoIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb250ZW50OiBTbGlkZUNvbnRlbnQgKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIieWxlcywgaHRtbCA9ICcnIH0gPSBjb250ZW50O1xcclxcblxcclxcbiAgICBpZiAoIHRoaSIKICAgICAgICAgICAgICAgICAgICAgICAgYidzLm9wdGlvbnMuY292ZXIgJiYgISB0aGlzLm9wdGlvbnMubGF6eUxvYWQgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNvbnN0IHNyYyA9IGh0bWwubWF0Y2goIC88aW1nLio/c3JjXFxcXHMqPScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXFxccyooW1wnXFwiXSkoLis/KVxcXFwxLio/Pi8gKTtcXHJcXG5cXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCBzcmMgJiYgc3JjWyAyIF0gKSB7XFxyXFxuICAgICAgICBzdHlsZXMuYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYiJncm91bmQgPSBgY2VudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoJyR7IHNyY1sgMiBdIH0nIgogICAgICAgICAgICAgICAgICAgICAgICBiJylgO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogR2VuZXJhdGVzIGNsb25lcy5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGNvbnRlbnRzIC0gQW4gYXJyYXkgd2l0aCBTbGlkZUNvbnRlbnQgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgZ2VuZXJhdGVDbG9uZXMoIGNvbnRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czogU2xpZGVDb250ZW50W10gKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMgfSA9IHRoaXMub3B0aW9ucztcXHJcXG4gICAgY29uc3QgY291bnQgID0gdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuZ2V0Q2xvbmVDb3VudCgpO1xcclxcbiAgICBjb25zdCBzbGlkZXMgPSBjb250ZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xpY2UoKTtcXHJcXG5cXHJcXG4gICAgd2hpbGUgKCBzbGlkZXMubGVuZ3RoIDwgY291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ICkge1xcclxcbiAgICAgIHB1c2goIHNsaWRlcywgc2xpZGVzICk7XFxyXFxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIHB1c2goIHNsaWRlcy5zbGljZSggLWNvdW50ICkucmV2ZXJzZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSwgc2xpZGVzLnNsaWNlKCAwLCBjb3VudCApICkuZm9yRWFjaCggKCBjb250ZW50LCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggKSA9PiB7XFxyXFxuICAgICAgY29uc3QgYXR0cnMgPSBhc3NpZ24oIHt9LCBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udGVudC5hdHRycywgeyBjbGFzczogYCR7IGNvbnRlbnQuYXR0cnMuY2xhc3MgfSAkeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhc3Nlcy5jbG9uZSB9YCB9ICk7XFxyXFxuICAgICAgY29uc3QgY2xvbmUgPSBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWduKCB7fSwgY29udGVudCwgeyBhdHRycyB9ICk7XFxyXFxuICAgICAgaW5kZXggPCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY291bnQgPyBjb250ZW50cy51bnNoaWZ0KCBjbG9uZSApIDogY29udGVudHMucHVzaCggYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjbG9uZXMgdG8gZ2VuZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBudW1iZXIgb2YgY2xvbmVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBnZXRDbG9uZUNvdW50KCk6IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBpZiAoIHRoaXMuaXNMb29wKCkgKSB7XFxyXFxuICAgICAgY29uc3QgeycKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyB9ID0gdGhpcztcXHJcXG5cXHJcXG4gICAgICBpZiAoIG9wdGlvbnMuY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lcyApIHtcXHJcXG4gICAgICAgIHJldHVybiBvcHRpb25zLmNsb25lcztcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxcclxcblxcclxcbiAgICAgIGNvbnN0IHBlclBhZ2UgPSBtYXgoIC4uLnRoaXMuYicKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFrcG9pbnRzLm1hcCggKCBbICwgb3B0aW9ucyBdICkgPT4gb3B0aW9ucy5wZXJQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApICk7XFxyXFxuICAgICAgcmV0dXJuIHBlclBhZ2UgKiAoICggb3B0aW9ucy5mbGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tNYXhQYWdlcyB8fCAxICkgKyAxICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiAwO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBHZW5lcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzIGFycm93cyBhbmQgdGhlIHdyYXBwZXIgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBUaGUgSFRNTCBmb3IgYXJyb3dzLlxcclxcbiAgICovXFxyXFxuICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpdmF0ZSByZW5kZXJBcnJvd3MoKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0IGh0bWwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gXCdcJztcXHJcXG5cXHJcXG4gICAgaHRtbCArPSBgPGRpdiBjbGFzcz1cXCIkeyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmNsYXNzZXMuYXJyb3dzIH1cXCI+YDtcXHJcXG4gICAgaHRtbCArPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5yZW5kZXJBcnJvdyggdHJ1ZSApO1xcclxcbiAgICBodG1sICs9IHRoaXMucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlckFycm93KCBmYWxzZSApO1xcclxcbiAgICBodG1sICs9IGA8L2Rpdj5gO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuIGh0bWw7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBHZW5lcmF0ZXMgYW4gYXJyb3cgSFRNTC5cXHJcXG4gICAqIFNvbWUgYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZXMgYXJlIHRlbXBvcmFyeSwgYW5kIFNwbGlkZSBjaGFuZ2VzIHRoZW0gYWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIG1vdW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwcmV2IC0gT3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIGVhY2ggYnJlYWtwb2ludC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgSFRNTCBmb3IgdGhlIHByZXYgb3IgbmV4dCBhcnJvdy5cXHJcXG4gICAqL1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ByaXZhdGUgcmVuZGVyQXJyb3coIHByZXY6IGJvb2xlYW4gKTogc3RyaW5nIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGNvbnN0IHsgY2xhc3NlcywgaTE4biB9ID0gdGhpcy5vcHRpb25zO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgY29uc3QgYXR0cnMgPSB7XFxyXFxuICAgICAgY2xhc3MgICAgOiBgJHsgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMuYXJyb3cgfSAkeyBwcmV2ID8gY2xhc3Nlcy5wcmV2IDogY2xhc3Nlcy5uZXh0IH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYCxcXHJcXG4gICAgICB0eXBlICAgICA6ICdidXR0b24nLFxcclxcbiAgICAgIGFyaWFMYSIKICAgICAgICAgICAgICAgICAgICAgICAgYidiZWw6IHByZXYgPyBpMThuLnByZXYgOiBpMThuLm5leHQsXFxyXFxuICAgIH07XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gYDxidXR0b24gJHsgdGhpcy5idWlsZEF0dHJzKCBhdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKSB9PmBcXHJcXG4gICAgICArXFx0YDxzdmcgeG1sbnM9XFwiJHsgWE1MX05BTUVfU1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNFIH1cXCIgdmlld0JveD1cXCIwIDAgJHsgU0laRSB9ICR7IFNJWkUgfVxcIiB3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g9XFwiJHsgU0laRSB9XFwiIGhlaWdodD1cXCIkeyBTSVpFIH1cXCI+YFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICArIGA8cGF0aCBkPVxcIiR7IHRoaXMub3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIiAvPmBcXHJcXG4gICAgICArIGA8L3N2Zz5gXFxyXFxuICAgICAgKyBgPC9idXR0b24+JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2A7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MIG9mIHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmVyYXRlZCBIVE1MLlxcclxcbiAgICovXFxyXFxuICBodG1sKCk6IHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBjb25zdCB7IHJvb3RDbGFzcywgbGlzdFRhZywgYXJyb3dzLCBiZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JlVHJhY2ssIGFmdGVyVHJhY2ssIHNsaWRlciwgYmVmb3JlU2xpZGVyLCBhZnRlclNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJkZXIgfSA9IHRoaXMuY29uZmlnO1xcclxcblxcclxcbiAgICBsZXQgaHRtbCA9ICcnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gICAgaHRtbCArPSBgPGRpdiBpZD1cXCIkeyB0aGlzLmlkIH1cXCIgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzPVxcIiR7IHRoaXMuYnVpbGRDbGFzc2VzKCkgfSAkeyByb290Q2xhc3MgfHwgXCdcJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcIj5gO1xcclxcbiAgICBodG1sICs9IGA8c3R5bGU+JHsgdGhpcy5TdHlsZS5idWlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QoKSB9PC9zdHlsZT5gO1xcclxcblxcclxcbiAgICBpZiAoIHNsaWRlciApIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgICAgaHRtbCArPSBiZWZvcmVTbGlkZXIgfHwgJyc7XFxyXFxuICAgICAgaHRtIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKz0gYDxkaXYgY2xhc3M9XFwic3BsaWRlX19zbGlkZXJcXCI+YDtcXHJcXG4gICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5cXHJcXG4gICAgaHRtbCArPSBiZWZvcmVUcmFjayB8fCAnJztcXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGlmICggYXJyb3dzICkge1xcclxcbiAgICAgIGh0bWwgKz0gdGhpcy5yZW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyQXJyb3dzKCk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaHRtbCArPSBgPGRpdicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xhc3M9XFwic3BsaWRlX190cmFja1xcIj5gO1xcclxcbiAgICBodG1sICs9IGA8JHsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3RUYWcgfSBjbGFzcz1cXCJzcGxpZGVfX2xpc3RcXCI+YDtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGh0bWwgKz0gdGhpcy5yZW5kZXJTbGlkZXMoKTtcXHJcXG5cXHJcXG4gICAgaHRtbCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKz0gYDwvJHsgbGlzdFRhZyB9PmA7XFxyXFxuICAgIGh0bWwgKz0gYDwvZGl2PmA7IC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLyAudHJhY2tcXHJcXG5cXHJcXG4gICAgaHRtbCArPSBhZnRlclRyYWNrIHx8ICcnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gICAgaWYgKCBzbGlkZXIgKSB7XFxyXFxuICAgICAgaHRtbCArJwogICAgICAgICAgICAgICAgICAgICAgICBiIj0gYDwvZGl2PmA7XFxyXFxuICAgICAgaHRtbCArPSBhZnRlclNsaWRlciB8fCAnJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaHRtbCArPSBgPC9kaXY+YDsgLy8gLnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGh0bWw7XFxyXFxuICB9XFxyXFxufVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCIvKipcXHJcXG4gKiBQYWRzIHRoZSBudW1iZXIgd2l0aCAwLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEBwYXJhbSBudW1iZXIgLSBBIG51bWJlciB0byBwYWQuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHJldHVybiBzdHJpbmcgLSBQYWRkZWQgbnVtYmVyLlxcclxcbiAqL1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnQgZnVuY3Rpb24gcGFkKCBudW1iZXI6IG51bWJlciApOiBzdHJpbmcge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBudW1iZXIgPCAxMCA/IGAwJHsgbnVtYmVyIH1gIDogYCR7IG51bWJlciB9YCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IHNsaWNlIH0gZnJvbSBcJy4uLy4uL2FycmF5TCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpa2UnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFJldHVybnMgZWxlbWVudHMgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHNlbGVjdG9yLlxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQgdG8gc3RhcnQgc2VhcmNoaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmcm9tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IgdG8gcXVlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid5LlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhcnJheSB3aXRoIG1hdGNoZWQgZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnRzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUFsbDxFIGV4dGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRzIEVsZW1lbnQgPSBFbGVtZW50PiggcGFyZW50OiBFbGVtZW50IHwgRG9jdW1lbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3Rvcj86IHN0cmluZyApOiBFW10ge1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IHNsaWNlPEU+KCBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKSApIDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tdO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgdGhlIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2d1bGFyIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiIi9cXHJcXG5leHBvcnQgY29uc3QgU0xJREUgPSAnc2xpZGUnO1xcclxcblxcclxcbi8qIgogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBUaGUgdHlwZSBmb3IgdGhlIGNhcm91c2VsIHNsaWRlci5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgTE9PUCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiIiAnbG9vcCc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIHRoZSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZSBzbGlkZXIgdGhhdCBjYW4gbm90IGhhdmUgbXVsdGlwbGUgc2xpZGVzIGluIGEgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGNvbnN0IEZBREUgPSBcJ2ZhZGVcJztcXHJcXG4iXSwibmFtZXMiOlsiUlRMIiwiVFRCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsIk9SSUVOVEFUSU9OX01BUCIsIndpZHRoIiwibGVmdCIsInJpZ2h0IiwieCIsIlgiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInWSIsIkFycm93TGVmdCIsIkFSUk9XIiwiQXJyb3dSaWdodCIsIkRpcmVjdGlvbiIsIlNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUiLCJDb21wb25lbnRzIiwib3B0aW9ucyIsInJlc29sdmUiLCJwcm9wIiwiYXhpc09uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x5IiwiZGlyZWN0aW9uIiwiaW5kZXgiLCJyZXBsYWNlIiwibWF0Y2giLCJvZmZzZXQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwicycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlIiwib3JpZW50IiwidmFsdWUiLCJQUk9KRUNUX0NPREUiLCJDTEFTU19QUkVGSVgiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiQ0xBU1NfUk9PVCIsIkNMQVNTX1RSQUNLIiwiQ0xBU1NfTElTVCIsIkNMQVNTX1NMSUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSIsIkNMQVNTX0NMT05FIiwiQ0xBU1NfQVJST1ciLCJDTEFTU19QQUdJTkFUSU9OIiwiQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FDVElWRSIsIlNUQVRVU19DTEFTU19QUkVGSVgiLCJERUZBVUxUUyIsInR5cGUiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywicm9sZSIsInNwZWVkIiwicGVyUGFnZSIsImNsb25lU3RhdHVzIiwiYXJyb3dzIiwicGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2luYXRpb24iLCJwYWdpbmF0aW9uS2V5Ym9hcmQiLCJpbnRlcnZhbCIsInBhdXNlT25IbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIiLCJwYXVzZU9uRm9jdXMiLCJyZXNldFByb2dyZXNzIiwiZWFzaW5nIiwiZHJhZyIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ0cmltU3BhY2UiLCJmb2N1c2FibGVOb2RlcyIsImxpdmUiLCJjbGFzc2VzIiwic2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiY2xvbmUiLCJhcnJvdyIsInByZXYiLCJuZXh0IiwicGFnZSIsInNwaW5uZXIiLCJpMScKICAgICAgICAgICAgICAgICAgICAgICAgYic4biIsImZpcnN0IiwibGFzdCIsInNsaWRlWCIsInBhZ2VYIiwicGxheSIsInBhdXNlIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nhcm91c2VsIiwic2VsZWN0Iiwic2xpZGVMYWJlbCIsInJlZHVjZWRNb3Rpb24iLCJyZXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kU3BlZWQiLCJhdXRvcGxheSIsImFycmF5TGlrZSIsInN0YXJ0IiwiZW5kIiwiQXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5IiwicHJvdG90eXBlIiwiY2FsbCIsImFwcGx5IiwiZnVuYyIsImJpbmQiLCJhcmd1bWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwidHlwZU9mIiwic3ViamVjdCIsImlzT2JqZWN0IiwiaXNBcnJheSIsImlzU3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyIsInRvQXJyYXkiLCJmb3JFYWNoIiwidmFsdWVzIiwiaXRlcmF0ZWUiLCJwdXNoIiwiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5IiwiaXRlbXMiLCJtYXRjaGVzIiwiZWxtIiwic2VsZWN0b3IiLCJvd25lckRvY3VtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCIsImRlZmF1bHRWaWV3Iiwid2luZG93IiwiSFRNTEVsZW1lbnQiLCJlIiwiY2hpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwicGFyZW50IiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImZvck93biIsIm9iamVjdCIsInJldmVyc2UiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywia2V5IiwiYXNzaWduIiwic291cmNlIiwibWVyZ2UiLCJyZW1vdmUiLCJub2RlcyIsIm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwidW5pdCIsImFzc2VydCIsImNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXRpb24iLCJtZXNzYWdlIiwiRXJyb3IiLCJNYXRoIiwibWluIiwibWF4IiwiZmxvb3IiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiY2VpbCIsImFicyIsImNhbWVsVG9LZWJhYiIsInN0cmluZyIsImlkcyIsIkV2ZW50QmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlciIsImxpc3RlbmVycyIsImZvckVhY2hFdmVudCIsInRhcmdldHMiLCJldmVudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicidGFyZ2V0Iiwic3BsaXQiLCJldmVudE5TIiwiZnJhZ21lbnQiLCJjYWxsYmFjayIsImV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCIsIm5hbWVzcGFjZSIsImlzRXZlbnRUYXJnZXQiLCJyZW1vdmVyIiwicmVtb3ZlRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwidW5iaW5kIiwibGlzdGVuZXIiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciZGlzcGF0Y2giLCJkZXRhaWwiLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkb2N1bWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSIsImRhdGEiLCJsZW5ndGgiLCJFdmVudEludGVyZmFjZSIsImJ1cyIsImNyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVEb2N1bWVudEZyYWdtZW50IiwiYmluZGVyIiwib24iLCJqb2luIiwib2ZmIiwiZW1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCJSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyIsImxpc3RUYWciLCJzbGlkZVRhZyIsIlMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSIsImlkIiwidGhpcyIsInN0eWxlcyIsInJ1bGUiLCJicmVha3BvaW50Iiwic2VsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdG9ycyIsImJ1aWxkIiwiX3RoaXMiLCJjc3MiLCJkZWZhdWx0IiwiYnVpbGRTZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzIiwic29ydCIsIm4iLCJtIiwibWVkaWFRdWVyeSIsIl90aGlzMiIsInRyaW0iLCJTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlUmVuZGVyZXIiLCJjb250ZW50cyIsImNvbmZpZyIsImRlZmF1bHRzIiwic2xpZGVzIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImJyZWFrcG9pbnRzIiwicHJlZml4IiwibnVtYmVyIiwiaW5pdCIsImNsZWFuIiwic3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSIsInJvb3QiLCJjbG9uZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwicGFyc2VCcmVha3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2ludHMiLCJpbml0U2xpZGVzIiwicmVnaXN0ZXJSb290U3R5bGVzIiwicmVnaXN0ZXJUcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2tTdHlsZXMiLCJyZWdpc3RlclNsaWRlU3R5bGVzIiwicmVnaXN0ZXJMaXN0U3R5bGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsIl90aGlzMyIsIm1hcCIsImNvbnRlbnQiLCJodG1sIiwiYXR0cnMiLCJjb3ZlciIsImMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyIsInN0eWxlIiwiYnVpbGRTdHlsZXMiLCJpc0xvb3AiLCJnZW5lcmF0ZUNsb25lcycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJfdGhpczQiLCJfcmVmIiwiX3RoaXM1IiwiX3JlZjIiLCJjc3NQYWRkaW5nIiwiY3NzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RyYWNrSGVpZ2h0IiwiX3RoaXM2IiwiX3JlZjMiLCJidWlsZFRyYW5zbGF0ZSIsImNzc1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZUhlaWdodCIsImNzc0FzcGVjdFJhdGlvIiwiX3RoaXM3IiwiX3JlZjQiLCJjc3NTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVXaWR0aCIsImdhcCIsIl90aGlzJERpcmVjdGlvbiIsImNzc09mZnNldENsb25lcyIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJjc3NPZmZzZXRHYXBzIiwiaXNDZW50ZXIiLCJidWlsZENzc1ZhbHVlIiwiY3NzT2Zmc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndENlbnRlciIsIkJvb2xlYW4iLCJfdGhpcyREaXJlY3Rpb24yIiwiY2xvbmVDb3VudCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRDbG9uZUNvdW50IiwiaXNGaXhlZFdpZHRoIiwiX3RoaXMkcGFyc2VDc3NWYWx1ZSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJwYXJzZUNzc1ZhbHVlIiwiX3RoaXMkRGlyZWN0aW9uMyIsIl90aGlzJHBhcnNlQ3NzVmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlMiIsIl90aGlzJHBhcnNlQ3NzVmFsdWUzIiwiX3RoaXMkcGFyc2VDc3NWYWx1ZTQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicGFkZGluZyIsImhlaWdodCIsImlzVmVydGljYWwiLCJjc3NIZWlnaHQiLCJhdXRvV2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIiwiZml4ZWRXaWR0aCIsImNzc1NsaWRlU2l6ZSIsImZpeGVkSGVpZ2h0IiwiYXV0b0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQiLCJoZWlnaHRSYXRpbyIsInBhcnNlRmxvYXQiLCJfdGhpczgiLCJmb2N1cyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZENsYXNzZXMiLCJpc05hdmlnYXRpb24iLCJoaWRkZW4iLCJidWlsZEF0dHJzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHIiLCJyZW5kZXJTbGlkZXMiLCJfdGhpczkiLCJ0YWciLCJfY29udGVudCRodG1sIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImxhenlMb2FkIiwic3JjIiwiYmFja2dyb3VuZCIsImNvdW50IiwidW5zaGlmdCIsIl9yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmNSIsImZsaWNrTWF4UGFnZXMiLCJyZW5kZXJBcnJvd3MiLCJyZW5kZXJBcnJvdyIsIl90JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcyRvcHRpb25zIiwiYXJpYUxhYmVsIiwiYXJyb3dQYXRoIiwiX3RoaXMkY29uZmlnIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInInJvb3RDbGFzcyIsImJlZm9yZVRyYWNrIiwiYWZ0ZXJUcmFjayIsInNsaWRlciIsImJlZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcmVTbGlkZXIiLCJhZnRlclNsaWRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O3lDQUdPLElDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tNQSxFQUFNLE1BS05DLEVBQU0sTUNRTkMsRUFBa0IsQ0FDN0JDLE1BQVksQ0FBRSxVQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZEMsS0FBWSxDQUFFLE1BQU8sU0FDckJDLE1BQVksQ0FBRSxTQUFVLFFBQ3hCQyxFQUFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFFLEtBQ2RDLEVBQVksQ0FBRSxLQUNkQyxFQUFZLENBQUUsS0FDZEMsVUFBWSxDQ3pCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lCQyxVQURBQSxjRDJCN0JDLFdBQVksQ0N6QmlCRCxZQUhBQSxZRG9CQSxFQXNCZixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUUsRUFBV0MsRUFBZ0JDLEVBQXdCQyxHQThCMUQsTUFBQSxDQUNMQyxRQXZCTyxTQUFTQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBY0MsRUFBb0JDLEdBRTVDLElBQUFDLEdBRE5ELEVBQVlBLEdBQWFKLEVBQVFJLGFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMbkIsR0FBU2tCLEVBQWVDLElBQWNsQixFQUFNLEVBQUksQ0FBQSxFQUE1QixFQUV6QywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBQUMsRUFBaUJlLElBQVVmLEVBQWlCZSxHQUFRRyxJQUN0REgsRUFBS0ksUUFBUyxvQicKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXFCLFNBQUVDLEVBQU9DLEdBQ3ZDQyxFQUFjdEIsRUFBaUJvQixFQUFNRyxZQUFOLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F1QkwsSUFBV0UsRUFDaEUsT0FBUyxFQUFUQyxFQUFhQyxFQUFZRSxPQUFRLENBQXBCLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUF3QkMsWUFBeEIsRUFBd0NILEVBQVlJLE1BQU8sQ0FBbkIsRUFBeUJKLENBQ3JGLENBSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDLENBSVAsRUFlRUssT0FORixTQUFpQkMsR0FDZixPQUFPQSxHQUFVZixFQUFRSSxZQUFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25CLEVBQU0sRUFBSSxDQUFBLEVBQ25ELENBRU8sQ0FJVCxDRXhFTyxJQUFNK0IsRUFBZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0NFdEJDLEVBQW1CRCxFQUF6QixLQVlhRSxFQUF3QkYsRUFDeEJHLEVBQTRCRixFQUFsQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFDTUcsRUFBNEJILEVBQWxDLE9BQ01JLEVBQTRCSixFQUFsQyxRQUNNSyxFQUE0QkQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWxDLFVBR01FLEVBQTRCTixFQUFsQyxRQUdNTyxFQUE0QlAsRUFBbEMsYUFVTVEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTRCQyxZQzVCNUJDLEVBQW9CLENBQy9CQyxLQUFvQixRQUNwQkMsS0FBb0IsU0FDcEJDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFvQixJQUNwQkMsUUFBb0IsRUFDcEJDLFlBQW9CLENBQUEsRUFDcEJDLE9BQW9CLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQ3BCQyxXQUFvQixDQUFBLEVBQ3BCQyxtQkFBb0IsQ0FBQSxFQUNwQkMsU0FBb0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQ3BCQyxhQUFvQixDQUFBLEVBQ3BCQyxhQUFvQixDQUFBLEVBQ3BCQyxjQUFvQixDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQUNwQkMsT0FBb0IsZ0NBQ3BCQyxLQUFvQixDQUFBLEVBQ3BCckMsVUFBb0IsTUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BCc0MsVUFBb0IsQ0FBQSxFQUNwQkMsZUFBb0IsNkNBQ3BCQyxLQUFvQixDQUFBLEVBQ3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkMsUURxQ3FCLENBQ3JCQyxNQUFZekIsRUFDWjBCLE1BQVl6QixFQUNaVyxPQTdDdUNoQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBbEMsU0E4Q0wrQixNQUFZekIsRUFDWjBCLEtBN0N1QzFCLEVBQWxDLFNBOENMMkIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tBN0N1QzNCLEVBQWxDLFNBOENMVyxXQUFZVixFQUNaMkIsS0E3Q3VDM0IsRUFBbEMsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOENMNEIsUUF4Q3VDbkMsRUFBbEMsU0ErQmdCLEVDcENyQm9DLEtDMUJrQixDQUNsQkosSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVksaUJBQ1pDLEtBQVksYUFDWkksTUFBWSxvQkFDWkMsS0FBWSxtQkFDWkMsT0FBWSxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JBQ1pDLE1BQVksZ0JBQ1pDLEtBQVksaUJBQ1pDLE1BQVksaUJBQ1pDLFNBQVksV0FDWmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQVksUUFDWmUsT0FBWSx5QkFDWkMsV0FBWSxVQVpNLEVEMkJsQkMsY0FBZSxDQUNiaicKICAgICAgICAgICAgICAgICAgICAgICAgYidDLE1BQWEsRUFDYmtDLFlBQWEsRUFDYkMsU0FBYSxPQUhBLENBckJnQixFRUZqQixTQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BELEVBQVVxRCxFQUF5QkMsRUFBZ0JDLEdBQ2pFLE9BQU9DLE1BQU1DLFVBQVV6RCxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTTBELEtBQU1MLEVBQVdDLEVBQU9DLENBQTlDLENBQ1QsQ0NhTyxTQUFTSSxFQUFPQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFckIsT0FBT0EsRUFBS0MsS0FBTEYsTUFBQUMsRUFBVyxDQUFBLE1BQVM1RCxPQUFBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTzhELFVBQVcsQ0FBWCxFQUFsQyxDQUNGLENDZkEsU0FBU0MsRUFBUWhELEVBQWNpRCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDN0IsT0FBTyxPQUFPQSxJQUFZakQsQ0FDNUIsQ0FTTyxTQUFTa0QsRUFBVUQsR0FDeCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BK0NtQixPQS9DRkEsR0FBYUQsRUFBUSxTQUFVQyxDQUFsQixDQUNoQyxDQVNPLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNRSxFQUFxRFYsTUFBTVUsUUFrQjNEQyxHQVQ2RFIsRUFBT0ksRUFBUSxVQUFSLEVBU2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQUFPSSxFQUFRLFFBQVIsR0MxQ25FLFNBQVNLLEVBQVlsRSxHQUMxQixPQUFPZ0UsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNoRSxDQUFBLEVBQVVBLEVBQVEsQ0FBRUEsRUFDdEMsQ0NIZ0IsU0FBQW1FLEVBQVlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFpQkMsR0FDbENILEVBQUFFLENBQUEsRUFBU0QsUUFBU0UsQ0FBbEIsQ0FDWCxDQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0IsU0FBQUMsRUFBU0MsRUFBWUMsR0FFNUIsT0FEUEQsRUFBTUQsS0FBTkMsTUFBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWVMLEVBQVNNLENBQUEsQ0FBeEIsRUFDT0QsQ0FDVCxDQ0hnQixTQUFBRSxFQUFTQyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBNEJDLEdBQzVDLE9Kc0VGLFNBQXdCYixHQUN6QixJQUNGLE9BQU9BLGFBQXVCQSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIna0JjLGNBQWNDLGFBQWVDLFFBQVNDLFdBR3hGLE9BRlVDLEdBQ0QsTUFBQSxDQUFBLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidULENBQ0YsRUk1RXdCTixDQUFmLElBQTBCQSxFQUFBLG1CQUE4QkEsRUFBSUQsU0FBVWpCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFNa0IsRUFBS0MsQ0FBdkQsQ0FDbkMsQ0NGZ0IsU0FBQU0sRUFBOEJDLEVBQXFCUCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDakUsT0FBT0EsR0NBNkRBLEVEQTdCQSxFQ0NqQ1EsR0FEeUNELEVEQWhCQSxHQ0NMcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEVBQU9vRixFQUFPQyxRQUFkLEVBQWtDLElBQ3JEUixFQUFXUSxFQUFTQyxPQUFRLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSCxHQUFBLE9BQVNSLEVBQVNRLEVBQU9OLEVBQXpCLENBQWpCUSxFQUF5REEsR0RGeEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQU1ELEVBQU9HLGtCQ0FsRCxJQUFzRFYsQ0RDdEUsQ0xnRHlFbEIsRUFBT0ksRUFBUScKICAgICAgICAgICAgICAgICAgICAgICAgYicsV0FBUixFTzFEekUsSUFBTXlCLEVBQVVDLE9BQU9DLEtDU2QsU0FBQUMsRUFDZEMsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FyQixFQUNBOUYsR0FFS21ILElBQ0RuSCxFQUFRK0csRUFBU0ksQ0FBQSxFQUFTQyxRQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbEIsRUFBOEJMLEVBQVNJLENBQUEsR0FBV3ZCLFFBQVMsU0FBT3lCLEdBQ2xFLGNBQVJBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUF1QnZCLEVBQVVxQixFQUFRRSxHQUFPQSxDQUF6QixDQUN2QixDQUZBLENBTU4sQ0NrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JPLFNBQVNDLEVBQTBCSCxHQVFqQyxPQU5QNUYsRUFBTzhELFVBQVcsQ0FBbEIsRUFBc0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInTyxRQUFTLFNBQVUyQixHQUMvQkwsRUFBQUssRUFBUSxTQUFFOUYsRUFBTzRGLEdBQ3ZCRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUUUsR0FBUUUsRUFBUUYsRUFDeEIsQ0FGTSxDQUdSLENBSkYsRUFNT0YsQ0FDVCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NDTyxTQUFTSyxFQUF5QkwsR0FjaEMsT0FaUDVGLEVBQU84RCxVQUFXLENBQWxCLEVBQXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQk8sUUFBUyxTQUFVMkIsR0FDL0JMLEVBQUFLLEVBQVEsU0FBRTlGLEVBQU80RixHQUNsQicKICAgICAgICAgICAgICAgICAgICAgICAgYic1QixFQUFTaEUsQ0FBVCxFQUNLMEYsRUFBQUUsR0FBUTVGLEVBQU1GLE1BQWQsRUFDRWlFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFVL0QsQ0FBQSxFQUNwQjBGLEVBQVFFLEdBQVFHLEVBQU8sR0FBSWhDLEVBQVUyQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUUUsRUFBUixFQUFrQkYsRUFBUUUsR0FBUSxHQUFJNUYsQ0FBM0QsRUFFaEIwRixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUUUsR0FBUTVGLENBRWxCLENBUk0sQ0FTUixDQVZGLEVBWU8wRixDQUNULENDM0RPLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTTSxFQUFRQyxHQUN0QjlCLEVBQVM4QixFQUFPLFNBQVFDLEdBQ2pCQSxHQUFRQSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0MsWUFDWEQsRUFBQUMsV0FBV0MsWUFBYUYsQ0FBeEIsQ0FFUCxDQUpGLENBS0YsQ0NITycKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBU0csRUFBTXJHLEdBQ3BCLE9BQU9pRSxFQUFVakUsR0FBVUEsRUFBUUEsRUFBWUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVosS0FBeUIsRUFDOUQsQ0NKZ0IsU0FBQXNHLEVBQVFDLEVBQWdCQyxHQUN0QyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSyxDQUFFRCxFQUNMLE1BQU0sSUFBSUUsTUFBWXhHLElBQUFBLFFBQW1CdUcsR0FBVyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBcEQsQ0FFSixDQ2I4Q0UsS0FBL0JDLElBQVIsSUFBYUMsRUFBMEJGLEtBQTFCRSxJQUEwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JGLEtBQXJCRyxNQUFxQkgsS0FBZEksS0FBY0osS0FBUkssSUNLL0IsU0FBU0MsRUFBY0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQzVCLE9BQU9BLEVBQU8xSCxRQUFTLHFCQUFzQixPQUF0QyxFQUFnREksWUFBdkQsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0YsQ0NDQSxJQUFNdUgsRUFBOEIsR0N1QjdCLFNBQVNDLElBS2QsSUFBSUMsRUFBb0YsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBdUYvRSxTQUFBQyxFQUNQQyxFQUNBQyxFQUNBbEQsR0FFQUYsRUFBU21ELEVBQVMsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVFLEdBQ2hCQSxHQUFBckQsRUFBU29ELEVBQVEsU0FBQUEsR0FDekJBLEVBQU9FLE1BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPLEdBQWRGLEVBQW9CcEQsUUFBUyxTQUFXdUQsR0FDaENDLEVBQVdELEVBQVFELE1BQU8sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQWYsRUFDakJwRCxFQUFVbUQsRUFBUUcsRUFBVSxHQUFLQSxFQUFVLEVBQTNDLENBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBSEZKLENBSUEsQ0FMUSxDQU1WLENBUEYsQ0FRRixDQVVPLE1BQUEsQ0FDTDVELEtBaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHRixTQUNFMkQsRUFDQUMsRUFDQUssRUFDQTNJLEdBRUFvSSxFQUFjQyxFQUFTQyxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFFQyxFQUFRSyxFQUFPQyxHQUM5QyxJQUFNQyxFQUFnQixxQkFBc0JQLEVBQ3RDUSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBVUQsRUFDWlAsRUFBT1Msb0JBQW9CdEUsS0FBTTZELEVBQVFLLEVBQU9ELEVBQVUzSScKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBMUQsRUFDQXVJLEVBQUEsZUFBMkI3RCxLQUFNNkQsRUFBUUksQ0FBekMsRUFFWUcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUFQLEVBQU9VLGlCQUFrQkwsRUFBT0QsRUFBVTNJLENBQTFDLEVBQXNEdUksRUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWUFBeUJJLENBQXpCLEVBQ3RFUixFQUFVOUMsS0FBTSxDQUFFa0QsRUFBUUssRUFBT0MsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVdGLEVBQVVJLEVBQXRELENBQ0EsQ0FSRixDQVNGLEVBa0ZFRyxPQXpFTyxTQUFRYixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdUJDLEVBQTJCSyxHQUNqRVAsRUFBY0MsRUFBU0MsRUFBUSxTQUFFQyxFQUFRSyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0MsR0FDbENWLEVBQUFBLEVBQVVoQyxPQUFRLFNBQVlnRCxHQUN4QyxNQUFLQSxDQUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQUEsRUFBVSxLQUFRWixHQUNsQlksRUFBVSxLQUFRUCxHQUNsQk8sRUFBVSxLQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04sR0FDZEYsR0FBWVEsRUFBVSxLQUFRUixLQUVyQ1EsRUFBVSxHQUFWLEVBQ08sQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFJVCxDQVhVLENBWVosQ0FiRixDQWNGLEVBMkRFQyxTQWhETyxTQUFhYixFQUFxQjNHLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFjeUgsR0FDbkQsSUFBQXRELEVBV0csTUFScUIsWUFBdkIsT0FBT3VELFlBQ1Z2RCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSSxJQUFJdUQsWUFBYTFILEVBQU0sQ0FBRTJILFFBSGYsQ0FBQSxFQUd3QkYsT0FBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQVgsQ0FBdkIsR0FFQXRELEVBQUF5RCxTQUFTQyxZQUFhLGFBQXRCLEdBQ0ZDLGdCQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBaUI5SCxFQU5MLENBQUEsRUFNb0IsQ0FBQSxFQUFPeUgsQ0FBekMsRUFHRmQsRUFBT29CJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxjQUFlNUQsQ0FBdEIsRUFDT0EsQ0FDVCxFQW9DRTZELFFBVEYsV0FDRXpCLEVBQVVqRCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUyxTQUFRMkUsR0FBRUEsRUFBTSxHQUFOLENBQWMsQ0FBM0MsRUFDTzFCLEVDeklIMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BQVMsQ0QwSWYsQ0FFTyxDQU1ULENFdkhPLFNBQVNDLEVBQWdCakssR0FLOUIsSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01rSyxFQUFNbEssRUFBU0EsRUFBTzhJLE1BQU1vQixJQUFNUixTQUFTUyx1QkFBakQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS01DLEVBQVNoQyxFQUFmLEVBNkJBLE9BSktwSSxHQUNIQSxFQUFPOEksTUFBTXVCLEdDbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidEdUIsVURrREpELEVBQU9OLE9BQXZDOUosRUFHSzhHLEVBQVFzRCxFQUFRLENBQ3JCRixJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQUEsRUFDQUcsR0F2Qk8sU0FBSTdCLEVBQTJCSyxHQUMvQnVCLEVBQUF4RixLQUFNc0YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUsvRSxFQUFTcUQsQ0FBQSxFQUFTOEIsS0FBTSxHQUF4QixFQUErQixTQUFLckUsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQzNDNEMsRUFBQW5FLE1BQU9tRSxFQUFVNUQsRUFBU2dCLEVBQUVzRCxNQUFGLEVBQWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsRUFBRXNELE9BQVMsRUFBbEQsQ0FDVCxDQUZLLENBR1QsRUFvQkVnQixJQUFLN0YsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU8wRixFQUFPaEIsT0FBUWMsQ0FBdEIsRUFDTE0sS0FiRixTQUFlMUIsR0FFYnNCLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPZCxTQUFVWSxFQUFLcEIsRUFBTy9ILEVBQU84RCxVQUFXLENBQVgsQ0FBcEMsQ0FDRixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNdUIsRUFNekIsQ0U5RU8sSUNRTTRGLEVBQTBDLENBQ3JEQyxRQUFVLEtBQ1ZDLFNBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBRjJDLEVDTzFDQyxhQXNCWCxTQUFhQyxFQUFBQSxFQUFZM0ssR0FsQnpCNEssS0FBaScKICAgICAgICAgICAgICAgICAgICAgICAgYidCQyxPQUFpQixHQW1CaENELEtBQUtELEdBQVVBLEVBQ2ZDLEtBQUs1SyxRQUFVQSxDQUNqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsNEJBVUE4SyxLQUFBLFNBQU1wRixFQUFrQnhGLEVBQWNhLEVBQXdCZ0ssR0FFdERDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjSixLQUFLQyxPQUR6QkUsRUFBYUEsR0FBYyxXQUNxQkgsS0FBS0MsT0FBUUUsSUFBZycKICAgICAgICAgICAgICAgICAgICAgICAgYidCLElBQ3pEQyxFQUFXdEYsR0FBYXNGLEVBQVd0RixJQUFjLElBQzdEeEYsR0FBU2EsQ0FDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25CLElBT0FrSyxNQUFBLFdBQWdCLElBQUFDLEVBQUFOLEtBQ1ZPLEVBQU0sR0FnQkgsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZEZQLEtBQUtDLE9BQU9PLFVBQ2ZELEdBQU9QLEtBQUtTLGVBQWdCVCxLQUFLQyxPQUFPTycKICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FBakMsR0FHRjlFLE9BQUFDLEtBQU1xRSxLQUFLQyxNQUFYLEVBQ0pTLEtBQU0sU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VDLEVBQUdDLEdBQUwsTUFBd0MsUUFBNUJOLEVBQUtsTCxRQUFReUwsV0FBdUIsQ0FBQ0YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUksQ0FBQ0MsRUFBSSxDQUFDQSxFQUFJLENBQUNELENBQWhFLENBREYsRUFFSnJHLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFTLFNBQWM2RixHQUNGLFlBQWZBLElBR0lJLEdBRlBBLEdBQUEsaUNBQXlDSixFQUF6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsU0FDT0csRUFBS0csZUFBZ0JILEVBQUtMLE9BQVFFLEVBQWxDLEVBQ0EsSUFFVCxDQVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQVVBSSxDQUNULElBU1FFLGVBQUEsU0FBZ0JMLEdBQXFFLElBQUFVLEVBQUFkLEtBQycKICAgICAgICAgICAgICAgICAgICAgICAgYid2Rk8sRUFBTSxHQWVILE9BYkMzRSxFQUFBd0UsRUFBVyxTQUFFSCxFQUFRbkYsR0FDM0JBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUFnQmdHLEVBQUtmLEdBQVFqRixJQUFBQSxHQUFZaUcsS0FBekMsRUFDQVIsR0FBV3onCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixFQUFYLEtBRVFjLEVBQUFxRSxFQUFRLFNBQUU5SixFQUFPYixHQUNsQmEsQ0FBQUEsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQW1CLElBQVZBLElBQ1pvSyxHQUFXakwsRUFBV2EsS0FBQUEsRUFBdEIsSUFFRixDQUpNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQU1Eb0ssR0FBQSxHQUNQLENBWE0sRUFhREEsQ0FDVCx5QkNIQSxTQUFBUyxFQUFhQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBcUM3TCxFQUFtQjhMLEVBQXlCQyxHQXhDOUZuQixLQUFpQm9CLE9BQXlCLEdBZTFDcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCLEtBQWlCNUssUUFBbUIsR0FlcEM0SyxLQUFpQnFCLFlBQXFDLEdBVzdDbkYsRUFBQW5GJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFVb0ssR0FBWSxFQUF0QixFQUNQakYsRUFBT0EsRUFBTzhELEtBQUs1SyxRQUFTMkInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVkzQixHQUFXLEVBQW5ELEVBRUE0SyxLQUFLaUIsU0FBWUEsRUFDakJqQixLQUFLaycKICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BQVlsRixFQUFRLEdBQUkyRCxFQUF5QnVCLEdBQVUsRUFBdkMsRUFDekJsQixLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsR0FBWUMsS0FBS2tCLE9BQU9uQixJUjdGeEIsSUFEaUJ1QixFUThGdUIsWUN0RzVCQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVRTVWxFLEVBQUtpRSxJQUFhakUsRUFBS2lFLElBQVksR0FBTSxHU1J0RCxHQUFVQyxJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsS0FBZ0JBLEdEc0d4Q3ZCLEtBQUtGLE1BQVksSUFBSUEsRUFBT0UsS0FBS0QsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lDLEtBQUs1SyxPQUF6QixFQUNqQjRLLEtBQUsvSyxVQUFZQSxFQUFXLEVBQU0sRUFBTSsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSyxLQUFLNUssT0FBNUIsRUFFVHFILEVBQUF1RCxLQUFLaUIsU0FBUy9CLE9BQVEsNkJBQScKICAgICAgICAgICAgICAgICAgICAgICAgYid0QixFQUVSYyxLQUFLd0IsS0FBTCxDQUNGLEdBekVPQyxNQUFQLFNBQWNDLEdBQ1osSUVqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MrRTVHLEVGaUN2RXlFLEVBQU9KLEVBQWdCdUMsQ0FBaEIsRUFBUG5DLEdBQ0FvQyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0QsRUFBVEMsS0FDRkMsR0VuQzZDdkcsRUZtQzFCc0csR0VuQ3NEN0csRUZtQ2hFLElBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidxQnBFLEdFbENwQlQsRUFBVW9GLEVBQU93RyxpQkFBa0IvRyxDQUF6QixDQUFBLEVBQXdDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJRm9DbEV5RSxFSmhEb0MsVUlnRGpCLFdBQ1RwRCxFQUFBZixFQUFPdUcsRUFBTSxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYixDQUFBLENBQ1IsQ0FGRixFQUlBeEYsRUFBUXlGLENBQVIsQ0FDRiw2QkFvRVFKLEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLFdBQ054QixLQUFLOEIsaUJBQUwsRUFDQTlCLEtBQUsrQixXQUFMLEVBQ0EvQixLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dDLG1CQUFMLEVBQ0FoQyxLQUFLaUMsb0JBQUwsRUFDQWpDLEtBQUtrQyxvQkFBTCxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxDLEtBQUttQyxtQkFBTCxDQUNGLElBS1FKLFdBQUEsV0FBbUIsSUFBQUssRUFBQXBDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLQUN6QnZGLEVBQU11RixLQUFLb0IsT0FBUXBCLEtBQUtpQixTQUFTb0IsSUFBSyxTQUFFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsRUFBUzdNLElBQy9DNk0sRUFBVWxJLEVBQVVrSSxHQUFZLENBQUVDLEtBQU1ELENBQVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQW9CQSxHQUM1Q3JDLE9BQVNxQyxFQUFRckMsUUFBVSxHQUMzQnFDLEVBQUFFLE1BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTRixFQUFRRSxPQUFTLEdBRWxDSixFQUFLSyxNQUFPSCxDQUFaLEVBRU1ySyxFQUFjbUssJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUtoTixRQUFRNkMsUUFBUUMsTUFBbkMsS0FBd0QsSUFBVnpDLEU3QnRHakJxQixZNkInCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0c4QyxJQU8xRSxPQUxQa0YsRUFBUXNHLEVBQVFFLE1BQU8sQ0FDckJFLE9BQVd6SyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBSixLQUFpQnFLLEVBQVFFLE1BQU1FLE9BQVMsS0FBTTNCLEtBRGhDLEVBRXJCNEIsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09QLEVBQUtRLFlBQWFOLEVBQVFyQyxNQUExQixDQUZjLENBQXZCLEVBS09xQyxDQUNQLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWZpQixDQUFuQixFQWlCS3RDLEtBQUs2QyxPQUFMLEdBQ0U3QyxLQUFBOEMsZUFBZ0I5QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBS29CLE1BQXJCLENBRVQsSUFLUVksbUJBQUEsV0FBMkIsSUFBQWUsRUFBQS9DLEtBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NqQ0EsS0FBS3FCLFlBQVkvRyxRQUFTLFNBQTBCMEksR0FBQSxJQUF0QnhPLEVBQXNCd08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUEsR0FBZjVOLEVBQWU0TixFQUFBLEdBQzdDRCxFQUFBakQsTUFBTUksS0FBTSxJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBSyxZQUFhMUQsRUFBTXBILEVBQVFaLE9BQVNBLENBQXJELENBQ0wsQ0FGRixDQUdGLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tReU4sb0JBQUEsV0FBNEIsSUFBQWdCLEVBQUFqRCxLQUMxQkYsRUFBVUUsS0FBVkYsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0ZoRixNQUFnQnZFLEVBRXRCeUosS0FBS3FCLFlBQVkvRyxRQUFTLFNBQTBCNEksR0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBdEIxTyxFQUFzQjBPLEVBQUEsR0FBZjlOLEVBQWU4TixFQUFBLEdBQ2xEcEQsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01JLEtBQU1wRixFQUFVbUksRUFBSzVOLFFBQVMsYUFBZCxFQUErQjROLEVBQUtFLFdBQVknCiAgICAgICAgICAgICAgICAgICAgICAgIGInL04sRUFBUyxDQUFBLENBQTFCLEVBQW1DWixDQUF4RnNMLEVBQ0FBLEVBQU1JLEtBQU1wRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBVW1JLEVBQUs1TixRQUFTLGNBQWQsRUFBZ0M0TixFQUFLRSxXQUFZL04sRUFBUyxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxDQUExQixFQUFrQ1osQ0FBeEZzTCxFQUNBQSxFQUFNSSxLQUFNcEYsRUFBVSxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVW1JLEVBQUtHLGVBQWdCaE8sQ0FBckIsRUFBZ0NaLENBQWhFc0wsQ0FDQSxDQUpGLENBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidGLElBS1FxQyxtQkFBQSxXQUEyQixJQUFBa0IsRUFBQXJELEtBQ3pCRixFQUFVRSxLQUFWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0YsTUFDRmhGLE1BQWdCdEUsRUFFdEJ3SixLQUFLcUIsWUFBWS9HLFFBQVMsU0FBMEJnSiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBQSxJQUF0QjlPLEVBQXNCOE8sRUFBQSxHQUFmbE8sRUFBZWtPLEVBQUEsR0FDbER4RCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTUksS0FBTXBGLEVBQVUsWUFBYXVJLEVBQUtFLGVBQWdCbk8sQ0FBckIsRUFBZ0NaJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFuRXNMLEVBRU91RCxFQUFLRyxlQUFnQnBPLENBQXJCLEdBQ0wwSyxFQUFNSSxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTXBGLEVBQVUsZUFBZ0J1SSxFQUFLSSxlQUFnQnJPLENBQXJCLEVBQWdDWixDQUF0RXNMLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUVGLENBTkYsQ0FPRixJQUtRb0Msb0JBQUEsV0FBNEIsSUFBQXdCLEVBQUExRCxLQUMxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JGLEVBQVVFLEtBQVZGLE1BQ0ZoRixNQUFnQnJFLEVBRXRCdUosS0FBS3FCLFlBQVkvRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUyxTQUEwQnFKLEdBQUEsSUFBdEJuUCxFQUFzQm1QLEVBQUEsR0FBZnZPLEVBQWV1TycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQSxHQUNsRDdELEVBQU1JLEtBQU1wRixFQUFVLFFBQVM0SSxFQUFLRSxjQUFleE8sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQXBCLEVBQStCWixDQUE5RHNMLEVBQ0FBLEVBQU1JLEtBQU1wRixFQUFVLFNBQVU0SSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBS0YsZUFBZ0JwTyxDQUFyQixHQUFrQyxPQUFRWixDQUExRXNMLEVBQ0FBLEVBQU1JLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFNcEYsRUFBVTRJLEVBQUtyTyxRQUFTLGFBQWQsRUFBK0JtSCxFQUFNcEgsRUFBUXlPJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFkLEdBQXVCLE1BQU9yUCxDQUFuRnNMLEVBQ0FBLEVBQU1JLEtBQVVwRixXQUFtQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVUFBVzFGLEVBQVFxTixNQUFRLE9BQVMsU0FBVWpPLENBQWpGc0wsQ0FDQSxDQUxGLENBTScKICAgICAgICAgICAgICAgICAgICAgICAgYidGLElBU1F5RCxlQUFBLFNBQWdCbk8sR0FDdEIsSUFBQTBPLEVBQTRCOUQsS0FBSy9LLFVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F6QkksSUFBQUEsUUFBU2EsSUFBQUEsT0FDWHFFLEVBQVMsR0FVZixPQVJBQSxFQUFPRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBTXVGLEtBQUsrRCxnQkFBaUIzTyxDQUF0QixDQUFiLEVBQ0FtRixFQUFPRSxLQUFNdScKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBQUtnRSxjQUFlNU8sQ0FBcEIsQ0FBYixFQUVLNEssS0FBS2lFLFNBQVU3TyxDQUFmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUNIbUYsRUFBT0UsS0FBTXVGLEtBQUtrRSxjQUFlaE8sRUFBUSxDQUFJLElBQUcsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW5DLENBQWIsRUFDQXFFLEVBQU9FLEtBQVBiLE1BQUFXLEVBQWdCeUYsS0FBS21FLGdCQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBaUIvTyxDQUF0QixDQUFoQixHQUdLbUYsRUFDSmdCLE9BQVE2SSxPQURKLEVBRUovQixJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSyxTQUFBbE0sR0FBQSxNQUFBLFlBQXNCZCxFQUFTLEdBQVQsTUFBb0JjLEVBQTFDLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLENBRkQsRUFHSnFKLEtBQU0sR0FIRixDQUlULElBVVF1RSxnQkFBQSxTQUFpQjNPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUN2QixJQUlVZSxFQUpWa08sRUFBNEJyRSxLQUFLL0ssVUFBekJJLElBQUFBLFFBQVNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFBQSxPQUNYb08sRUFBYXRFLEtBQUt1RSxjQUFsQixFQUVELE9BQUF2RSxLQUFLd0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGFBQWNwUCxDQUFuQixHQUNLZSxHQUFnQnNPLEVBQUF6RSxLQUFLMEUsY0FBZXRQLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTQyxFQUFTLFlBQUEsRUFBdEMsR0FBaEJjLE1BQU9xRyxJQUFBQSxLQUNSd0QsS0FBS2tFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxjQUFlaE8sRUFBUUMsQ0FBUixFQUFrQm1PLEVBQVk5SCxDQUFsRCxHQUlFdEcsRUFESywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBTW9PLEVBQWFsUCxFQUFRK0IsU0FDcEMsR0FDVCxJQWNRZ04sZ0JBQUEsU0FBaUIvTycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDdkIsSUFRUStCLEVBS0VoQixFQWJWd08sRUFBNEIzRSxLQUFLL0ssVUFBekJJLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxRQUFTYSxJQUFBQSxPQUVaLE9BQUE4SixLQUFLd0UsYUFBY3BQLENBQW5CLEdBQ0snCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSxHQUFnQnlPLEVBQUE1RSxLQUFLMEUsY0FBZXRQLEVBQVNDLEVBQVMsWUFBQSxFQUF0QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBaEJjLE1BQU9xRyxJQUFBQSxLQUNSLENBQUV3RCxLQUFLa0UsY0FBZWhPLEVBQVFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRLENBQWhCLEVBQXFCcUcsQ0FBekMsS0FJSHJGLEVBQWlCL0IsRUFBakIrQixRQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUzBNLEVBQVF6TyxFQUFSeU8sS0FEWHRKLEVBQVMsSUFHUkUsS0FBVXZFLEVBQVEsR0FBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidpQixDQUFMLEVBQXpCLEdBQUEsRUFFSzBNLElBQ0sxTixHQUFSME8sRUFBd0I3RSxLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBFLGNBQWViLENBQXBCLEdBQWhCMU4sTUFBT3FHLElBQUFBLEtBRWZqQyxFQUFPRSxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTXVGLEtBQUtrRSxjQUFlaE8sR0FEYkMsRUFBUWdCLEVBQVVoQixHQUFVLEdBQ01xRyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBekMsQ0FBYixHQUdLakMsRUFDVCxJQVNReUosY0FBQSxTQUFlNU8sR0FDZixJQUdJYyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQUMsRUFBT3FHLEVBSlg4SCxFQUFhdEUsS0FBS3VFLGNBQWxCLEVBRUQsT0FBQUQsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWNsUCxFQUFReU8sS0FDakIzTixFQUFXOEosS0FBSy9LLFVBQWhCaUIsT0FDQUMsR0FBRicKICAgICAgICAgICAgICAgICAgICAgICAgYicyTyxFQUFrQjlFLEtBQUswRSxjQUFldFAsRUFBUXlPLEdBQTVCLEdBQWhCMU4sTUFBT3FHJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFBQSxLQUVWd0QsS0FBS3dFLGFBQWNwUCxDQUFuQixFQUNJNEssS0FBS2tFLGNBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaE8sRUFBUUMsRUFBUW1PLENBQWhCLEVBQThCOUgsQ0FBbEQsR0FHRHJGLEVBQVkvQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWitCLFFBRUQ2SSxLQUFLa0UsY0FBZWhPLEVBRGRvTyxFQUFhbk4sRUFDZ0JoQixDQUFmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUF3QnFHLENBQTVDLElBR0YsRUFDVCxJQVNRbkgsUUFBQSxTQUFTQyxHQUNmLE9BQU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkgsRUFBYzZDLEtBQUsvSyxVQUFVSSxRQUFTQyxDQUF4QixDQUFBLENBQ3ZCLElBVVE2TicKICAgICAgICAgICAgICAgICAgICAgICAgYicsV0FBQSxTQUFZL04sRUFBa0JWLEdBQzVCcVEsRUFBWTNQLEVBQVoyUCxRQUNGelAsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08wSyxLQUFLL0ssVUFBVUksUUFBU1gsRUFBUSxRQUFVLE9BQVEsQ0FBQSxDQUFsRCxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTixPQUFBcVEsR0FBV3ZJLEVBQU11SSxFQUFTelAsS0FBWTRFLEVBQVU2SyxHQUFZLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidJQSxLQUFlLEtBQ3hGLElBU1EzQixlQUFBLFNBQWdCaE8sR0FDdEIsSUFBSTRQLEVBQVMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBUU4sT0FORmhGLEtBQUtpRixXQUFMLElBRUh4SSxFQURTdUksRUFBQWhGLEtBQUtrRiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVUFBVzlQLENBQWhCLEVBQ08sc0JBQWhCLEVBQ1M0UCxVQUFTQSxFQUFULE1BQXVCaEYsSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUttRCxXQUFZL04sRUFBUyxDQUFBLENBQTFCLEVBQXZCLE1BQWdFNEssS0FBS21ELFdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FZL04sRUFBUyxDQUFBLENBQTFCLEVBQWhFLEtBR0o0UCxDQUNULElBU1FFLFVBQUEsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVc5UCxHQUNWLE9BQUFvSCxFQUFNcEgsRUFBUTRQLE1BQWQsQ0FDVCxJQVNRcEIsY0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBZXhPLEdBQ3JCLE9BQU9BLEVBQVErUCxVQUNYLEdBQ0EzSSxFQUFNcEgsRUFBUWdRJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxVQUFkLElBQWdDcEYsS0FBS2lGLFdBQUwsRUFBb0IsR0FBS2pGLEtBQUtxRixhQUFjalEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQW5CLEVBQy9ELElBU1FvTyxlQUFBLFNBQWdCcE8sR0FDdEIsT0FBT29ILEVBQU1wSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUWtRLGVBQ2R0RixLQUFLaUYsV0FDSjdQLEVBQUFBLEVBQVFtUSxXQUFhLEdBQUt2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0YsS0FBS3FGLGFBQWNqUSxDQUFuQixFQUM1QjRLLEtBQUtrRixVQUFXOVAsQ0FBaEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVIsSUFTUWlRLGFBQUEsU0FBY2pRLEdBQ2QsSUFBQXlPLEVBQU1ySCxFQUFNcEgsRUFBUScKICAgICAgICAgICAgICAgICAgICAgICAgYid5TyxHQUFSLEVBQ1gsTUFBQSxjQUFjQSxTQUFjQSxHQUE1QixNQUF5Q3pPLEVBQVErQixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVyxJQUFNME0sU0FBY0EsR0FBaEYsR0FDVCxJQVNRSixlQUFBLFNBQWdCck8sR0FDZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxFQUFnQnBRLEVBQWhCb1EsWUFDRCxPQUFBQSxFQUFBLEdBQWtCLEVBQUlBLEVBQWlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNoRCxJQVVRdEIsY0FBQSxTQUFlL04sRUFBZXFHLEdBQ3BDLE1BQVdyRyxHQUFBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVXFHLENBQ3ZCLElBU1FrSSxjQUFBLFNBQWV2TyxHQUNoQixPQUFBaUUsRUFBVWpFLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFWLEVBR0ksQ0FBRUEsTUFGTXNQLFdBQVl0UCxDQUFBLEdBQVcsRUFFZHFHLEtBRFRyRycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTVQsUUFBUyxjQUFlLEVBQTlCLEdBQXNDLElBQzlDLEVBR0YsQ0FBRVMsTUFBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9xRyxLQUFNLElBQWYsQ0FDVCxJQUtRc0YsaUJBQUEsV0FBeUIsSUFBQTRELEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMUYsS0FDdkJxQixFQUFnQnJCLEtBQUs1SyxRQUFyQmlNLFlBRVJyQixLQUFLcUIsWUFBWScKICAgICAgICAgICAgICAgICAgICAgICAgYic1RyxLQUFNLENBQUUsVUFBV3VGLEtBQUs1SyxRQUF6QyxFQUVLaU0sR0FDS3pGLEVBQUF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUFBYSxTQUFFak0sRUFBU1osR0FDOUJrUixFQUFLckUsWUFBWTVHLEtBQU0sQ0FBRWonCiAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFPMEgsRUFBT0EsRUFBTyxHQUFJd0osRUFBS3RRLE9BQWhCLEVBQTJCQSxDQUEzQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBdkMsQ0FDQSxDQUZNLENBSVosSUFPUW9QLGFBQUEsU0FBY3BQLEdBQ3BCLE1BQU8sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQUMsQ0FBRUEsRUFBUzRLLEtBQUsvSyxVQUFVSSxRQUFTLFlBQXhCLEVBQ3JCLElBT1EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd04sT0FBQSxXQUNDLE1HdGRTLFNIc2RUN0MsS0FBSzVLLFFBQVE0QixJQUN0QixJQU9RaScKICAgICAgICAgICAgICAgICAgICAgICAgYidOLFNBQUEsU0FBVTdPLEdBQ1osR0FBa0IsV0FBbEJBLEVBQVF1USxNQUFxQixDQUMxQixHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQTNGLEtBQUs2QyxPQUFMLEVBQ0ksTUFBQSxDQUFBLEVBR0osR0czZVUsVUgyZVY3QywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBSzVLLFFBQVE0QixLQUNULE1BQUEsQ0FBRWdKLEtBQUs1SyxRQUFRMEMsU0FFMUIsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBRU8sTUFBQSxDQUFBLENBQ1QsSUFPUW1OLFdBQUEsV0FDQyxPQUFBakYsS0FBSzVLLFFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FRSSxZQUFjbEIsQ0FDcEMsSUFPUXNSLGFBQUEsV0FDQSxJQUFFeFEsRUFBWTRLLEtBQVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUssUUFFRCxNQUFBLENBQ0xrQixFQUNJQSxPQUFpQmxCLEVBQVE0QixLQUN6QlYsT0FBaScKICAgICAgICAgICAgICAgICAgICAgICAgYidCbEIsRUFBUUksVUFDN0JKLEVBQVF5QyxNQUFZdkIsRUFBcEIsY0FDQWxCLEVBQVF5USxjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBb0J2UCxFQUx2QixRQU1MTyxFQUNBLENBQUVtSixLQUFLa0IsT0FBTzRFLFFIaGhCVSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUdpaEJ4QnZLLE9BQVE2SSxPQVJILEVBUWE1RSxLQUFNLEdBUm5CLENBU1QsSUFTUXVHLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidXQUFBLFNBQVl2RCxHQUNsQixJQUFJd0QsRUFBTyxHQU1YLE9BSlFwSyxFQUFBNEcsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08sU0FBRXJNLEVBQU80RixHQUN0QmlLLEdBQVE3UCxFQUFRLElBQUtnSCxFQUFjcEIsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFBbkIsS0FBK0I1RixFQUEvQixJQUEyQyxFQUMzRCxDQUZNLEVBSUQ2UCxFQUFLaicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBQVosQ0FDRixJQVNRNkIsWUFBQSxTQUFhM0MsR0FDbkIsSUFBSTBDLEVBQVEsR0FNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1osT0FKUS9HLEVBQUFxRSxFQUFRLFNBQUU5SixFQUFPNEYsR0FDZDRHLE9BQUt4RixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3BCLENBQUEsRUFBbkIsSUFBOEI1RixFQUE5QixHQUNULENBRk0sRUFJRHdNLEVBQU01QicKICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBYixDQUNGLElBT1FrRixhQUFBLFdBQXVCLElBQUFDLEVBQUFsRyxLQUNYbUcsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FuRyxLQUFLa0IsT0FBdkJyQixTQUVELE9BQUFHLEtBQUtvQixPQUFPaUIsSUFBSyxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV0MsR0FDMUIsTUFBQSxJQUFLNkQsRUFBUyxJQUFBRCxFQUFLSCxXQUFZekQsRUFBUUUsSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXpCLE9BQXNDRixFQUFRQyxNQUFRLFNBQVM0RCxFQUE3RSxHQUNQLENBRkssRUFFSDNHJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFNLEVBRkgsQ0FHVCxJQU9RaUQsTUFBQSxTQUFPSCxHQUNiLElBQVFyQyxFQUFzQnEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUF0QnJDLE9BQXNCcUMsRUFBQUEsRUFBZEMsS0FBQUEsYUFBTyxHQUF2QjZELEVBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidLcEcsS0FBSzVLLFFBQVFxTixPQUFXekMsQ0FBQUEsS0FBSzVLLFFBQVFpUixXQUNsQ0MsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU0vRCxFQUFLNU0sTUFBTyxvQ0FBWixJQUVBMlEsRUFBSyxLQUNSckcsRUFBQXNHLFcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLCtCQUE2Q0QsRUFBSyxHQUFsRCxLQUdiLElBT1F4RCxlQUFBLFNBQWdCN0IsR0FLZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFKRixJQUFFaEosRUFBWStILEtBQUs1SyxRQUFqQjZDLFFBQ0Z1TyxFQUFTeEcsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0t1RSxjQUFkLEVBQ0FuRCxFQUFTSCxFQUFTaEwsTUFBbEIsRUFFRW1MLEVBQU9sQyxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3NILEdBQ3RCL0wsRUFBTTJHLEVBQVFBLENBQWQsRUFHRjNHLEVBQU0yRyxFQUFPbkwsTScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU8sQ0FBQ3VRLENBQWYsRUFBdUIxSyxRQUE3QixFQUF3Q3NGLEVBQU9uTCxNQUFPLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHdVEsQ0FBakIsQ0FBeEMsRUFBbUVsTSxRQUFTLFNBQUVnSSxFQUFTN00sR0FDckYsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU0rTSxFQUFReEcsRUFBUSxHQUFJc0csRUFBUUUsTUFBTyxDQUFFRSxNQUFXSixFQUFRRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBTUUsTUFBbEIsSUFBNkJ6SyxFQUFRRSxLQUE5QyxDQUEzQixFQUNSQSxFQUFRNkQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVEsR0FBSXNHLEVBQVMsQ0FBRUUsTUFBQUEsQ0FBRixDQUFiLEVBQ3RCL00sRUFBUSsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxFQUFRdkYsRUFBU3dGLFFBQVN0TyxDQUFsQixFQUE0QjhJLEVBQVN4RyxLQUFNdEMsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWYsQ0FDNUMsQ0FKRixDQUtGLElBT1FvTSxjQUFBLFdBQ0QsSUFDS25QLEVBREwsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E0SyxLQUFLNkMsT0FBTCxHQUNLek4sRUFBWTRLLEtBQVo1SyxTQUVLd00sUUFJRzdFLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBbkQsYUFBUW9HLEtBQUtxQixZQUFZZ0IsSUFBSyxTQUFBcUUsR0FBQSxPQUFBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxHQUE2QnZQLE9BQTdCLENBQXRCLENBQVIsSUFDSy9CLEVBQVF1UixlQUFpQixHQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUcvQyxDQUNULElBT1FDLGFBQUEsV0FDTixJQUFJckUsRUFBTyxHQU9KLE9BTENBLGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkFBZ0J2QyxLQUFLNUssUUFBUTZDLFFBQVFaLE9BQXJDLE1BQ0EySSxLQUFLNkcsWUFBYScKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBQSxDQUFsQixFQUNBN0csS0FBSzZHLFlBQWEsQ0FBQSxDQUFsQixFQUNBLFFBR1YsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBVVFBLFlBQUEsU0FBYXhPLEdBQ25CLElBQUF5TyxFQUEwQjlHLEtBQUs1SyxRQUF2QjYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxJQUFBQSxRQUFTUSxJQUFBQSxLQUNYK0osRUFBUSxDQUNaRSxNQUFlekssRUFBUUcsVycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVdDLEVBQU9KLEVBQVFJLEtBQU9KLEVBQVFLLE1BQ2hFdEIsS0FBVyxTQUNYK1AsVUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1cxTyxFQUFPSSxFQUFLSixLQUFPSSxFQUFLSCxJQUh2QixFQU1kLE1BQW1CLFdBQUEwSCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBSytGLFdBQVl2RCxDQUFqQixFQUFuQixpR0FFaUJ4QyxLQUFLNUssUUFBUTRSLFdsQycKICAgICAgICAgICAgICAgICAgICAgICAgYid2cEJkLHlGa0NxcEJoQixxQkFLRixJQU9BekUsS0FBQSxXQUNRLElBQUEwRSxFQUE2RmpIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFLa0IsT0FBaEdnRyxJQUFBQSxVQUFXdEgsSUFBQUEsUUFBU3ZJLElBQUFBLE9BQVEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOFAsSUFBQUEsWUFBYUMsSUFBQUEsV0FBWUMsSUFBQUEsT0FBUUMsSUFBQUEsYUFBY0MsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFBLFlBRS9FaEYsRUFBTyxHQWlDSixPQTlCQ0EsR0FEUkEsR0FBQSxZQUFxQnZDLEtBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLRCxHQUFnQixZQUFBQyxLQUFLNEYsYUFBTCxFQUF5QnNCLEtBQUFBLEdBQWEsSUFBaEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGlCQUNtQmxILEtBQUtGLE1BQU1PLFFBQXRCLFlBRUhnSCxJQUVLOUUsRUFEUkEsR0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgYicrRSxHQUFnQixJQUNoQixnQ0FHVi9FLEdBQVE0RSxHQUFlLEdBRWxCOVAsSUFDSGtMLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FRdkMsS0FBSzRHLGFBQWIsR0FXRnJFLEdBSEFBLEdBSkFBLEVBRFFBLEVBQUEsK0JBQ1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQWEzQyxFQUFiLDJCQUVRSSxLQUFLaUcsYUFBYixHQUVBLEtBQWNyRyxFQUFkLE1BQycKICAgICAgICAgICAgICAgICAgICAgICAgYidRLFVBRUF3SCxHQUFjLElBRWpCQyxJQUVIOUUsRUFEUUEsRUFBQSxVQUNBZ0YsR0FBZSxLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHakJoRixHQUFBLFFBR1YifScsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUtcmVuZGVyZXIubWluLmpzLm1hcCcsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ3sidmVyc2lvbiI6MywiZmlsZSI6InNwbGlkZS1yZW5kZXJlci5taW4uanMiLCJzbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cmNlcyI6WyIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9BcnJvd3MvcGF0aC50cyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzL2RpcmVjdGlvbnMudHMiLCIuLi8uLi9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JjL2pzL2NvbXBvbmVudHMvRGlyZWN0aW9uL0RpcmVjdGlvbi50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvY29uc3RhbnRzL2Fycm93cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzL3Byb2plY3QudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzL2NsYXNzZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9kZWZhdWx0cy50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvY29uc3RhbnRzL2kxOG4udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmF5TGlrZS9zbGljZS9zbGljZS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24vYXBwbHkvYXBwbHkudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvdHlwZS90eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS90b0FycmF5L3RvQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L2ZvckVhY2gvZm9yRWFjaC50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MiLCIuLi8uLi9zcmMvanMvdXRpbHMvYXJyYXkvcHVzaC9wdXNoLnRzIiwiLi4vLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuL3NyYy9qcy91dGlscy9kb20vbWF0Y2hlcy9tYXRjaGVzLnRzIiwiLi4vLi4vc3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYy9qcy91dGlscy9kb20vY2hpbGQvY2hpbGQudHMiLCIuLi8uLi9zcmMvanMvdXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzL2RvbS9jaGlsZHJlbi9jaGlsZHJlbi50cyIsIi4uLy4uL3NyYy9qcy91dGlscycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvb2JqZWN0L293bktleXMvb3duS2V5cy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2JqZWN0L2Zvck93bi9mb3JPd24udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdC9hc3NpZ24vYXNzaWduLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvbWVyZ2UvbWVyZ2UudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3JlbW92ZS8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVtb3ZlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS91bml0L3VuaXQudHMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiLi4vLi4vc3JjL2pzL3V0aWxzL2Vycm9yL2Fzc2VydC9hc3NlcnQudHMiLCIuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLi4vc3JjL2pzL3V0aWxzL21hdGgvbWF0aC9tYXRoLnRzIiwiLi4vLi4vc3JjL2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy91dGlscy9zdHJpbmcvY2FtZWxUb0tlYmFiL2NhbWVsVG9LZWJhYi50cyIsIi4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3VuaXF1ZUlkL3VuaXF1ZUlkLnRzIiwiLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvRXZlbnRCaW5kZXIvRXZlbnRCaW5kZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L2VtcHR5L2VtcHR5LnRzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4uLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvRXZlbnRJbnRlcmZhY2UvRXZlbnRJbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJmYWNlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9ldmVudHMudHMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi4vLi4vc3JjL2pzL3JlbmRlcmVyL2NvbnN0YW50cy9jbGFzc2VzLnRzIiwiLi4vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4uL3NyYy9qcy9yZW5kZXJlci9jb25zdGFudHMvZGVmYXVsdHMudHMiLCIuLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvc3JjL2pzL3JlbmRlcmVyL1N0eWxlL1N0eWxlLnRzIiwiLi4vLi4vc3JjL2pzL3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kZXJlci9TcGxpZGVSZW5kZXJlci9TcGxpZGVSZW5kZXJlci50cyIsIi4uLy4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9zcmMvanMvdXRpbHMvc3RyaW5nL3BhZC9wYWQudHMiLCIuLi8uLi9zcmMvanMvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aWxzL2RvbS9xdWVyeUFsbC9xdWVyeUFsbC50cyIsIi4uLy4uL3NyYy9qcy9jb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhbnRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxcclxcbiAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgbmFtZXNwYWNlIGZvciBTVkcgZWxlbWVudHMuXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCBjb25zdCBYTUxfTkFNRV9TUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIwMC9zdmcnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhcnJvdyBwYXRoIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgUEFUSCA9ICdtMTUuNSAwLjkzMiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiNC40LTQuMy00LjQtNC40LTE0LjYtMTQuNnonO1xcclxcblxcclxcbi8qKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBTVkcgd2lkdGggYW5kIGhlaWdodC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IFNJWkUgPSA0MDtcXHJcXG4iLCIvKipcXHJcXG4gKiBFbnVtZXJhdGVzIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgTFRSID0gJ2x0cic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRW51bWVyYXRlcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzIGZyb20gcmlnaHQgdG8gbGVmdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImNvbnN0IFJUTCA9ICdydGwnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHNsaWRlcyBpbiBhIGNvbC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUQiA9IFwndHRiXCc7XFxyXFxuIiwiaW1wb3J0IHsgQVJST1dfRE9XTiwgQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiX0xFRlQsIEFSUk9XX1JJR0hULCBBUlJPV19VUCB9IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFudHMvYXJyb3dzJztcXHJcXG5pbXBvcnQgeyBSVEwsIFRUQiB9IGZyb20gJy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvZGlyZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB0aGUgRGlyZWN0aW9uIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIHJlc29sdmUoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wOiBzdHJpbmcsIGF4aXNPbmx5PzogYm9vbGVhbiwgZGlyZWN0aW9uPzogT3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbnNbJ2RpcmVjdGlvbiddICk6IHN0cmluZztcXHJcXG4gIG9yaWVudCggdmFsdWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogVGhlIHRyYW5zbGF0aW9uIG1hcCBmb3IgZGlyZWN0aW9ucy5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgT1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSUVOVEFUSU9OX01BUCA9IHtcXHJcXG4gIHdpZHRoICAgICA6IFsgJ2hlaWdodCcgXSwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICBsZWZ0ICAgICAgOiBbICd0b3AnLCAncmlnaHQnIF0sXFxyXFxuICByIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlnaHQgICAgIDogWyAnYm90dG9tJywgJ2xlZnQnIF0sXFxyXFxuICB4ICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogWyAneScgXSxcXHJcXG4gIFggICAgICAgICA6IFsgJ1knIF0sXFxyXFxuICBZICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgIDogWyAnWCcgXSxcXHJcXG4gIEFycm93TGVmdCA6IFsgQVJST1dfVVAsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19SSUdIVCBdLFxcclxcbiAgQXJyb3dSaWdodDogWyBBUlJPV19ET1dOLCBBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST1dfTEVGVCBdLFxcclxcbn07XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQgdGhhdCBhYnNvcmJzIHRoZSBkaWZmZXJlbmNlIGFtb25nIGRpcmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEByZXR1cm4gQSBEaXJlY3Rpb24gY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIERpcmVjdGlvbiggU3BsaWRlOiBTcGxpZGUsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IERpcmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25Db21wb25lbnQge1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZXNvbHZlcyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByb3ZpZGVkIHByb3BlcnR5IG5hbWUuXFxyXFxuICAgKlxcclxcbiAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBwcm9wICAgICAgLSBBIHByb3BlcnR5IG5hbWUgdG8gdHJhbnNsYXRlLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEBwYXJhbSBheGlzT25seSAgLSBPcHRpb25hbC4gSWYgYHR1cmVgLCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJucyB0aGUgc2FtZSBwcm9wZXJ0eSBmb3IgTFRSIGFuZCBSVEwuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGRpcmVjdGlvbiAtIE9wdGlvbmFsLiBTcGVjaWZ5IHRoZSBkaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYGRpcmVjdGlvbmAgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzb2x2ZSggcHJvcDogc3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImluZywgYXhpc09ubHk/OiBib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpb25zWydkaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyZWN0aW9uJ10gKTogc3RyaW5nIHtcXHJcXG4gICAgZGlyZWN0aW9uID0gZGlyZWN0aSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgaW5kZXggPSBkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWN0aW9uID09PSBSVEwgJiYgISBheGlzT25seSA/IDEgOiBkaXJlY3Rpb24gPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBUVEIgPyAwIDogLTE7XFxyXFxuXFxyXFxuICAgIHJldHVybiBPUklFTlRBVElPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05fTUFQWyBwcm9wIF0gJiYgT1JJRU5UQVRJT05fTUFQWyBwcm9wIF1bIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddXFxyXFxuICAgICAgfHwgcHJvcC5yZXBsYWNlKCAvd2lkdGh8bGVmdHxyaWdodC9pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBtYXRjaCwgb2Zmc2V0ICkgPT4ge1xcclxcbiAgICAgICAgY29uc3QgcmVwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50ID0gT1JJRU5UQVRJT05fTUFQWyBtYXRjaC50b0xvd2VyQ2FzZSgpIF1bIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCBdIHx8IG1hdGNoO1xcclxcbiAgICAgICAgcmV0dXJuIG9mZnNldCA+IDAgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZW1lbnQuY2hhckF0KCAwICkudG9VcHBlckNhc2UoKSArIHJlcGxhY2VtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5zbGljZSggMSApIDogcmVwbGFjZW1lbnQ7XFxyXFxuICAgICAgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogT3JpZW50cyB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlIHRvd2FyZHMgdGhlIGN1cnJlbnQgZGlyZWN0aW9uLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIG9yaWVudC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgb3JpZW50ZWQgdmFsdWUuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvcmllbnQoIHZhbHVlOiBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiB2YWx1ZSAqICggb3B0aW9ucy5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uID09PSBSVEwgPyAxIDogLTEgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4ge1xcclxcbiAgICByZXNvbHZlLFxcclxcbiAgICBvcmllbnQsXFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG59XFxyXFxuIiwiY29uc3QgQVJST1cgPSBcJ0Fycm93XCc7XFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBjb25zdCBBUlJPV19MRUZUICA9IGAkeyBBUlJPVyB9TGVmdGA7XFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBjb25zdCBBUlJPV19SSUdIVCA9IGAkeyBBUlJPVyB9UmlnaHRgO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgQVJST1dfVVAgICAgPSBgJHsgQVJST1cgfVVwYDtcXHJcXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IGNvbnN0IEFSUk9XX0RPV04gID0gYCR7IEFSUk9XIH1Eb3duYDsiLCIvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogVGhlIHByb2plY3QgY29kZS5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgUFJPSkVDVF9DT0RFID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidzcGxpZGUnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBkYXRhIGF0dHJpYnV0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcHJlZml4LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbmV4cG9ydCBjb25zdCBEQVRBX0FUVFJJQlVURSA9IGBkYXRhLSR7IFBST0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUNUX0NPREUgfWA7XFxyXFxuIiwiaW1wb3J0IHsgUFJPSkVDVF9DT0RFIH0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4vcHJvamVjdCc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHByZWZpeCBmb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzZXMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4xLjBcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuY29uc3QgQ0xBU1NfUFJFRklYID0gYCR7IFBST0pFQ1RfQ09ERSB9X19gOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgcHJlZml4IGZvciBzdGF0dXMgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4xLjBcXHJcXG4gKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY29uc3QgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICdpcy0nO1xcclxcblxcclxcbi8qIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBBbGwgY2xhc3NlcyBhcyBjb25zdGFudHMuXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBjb25zdCBDTEFTU19ST09UICAgICAgICAgICAgPSBQUk9KRUNUX0NPRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19UUkFDSyAgICAgICAgICAgPSBgJHsgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1BSRUZJWCB9dHJhY2tgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19MSVNUICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9bGlzdGA7XFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBDTEFTU19TTElERSAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19DTE9ORSAgICAgICAgICAgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCR7IENMQVNTX1NMSURFIH0tLWNsb25lYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0NPTlRBSU5FUiAgICAgICA9IGAkeyBDTEFTU19TTElERSB9X19jb250YWluZXJgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQVJST1dTICAgICAgICAgID0gYCR7IENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19QUkVGSVggfWFycm93c2A7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1hcnJvd2A7XFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19BUlJPV19QUkVWICAgICAgPSBgJHsgQ0xBU1NfQVJST1cgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictLXByZXZgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPV19ORVhUICAgICAgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYCR7IENMQVNTX0FSUk9XIH0tLW5leHRgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUEFHSU5BVElPTiAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9cGFnaW5hdGlvbmAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QQUdJTkFUSU9OX1BBR0UgPSBgJHsgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1BBR0lOQVRJT04gfV9fcGFnZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUk9HUkVTUyAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1wcm9ncmVzc2A7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBDTEFTU19QUk9HUkVTU19CQVIgICAgPSBgJHsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BST0dSRVNTIH1fX2JhcmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1RPR0dMRSAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH10b2dnbGVgO1xcclxcbmV4cG9ydCBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgQ0xBU1NfVE9HR0xFX1BMQVkgICAgID0gYCR7IENMQVNTX1RPR0dMRSB9XycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfcGxheWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1RPR0dMRV9QQVVTRSAgICA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgJHsgQ0xBU1NfVE9HR0xFIH1fX3BhdXNlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1NQSU5ORVIgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXNwaW5uZXJgO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgY29uc3QgQ0xBU1NfU1IgICAgICAgICAgICAgID0gYCR7IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUkVGSVggfXNyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfSU5JVElBTElaRUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1pbml0aWFsaXplZGA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBDTEFTU19BQ1RJVkUgICAgICAgICAgPSBgJHsgU1RBVFVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19DTEFTU19QUkVGSVggfWFjdGl2ZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1BSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWICAgICAgICAgICAgPSBgJHsgU1RBVFVTX0NMQVNTX1BSRUZJWCB9cHJldmA7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBDTEFTU19ORVhUICAgICAgICAgICAgPSBgJHsgU1RBVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVU19DTEFTU19QUkVGSVggfW5leHRgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19WSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSUJMRSAgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfXZpc2libGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTE9BRElORyAgICAgICAgID0gYCR7IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEFUVVNfQ0xBU1NfUFJFRklYIH1sb2FkaW5nYDtcXHJcXG5leHBvcnQgY29uc3QgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX0ZPQ1VTX0lOICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMtaW5gO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19PVkVSRkxPVyAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW92ZXJmbG93YDtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIGFycmF5IHdpdGggYWxsIHN0YXR1cyBjbGFzc2VzIGV4YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcHQgZm9yIGBpcy1pbml0aWFsaXplZGAuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNUQVRVU19DTEFTU0VTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IFtcXHJcXG4gIENMQVNTX0FDVElWRSxcXHJcXG4gIENMQVNTX1ZJU0lCTEUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgQ0xBU1NfUFJFVixcXHJcXG4gIENMQVNTX05FWFQsXFxyXFxuICBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTE9BRElORyxcXHJcXG4gIENMQVNTX0ZPQ1VTX0lOLFxcclxcbiAgQ0xBU1NfT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVJGTE9XLFxcclxcbl07XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG9mIGNsYXNzZXMgZm9yIGVsZW1lbnRzIHRoYXQgU3BsaWRlIGR5bmFtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxseSBjcmVhdGVzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU0VTID0ge1xcclxcbiAgc2xpZGUgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICA6IENMQVNTX1NMSURFLFxcclxcbiAgY2xvbmUgICAgIDogQ0xBU1NfQ0xPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFLFxcclxcbiAgYXJyb3dzICAgIDogQ0xBU1NfQVJST1dTLFxcclxcbiAgYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICA6IENMQVNTX0FSUk9XLFxcclxcbiAgcHJldiAgICAgIDogQ0xBU1NfQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BSRVYsXFxyXFxuICBuZXh0ICAgICAgOiBDTEFTU19BUlJPV19ORVhULFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXFxyXFxuICBwYWdlICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogQ0xBU1NfUEFHSU5BVElPTl9QQUdFLFxcclxcbiAgc3Bpbm5lciAgIDogQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NQSU5ORVIsXFxyXFxufTtcXHJcXG4iLCJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU0VTIH0gZnJvbSAnLi9jbGFzcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlcyc7XFxyXFxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4vaTE4bic7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGRlZmF1bHQgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuXFxyXFxuICogTm90ZSB0aGF0IHRoaXMgY29sbGVjdGlvbiBkb2VzIG5vdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29udGFpbiBhbGwgb3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgREVGQVVMVFM6IE9wdGlvbnMgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIge1xcclxcbiAgdHlwZSAgICAgICAgICAgICAgOiAnc2xpZGUnLFxcclxcbiAgcm8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibGUgICAgICAgICAgICAgIDogJ3JlZ2lvbicsXFxyXFxuICBzcGVlZCAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgOiA0MDAsXFxyXFxuICBwZXJQYWdlICAgICAgICAgICA6IDEsXFxyXFxuICBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVTdGF0dXMgICAgICAgOiB0cnVlLFxcclxcbiAgYXJyb3dzICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdHJ1ZSxcXHJcXG4gIHBhZ2luYXRpb24gICAgICAgIDogdHJ1ZSxcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXFxyXFxuICBpbnRlcnZhbCAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiA1MDAwLFxcclxcbiAgcGF1c2VPbkhvdmVyICAgICAgOiB0cnVlLFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhdXNlT25Gb2N1cyAgICAgIDogdHJ1ZSxcXHJcXG4gIHJlc2V0UHJvZ3Jlc3MgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICA6IHRydWUsXFxyXFxuICBlYXNpbmcgICAgICAgICAgICA6ICdjdWJpYy1iZXppZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKDAuMjUsIDEsIDAuNSwgMSknLFxcclxcbiAgZHJhZyAgICAgICAgICAgICAgOiB0cnUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSxcXHJcXG4gIGRpcmVjdGlvbiAgICAgICAgIDogJ2x0cicsXFxyXFxuICB0cmltIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNwYWNlICAgICAgICAgOiB0cnVlLFxcclxcbiAgZm9jdXNhYmxlTm9kZXMgICAgOiAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCBzZWxlY3QsIGlmcmFtZScsXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgbGl2ZSAgICAgICAgICAgICAgOiB0cnVlLFxcclxcbiAgY2xhc3NlcyAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIDogQ0xBU1NFUyxcXHJcXG4gIGkxOG4gICAgICAgICAgICAgIDogSTE4TiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZWR1Y2VkTW90aW9uOiB7XFxyXFxuICAgIHNwZWVkICAgICAgOiAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gICAgcmV3aW5kU3BlZWQ6IDAsXFxyXFxuICAgIGF1dG9wbGF5ICAgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXCdwYXVzZVwnLFxcclxcbiAgfSxcXHJcXG59OyIsIi8qKlxcclxcbiAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29sbGVjdGlvbiBvZiBpMThuIHN0cmluZ3MuXFxyXFxuICpcXHJcXG4gKiBAc2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEkxOE4gPSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgcHJldiAgICAgIDogJ1ByZXZpb3VzIHNsaWRlJyxcXHJcXG4gIG5leHQgICAgICA6IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnTmV4dCBzbGlkZScsXFxyXFxuICBmaXJzdCAgICAgOiAnR28gdG8gZmlyc3Qgc2xpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImRlJyxcXHJcXG4gIGxhc3QgICAgICA6ICdHbyB0byBsYXN0IHNsaWRlJyxcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuICBzbGlkZVggICAgOiAnR28gdG8gc2xpZGUgJXMnLFxcclxcbiAgcGFnZVggICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6ICdHbyB0byBwYWdlICVzJyxcXHJcXG4gIHBsYXkgICAgICA6ICdTdGFydCBhdXRvcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXknLFxcclxcbiAgcGF1c2UgICAgIDogJ1BhdXNlIGF1dG9wbGF5JyxcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICBjYXJvdXNlbCAgOiAnY2Fyb3VzZWwnLFxcclxcbiAgc2xpZGUgICAgIDogJ3NsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZScsXFxyXFxuICBzZWxlY3QgICAgOiAnU2VsZWN0IGEgc2xpZGUgdG8gc2hvdyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLFxcclxcbiAgc2xpZGVMYWJlbDogJyVzIG9mICVzJywgLy8gWyBzbGlkZSBudW1iZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIF0gLyBbIHNsaWRlIHNpemUgXVxcclxcbn07XFxyXFxuIiwiLyoqXFxyXFxuICogVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGljZSBtZXRob2QgZm9yIGFuIGFycmF5LWxpa2Ugb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBwYXJhbSBhcnJheUxpa2UgLSBBbiBhcnJheS1saWtlIG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICogQHBhcmFtIHN0YXJ0ICAgICAtIE9wdGlvbmFsLiBBIHN0YXJ0IGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleC5cXHJcXG4gKiBAcGFyYW0gZW5kICAgICAgIC0gT3B0aW9uYWwuIEEgZW5kIGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBzbGljZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIGVsZW1lbnRzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzbGljZTwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVD4oIGFycmF5TGlrZTogQXJyYXlMaWtlPFQ+LCBzdGFydD86IG51bWJlciwgZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz86IG51bWJlciApOiBUW10ge1xcclxcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2UuY2FsbCggYXJyYXlMaWtlLCBzdGFydCwgZW5kICk7XFxyXFxufVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJpbXBvcnQgeyBBbnlGdW5jdGlvbiwgU2hpZnROIH0gZnJvbSBcJy4uLy4uLy4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImtlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDcmVhdGUgYSBmdW5jdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gd2hlcmUgcHJvdmlkZWQgYXJndW1lbnRzIGFyZSBib3VuZC5cXHJcXG4gKiBgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXNgIHBhcmFtZXRlciB3aWxsIGJlIGFsd2F5cyBudWxsLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBwYXJhbSBmdW5jIC0gQSBmdW5jdGlvbi5cXHJcXG4gKiBAcGFyYW0gYXJncyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBcmd1bWVudHMgdG8gYmluZCB0byB0aGUgZnVuY3Rpb24uXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHJldHVybiBBIGZ1bmN0aW9uIHdoZXJlIGFyZ3VtZW50cyBhcmUgYm91bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhcHBseTxGIGV4dGVuZHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFueUZ1bmN0aW9uLCBBIGV4dGVuZHMgYW55W10gPSBhbnlbXT4oXFxyXFxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYzogRixcXHJcXG4gIC4uLmFyZ3M6IEFcXHJcXG4pOiAoIC4uLmFyZ3M6IFNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ048UGFyYW1ldGVyczxGPiwgQVtcXCJsZW5ndGhcXCJdPiApID0+IFJldHVyblR5cGU8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Y+O1xcclxcblxcclxcbi8qKlxcclxcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoZXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm92aWRlZCBhcmd1bWVudHMgYXJlIGJvdW5kLlxcclxcbiAqIGB0aGlzYCBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21ldGVyIHdpbGwgYmUgYWx3YXlzIG51bGwuXFxyXFxuICpcXHJcXG4gKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtIGZ1bmMgLSBBIGZ1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gYXBwbHkoIGZ1bmM6IEFueUZ1bmN0aW9uICk6IGFueSB7XFxyXFxuICAvLyBlc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtcywgcHJlZmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1zcHJlYWRcXHJcXG4gIHJldHVybiBmdW5jLmJpbmQoIG51bGwsIC4uLnNsaWNlKCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnRzLCAxICkgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQW55RnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFwcGx5IH0gZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4uL2Z1bmN0aW9uJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGFsaWFzIG9mIHRoZSB0eXBlIGNoZWNrIGZ1bmN0aW9uLlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSB0eXBlICAgIC0gQSB0eXBlLlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyB0aGUgc3BlY2lmaWVkIHR5cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLlxcclxcbiAqL1xcclxcbmZ1bmN0aW9uIHR5cGVPZiggdHlwZTogc3RyaW5nLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdDogdW5rbm93biApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiB0eXBlb2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YmplY3QgPT09IHR5cGU7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDaGVja3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYW4gb2JqZWN0IG9yIG5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgaXMgYW4gb2JqZWN0LCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KCBzdWJqZWN0OiB1bmtub3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiApOiBzdWJqZWN0IGlzIG9iamVjdCB7XFxyXFxuICByZXR1cm4gISBpc051bGwoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidWJqZWN0ICkgJiYgdHlwZU9mKCAnb2JqZWN0Jywgc3ViamVjdCApO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCBpcyBhbiBhcnJheSBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYW4gYXJyYXksIG9yIG90aGVydycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNBcnJheTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDxUPiggc3ViamVjdDogdW5rbm93biApID0+IHN1YmplY3QgaXMgVFtdID0gQXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5LmlzQXJyYXk7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZW4gc3ViamVjdCBpcyBhIGZ1bmN0aW9uIG9yIG5vdC5cXHJcXG4gKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpc0Z1bmN0aW9uID0gPCggc3ViamVjdDogdW5rbm93biApID0+IHN1YmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWN0IGlzIEFueUZ1bmN0aW9uPmFwcGx5KCB0eXBlT2YsICdmdW5jdGlvbicgKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBhIHN0cmluZyBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYSBzdHJpbmcsIG9yIG90aGVyd2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPCggc3ViamVjdDogdW5rbm93biApID0+IHN1YmplY3QgaXMgc3RyaW5nPmFwcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieSggdHlwZU9mLCAnc3RyaW5nJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYHVuZGVmaW5lZGAgb3Igbm90LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEBwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjay5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBgdW5kZWZpbmVkYCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbmV4cG9ydCBjb25zdCBpc1VuZGVmaW5lZCA9IDwoIHN1YmplY3Q6IHVuaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJub3duICkgPT4gc3ViamVjdCBpcyB1bmRlZmluZWQ+YXBwbHkoIHR5cGVPZiwgJ3UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmRlZmluZWQnICk7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2l2ZW4gc3ViamVjdCBpcyBgbnVsbGAgb3Igbm90LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGBudWxsYCwgb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gaXNOdWxsKCBzdWJqZWN0OiB1bmtub3duICk6IHN1YmplY3QgaXMgbnVsbCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcmV0dXJuIHN1YmplY3QgPT09IG51bGw7XFxyXFxufVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4vKipcXHJcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIEhUTUxFbGVtZW50IGluc3RhbmNlIG9yIG5vdC5cXHJcXG4gKiBUaGlzIG1ldGhvZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGFrZXMgaW50byBhY2NvdW50IHdoaWNoIGB3aW5kb3dgIHRoZSBub2RlIGJlbG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmdzIHRvLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzdWJqZWN0IGlzIGFuIEhUTUxFbGVtZW50IGluc3RhbmNlLCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGlzSFRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFbGVtZW50KCBzdWJqZWN0OiB1bmtub3duICk6IHN1YmplY3QgaXMgSFRNTEVsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50IHtcXHJcXG4gIHRyeSB7XFxyXFxuICAgIHJldHVybiBzdWJqZWN0IGluc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZW9mICggKCBzdWJqZWN0IGFzIE5vZGUgKS5vd25lckRvY3VtZW50LmRlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x0VmlldyB8fCB3aW5kb3cgKS5IVE1MRWxlbWVudDtcXHJcXG4gIH0gY2F0Y2ggKCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApIHtcXHJcXG4gICAgcmV0dXJuIGZhbHNlO1xcclxcbiAgfVxcclxcbn0iLCJpbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IHsgaXNBcnJheSB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFB1c2ggdGhlIHByb3ZpZGVkIHZhbHVlIHRvIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhcnJheSBpZiB0aGUgdmFsdWUgaXMgbm90IGFuIGFycmF5LlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSB2YWx1ZSAtIEEgdmFsdWUgdG8gcHVzaC5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAcmV0dXJuIEFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHZhbHVlLCBvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHZhbHVlIGl0c2VsZiBpZiBpdCBpcyBhbHJlYWR5IGFuIGFycmF5LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheTxUPiggdmFsdWU6IFQgfCBUW10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IFRbXSB7XFxyXFxuICByZXR1cm4gaXNBcnJheSggdmFsdWUgKSA/IHZhbHVlIDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFsgdmFsdWUgXTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgdG9BcnJheSB9IGZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi90b0FycmF5L3RvQXJyYXknO1xcclxcblxcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgZXh0ZW5kZWQgYEFycmF5I2ZvckVhY2hgIG1ldGhvZCB0aGF0IGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2NlcHRzIGEgc2luZ2xlIHZhbHVlIGFzIGFuIGFyZ3VtZW50LlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSB2YWx1ZXMgICAtIEEgdmFsdWUgb3IgdmFsdWVzIHRvIGl0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlIG92ZXIuXFxyXFxuICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoPFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPiggdmFsdWVzOiBUIHwgVFtdLCBpdGVyYXRlZTogKCB2YWx1ZTogVCwgaW5kZXg6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIGFycmF5OiBUW10gKSA9PiB2b2lkICk6IHZvaWQge1xcclxcbiAgdG9BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyYXkoIHZhbHVlcyApLmZvckVhY2goIGl0ZXJhdGVlICk7XFxyXFxufVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSBcJy4uL3RvQXJyYXkvdG9BcnJheVwnOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBFeHRlbmRlZCBgQXJyYXkjcHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2goKWAgdGhhdCBhY2NlcHRzIGFuIGl0ZW0gb3IgYW4gYXJyYXkgd2l0aCBpdGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gYXJyYXkgLSBBbiBhcnJheSB0byBwdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaCBpdGVtcy5cXHJcXG4gKiBAcGFyYW0gaXRlbXMgLSBBbiBpdGVtIG9yIGl0ZW1zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBwdXNoLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIHByb3ZpZGVkIGFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSBpdHNlbGYuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHB1c2g8VD4oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcnJheTogVFtdLCBpdGVtczogVCB8IFRbXSApOiBUW10ge1xcclxcbiAgYXJyYXkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B1c2goIC4uLnRvQXJyYXkoIGl0ZW1zICkgKTtcXHJcXG4gIHJldHVybiBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZCBieSB0aGUgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZpZGVkIHNlbGVjdG9yIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xtICAgICAgLSBBbiBlbGVtZW50IHRvIGNoZWNrLlxcclxcbiAqIEBwYXJhbSBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgLSBBIHNlbGVjdG9yIHRvIHRlc3QuXFxyXFxuICpcXHJcXG4gKiBAcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBgdHJ1ZWAgaWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG1hdGNoZXMoIGVsbTogRWxlbWVudCB8IEV2ZW50VGFyZ2V0LCBzZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHN0cmluZyApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiBpc0hUTUxFbGVtZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgZWxtICkgJiYgKCBlbG1bICdtc01hdGNoZXNTZWxlY3RvcicgXSB8fCBlbG0ubWEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoZXMgKS5jYWxsKCBlbG0sIHNlbGVjdG9yICk7XFxyXFxufVxcclxcbiIsImltJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInBvcnQgeyBjaGlsZHJlbiB9IGZyb20gJy4uL2NoaWxkcmVuL2NoaWxkcmVuJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmV0dXJucyBhIGNoaWxkIGVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHRhZyBvciBjbGFzcyBuYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IgdG8gZmlsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlciBjaGlsZHJlbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBtYXRjaGVkIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlsZCBlbGVtZW50IGlmIGF2YWlsYWJsZSwgb3Igb3RoZXJ3aXNlIGB1bmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gY2hpbGQ8RSBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBIVE1MRWxlbWVudD4oIHBhcmVudDogSFRNTEVsZW1lbnQsIHNlbGVjdG9yPzonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZyApOiBFIHwgdW5kZWZpbmVkIHtcXHJcXG4gIHJldHVybiBzZWxlY3RvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBjaGlsZHJlbjxFPiggcGFyZW50LCBzZWxlY3RvciApWyAwIF0gOiBwYXJlbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpcnN0RWxlbWVudENoaWxkIGFzIEU7XFxyXFxufVxcclxcbiIsImltcG9ydCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrZSc7XFxyXFxuaW1wb3J0IHsgbWF0YyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoZXMgfSBmcm9tICcuLi9tYXRjaGVzL21hdGNoZXMnO1xcclxcblxcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gKiBGaW5kcyBjaGlsZHJlbiB0aGF0IGhhcyB0aGUgc3BlY2lmaWVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YWcgb3IgY2xhc3MgbmFtZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLSBBIHBhcmVudCBlbGVtZW50LlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvciAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25hbC4gQSBzZWxlY3RvciB0byBmaWx0ZXIgY2hpbGRyZW4uXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHJldHVybiBBbiBhcnJheSB3aXRoIGZpbHRlcmVkIGNoaWxkcmVuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRyZW48RSBleHRlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBIVE1MRWxlbWVudD4oIHBhcmVudDogSFRNTEVsZW1lbnQsIHNlbGVjdG9yPzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZyApOiBFW10ge1xcclxcbiAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQgPyBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2UoIHBhcmVudC5jaGlsZHJlbiApIGFzIEVbXSA6IFtdO1xcclxcbiAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZWxlY3RvciA/IGNoaWxkcmVuLmZpbHRlciggY2hpbGQgPT4gbWF0Y2hlcyggYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaWxkLCBzZWxlY3RvciApICkgOiBjaGlsZHJlbjtcXHJcXG59XFxyXFxuIiwiLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEFuIGFsaWFzIG9mIGBPYmplY3Qua2V5cygpYFxcclxcbiAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3Qgb3duS2V5cyA9IE9iamVjdC5rZXlzOyIsImltcG9ydCB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBvd25LZXlzIH0gZnJvbSAnLi4vb3duS2V5cy9vd25LZXlzJztcXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuLyoqXFxyXFxuICogSXRlcmF0ZXMgb3ZlciB0aGUgcHJvdmlkZWQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdCBieSBvd24gZW51bWVyYWJsZSBrZXlzIHdpdGggY2FsbGluZyB0aGUgaXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhdGVlIGZ1bmN0aW9uLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIEFuIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxyXFxuICogQHBhcmFtIGl0ZXJhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZSAtIEFuIGl0ZXJhdGVlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYHZhbHVlYCBhbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGBrZXlgIGFzIGFyZ3VtZW50cy5cXHJcXG4gKiBAcGFyYW0gcmlnaHQgICAgLSBJZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYHRydWVgLCB0aGUgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdCBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgZW5kIGxpa2UgYGZvckVhY2hSaWdodCgpYC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcmV0dXJuIEEgcHJvdmlkZWQgb2JqZWN0IGl0c2VsZi5cXHJcXG4gKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0IGZ1bmN0aW9uIGZvck93bjxUIGV4dGVuZHMgb2JqZWN0PihcXHJcXG4gIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3Q6IFQsXFxyXFxuICBpdGVyYXRlZTogKCB2YWx1ZTogVFsga2V5b2YgVCBdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5OiBzdHJpbmcgKSA9PiBib29sZWFuIHwgdm9pZCxcXHJcXG4gIHJpZ2h0PzogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW5cXHJcXG4pOiBUIHtcXHJcXG4gIGlmICggb2JqZWN0ICkge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCByaWdodCA/IG93bktleXMoIG9iamVjdCApLnJldmVyc2UoKSA6IG93bktleXMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBvYmplY3QgKSApLmZvckVhY2goIGtleSA9PiB7XFxyXFxuICAgICAga2V5ICE9PSAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIl9fcHJvdG9fXycgJiYgaXRlcmF0ZWUoIG9iamVjdFsga2V5IF0sIGtleSApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxufVxcclxcbiIsImltcG9ydCB7IENhc3QsIEhlYWQsIFB1c2gsIFJlc29sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInZlLCBTaGlmdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IGZvck93IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4gfSBmcm9tICcuLi9mb3JPd24vZm9yT3duJztcXHJcXG5cXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogQXNzaWducyBVIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBUIC0gQW4gb2JqZWN0IHRvIGFzc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSBVIC0gQW4gb2JqZWN0IHRvIGFzc2lnbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSBBc3NpZ248VCwgVT4gPSBPbWl0PFQsIGtleW9mIFU+ICYgVTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogUmVjdXJzaXZlbHkgYXNzaWducyBVW10gdG8gVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYmplY3QgdG8gYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBIHR1cGxlIGNvbnRhaW5zIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhc3NpZ25lZCBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0IHR5cGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgQXNzaWduZWQ8VCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmplY3RbXSwgTiBleHRlbmRzIG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsIEMgZXh0ZW5kcyBhbnlbXSA9IFtdPiA9IHtcXHJcXG4gIDA6IFQsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgMTogQXNzaWduZWQ8QXNzaWduPFQsIEhlYWQ8VT4+LCBTaGlmdDxVPiwgTiwgUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ1c2g8Qz4+LFxcclxcbn1bIENbJ2xlbmd0aCddIGV4dGVuZHMgTiA/IDAgOiAxIF0gZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgaW5mZXIgQSA/IENhc3Q8QSwgYW55PiA6IG5ldmVyO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0OiBUICk6IFQ7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdPihcXHJcXG4gIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IFQsXFxyXFxuICAuLi5zb3VyY2VzOiBVXFxyXFxuKTogUmVzb2x2ZTxBc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWQ8VCwgVSwgVVsnbGVuZ3RoJ10+Plxcclxcblxcclxcbi8qKlxcclxcbiAqIEFzc2kiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ25zIGFsbCBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9mIGFsbCBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdHMgdG8gdGhlIHByb3ZpZGVkIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gb2JqZWN0IGFzc2lnbmVkIHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wZXJ0aWVzIG9mIHRoZSBzb3VyY2VzIHRvLlxcclxcbiAqL1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFueSB7XFxyXFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0LXBhcmFtcywgcHJlZmVyLXNwcmVhZFxcclxcbiAgc2xpY2UoIGFyZ3VtZW50cywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDEgKS5mb3JFYWNoKCBzb3VyY2UgPT4ge1xcclxcbiAgICBmb3JPd24oIHNvdXJjZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICggdmFsdWUsIGtleSApID0+IHtcXHJcXG4gICAgICBvYmplY3RbIGtleSBdID0gc28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJjZVsga2V5IF07XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0gKTtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICByZXR1cm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBDYXN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgSGVhZCwgUHVzaCwgUmVzb2x2ZSwgU2hpZnQgfSBmcm9tICcuLi8uLi8uLi90eXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJzsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi90eXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZS90eXBlJztcXHJcXG5pbXBvcnQgeyBmb3JPd24gfSBmcm9tICcuLi9mb3JPd24vZm8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIick93bic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogTWVyZ2VzIFUgdG8gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1QuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYmplY3QgdG8gbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcmdlIFUgaW50by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBbiBvYmplY3QgdG8gbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcmdlIHByb3BlcnRpZXMgZnJvbS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVyZ2VkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlIE1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JnZTxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0PiA9IE9taXQ8VCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGtleW9mIFU+ICYge1xcclxcbiAgWyBLIGluICgga2V5b2YgVCAmIGtleW9mIFUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXTogVVsgSyBdIGV4dGVuZHMgb2JqZWN0XFxyXFxuICAgID8gVVsgSyBdIGV4dGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIGFueVtdXFxyXFxuICAgICAgPyBVWyBLIF1cXHJcXG4gICAgICA6IFRbIEsgXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0ZW5kcyBvYmplY3RcXHJcXG4gICAgICAgID8gTWVyZ2U8VFsgSyBdLCBVWyBLIF0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPiBleHRlbmRzIGluZmVyIEEgPyBSZXNvbHZlPENhc3Q8QSwgb2JqZWN0Pj4gOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZXJcXHJcXG4gICAgICAgIDogVVsgSyBdXFxyXFxuICAgIDogVVsgSyBdO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ259ICYgT21pdDxVLCBrZXlvZiBUPjtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZWN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzaXZlbHkgbWVyZ2VzIFVbXSB0byBULlxcclxcbiAqXFxyXFxuICogQHR5cGVQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gVCAtIEFuIG9iamVjdCB0byBhc3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVSAtIEEgdHVwbGUgY29udGFpbnMgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgdHlwZSBNZXJnZWQ8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RbXSwgTiBleHRlbmRzIG51bWJlciwgQyBleHRlbmRzIGFueVtdID0gW10+ID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gIDA6IFQsXFxyXFxuICAxOiBNZXJnZWQ8TWVyZ2U8VCwgSGVhZDxVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIj4+LCBTaGlmdDxVPiwgTiwgUHVzaDxDPj4sXFxyXFxufVsgQ1snbGVuZ3RoJ10gZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZHMgTiA/IDAgOiAxIF0gZXh0ZW5kcyBpbmZlciBBID8gQ2FzdDxBLCBhbnk+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5ldmVyO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gbWVyZ2U8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXT4oXFxyXFxuICBvYmplY3Q6IFQsXFxyXFxuICAuLi5zb3VyY2VzOiBVXFxyXFxuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6IFJlc29sdmU8TWVyZ2VkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogUmVjdXJzaXZlbHkgbWVyZ2VzIHNvdXJjZSBwcm9wZXJ0aWVzIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbyB0aGUgb2JqZWN0LlxcclxcbiAqIEJlIGF3YXJlIHRoYXQgdGhpcyBtZXRob2QgZG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgbm90IG1lcmdlIGFycmF5cy4gVGhleSBhcmUganVzdCBkdXBsaWNhdGVkIGJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBgc2xpY2UoKWAuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCB0byBtZXJnZSBwcm9wZXJ0aWVzIHRvLlxcclxcbiAqXFxyXFxuICogQHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gQSBuZXcgb2JqZWN0IHdpdGggbWVyZ2VkIHByb3BlcnRpZXMuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGVuZHMgb2JqZWN0Piggb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdDogVCApOiBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBwcmVmZXItcmVzdC1wYXJhbXNcXHJcXG4gIHNsaWNlKCBhcmd1bWVudHMsIDEgKS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yRWFjaCggc291cmNlID0+IHtcXHJcXG4gICAgZm9yT3duKCBzb3VyY2UsICggdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlLCBrZXkgKSA9PiB7XFxyXFxuICAgICAgaWYgKCBpc0FycmF5KCB2YWx1ZSApICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICAgIG9iamVjdFsga2V5IF0gPSB2YWx1ZS5zbGljZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9IGVsc2UgaWYgKCBpc09iamVjdCggdmFsdWUgKSApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgICBvYmplY3RbIGtleSBdID0gbWVyZ2UoIHt9LCBpc09iamVjdCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdFsga2V5IF0gKSA/IG9iamVjdFsga2V5IF0gOiB7fSwgdmFsdWUgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgfSBlbHNlIHtcXHJcXG4gICAgICAgIG9iamVjdFsga2V5IF0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWU7XFxyXFxuICAgICAgfVxcclxcbiAgICB9ICk7XFxyXFxuICB9ICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59XFxyXFxuIiwiaW1wb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IGZvckVhY2ggfSBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFJlbW92ZXMgdGhlIHByb3ZpZGVkIG5vZGUgZnJvbSBpdHMgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVudC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBub2RlcyAtIEEgbm9kZSBvciBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29kZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlKCBub2RlczogTm9kZSB8IE5vZGVbXSApOiB2b2lkIHtcXHJcXG4gIGZvckVhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKCBub2Rlcywgbm9kZSA9PiB7XFxyXFxuICAgIGlmICggbm9kZSAmJiBub2RlLnBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnROb2RlICkge1xcclxcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIG5vZGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfSApO1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBcHBlbmRzIGBweGAgdG8gdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm92aWRlZCBudW1iZXIuXFxyXFxuICogSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZywganVzdCByZXR1cm5zIGl0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSAtIEEgdmFsdWUgdG8gYXBwZW5kIGBweGAgdG8uXFxyXFxuICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHJldHVybiBBIHN0cmluZyB3aXRoIHRoZSBDU1MgdW5pdC5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHVuaXQoIHZhbHVlOiBudW1iZXIgfCBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnICk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gaXNTdHJpbmcoIHZhbHVlICkgPyB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUgOiB2YWx1ZSA/IGAkeyB2YWx1ZSB9cHhgIDogXCdcJztcXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydCB7IFBST0pFQ1RfQ09ERSB9IGZyb20gXCcuLi8uLi8uLi9jb25zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRzL3Byb2plY3QnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRocm93cyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYW4gZXJyb3IgaWYgdGhlIHByb3ZpZGVkIGNvbmRpdGlvbiBpcyBmYWxzeS5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAcGFyYW0gY29uZGl0aW9uIC0gSWYgZmFsc3ksIGFuIGVycm9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyB0aHJvd24uXFxyXFxuICogQHBhcmFtIG1lc3NhZ2UgICAtIE9wdGlvbmFsLiBBICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZXNzYWdlIHRvIGRpc3BsYXkuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhc3NlcnQoIGNvbmRpdGlvbjogYW55LCBtZXNzYWdlPzogc3RyaW5nICk6IHZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkIHtcXHJcXG4gIGlmICggISBjb25kaXRpb24gKSB7XFxyXFxuICAgIHRocm93ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuZXcgRXJyb3IoIGBbJHsgUFJPSkVDVF9DT0RFIH1dICR7IG1lc3NhZ2UgfHwgJyciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1gICk7XFxyXFxuICB9XFxyXFxufVxcclxcbiIsImV4cG9ydCBjb25zdCB7IG1pbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heCwgZmxvb3IsIGNlaWwsIGFicyB9ID0gTWF0aDtcXHJcXG4iLCIvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQ29udmVydHMgdGhlIHByb3ZpZGVkIHN0cmluZyBpbiB0aGUgY2FtZWwgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2UgdG8gdGhlIGtlYmFiIGNhc2UuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZyAtIEEgc3RyaW5nIHRvIGNvbnZlcnQuXFxyXFxuICovXFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjYW1lbFRvS2ViYWIoIHN0cmluZzogc3RyaW5nICk6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKCAvKFthLXowLTldKShbQS1aXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpL2csIFwnJDEtJDJcJyApLnRvTG93ZXJDYXNlKCk7XFxyXFxufVxcclxcbiIsImltcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBwYWQgfSBmcm9tICcuLi9wYWQvcGFkJztcXHJcXG5cXHJcXG5cXHJcXG4vKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogU3RvcmVzIHVuaXF1ZSBJRHMuXFxyXFxuICpcXHJcXG4gKiBAc2luYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIDMuMC4wXFxyXFxuICovXFxyXFxuY29uc3QgaWRzOiBSZWNvcmQ8c3RyaW5nLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyPiA9IHt9O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJldHVybnMgYSBzZXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVudGlhbCB1bmlxdWUgSUQgYXMgXFwieyBwcmVmaXggfS17IG51bWJlciB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIi5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwcmVmaXggLSBBIHByZWZpeCBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBJRC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSWQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcmVmaXg6IHN0cmluZyApOiBzdHJpbmcge1xcclxcbiAgcmV0dXJuIGAkeyBwcmVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l4IH0keyBwYWQoICggaWRzWyBwcmVmaXggXSA9ICggaWRzWyBwcmVmaXggXSB8fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMCApICsgMSApICkgfWA7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBlbXB0eSwgZm8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIickVhY2ggfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFRoZSB0eXBlIGZvciBhbiBFdmVudFRhcmdldCBvciBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBFdmVudFRhcmdldCBvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHNpbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA0LjAuMFxcclxcbiAqL1xcclxcbnR5cGUgRXZlbnRUYXJnZXRzID0gRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0IHwgRXZlbnRUYXJnZXRbXTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ludGVyZmFjZSBmb3IgdGhlIEV2ZW50QmluZGVyIG9iamVjdC5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBFdmVudEJpbmRlck9iamVjdCB7XFxyXFxuICBiaW5kKCB0YXJnZXQ6IEV2ZW50VGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdldHMsIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24sIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyApOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZFxcclxcbiAgdW5iaW5kKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgRXZlbnRUYXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0W10sIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrPzogQW55RnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uICk6IHZvaWQ7XFxyXFxuICBkaXNwYXRjaDxUPiggdGFyZ2V0OiBFdmVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQsIGV2ZW50OiBzdHJpbmcsIGRldGFpbD86IFQgKTogdm9pZDtcXHJcXG4gIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0cm95KCk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gcHJvdmlkZSBtZXRob2RzIHRvIHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzY3JpYmUgbmF0aXZlIGV2ZW50cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSA0LjAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLjBcXHJcXG4gKiBAY29uc3RydWN0b3JcXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEV2ZW50QmluZGVyIG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIEV2ZW50QmluZGVyKCk6IEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIFN0b3JlcyBhbGwgaGFuZGxlcnMgdGhhdCBsaXN0ZW4gdG8gbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSBldmVudHMuXFxyXFxuICAgKiBgWyB0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBjYWxsYmFjaywgcmVtb3ZlciBdYFxcclxcbiAgICovXFxyXFxuICBsZXQgbGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyczogWyBFdmVudFRhcmdldCwgc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLCBBbnlGdW5jdGlvbiwgKCkgPT4gdm9pZCBdW10gPSBbXTtcXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gbmF0aXZlIGV2ZW50cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiAtIGBkZXN0cm95KClgIGNhbiB1bnN1YnNjcmliZSBhbGwgZXZlbnRzLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIC0gSW4gSUUsIG1lZGlhUXVlcnlMaXN0IGRvZXMgbm90IGluaGVyaXQgRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50VGFyZ2V0LFxcclxcbiAgICogICBhbmQgb25seSBzdXBwb3J0cyBkZXByZWNhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCBgYWRkTGlzdGVuZXJgIGFuZCBgcmVtb3ZlTGlzdGVuZXJgLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24tVVMvZG9jcy9XZWIvQVBJL01lZGlhUXVlcnlMaXN0L2FkZExpc3RlbmVyXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG9yIGV2ZW50cyB0byBsaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHRvLlxcclxcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSBjYWxsYmFjayBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24uXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAgLSBPcHRpb25hbC4gVGhlIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zIHRvIHBhc3MgdG8gdGhlIGBhZGRFdmVudExpc3RlbmVyYCBmdW5jdGlvbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGJpbmQoXFxyXFxuICAgIHRhcmdldHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICBjYWxsYmFjazogQW55RnVuY3Rpb24sXFxyXFxuICAgIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNcXHJcXG4gICk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZm9yRWFjaEV2ZW50KCB0YXJnZXRzLCBldmVudHMsICggdGFyZ2V0LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQsIG5hbWVzcGFjZSApID0+IHtcXHJcXG4gICAgICBjb25zdCBpc0V2ZW50VGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmdldCA9ICdhZGRFdmVudExpc3RlbmVyJyBpbiB0YXJnZXQ7XFxyXFxuICAgICAgY28iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHJlbW92ZXIgPSBpc0V2ZW50VGFyZ2V0XFxyXFxuICAgICAgICA/IHRhcmdldC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKCB0YXJnZXQsIGV2ZW50LCBjYWxsYmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImssIG9wdGlvbnMgKVxcclxcbiAgICAgICAgOiB0YXJnZXRbICdyZW1vdmVMaXN0ZW5lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInInIF0uYmluZCggdGFyZ2V0LCBjYWxsYmFjayApO1xcclxcblxcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0V2ZW50VGFyZ2V0ID8gdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIGV2ZW50LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY2FsbGJhY2ssIG9wdGlvbnMgKSA6IHRhcmdldFsgJ2FkZExpc3RlbmVyJyBdKCBjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGJhY2sgKTtcXHJcXG4gICAgICBsaXN0ZW5lcnMucHVzaCggWyB0YXJnZXQsIGV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCwgbmFtZXNwYWNlLCBjYWxsYmFjaywgcmVtb3ZlciBdICk7XFxyXFxuICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW92ZXMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBldmVudCBoYW5kbGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0cyAgLSBBIHRhcmdldCBlbGVtZW50LCB0aGUgd2luZG93IG9iamVjdCBvciB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGRvY3VtZW50IG9iamVjdC5cXHJcXG4gICAqIEBwYXJhbSBldmVudHMgICAtIEFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudCBuYW1lIG9yIG5hbWVzIHRvIHJlbW92ZS5cXHJcXG4gICAqIEBwYXJhbSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGJhY2sgLSBPcHRpb25hbC4gU3BlY2lmeSB0aGUgY2FsbGJhY2sgdG8gcmVtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdW5iaW5kKCB0YXJnZXRzOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaEV2ZW50KCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSApID0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlciggbGlzdGVuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyID0+IHtcXHJcXG4gICAgICAgIGlmICggbGlzdGVuZXJbIDAgXSA9PT0gdGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFxcclxcbiAgICAgICAgICAmJiBsaXN0ZW5lclsgMSBdID09PSBldmVudFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgICAgJiYgbGlzdGVuZXJbIDIgXSA9PT0gbmFtZXNwYWNlXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgICAmJiAoICEgY2FsbGJhY2sgfHwgbGlzdGVuZXJbIDMgXSA9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNhbGxiYWNrIClcXHJcXG4gICAgICAgICkge1xcclxcbiAgICAgICAgICBsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVuZXJbIDQgXSgpO1xcclxcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgfVxcclxcblxcclxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0gKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogRGlzcGF0Y2hlcyBhIGN1c3RvbSBldmVudCBvZiB0aGUgdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gQW4gZXZlbnQgdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdldC5cXHJcXG4gICAqIEBwYXJhbSB0eXBlICAgLSBBbiBldmVudCB0eXBlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSBkZXRhaWwgLSBPcHRpb25hbC4gVGhlIGBkZXRhaWxgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3Qgb2YgdGhlIGV2ZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFuIGV2ZW50IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdGNoPFQ+KCB0YXJnZXQ6IEV2ZW50VGFyZ2V0LCB0eXBlOiBzdHJpbmcsIGRldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaWw/OiBUICk6IEN1c3RvbUV2ZW50IHtcXHJcXG4gICAgbGV0IGU6IEN1c3RvbUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDtcXHJcXG4gICAgY29uc3QgYnViYmxlcyA9IHRydWU7XFxyXFxuXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZiAoIHR5cGVvZiBDdXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJyApIHtcXHJcXG4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZSA9IG5ldyBDdXN0b21FdmVudCggdHlwZSwgeyBidWJibGVzLCBkZXRhaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBlID0gZG9jdW1lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImNyZWF0ZUV2ZW50KCAnQ3VzdG9tRXZlbnQnICk7XFxyXFxuICAgICAgZS5pbml0Q3VzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvbUV2ZW50KCB0eXBlLCBidWJibGVzLCBmYWxzZSwgZGV0YWlsICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KCBlICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEl0ZXJhdGVzIG92ZXIgZWFjaCB0YXJnZXQgYW5kIGV2ZW50LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtZW50LCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBpdGVyYXRlZSAtIEFuIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gZm9yRWFjaEV2ZW50KFxcclxcbiAgICB0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czogRXZlbnRUYXJnZXRzLFxcclxcbiAgICBldmVudHM6IHN0cmluZyB8IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXSxcXHJcXG4gICAgaXRlcmF0ZWU6ICggdGFyZ2V0OiBFdmVudFRhcmdldCwgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBzdHJpbmcsIG5hbWVzcGFjZTogc3RyaW5nIHwgdW5kZWZpbmVkICkgPT4gdm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRcXHJcXG4gICk6IHZvaWQge1xcclxcbiAgICBmb3JFYWNoKCB0YXJnZXRzLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0ID0+IHtcXHJcXG4gICAgICB0YXJnZXQgJiYgZm9yRWFjaCggZXZlbnRzLCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInZlbnRzID0+IHtcXHJcXG4gICAgICAgIGV2ZW50cy5zcGxpdCggJyAnICkuZm9yRWFjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2goIGV2ZW50TlMgPT4ge1xcclxcbiAgICAgICAgICBjb25zdCBmcmFnbWVudCA9IGV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVudE5TLnNwbGl0KCAnLicgKTtcXHJcXG4gICAgICAgICAgaXRlcmF0ZWUoIHRhcmdlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIGZyYWdtZW50WyAwIF0sIGZyYWdtZW50WyAxIF0gKTtcXHJcXG4gICAgICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgfSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBSZW1vdmVzIGFsbCBsaXN0ZW5lcnMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXFxyXFxuICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJzLmZvckVhY2goIGRhdGEgPT4geyBkYXRhWyA0IF0oKSB9ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBlbXB0eSggbGlzdGVuZXJzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHtcXHJcXG4gICAgYmluZCxcXHJcXG4gICAgdW5iaW5kLFxcclxcbiAgICBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF0Y2gsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiLyoqXFxyXFxuICogRW1wdGllcyB0aGUgYXJyYXkuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGFycmF5IC0gQSBhcnJheSB0byBlbXB0eS5cXHJcXG4gKi9cXHJcXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IGZ1bmN0aW9uIGVtcHR5KCBhcnJheTogYW55W10gKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJyYXkubGVuZ3RoID0gMDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiX0RFU1RST1kgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEV2ZW50TWFwIH0gZnJvbSAnLi4vLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR5cGVzJztcXHJcXG5pbXBvcnQgeyBhcHBseSwgYXNzaWduLCBpc0FycmF5LCBzbGljIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUsIHRvQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRXZlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm50QmluZGVyLCBFdmVudEJpbmRlck9iamVjdCB9IGZyb20gJy4uL0V2ZW50QmluZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlci9FdmVudEJpbmRlcic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnRlcmZhY2UgZm9yIHRoZSBFdmVudEludGVyZmFjZSBvYmplY3QuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgRXZlbnRJbnRlcmZhY2VPYmplY3QgZXh0ZW5kcyBFdmVudEJpbmRlck9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qge1xcclxcbiAgb248SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjYWxsYmFjazogRXZlbnRNYXBbIEsgXSApOiB2b2lkO1xcclxcbiAgb24oIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjazogQW55RnVuY3Rpb24gKTogdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQ7XFxyXFxuICBvZmY8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgSyB8IEtbXSB8IHN0cmluZyB8IHN0cmluZ1tdICk6IHZvaWQ7XFxyXFxuICBlbWl0PCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudDogSywgLi4uYXJnczogUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtZXRlcnM8RXZlbnRNYXBbIEsgXT4gKTogdm9pZFxcclxcbiAgZW1pdCggZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdICk6IHZvaWQ7XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqIEBpbnRlcm5hbCAqL1xcclxcbiAgYnVzOiBEb2N1bWVudEZyYWdtZW50O1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbnN0cnVjdG9yIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB0aGF0IHByb3ZpZGVzIGludGVyZmFjZSBmb3IgaW50ZXJuYWwgYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpdmUgZXZlbnRzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBjb25zdHJ1Y3RvclxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBjb2xsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbiBvZiBpbnRlcmZhY2UgZnVuY3Rpb25zLlxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZT86IFNwbGlkZSApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2VPYmplY3Qge1xcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RvY3VtZW50IGZyYWdtZW50IGZvciBpbnRlcm5hbCBldmVudHMuXFxyXFxuICAgKiBQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdmlkZSB0aGUgU3BsaWRlIGluc3RhbmNlIHRvIHNoYXJlIHRoZSBidXMuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBjb25zdCBidXMgPSBTcGxpZGUgPyBTcGxpZGUuZXZlbnQuYnVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA6IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIEFuIGV2ZW50IGJpbmRlciBvYmplY3QuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBjb25zdCBiaW5kZXIgPSBFdmVudEJpbmRlcigpO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogTGlzdGVucyB0byBhbiBpbnRlcm5hbCBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgZXZlbnRzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBldmVudHMgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzIHNlcGFyYXRlZCBieSBzcGFjZXMuIFVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYSBkb3QoLikgdG8gYWRkIGEgbmFtZXNwYWNlLlxcclxcbiAgICogQHBhcmFtIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVnaXN0ZXIuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBmdW5jdGlvbiBvbiggZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgYmluZGVyLmJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5kKCBidXMsIHRvQXJyYXkoIGV2ZW50cyApLmpvaW4oICcgJyApLCBlID0+IHtcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgY2FsbGJhY2suYXBwbHkoIGNhbGxiYWNrLCBpc0FycmF5KCBlLmRldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaWwgKSA/IGUuZGV0YWlsIDogW10gKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHJpZ2dlcnMgY2FsbGJhY2sgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5cXHJcXG4gICAqIFRoaXMgYWNjZXB0cyBhZGRpdGlvbmFsIGFyZ3VtZW50cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIHBhc3NlcyB0aGVtIHRvIGNhbGxiYWNrcy5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGV2ZW50IC0gQW4gZXZlbnQgbmFtZS5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGVtaXQoIGV2ZW50OiBzdHJpbmcgKTogdm9pZCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJlZmVyLXNwcmVhZFxcclxcbiAgICBiaW5kZXIuZGlzcGF0Y2goIGJ1cywgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIFNwbGlkZSApIHtcXHJcXG4gICAgU3BsaWRlLmV2ZW50Lm9uKCBFVkVOVF9ERVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVFJPWSwgYmluZGVyLmRlc3Ryb3kgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gYXNzaWduKCBiaW5kZXIsIHtcXHJcXG4gICAgYnVzLFxcclxcbiAgICBvbixcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIG9mZjogYXBwbHkoIGJpbmRlci51bmJpbmQsIGJ1cyApLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZW1pdCxcXHJcXG4gIH0gKTtcXHJcXG59IiwiZXhwb3J0IGNvbnN0IEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVF9NT1VOVEVEICAgICAgICAgICAgPSAnbW91bnRlZCc7XFxyXFxuZXhwb3J0IGNvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCBFVkVOVF9SRUFEWSAgICAgICAgICAgICAgPSAncmVhZHknO1xcclxcbmV4cG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY29uc3QgRVZFTlRfTU9WRSAgICAgICAgICAgICAgID0gJ21vdmUnO1xcclxcbmV4cG8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnQgY29uc3QgRVZFTlRfTU9WRUQgICAgICAgICAgICAgID0gJ21vdmVkJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXhwb3J0IGNvbnN0IEVWRU5UX0NMSUNLICAgICAgICAgICAgICA9ICdjbGljayc7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BQ1RJVkUgICAgICAgICAgICAgPSAnYWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIml2ZSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0lOQUNUSVZFICAgICAgICAgICA9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnaW5hY3RpdmUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9WSVNJQkxFICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgID0gJ3Zpc2libGUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9ISURERU4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICAgICAgID0gJ2hpZGRlbic7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkZSRVNIICAgICAgICAgICAgPSAncmVmcmVzaCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkVOVF9VUERBVEVEICAgICAgICAgICAgPSAndXBkYXRlZCc7XFxyXFxuZXhwb3J0IGNvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5zdCBFVkVOVF9SRVNJWkUgICAgICAgICAgICAgPSAncmVzaXplJztcXHJcXG5leHBvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IGNvbnN0IEVWRU5UX1JFU0laRUQgICAgICAgICAgICA9ICdyZXNpemVkJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RSQUcgICAgICAgICAgICAgICA9ICdkcmFnJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RSQUdHSU5HICAgICAgICAgICA9ICdkciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhZ2dpbmcnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9EUkFHR0VEICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgID0gJ2RyYWdnZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TQ1JPTEwgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgID0gJ3Njcm9sbCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NDUk9MTCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFRCAgICAgICAgICAgPSAnc2Nyb2xsZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJfT1ZFUkZMT1cgICAgICAgICAgID0gJ292ZXJmbG93JztcXHJcXG5leHBvcnQgY29ucyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IEVWRU5UX0RFU1RST1kgICAgICAgICAgICA9ICdkZXN0cm95JztcXHJcXG5leHBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IGNvbnN0IEVWRU5UX0FSUk9XU19NT1VOVEVEICAgICA9ICdhcnJvd3M6bW91bnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BUlJPV1NfVVBEQVRFRCAgICAgPSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJ2Fycm93czp1cGRhdGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUEFHSU5BVEkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiT05fTU9VTlRFRCA9ICdwYWdpbmF0aW9uOm1vdW50ZWQnO1xcclxcbmV4cG9ydCBjb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEID0gJ3BhZ2luYXRpb246dXBkYXRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5hdmlnYXRpb246bW91bnRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkxBWV9QTEFZICAgICAgPSAnYXV0b3BsYXk6cGxheSc7XFxyXFxuZXhwb3J0IGNvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBFVkVOVF9BVVRPUExBWV9QTEFZSU5HICAgPSAnYXV0b3BsYXk6cGxheWluZyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUExBWV9QQVVTRSAgICAgPSAnYXV0byIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGF5OnBhdXNlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfTEFaWUxPQURfTE9BRCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFRCAgICA9ICdsYXp5bG9hZDpsb2FkZWQnO1xcclxcblxcclxcbi8qKiBAaW50ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsICovXFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NMSURFX0tFWURPV04gICAgID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICdzayc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NISUZURUQgICAgICAgICAgID0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICdzaCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFwnZWlcJztcXHJcXG4iLCJleHBvcnQgY29uc3QgQ0xBU1NfUkVOREVSRUQgPSBcJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy1yZW5kZXJlZFwnO1xcclxcbiIsImltcG9ydCB7IFJlbmRlcmVyQ29uZmlnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogRGVmYXVsdCBvcHRpb25zIGZvciBnZW5lcmF0aW5nIHN0YXRpYyBIVE1MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgY29uc3QgUkVOREVSRVJfREVGQVVMVF9DT05GSUc6IFJlbmRlcmVyQ29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZyA9IHtcXHJcXG4gIGxpc3RUYWcgOiAndWwnLFxcclxcbiAgc2xpZGVUYWc6ICdsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lcJyxcXHJcXG59O1xcclxcbiIsImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwnLi4vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBmb3JPd24gfSBmcm9tICcuLi8uLi91dGlsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcblxcclxcblxcclxcbmludGVyZmFjZSBTdHlsZXMge1xcclxcbiAgWyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYnJlYWtwb2ludDogc3RyaW5nIF06IHtcXHJcXG4gICAgWyBzZWxlY3Rvcjogc3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyBdOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNsYXNzIGZvciBnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJhdGluZyBzdHlsZXMgYXMgYSBzdHJpbmcuXFxyXFxuICpcXHJcXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNsYXNzIFN0eWxlIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIFRoZSBjb2xsZWN0aW9uIG9mIHJlZ2lzdGVyZWQgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBjYXRlZ29yaXplZCBieSBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlczogU3R5bGVzID0ge307XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgSUQgb2YgdGhlIHNsaWRlci5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgaWQ6IHN0cmluZztcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG9wdGlvbnMuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnM7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgU3R5bGUgY29uc3RydWN0b3IuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBwYXJhbSBpZCAgICAgIC0gQSBzbGlkZXIgSUQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgY29uc3RydWN0b3IoIGlkOiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMgKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLmlkICAgICAgPSBpZDtcXHJcXG4gICAgdGhpcy5vcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducyA9IG9wdGlvbnM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBSZWdpc3RlcnMgYSBDU1MgcnVsZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIHNlbGVjdG9yIC0gQSBzZWxlY3Rvci5cXHJcXG4gICAqIEBwYXJhbSBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncFxcclxcbiAgICogQHBhcmFtIHZhbHVlXFxyXFxuICAgKiBAcGFyYW0gYnJlYWtwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRcXHJcXG4gICAqL1xcclxcbiAgcnVsZSggc2VsZWN0b3I6IHN0cmluZywgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciwgYnJlYWtwb2ludD8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcgKTogdm9pZCB7XFxyXFxuICAgIGJyZWFrcG9pbnQgPSBicmVha3BvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB8fCAnZGVmYXVsdCc7XFxyXFxuICAgIGNvbnN0IHNlbGVjdG9ycyA9ICggdGhpcy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGVzWyBicmVha3BvaW50IF0gPSB0aGlzLnN0eWxlc1sgYnJlYWtwb2ludCBdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCB7fSApO1xcclxcbiAgICBjb25zdCBzdHlsZXMgICAgPSAoIHNlbGVjdG9yc1sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGVjdG9yIF0gPSBzZWxlY3RvcnNbIHNlbGVjdG9yIF0gfHwge30gKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0eWxlc1sgcHJvcCBdID0gdmFsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBCdWlsZHMgc3R5bGVzIGFzIGEgc2luZ2xlIHN0cmluZy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBCdWlsdCBzdHlsZXMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBidWlsZCgpOiBzdHJpbmcge1xcclxcbiAgICBsZXQgY3NzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicnO1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMuc3R5bGVzLmRlZmF1bHQgKSB7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKCB0aGlzLnN0eWxlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVmYXVsdCApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIE9iamVjdC5rZXlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5zdHlsZXMgKVxcclxcbiAgICAgIC5zb3J0KCAoIG4sIG0gKSA9PiB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcHRpb25zLm1lZGlhUXVlcnkgPT09ICdtaW4nID8gK24gLSArbSA6ICttIC0gK24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIClcXHJcXG4gICAgICAuZm9yRWFjaCggYnJlYWtwb2ludCA9PiB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgaWYgKCBicmVha3BvaW50ICE9PSAnZGVmYXVsdCcgKSB7XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjc3MgKz0gYEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICR7IGJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidha3BvaW50IH1weCkge2A7XFxyXFxuICAgICAgICAgIGNzcyArPSB0aGlzLmJ1aWxkUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdG9ycyggdGhpcy5zdHlsZXNbIGJyZWFrcG9pbnQgXSApO1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY3NzICs9IGB9YDtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICB9ICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICByZXR1cm4gY3NzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQnVpbGRzIHN0eWxlcyBmb3IgZWFjaCBicmVha3BvaW50LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc2VsZWN0b3JzIC0gQW4gb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB3aXRoIHN0eWxlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEJ1aWx0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHlsZXMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgYnVpbGRTZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBzZWxlY3RvcnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmcgfCBudW1iZXI+PiApOiBzdHJpbmcge1xcclxcbiAgICBsZXQgY3NzID0gJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcblxcclxcbiAgICBmb3JPd24oIHNlbGVjdG9ycywgKCBzdHlsZXMsIHMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlY3RvciApID0+IHtcXHJcXG4gICAgICBzZWxlY3RvciA9IGAjJHsgdGhpcy5pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSAkeyBzZWxlY3RvciB9YC50cmltKCk7XFxyXFxuICAgICAgY3NzICs9IGAkeyBzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0b3IgfSB7YDtcXHJcXG5cXHJcXG4gICAgICBmb3JPd24oIHN0eWxlcywgKCB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUsIHByb3AgKSA9PiB7XFxyXFxuICAgICAgICBpZiAoIHZhbHVlIHx8IHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gMCApIHtcXHJcXG4gICAgICAgICAgY3NzICs9IGAkeyBwcm9wIH06ICR7IHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSB9O2A7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfSApO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgICBjc3MgKz0gJ30nO1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gY3NzO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkFUSCwgU0laRSwgWE1MX05BTUVfU1BBQ0UgfSBmcm9tICcuLi8uLi9jb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0cy9BcnJvd3MvcGF0aCc7XFxyXFxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3RpbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9EaXJlY3Rpb24vRGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmVjdGlvbic7XFxyXFxuaW1wb3J0IHsgQ0xBU1NfQUNUSVZFLCBDTEFTU19DTE9ORSwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0xJU1QsIENMQVNTX1JPT1QsIENMQVNTX1NMSURFLCBDTEFTU19UUkFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIksgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkRFRkFVTFRTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgVFRCIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpcmVjdGlvbnMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5pbXBvcnQgeyBFVkVOVF9NT1VOVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IExPT1AsIFNMSURFIH0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBPcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzc2VydCxcXHJcXG4gIGFzc2lnbixcXHJcXG4gIGNhbWVsVG9LZWJhYixcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjaGlsZCxcXHJcXG4gIGZvck93bixcXHJcXG4gIGlzT2JqZWN0LFxcclxcbiAgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3RyaW5nLFxcclxcbiAgbWF4LFxcclxcbiAgbWVyZ2UsXFxyXFxuICBwdXNoLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHF1ZXJ5QWxsLFxcclxcbiAgcmVtb3ZlLFxcclxcbiAgdW5pcXVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIklkLFxcclxcbiAgdW5pdCxcXHJcXG59IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgQ0xBU1NfUkVOREVSRUQgfSBmcm9tICcuLi9jb25zdGFudHMvY2xhcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzZXMnO1xcclxcbmltcG9ydCB7IFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHIH0gZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uL2NvbnN0YW50cy9kZWZhdWx0cyc7XFxyXFxuaW1wb3J0IHsgU3R5bGUgfSBmciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbSAnLi4vU3R5bGUvU3R5bGUnO1xcclxcbmltcG9ydCB7IFJlbmRlcmVyQ29uZmlnLCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgU2xpZGVDb250ZW50IH0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY2xhc3MgdG8gZ2VuZXJhdGUgc3RhdGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBIVE1MIG9mIHRoZSBzbGlkZXIgZm9yIHRoZSBmaXJzdCB2aWV3LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbGFzcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlUmVuZGVyZXIge1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZW1vdmVzIGEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlIGVsZW1lbnQgYW5kIGNsb25lcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIHNwbGlkZSAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgc3RhdGljIGNsZWFuKCBzcGxpZGU6IFNwbGlkZSApOiB2b2lkIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IHsgb24gfSA9IEV2ZW50SW50ZXJmYWNlKCBzcGxpZGUgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IHsgcm9vdCB9ID0gc3BsaWRlO1xcclxcbiAgICBjb25zdCBjbG9uZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlcnlBbGwoIHJvb3QsIGAuJHsgQ0xBU1NfQ0xPTkUgfWAgKTtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIG9uKCBFVkVOVF9NT1VOVEVELCAoKSA9PiB7XFxyXFxuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibW92ZSggY2hpbGQoIHJvb3QsICdzdHlsZScgKSApO1xcclxcbiAgICB9ICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICByZW1vdmUoIGNsb25lcyApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgc2xpZGUgY29udGVudHMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRzOiBzdHJpbmdbXSB8IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZUNvbnRlbnRbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRhIG9mIHNsaWRlcy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kgc2xpZGVzOiBTbGlkZUNvbnRlbnRbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhlIERpcmVjdGlvbiBjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBwcml2YXRlIHJlYWRvbmx5IERpcmVjdGlvbjogRGlyZWN0aW9uQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgdGhlIFN0eWxlIGluc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZS5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBTdHlsZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N0eWxlO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucyA9IHt9O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucyBmb3IgdGhpcyBpbnN0YW5jZS5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVhZG9ubHkgY29uZmlnOiBSZW5kZXJlckNvbmZpZztcXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIFRoZSBzbGlkZXIgSUQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBBbiBhcnJheSB3aXRoIG9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludHM6IFsgc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZywgT3B0aW9ucyBdW10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBTcGxpZGVSZW5kZXJlciBjb25zdHJ1Y3Rvci5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGNvbnRlbnRzIC0gQW4gYXJyYXkgd2l0aCBzbGlkZSBjb250ZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuIEVhY2ggaXRlbSBtdXN0IGJlIGFuIEhUTUwgb3IgYSBwbGFpbiB0ZXh0LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBvcHRpb25zICAtIE9wdGlvbmFsLiBTbGlkZXIgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gY29uZmlnICAgLSBTdGF0aWMgZGVmYXVsdCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqIEBwYXJhbSBkZWZhdWx0cyAtIERlZmF1bHQgb3B0aW9ucyBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBzbGlkZXIuIFBhc3MgYFNwbGlkZS5kZWZhdWx0c2AgaWYgeW91IGFyZSB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmcgaXQuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0cnVjdG9yKCBjb250ZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHN0cmluZ1tdIHwgU2xpZGVDb250ZW50W10sIG9wdGlvbnM/OiBPcHRpb25zLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uZmlnPzogUmVuZGVyZXJDb25maWcsIGRlZmF1bHRzPzogT3B0aW9ucyApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIG1lcmdlKCBERUZBVUxUUywgZGVmYXVsdHMgfHwge30gKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIG1lcmdlKCBtZXJnZSggdGhpcy5vcHRpb25zLCBERUZBVUxUUyApLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyB8fCB7fSApO1xcclxcblxcclxcbiAgICB0aGlzLmNvbnRlbnRzICA9IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZW50cztcXHJcXG4gICAgdGhpcy5jb25maWcgICAgPSBhc3NpZ24oIHt9LCBSRU5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VSRVJfREVGQVVMVF9DT05GSUcsIGNvbmZpZyB8fCB7fSApO1xcclxcbiAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi5pZCAgICAgICAgPSB0aGlzLmNvbmZpZy5pZCB8fCB1bmlxdWVJZCggJ3NwbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInICk7XFxyXFxuICAgIHRoaXMuU3R5bGUgICAgID0gbmV3IFN0eWxlKCB0aGlzLmlkLCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5vcHRpb25zICk7XFxyXFxuICAgIHRoaXMuRGlyZWN0aW9uID0gRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiggbnVsbCwgbnVsbCwgdGhpcy5vcHRpb25zICk7XFxyXFxuXFxyXFxuICAgIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3NlcnQoIHRoaXMuY29udGVudHMubGVuZ3RoLCAnUHJvdmlkZSBhdCBsZWFzdCAxIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBjb250ZW50LicgKTtcXHJcXG5cXHJcXG4gICAgdGhpcy5pbml0KCk7XFxyXFxuICB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgaW5zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLnBhcnNlQnJlYWtwb2ludHMoKTtcXHJcXG4gICAgdGhpcy5pbml0U2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcygpO1xcclxcbiAgICB0aGlzLnJlZ2lzdGVyUm9vdFN0eWxlcygpO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5yZWdpc3RlclRyYWNrU3R5bGVzKCk7XFxyXFxuICAgIHRoaXMucmVnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVyU2xpZGVTdHlsZXMoKTtcXHJcXG4gICAgdGhpcy5yZWdpc3Rlckxpc3RTdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXplcyBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgaW5pdFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoKTogdm9pZCB7XFxyXFxuICAgIHB1c2goIHRoaXMuc2xpZGVzLCB0aGlzLmNvbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cy5tYXAoICggY29udGVudCwgaW5kZXggKSA9PiB7XFxyXFxuICAgICAgY29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBpc1N0cmluZyggY29udGVudCApID8geyBodG1sOiBjb250ZW50IH0gOiBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudDtcXHJcXG4gICAgICBjb250ZW50LnN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fCB7fTtcXHJcXG4gICAgICBjb250ZW50LmF0dHJzICA9IGNvbnRlbnQuYXR0cnMgfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IHt9O1xcclxcblxcclxcbiAgICAgIHRoaXMuY292ZXIoIGNvbnRlbnQgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgICAgY29uc3QgY2xhc3NlcyA9IGAkeyB0aGlzLm9wdGlvbnMuY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzZXMuc2xpZGUgfSAkeyBpbmRleCA9PT0gMCA/IENMQVNTX0FDVElWRSA6ICcnIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYDtcXHJcXG5cXHJcXG4gICAgICBhc3NpZ24oIGNvbnRlbnQuYXR0cnMsIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBjbGFzczogYCR7IGNsYXNzZXMgfSAkeyBjb250ZW50LmF0dHJzLmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFzcyB8fCAnJyB9YC50cmltKCksXFxyXFxuICAgICAgICBzdHlsZTogdGhpcy5idWlsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RTdHlsZXMoIGNvbnRlbnQuc3R5bGVzICksXFxyXFxuICAgICAgfSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICByZXR1cm4gY29udGVudDtcXHJcXG4gICAgfSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIHRoaXMuaXNMb29wKCkgKSB7XFxyXFxuICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuZ2VuZXJhdGVDbG9uZXMoIHRoaXMuc2xpZGVzICk7XFxyXFxuICAgIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGVzIGZvciB0aGUgcm9vdCBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICBwcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmF0ZSByZWdpc3RlclJvb3RTdHlsZXMoKTogdm9pZCB7XFxyXFxuICAgIHRoaXMuYnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzLmZvckVhY2goICggWyB3aWR0aCwgb3B0aW9ucyBdICkgPT4ge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gICAgICB0aGlzLlN0eWxlLnJ1bGUoICcgJywgJ21heC13aWR0aCcsIHVuaXQoIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLndpZHRoICksIHdpZHRoICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBzdHlsZXMgZm9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgdHJhY2sgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZXJUcmFja1N0eWxlcygpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBTdHlsZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSA9IHRoaXM7XFxyXFxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4keyBDTEFTU19UUkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0sgfWA7XFxyXFxuXFxyXFxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggWyB3aWR0aCwgb3B0aW9ucyBdICkgPT4ge1xcclxcbiAgICAgIFN0eWxlLnJ1bGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBzZWxlY3RvciwgdGhpcy5yZXNvbHZlKCAncGFkZGluZ0xlZnQnICksIHRoaXMuYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc1BhZGRpbmcoIG9wdGlvbnMsIGZhbHNlICksIHdpZHRoICk7XFxyXFxuICAgICAgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0eWxlLnJ1bGUoIHNlbGVjdG9yLCB0aGlzLnJlc29sdmUoICdwYWRkaW5nUmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyApLCB0aGlzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIHRydWUgKSwgd2lkdGggKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICAgICAgU3R5bGUucnVsZSggc2VsZWN0b3IsICdoZWlnaHQnLCB0aGlzLmNzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NUcmFja0hlaWdodCggb3B0aW9ucyApLCB3aWR0aCApO1xcclxcbiAgICB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlcyBmb3IgdGhlIGxpc3QgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaXZhdGUgcmVnaXN0ZXJMaXN0U3R5bGVzKCk6IHZvaWQge1xcclxcbiAgICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBTdHlsZSB9ID0gdGhpcztcXHJcXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgLiR7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19MSVNUIH1gO1xcclxcblxcclxcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JFYWNoKCAoIFsgd2lkdGgsIG9wdGlvbnMgXSApID0+IHtcXHJcXG4gICAgICBTdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibGUucnVsZSggc2VsZWN0b3IsICd0cmFuc2Zvcm0nLCB0aGlzLmJ1aWxkVHJhbnNsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSggb3B0aW9ucyApLCB3aWR0aCApO1xcclxcblxcclxcbiAgICAgIGlmICggIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5jc3NTbGlkZUhlaWdodCggb3B0aW9ucyApICkge1xcclxcbiAgICAgICAgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0eWxlLnJ1bGUoIHNlbGVjdG9yLCAnYXNwZWN0LXJhdGlvJywgdGhpcy5jc3NBc3AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0UmF0aW8oIG9wdGlvbnMgKSwgd2lkdGggKTtcXHJcXG4gICAgICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3RlcnMgc3R5bGVzIGZvciBzbGlkZXMgYW5kIGNsb25lcy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIHByaXZhdGUgcmVnaXN0ZXJTbGlkZVN0eWxlcygpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IHsgU3R5bGUgfSA9IHRoaXM7XFxyXFxuICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZWxlY3RvciA9IGAuJHsgQ0xBU1NfU0xJREUgfWA7XFxyXFxuXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goICggWyB3aWR0aCwgb3B0aW9ucyBdICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiID0+IHtcXHJcXG4gICAgICBTdHlsZS5ydWxlKCBzZWxlY3RvciwgJ3dpZHRoJywgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuY3NzU2xpZGVXaWR0aCggb3B0aW9ucyApLCB3aWR0aCApO1xcclxcbiAgICAgIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHlsZS5ydWxlKCBzZWxlY3RvciwgJ2hlaWdodCcsIHRoaXMuY3NzU2xpZGVIZWlnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImh0KCBvcHRpb25zICkgfHwgJzEwMCUnLCB3aWR0aCApO1xcclxcbiAgICAgIFN0eWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi5ydWxlKCBzZWxlY3RvciwgdGhpcy5yZXNvbHZlKCAnbWFyZ2luUmlnaHQnICksICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ1bml0KCBvcHRpb25zLmdhcCApIHx8ICcwcHgnLCB3aWR0aCApO1xcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJTdHlsZS5ydWxlKCBgJHsgc2VsZWN0b3IgfSA+IGltZ2AsICdkaXNwbGF5Jywgb3AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbnMuY292ZXIgPyAnbm9uZScgOiAnaW5saW5lJywgd2lkdGggKTtcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQnVpbGRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtdWx0aXBsZSBgdHJhbnNsYXRlWGAgZm9yIHRoZSBsaXN0IGVsZW1lbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZWFjaCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYWtwb2ludC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgc3RyaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXRoIG11bHRpcGxlIHRyYW5zbGF0ZSBmdW5jdGlvbnMuXFxyXFxuICAgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBwcml2YXRlIGJ1aWxkVHJhbnNsYXRlKCBvcHRpb25zOiBPcHRpb25zICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcge1xcclxcbiAgICBjb25zdCB7IHJlc29sdmUsIG9yaWVudCB9ID0gdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuRGlyZWN0aW9uO1xcclxcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHZhbHVlcy5wdXNoKCB0aGlzLmNzc09mZnNldENsb25lcyggb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcbiAgICB2YWx1ZXMucHVzaCggdGhpcy5jc3NPZmZzZXRHYXBzKCBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucyApICk7XFxyXFxuXFxyXFxuICAgIGlmICggdGhpcy5pc0NlbnRlciggb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgKSApIHtcXHJcXG4gICAgICB2YWx1ZXMucHVzaCggdGhpcy5idWlsZENzc1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWx1ZSggb3JpZW50KCAtNTAgKSwgJyUnICkgKTtcXHJcXG4gICAgICB2YWx1ZXMucHUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2goIC4uLnRoaXMuY3NzT2Zmc2V0Q2VudGVyKCBvcHRpb25zICkgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHZhbHVlc1xcclxcbiAgICAgIC5maWx0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBCb29sZWFuIClcXHJcXG4gICAgICAubWFwKCB2YWx1ZSA9PiBgdHJhbnNsYXRlJHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHJlc29sdmUoICdYJyApIH0oJHsgdmFsdWUgfSlgIClcXHJcXG4gICAgICAuam9pbigiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICcgJyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JucyBvZmZzZXQgZm9yIHRoZSBsaXN0IGVsZW1lbnQuXFxyXFxuICAgKiBUaGlzIGRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIG5vdCBpbmNsdWRlIGdhcHMgYmVjYXVzZSBpdCBjYW4gbm90IGJlIGNvbnZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQgaW50byBwZXJjZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHJldHVybiBUaGUgb2Zmc2V0LlxcclxcbiAgICovXFxyXFxuICBwcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmF0ZSBjc3NPZmZzZXRDbG9uZXMoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyB7XFxyXFxuICAgIGNvbnN0IHsgcmVzb2x2ZSwgb3JpZW50IH0gPSB0aGlzLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XFxyXFxuICAgIGNvbnN0IGNsb25lQ291bnQgPSB0aGlzLmdldENsb25lQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KCk7XFxyXFxuXFxyXFxuICAgIGlmICggdGhpcy5pc0ZpeGVkV2lkdGgoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICkgKSB7XFxyXFxuICAgICAgY29uc3QgeyB2YWx1ZSwgdW5pdCB9ID0gdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInMucGFyc2VDc3NWYWx1ZSggb3B0aW9uc1sgcmVzb2x2ZSggJ2ZpeGVkV2lkdGgnICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIF0gKTtcXHJcXG4gICAgICByZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKCBvcmllbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KCB2YWx1ZSApICogY2xvbmVDb3VudCwgdW5pdCApO1xcclxcbiAgICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICBjb25zdCBwZXJjZW50ID0gMTAwICogY2xvbmVDb3VudCAvIG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnBlclBhZ2U7XFxyXFxuICAgIHJldHVybiBgJHsgb3JpZW50KCBwZXJjZW50ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH0lYDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgb2Zmc2V0IGZvciBjZW50ZXJpbmcgdGhlIGFjdGl2ZSBzbGlkZS5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogTm90ZTpcXHJcXG4gICAqICggMTAwJSArIGdhcCApIC8gcGVyUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2UgLSBnYXBcXHJcXG4gICAqIDEwMCUgLyBwZXJQYWdlICsgZ2FwIC8gcGVyUGFnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBnYXA7XFxyXFxuICAgKiA1MCUgLyBwZXJQYWdlICsgKCBnYXAgLyBwZXJQYWdlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIGdhcCApIC8gMjtcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gVGhlIG9mZnNldC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY3NzT2Zmc2V0Q2VudGVyKCBvcHRpb25zOiBPcHRpb25zICk6IHN0cmluZ1tdIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IHsgcmVzb2x2ZSwgb3JpZW50IH0gPSB0aGlzLkRpcmVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb247XFxyXFxuXFxyXFxuICAgIGlmICggdGhpcy5pc0ZpeGVkV2lkdGgoIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zICkgKSB7XFxyXFxuICAgICAgY29uc3QgeyB2YWx1ZSwgdW5pdCB9ID0gdGhpcy5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFyc2VDc3NWYWx1ZSggb3B0aW9uc1sgcmVzb2x2ZSggJ2ZpeGVkV2lkdGgnICkgXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgICByZXR1cm4gWyB0aGlzLmJ1aWxkQ3NzVmFsdWUoIG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZhbHVlIC8gMiApLCB1bml0ICkgXTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgdmFsdWVzID0gW107XFxyXFxuICAgIGNvbnN0IHsgcGVyUGFnZSwgZ2FwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9ID0gb3B0aW9ucztcXHJcXG5cXHJcXG4gICAgdmFsdWVzLnB1c2goIGAkeyBvcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50KCA1MCAvIHBlclBhZ2UgKSB9JWAgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwICkge1xcclxcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHVuaXQgfSA9IHRoaXMucGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ3NzVmFsdWUoIGdhcCApO1xcclxcbiAgICAgIGNvbnN0IGdhcE9mZnNldCA9ICggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlIC8gcGVyUGFnZSAtIHZhbHVlICkgLyAyO1xcclxcbiAgICAgIHZhbHVlcy5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaCggdGhpcy5idWlsZENzc1ZhbHVlKCBvcmllbnQoIGdhcE9mZnNldCApLCB1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdCApICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmZnNldCBmb3IgZ2Fwcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEByZXR1cm4gVGhlIG9mZnNldCBhcyBgY2FsYygpYC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIHByaXZhdGUgY3NzT2Zmc2V0R2Fwcyggb3B0aW9uczogT3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgY2xvbmVDb3VudCA9IHRoaXMuZ2V0Q2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lQ291bnQoKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBjbG9uZUNvdW50ICYmIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmdhcCApIHtcXHJcXG4gICAgICBjb25zdCB7IG9yaWVudCB9ID0gdGhpcy5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uO1xcclxcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHVuaXQgfSA9IHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcnNlQ3NzVmFsdWUoIG9wdGlvbnMuZ2FwICk7XFxyXFxuXFxyXFxuICAgICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmICggdGhpcy5pc0ZpeGVkV2lkdGgoIG9wdGlvbnMgKSApIHtcXHJcXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKCBvcmllbnQoIHZhbHVlICogY2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ291bnQgKSwgdW5pdCApO1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgeyBwZXJQYWdlIH0gPSBvcHRpb25zO1xcclxcbiAgICAgIGNvbnN0IGdhcHMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xvbmVDb3VudCAvIHBlclBhZ2U7XFxyXFxuICAgICAgcmV0dXJuIHRoaXMuYnVpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ3NzVmFsdWUoIG9yaWVudCggZ2FwcyAqIHZhbHVlICksIHVuaXQgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuICcnO1xcclxcbiAgfVxcclxcblxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogUmVzb2x2ZXMgdGhlIHByb3AgZm9yIHRoZSBjdXJyZW50IGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXJlY3Rpb24gYW5kIGNvbnZlcnRzIGl0IGludG8gdGhlIEtlYmFiIGNhc2UuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwcm9wIC0gQSBwcm9wZXJ0eSBuYW1lIHRvIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSByZXNvbHZlZCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcGVydHkgbmFtZSBpbiB0aGUgS2ViYWIgY2FzZS5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHByaXZhdGUgcmVzb2x2ZSggcHJvcDogc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gY2FtZWxUb0tlYmFiKCB0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcCApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm5zIHBhZGRpbmcgaW4gdGhlIENTUyBmb3JtYXQuXFxyXFxuICAgKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cXHJcXG4gICAqIEBwYXJhbSByaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQgICAtIERldGVybWluZXMgd2hldGhlciB0byBnZXQgcGFkZGluZyByaWdodCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgbGVmdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFBhZGRpbmcgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBDU1MgZm9ybWF0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNzc1BhZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaW5nKCBvcHRpb25zOiBPcHRpb25zLCByaWdodDogYm9vbGVhbiApOiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgY29uc3QgeyBwYWRkaW5nIH0gPSBvcHRpb25zO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgY29uc3QgcHJvcCA9IHRoaXMuRGlyZWN0aW9uLnJlc29sdmUoIHJpZ2h0ID8gJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWdodCcgOiAnbGVmdCcsIHRydWUgKTtcXHJcXG4gICAgcmV0dXJuIHBhZGRpbmcgJiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmIHVuaXQoIHBhZGRpbmdbIHByb3AgXSB8fCAoIGlzT2JqZWN0KCBwYWRkaW5nICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiID8gMCA6IHBhZGRpbmcgKSApIHx8ICcwcHgnO1xcclxcbiAgfVxcclxcblxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogUmV0dXJucyBoZWlnaHQgb2YgdGhlIHRyYWNrIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBIZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0IGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjc3NUcmFja0hlaWdodCggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmcge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gICAgbGV0IGhlaWdodCA9ICcnO1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzVmVydGljYWwoKSApIHtcXHJcXG4gICAgICBoZWlnaHQgPSB0aGlzLmNzc0hlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIG9wdGlvbnMgKTtcXHJcXG4gICAgICBhc3NlcnQoIGhlaWdodCwgXCdcXCJoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0XFwiIGlzIG1pc3NpbmcuXCcgKTtcXHJcXG4gICAgICBoZWlnaHQgPSBgY2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGMoJHsgaGVpZ2h0IH0gLSAkeyB0aGlzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIGZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZSApIH0gLSAkeyB0aGlzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIHRydWUgKSB9KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBoZWlnaHQ7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGhlaWdodCBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZWQgdGhvdWdoIG9wdGlvbnMgaW4gdGhlIENTUyBmb3JtYXQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNzc0hlaWdodCggb3B0aW9uczogT3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgKTogc3RyaW5nIHtcXHJcXG4gICAgcmV0dXJuIHVuaXQoIG9wdGlvbnMuaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JucyB3aWR0aCBvZiBlYWNoIHNsaWRlIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEByZXR1cm4gV2lkdGggaW4gdGhlIENTUyBmb3JtYXQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBwcml2YXRlIGNzc1NsaWRlV2lkdGgoIG9wdGlvbnM6IE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zICk6IHN0cmluZyB7XFxyXFxuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkdGhcXHJcXG4gICAgICA/ICcnXFxyXFxuICAgICAgOiB1bml0KCBvcHRpb25zLmYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaXhlZFdpZHRoICkgfHwgKCB0aGlzLmlzVmVydGljYWwoKSA/ICcnIDogdGhpcy5jIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzU2xpZGVTaXplKCBvcHRpb25zICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJldHVybnMgaGVpZ2h0IG9mIGVhY2ggc2xpZGUgaW4gdGhlIENTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MgZm9ybWF0LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBIZWlnaHQgaW4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBDU1MgZm9ybWF0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNzc1NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hlaWdodCggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmcge1xcclxcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHVuaXQoIG9wdGlvbnMuZml4ZWRIZWlnaHQgKVxcclxcbiAgICAgIHx8ICggdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuaXNWZXJ0aWNhbCgpXFxyXFxuICAgICAgICA/ICggb3B0aW9ucy5hdXRvSGVpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiA/ICcnIDogdGhpcy5jc3NTbGlkZVNpemUoIG9wdGlvbnMgKSApXFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgOiB0aGlzLmNzc0hlaWdodCggb3B0aW9ucyApXFxyXFxuICAgICAgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgd2lkdGggb3IgaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlaWdodCBvZiBlYWNoIHNsaWRlIGluIHRoZSBDU1MgZm9ybWF0LCBjb25zaWRlcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgdGhlIGN1cnJlbnQgZGlyZWN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gV2lkdGggb3IgaGVpZ2h0IGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgcHJpdmF0ZSBjc3NTbGlkZVNpemUoIG9wdGlvbnM6IE9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IGdhcCA9IHVuaXQoIG9wdGlvbnMuZ2FwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICByZXR1cm4gYGNhbGMoKDEwMCUkeyBnYXAgJiYgYCArICR7IGdhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AgfWAgfSkvJHsgb3B0aW9ucy5wZXJQYWdlIHx8IDEgfSR7IGdhcCAmJiBgIC0gJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7IGdhcCB9YCB9KWA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBSZXR1cm5zIHRoZSBhc3BlY3RSYXRpbyB2YWx1ZSB0byBzaW11bGF0ZSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2BoZWlnaHRSYXRpb2Agb3B0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNwZWN0UmF0aW8gaW4gdGhlIENTUyBmb3JtYXQuXFxyXFxuICAgKi9cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcml2YXRlIGNzc0FzcGVjdFJhdGlvKCBvcHRpb25zOiBPcHRpb25zICk6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcge1xcclxcbiAgICBjb25zdCB7IGhlaWdodFJhdGlvIH0gPSBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgcmV0dXJuIGhlaWdodFJhdGlvID8gYCR7IDEgLyBoZWlnaHRSYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm8gfWAgOiAnJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1aWxkcyB0aGUgY3NzIHZhbHVlIGJ5IHRoZSBwcm92aWRlZCB2YWx1ZSBhbmQgdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gdW5pdCAgLSBBIENTUyB1bml0LlxcclxcbiAgICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcmV0dXJuIEEgYnVpbHQgdmFsdWUgZm9yIGEgQ1NTIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBidWlsZENzc1ZhbHVlKCB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciwgdW5pdDogc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYCR7IHZhbHVlIH0keyB1bml0IH1gO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogUGFyc2VzIHRoZSBDU1MgdmFsdWUgaW50byBudW1iZXIgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bml0LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHRvIHBhcnNlLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB3aXRoIHZhbHVlIGFuZCB1bml0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJzZUNzc1ZhbHVlKCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyICk6IHsgdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBudW1iZXIsIHVuaXQ6IHN0cmluZyB9IHtcXHJcXG4gICAgaWYgKCBpc1N0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZhbHVlICkgKSB7XFxyXFxuICAgICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZhbHVlICkgfHwgMDtcXHJcXG4gICAgICBjb25zdCB1bml0ICAgPSB2YWx1ZS5yZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGFjZSggL1xcXFxkKihcXFxcLlxcXFxkKik/LywgJycgKSB8fCAncHgnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICByZXR1cm4geyB2YWx1ZTogbnVtYmVyLCB1bml0IH07XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiB7IHZhbHVlLCB1bml0OiAncHgnIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBQYXJzZXMgYnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FrcG9pbnRzIGFuZCBnZW5lcmF0ZSBvcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHBhcnNlQnJlYWtwb2ludHMoKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBjb25zdCB7IGJyZWFrcG9pbnRzIH0gPSB0aGlzLm9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib25zO1xcclxcblxcclxcbiAgICB0aGlzLmJyZWFrcG9pbnRzLnB1c2goIFsgJ2RlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImZhdWx0JywgdGhpcy5vcHRpb25zIF0gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBiciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYWtwb2ludHMgKSB7XFxyXFxuICAgICAgZm9yT3duKCBicmVha3BvaW50cywgKCBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucywgd2lkdGggKSA9PiB7XFxyXFxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKCBbIHdpZHRoLCBtZXJnZSggbWVyZ2UoIHt9LCB0aGlzLm9wdGlvbnMgKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMgKSBdICk7XFxyXFxuICAgICAgfSApO1xcclxcbiAgICB9XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIHNsaWRlIHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCBpcyBmaXhlZCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gYHRydWVgIGlmIHRoZSBzbGlkZSB3aWR0aCBpcyBmaXhlZCwgb3Igb3RoZXJ3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGlzRml4ZWRXaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGgoIG9wdGlvbnM6IE9wdGlvbnMgKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiISEgb3B0aW9uc1sgdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSggJ2ZpeGVkV2lkdGgnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgdGhlIHNsaWRlciB0eXBlIGlzIGxvb3Agb3Igbm90LlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGVyIHR5cGUgaXMgbG9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBwcml2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSBpc0xvb3AoKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiB0aGlzLm9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnR5cGUgPT09IExPT1A7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDaGVja3MgaWYgdGhlIGFjdGl2ZSBzbGlkZSBzaG91bGQgYmUgY2VudGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHNsaWRlIHNob3VsZCBiZSBjZW50ZXJlZCwgb3Igb3RoZXJ3aXNlIGBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VgLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGlzQ2VudGVyKCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogT3B0aW9ucyApOiBib29sZWFuIHtcXHJcXG4gICAgaWYoIG9wdGlvbnMuZm9jdXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIj09PSAnY2VudGVyJyApIHtcXHJcXG4gICAgICBpZiAoIHRoaXMuaXNMb29wKCkgKSB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxyXFxuICAgICAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBpZiAoIHRoaXMub3B0aW9ucy50eXBlID09PSBTTElERSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgICByZXR1cm4gISB0aGlzLm9wdGlvbnMudHJpbVNwYWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWxzZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBpZiB0aGUgZGlyZWN0aW9uIGlzIFRUQiBvciBub3QuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBkaXJlY3Rpb24gaXMgVFRCLCBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVmVydGljYWwoKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmRpcmVjdGlvbiA9PT0gVFRCO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQnVpbGRzIGNsYXNzZXMgb2YgdGhlIHJvb3QgZWxlbWVudC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBDbGFzc2VzIGZvciB0aGUgcm9vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudCBhcyBhIHNpbmdsZSBzdHJpbmcuXFxyXFxuICAgKi9cXHJcXG4gIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncml2YXRlIGJ1aWxkQ2xhc3NlcygpOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCB7IG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zIH0gPSB0aGlzO1xcclxcblxcclxcbiAgICByZXR1cm4gW1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBDTEFTU19ST09ULFxcclxcbiAgICAgIGAkeyBDTEFTU19ST09UIH0tLSR7IG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnR5cGUgfWAsXFxyXFxuICAgICAgYCR7IENMQVNTX1JPT1QgfS0tJHsgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uIH1gLFxcclxcbiAgICAgIG9wdGlvbnMuZHJhZyAmJiBgJHsgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1JPT1QgfS0tZHJhZ2dhYmxlYCxcXHJcXG4gICAgICBvcHRpb25zLmlzTmF2aWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24gJiYgYCR7IENMQVNTX1JPT1QgfS0tbmF2YCxcXHJcXG4gICAgICBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNUSVZFLFxcclxcbiAgICAgICEgdGhpcy5jb25maWcuaGlkZGVuICYmIENMQVNTX1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRU5ERVJFRCxcXHJcXG4gICAgXS5maWx0ZXIoIEJvb2xlYW4gKS5qb2luKCAnICcgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnRzIHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlZCBhdHRyaWJ1dGVzIGludG8gYSBzaW5nbGUgc3RyaW5nLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gYXR0cnMgLSBBbiBvYmplY3Qgd2l0aCBhdHRyaWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgYnVpbHQgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBidWlsZEF0dHJzKCBhdHRyczogUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ICk6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmcge1xcclxcbiAgICBsZXQgYXR0ciA9ICcnO1xcclxcblxcclxcbiAgICBmb3JPd24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBhdHRycywgKCB2YWx1ZSwga2V5ICkgPT4ge1xcclxcbiAgICAgIGF0dHIgKz0gdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlID8gYCAkeyBjYW1lbFRvS2ViYWIoIGtleSApIH09XFwiJHsgdmFsdWUgfVxcImAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIDogJyc7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGF0dHIudHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW0oKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ29udmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIHByb3ZpZGVkIHN0eWxlcyBpbnRvIGEgc2luZ2xlIHN0cmluZy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIHN0eWxlcyAtIEFuIG9iamVjdCB3aXRoIHN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIGJ1aWx0IHN0cmluZy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgYnVpbGRTdHlsZXMoIHN0eWxlczogUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gKTogc3RyaW5nIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgIGxldCBzdHlsZSA9ICcnO1xcclxcblxcclxcbiAgICBmb3JPd24oIHN0eWxlcywiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICggdmFsdWUsIGtleSApID0+IHtcXHJcXG4gICAgICBzdHlsZSArPSBgICR7IGNhbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbFRvS2ViYWIoIGtleSApIH06JHsgdmFsdWUgfTtgO1xcclxcbiAgICB9ICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICByZXR1cm4gc3R5bGUudHJpbSgpO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogR2VuZXJhdGVzIEhUTUwgb2Ygc2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3aXRoIGluc2VydGluZyBwcm92aWRlZCBjb250ZW50cy5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHJldHVybiBUaGUgSFRNTCBmb3IgYWxsIHNsaWRlcyBhbmQgY2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZW5kZXJTbGlkZXMoKTogc3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyB7XFxyXFxuICAgIGNvbnN0IHsgc2xpZGVUYWc6IHRhZyB9ID0gdGhpcy5jb25mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnO1xcclxcblxcclxcbiAgICByZXR1cm4gdGhpcy5zbGlkZXMubWFwKCBjb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9PiB7XFxyXFxuICAgICAgcmV0dXJuIGA8JHsgdGFnIH0gJHsgdGhpcy5idWlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBdHRycyggY29udGVudC5hdHRycyApIH0+JHsgY29udGVudC5odG1sIHx8ICcnIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPC8keyB0YWcgfT5gO1xcclxcbiAgICB9ICkuam9pbiggJycgKTtcXHJcXG4gIH1cXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFkZCB0aGUgYGJhY2tncm91bmRgIHN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSBmb3IgdGhlIGNvdmVyIG1vZGUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBjb250ZW50IC0gQSBzbGlkZSBjb250ZW50LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJpdmF0ZSBjb3ZlciggY29udGVudDogU2xpZGVDb250ZW50ICk6IHZvaWQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gICAgY29uc3QgeyBzdHlsZXMsIGh0bWwgPSAnJyB9ID0gY29udGVudDsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIGlmICggdGhpcy5vcHRpb25zLmNvdmVyICYmICEgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mub3B0aW9ucy5sYXp5TG9hZCApIHtcXHJcXG4gICAgICBjb25zdCBzcmMgPSBodG1sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5tYXRjaCggLzxpbWcuKj9zcmNcXFxccyo9XFxcXHMqKFtcJ1xcIl0pKC4rPyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxcXDEuKj8+LyApO1xcclxcblxcclxcbiAgICAgIGlmICggc3JjICYmIHNyY1sgMiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSApIHtcXHJcXG4gICAgICAgIHN0eWxlcy5iYWNrZ3JvdW5kID0gYGNlbnRlci9jb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXIgbm8tcmVwZWF0IHVybCgnJHsgc3JjWyAyIF0gfScpYDtcXHJcXG4gICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHZW5lcmF0ZXMgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVudHMgLSBBbiBhcnJheSB3aXRoIFNsaWRlQ29udGVudCBvYmplY3RzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNsb25lcyggY29udGVudHM6IFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNvbnRlbnRbXSApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBjbGFzc2VzIH0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5vcHRpb25zO1xcclxcbiAgICBjb25zdCBjb3VudCAgPSB0aGlzLmdldENsb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNvdW50KCk7XFxyXFxuICAgIGNvbnN0IHNsaWRlcyA9IGNvbnRlbnRzLnNsaWNlKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICB3aGlsZSAoIHNsaWRlcy5sZW5ndGggPCBjb3VudCApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgcHVzaCggc2xpZGVzLCBzbGlkZXMgKTtcXHJcXG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gICAgcHVzaCggc2xpZGVzLnNsaWNlKCAtY291bnQgKS5yZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJzZSgpLCBzbGlkZXMuc2xpY2UoIDAsIGNvdW50ICkgKS5mb3JFYWNoKCAoIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZW50LCBpbmRleCApID0+IHtcXHJcXG4gICAgICBjb25zdCBhdHRycyA9IGFzc2lnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oIHt9LCBjb250ZW50LmF0dHJzLCB7IGNsYXNzOiBgJHsgY29udGVudC5hdHRycycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2xhc3MgfSAkeyBjbGFzc2VzLmNsb25lIH1gIH0gKTtcXHJcXG4gICAgICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmUgPSBhc3NpZ24oIHt9LCBjb250ZW50LCB7IGF0dHJzIH0gKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaW5kZXggPCBjb3VudCA/IGNvbnRlbnRzLnVuc2hpZnQoIGNsb25lICkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29udGVudHMucHVzaCggY2xvbmUgKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXMgdG8gZ2VuZXJhdGUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgb2YgY2xvbmVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGdldEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZUNvdW50KCk6IG51bWJlciB7XFxyXFxuICAgIGlmICggdGhpcy5pc0xvb3AoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSB0aGlzO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBpZiAoIG9wdGlvbnMuY2xvbmVzICkge1xcclxcbiAgICAgICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBvcHRpb25zLmNsb25lcztcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbnN0IHBlclBhZ2UgPSBtYXgoIC4uLnRoaXMuYnJlYWtwb2ludHMubWFwKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBbICwgb3B0aW9ucyBdICkgPT4gb3B0aW9ucy5wZXJQYWdlICkgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHBlclBhZ2UgKiAoICggb3B0aW9ucy5mbGlja01heFBhZ2VzIHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxICkgKyAxICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBHZW5lcmF0ZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93cyBhbmQgdGhlIHdyYXBwZXIgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBUaGUgSFRNTCBmb3IgYXJyb3dzLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgcHJpdmF0ZSByZW5kZXJBcnJvd3MoKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0IGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidG1sID0gJyc7XFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYDxkaXYgY2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIiR7IHRoaXMub3B0aW9ucy5jbGFzc2VzLmFycm93cyB9XFwiPmA7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBodG1sICs9IHRoaXMucmVuZGVyQXJyb3coIHRydWUgKTtcXHJcXG4gICAgaHRtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKz0gdGhpcy5yZW5kZXJBcnJvdyggZmFsc2UgKTtcXHJcXG4gICAgaHRtbCArPSBgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzwvZGl2PmA7XFxyXFxuXFxyXFxuICAgIHJldHVybiBodG1sO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogR2VuZXJhdGVzIGFuIGFycm93IEhUTUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICogU29tZSBhdHRyaWJ1dGVzIGFyZSB0ZW1wb3JhcnksIGFuZCBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIGNoYW5nZXMgdGhlbSBhZnRlciBtb3VudC5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHByZXYgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIEhUTUwgZm9yIHRoZSBwcmV2IG9yIG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0IGFycm93LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHJlbmRlckFycm93KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldjogYm9vbGVhbiApOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCB7IGNsYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBpMThuIH0gPSB0aGlzLm9wdGlvbnM7XFxyXFxuICAgIGNvbnN0IGF0dHJzID0geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBjbGFzcyAgICA6IGAkeyBjbGFzc2VzLmFycm93IH0gJHsgcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBjbGFzc2VzLnByZXYgOiBjbGFzc2VzLm5leHQgfWAsXFxyXFxuICAgICAgdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgIDogJ2J1dHRvbicsXFxyXFxuICAgICAgYXJpYUxhYmVsOiBwcmV2ID8gaTE4biIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucHJldiA6IGkxOG4ubmV4dCxcXHJcXG4gICAgfTtcXHJcXG5cXHJcXG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBgPGJ1dHRvbiAkeyB0aGlzLmJ1aWxkQXR0cnMoIGF0dHJzICkgfT5gXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICtcXHRgPHN2ZyB4bWxucz1cXCIkeyBYTUxfTkFNRV9TUEFDRSB9XFwiICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWV3Qm94PVxcIjAgMCAkeyBTSVpFIH0gJHsgU0laRSB9XFwiIHdpZHRoPVxcIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYickeyBTSVpFIH1cXCIgaGVpZ2h0PVxcIiR7IFNJWkUgfVxcIj5gXFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgYDxwYXRoIGQ9XFwiJHsgdGhpcy5vcHRpb25zLmFycm93UGF0aCB8fCBQQVRIIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFwiIC8+YFxcclxcbiAgICAgICsgYDwvc3ZnPmBcXHJcXG4gICAgICArIGA8L2J1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b24+YDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgdGhlIEhUTUwgb2YgdGhlIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBUaGUgZ2VuZXJhdGVkIEhUTUwuXFxyXFxuICAgKi9cXHJcXG4gIGh0bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKCk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IHsgcm9vdENsYXNzLCBsaXN0VGFnLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJyb3dzLCBiZWZvcmVUcmFjaywgYWZ0ZXJUcmFjaywgc2xpZGVyLCBiZWZvcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVyLCBhZnRlclNsaWRlciB9ID0gdGhpcy5jb25maWc7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICBsZXQgaHRtbCA9ICcnO1xcclxcblxcclxcbiAgICBodG1sICs9IGA8ZGl2ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZD1cXCIkeyB0aGlzLmlkIH1cXCIgY2xhc3M9XFwiJHsgdGhpcy5idWlsZENsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzKCkgfSAkeyByb290Q2xhc3MgfHwgXCdcJyB9XFwiPmA7XFxyXFxuICAgIGh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21sICs9IGA8c3R5bGU+JHsgdGhpcy5TdHlsZS5idWlsZCgpIH08L3N0eWxlPmA7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIHNsaWRlciApIHtcXHJcXG4gICAgICBodG1sICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJiZWZvcmVTbGlkZXIgfHwgJyc7XFxyXFxuICAgICAgaHRtbCArPSBgPGRpdiBjbGFzcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwic3BsaWRlX19zbGlkZXJcXCI+YDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgaHRtbCArPSBiZWZvcmVUcmFjayB8fCAnJztcXHJcXG5cXHJcXG4gICAgaWYgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggYXJyb3dzICkge1xcclxcbiAgICAgIGh0bWwgKz0gdGhpcy5yZW5kZXJBcnJvd3MoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaHRtbCArPSBgPGRpdiBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3M9XFwic3BsaWRlX190cmFja1xcIj5gO1xcclxcbiAgICBodG1sICs9IGA8JHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3RUYWcgfSBjbGFzcz1cXCJzcGxpZGVfX2xpc3RcXCI+YDtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGh0bWwgKz0gdGhpcy5yZW5kZXJTbGlkZXMoKTtcXHJcXG5cXHJcXG4gICAgaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bWwgKz0gYDwvJHsgbGlzdFRhZyB9PmA7XFxyXFxuICAgIGh0bWwgKz0gYDwvZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgOyAvLyAudHJhY2tcXHJcXG5cXHJcXG4gICAgaHRtbCArPSBhZnRlclRyYWNrIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIifCAnJztcXHJcXG5cXHJcXG4gICAgaWYgKCBzbGlkZXIgKSB7XFxyXFxuICAgICAgaHQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWwgKz0gYDwvZGl2PmA7XFxyXFxuICAgICAgaHRtbCArPSBhZnRlclNsaWRlciB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyc7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaHRtbCArPSBgPC9kaXY+YDsgLy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC5zcGxpZGVcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGh0bWw7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBQYWRzIHRoZSBudW1iZXIgd2l0aCAwLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBudW1iZXIgLSBBIG51bWJlciB0byBwYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBzdHJpbmcgLSBQYWRkZWQgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcGFkKCBudW1iZXI6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBudW1iZXIgPCAxMCA/IGAwJHsgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciB9YCA6IGAkeyBudW1iZXIgfWA7XFxyXFxufVxcclxcbiIsImltcG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrZSc7XFxyXFxuXFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFJldHVybnMgZWxlbWVudHMgdGhhdCBtYXRjaCB0aGUgcHJvdmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVkIHNlbGVjdG9yLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHBhcmVudCAgIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EgcGFyZW50IGVsZW1lbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyb20uXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IgdG8gcXVlcnkuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHJldHVybiBBbiBhcnJheSB3aXRoIG1hdGNoZWQgZWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUFsbDxFIGV4dGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRzIEVsZW1lbnQgPSBFbGVtZW50PiggcGFyZW50OiBFbGVtZW50IHwgRG9jdW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBzZWxlY3Rvcj86IHN0cmluZyApOiBFW10ge1xcclxcbiAgcmV0dXJuIHNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvciA/IHNsaWNlPEU+KCBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyICkgKSA6IFtdO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgdHlwZSBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIHRoZSByZWd1bGFyIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU0xJREUgPSAnc2xpZGUnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgdGhlIGNhcm91c2VsIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuZXhwb3J0IGNvbnN0IExPT1AgPSAnbG9vcCc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCBjYW4gbm90IGhhdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXFxyXFxuICpcXHJcXG4gKiBAc2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEZBREUgPSAnZmFkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcJztcXHJcXG4iXSwibmFtZXMiOlsiUlRMIiwiVFRCIiwiT1JJRU5UQVRJT05fTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUCIsIndpZHRoIiwibGVmdCIsInJpZ2h0IiwieCIsIlgiLCJZIiwiQXJyb3dMZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsIkFSUk9XIiwiQXJyb3dSaWdodCIsIkRpcmVjdGlvbiIsIlNwbGlkZSIsIkNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzIiwib3B0aW9ucyIsInJlc29sdmUiLCJwcm9wIiwiYXhpc09ubHkiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciZGlyZWN0aW9uIiwiaW5kZXgiLCJyZXBsYWNlIiwibWF0Y2giLCJvZmZzZXQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZW1lbnQiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsInNsaWNlIiwib3JpZW50IiwidmFsdWUiLCJQUk9KRUNUX0NPREUiLCJDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUFJFRklYIiwiQ0xBU1NfUk9PVCIsIkNMQVNTX1RSQUNLIiwiQ0xBU1NfTElTVCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJDTEFTU19TTElERSIsIkNMQVNTX0NMT05FIiwiQ0xBU1NfQVJST1ciLCJDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUEFHSU5BVElPTiIsIkNMQVNTX0FDVElWRSIsIlNUQVRVU19DTEFTU19QUkVGSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYIiwiREVGQVVMVFMiLCJ0eXBlIiwicm9sZSIsInNwZWVkIiwicGVyUGFnZSIsImMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZVN0YXR1cyIsImFycm93cyIsInBhZ2luYXRpb24iLCJwYWdpbmF0aW9uS2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JvYXJkIiwiaW50ZXJ2YWwiLCJwYXVzZU9uSG92ZXIiLCJwYXVzZU9uRm9jdXMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicicmVzZXRQcm9ncmVzcyIsImVhc2luZyIsImRyYWciLCJ0cmltU3BhY2UiLCJmb2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNhYmxlTm9kZXMiLCJsaXZlIiwiY2xhc3NlcyIsInNsaWRlIiwiY2xvbmUiLCJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jyb3ciLCJwcmV2IiwibmV4dCIsInBhZ2UiLCJzcGlubmVyIiwiaTE4biIsImZpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCIsImxhc3QiLCJzbGlkZVgiLCJwYWdlWCIsInBsYXkiLCJwYXVzZSIsImNhcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlbCIsInNlbGVjdCIsInNsaWRlTGFiZWwiLCJyZWR1Y2VkTW90aW9uIiwicmV3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZFNwZWVkIiwiYXV0b3BsYXkiLCJhcnJheUxpa2UiLCJzdGFydCIsImVuZCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBcnJheSIsInByb3RvdHlwZSIsImNhbGwiLCJhcHBseSIsImZ1bmMiLCJiaW5kIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImFyZ3VtZW50cyIsInR5cGVPZiIsInN1YmplY3QiLCJpc09iamVjdCIsImlzQXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5IiwiaXNTdHJpbmciLCJ0b0FycmF5IiwiZm9yRWFjaCIsInZhbHVlcyIsIml0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlZSIsInB1c2giLCJhcnJheSIsIml0ZW1zIiwibWF0Y2hlcyIsImVsbSIsInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlY3RvciIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsIndpbmRvdyIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJIVE1MRWxlbWVudCIsImUiLCJjaGlsZCIsInBhcmVudCIsImNoaWxkcmVuIiwiZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlciIsImZpcnN0RWxlbWVudENoaWxkIiwib3duS2V5cyIsIk9iamVjdCIsImsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXlzIiwiZm9yT3duIiwib2JqZWN0IiwicmV2ZXJzZSIsImtleSIsImFzc2lnbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzb3VyY2UiLCJtZXJnZSIsInJlbW92ZSIsIm5vZGVzIiwibm9kZSIsInBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOb2RlIiwicmVtb3ZlQ2hpbGQiLCJ1bml0IiwiYXNzZXJ0IiwiY29uZGl0aW9uIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIm1lc3NhZ2UiLCJFcnJvciIsIk1hdGgiLCJtaW4iLCJtYXgiLCJmbG9vciIsImNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsIiwiYWJzIiwiY2FtZWxUb0tlYmFiIiwic3RyaW5nIiwiaWRzIiwiRXZlbnRCaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyIiwibGlzdGVuZXJzIiwiZm9yRWFjaEV2ZW50IiwidGFyZ2V0cyIsImV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMiLCJ0YXJnZXQiLCJzcGxpdCIsImV2ZW50TlMiLCJmcmFnbWVudCIsImNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjayIsImV2ZW50IiwibmFtZXNwYWNlIiwiaXNFdmVudFRhcmdldCIsInJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1bmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kIiwibGlzdGVuZXIiLCJkaXNwYXRjaCIsImRldGFpbCIsIkN1c3RvbUV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsImJ1YmJsZXMiLCJkb2N1bWVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdEN1c3RvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJkZXN0cm95IiwiZGF0YSIsImxlbmd0aCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJFdmVudEludGVyZmFjZSIsImJ1cyIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYmluZGVyIiwib24iLCJqb2luIiwib2ZmIiwiZW1pdCIsIlJFTkRFUkVSX0RFRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVUxUX0NPTkZJRyIsImxpc3RUYWciLCJzbGlkZVRhZyIsIlN0eWxlIiwiaWQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcyIsInN0eWxlcyIsInJ1bGUiLCJicmVha3BvaW50Iiwic2VsZWN0b3JzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkIiwiX3RoaXMiLCJjc3MiLCJkZWZhdWx0IiwiYnVpbGRTZWxlY3RvcnMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicic29ydCIsIm4iLCJtIiwibWVkaWFRdWVyeSIsIl90aGlzMiIsInRyaW0iLCJTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlUmVuZGVyZXIiLCJjb250ZW50cyIsImNvbmZpZyIsImRlZmF1bHRzIiwic2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcyIsImJyZWFrcG9pbnRzIiwicHJlZml4IiwibnVtYmVyIiwiaW5pdCIsImNsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiIsInNwbGlkZSIsInJvb3QiLCJjbG9uZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInBhcnNlQnJlYWtwb2ludHMiLCJpbml0U2xpZGVzIiwicmVnaXN0ZXJSb290U3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlcyIsInJlZ2lzdGVyVHJhY2tTdHlsZXMiLCJyZWdpc3RlclNsaWRlU3R5bGVzIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInJlZ2lzdGVyTGlzdFN0eWxlcyIsIl90aGlzMyIsIm1hcCIsImNvbnRlbnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHRtbCIsImF0dHJzIiwiY292ZXIiLCJjbGFzcyIsInN0eWxlIiwiYnVpbGRTdHlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIiwiaXNMb29wIiwiZ2VuZXJhdGVDbG9uZXMiLCJfdGhpczQiLCJfcmVmIiwiXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzNSIsIl9yZWYyIiwiY3NzUGFkZGluZyIsImNzc1RyYWNrSGVpZ2h0IiwiX3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzNiIsIl9yZWYzIiwiYnVpbGRUcmFuc2xhdGUiLCJjc3NTbGlkZUhlaWdodCIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJjc3NBc3BlY3RSYXRpbyIsIl90aGlzNyIsIl9yZWY0IiwiY3NzU2xpZGVXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJnYXAiLCJfdGhpcyREaXJlY3Rpb24iLCJjc3NPZmZzZXRDbG9uZXMiLCJjc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2Zmc2V0R2FwcyIsImlzQ2VudGVyIiwiYnVpbGRDc3NWYWx1ZSIsImNzc09mZnNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RDZW50ZXIiLCJCb29sZWFuIiwiX3RoaXMkRGlyZWN0aW9uMiIsImNsb25lQ291bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiZ2V0Q2xvbmVDb3VudCIsImlzRml4ZWRXaWR0aCIsIl90aGlzJHBhcnNlQ3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1ZhbHVlIiwicGFyc2VDc3NWYWx1ZSIsIl90aGlzJERpcmVjdGlvbjMiLCJfdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MkcGFyc2VDc3NWYWx1ZTIiLCJfdGhpcyRwYXJzZUNzc1ZhbHVlMyIsIl90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJzZUNzc1ZhbHVlNCIsInBhZGRpbmciLCJoZWlnaHQiLCJpc1ZlcnRpY2FsIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImNzc0hlaWdodCIsImF1dG9XaWR0aCIsImZpeGVkV2lkdGgiLCJjc3NTbGlkZVNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plIiwiZml4ZWRIZWlnaHQiLCJhdXRvSGVpZ2h0IiwiaGVpZ2h0UmF0aW8iLCJwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2VGbG9hdCIsIl90aGlzOCIsImZvY3VzIiwiYnVpbGRDbGFzc2VzIiwiaXNOYXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdhdGlvbiIsImhpZGRlbiIsImJ1aWxkQXR0cnMiLCJhdHRyIiwicmVuZGVyU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcyIsIl90aGlzOSIsInRhZyIsIl9jb250ZW50JGh0bWwiLCJsYXp5TG9hZCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMiLCJiYWNrZ3JvdW5kIiwiY291bnQiLCJ1bnNoaWZ0IiwiX3JlZjUiLCJmbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tNYXhQYWdlcyIsInJlbmRlckFycm93cyIsInJlbmRlckFycm93IiwiX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMiLCJhcmlhTGFiZWwiLCJhcnJvd1BhdGgiLCJfdGhpcyRjb25maWciLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicicm9vdENsYXNzIiwiYmVmb3JlVHJhY2siLCJhZnRlclRyYWNrIiwic2xpZGVyIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImJlZm9yZVNsaWRlciIsImFmdGVyU2xpZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lDQUdPLElDS01BLEVBQU0sTUFLTkMsRUFBTSxNQ1FOQyxFQUFrQixDQUM3QkMsTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVksQ0FBRSxVQUNkQyxLQUFZLENBQUUsTUFBTyxTQUNyQkMsTUFBWSxDQUFFLFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVLFFBQ3hCQyxFQUFZLENBQUUsS0FDZEMsRUFBWSxDQUFFLEtBQ2RDLEVBQVksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQUUsS0FDZEMsVUFBWSxDQ3pCaUJDLFVBREFBLGNEMkI3QkMsV0FBWSxDQ3pCaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCRCxZQUhBQSxZRG9CQSxFQXNCZixTQUFBRSxFQUFXQyxFQUFnQkMsRUFBd0JDLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQThCMUQsTUFBQSxDQUNMQyxRQXZCTyxTQUFTQyxFQUFjQyxFQUFvQkMsR0FFNUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQUFDLEdBRE5ELEVBQVlBLEdBQWFKLEVBQVFJLGFBQ0xuQixHQUFTa0IsRUFBZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLElBQWNsQixFQUFNLEVBQUksQ0FBQSxFQUE1QixFQUV6QyxPQUFBQyxFQUFpQmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQVVmLEVBQWlCZSxHQUFRRyxJQUN0REgsRUFBS0ksUUFBUyxvQkFBcUIsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VDLEVBQU9DLEdBQ3ZDQyxFQUFjdEIsRUFBaUJvQixFQUFNRyxZQUFOLEdBQXVCTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBV0UsRUFDaEUsT0FBUyxFQUFUQyxFQUFhQyxFQUFZRSxPQUFRLENBQXBCLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF3QkMsWUFBeEIsRUFBd0NILEVBQVlJLE1BQU8sQ0FBbkIsRUFBeUJKLENBQ3JGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUhDLENBSVAsRUFlRUssT0FORixTQUFpQkMsR0FDZixPQUFPQSxHQUFVZixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUUksWUFBY25CLEVBQU0sRUFBSSxDQUFBLEVBQ25ELENBRU8sQ0FJVCxDRXhFTywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBTStCLEVBQWUsU0NFdEJDLEVBQW1CRCxFQUF6QixLQVlhRSxFQUF3QkYsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hCRyxFQUE0QkYsRUFBbEMsUUFDTUcsRUFBNEJILEVBQWxDLE9BQ01JLEVBQTRCSicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBbEMsUUFDTUssRUFBNEJELEVBQWxDLFVBR01FLEVBQTRCTixFQUFsQyxRQUcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTU8sRUFBNEJQLEVBQWxDLGFBVU1RLEVBQTRCQyxZQzVCNUJDLEVBQW9CLENBQy9CJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsS0FBb0IsUUFDcEJDLEtBQW9CLFNBQ3BCQyxNQUFvQixJQUNwQkMsUUFBb0IsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3BCQyxZQUFvQixDQUFBLEVBQ3BCQyxPQUFvQixDQUFBLEVBQ3BCQyxXQUFvQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBQSxFQUNwQkMsbUJBQW9CLENBQUEsRUFDcEJDLFNBQW9CLElBQ3BCQyxhQUFvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FBQSxFQUNwQkMsYUFBb0IsQ0FBQSxFQUNwQkMsY0FBb0IsQ0FBQSxFQUNwQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLE9BQW9CLGdDQUNwQkMsS0FBb0IsQ0FBQSxFQUNwQnJDLFVBQW9CLE1BQ3BCc0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFVBQW9CLENBQUEsRUFDcEJDLGVBQW9CLDZDQUNwQkMsS0FBb0IsQ0FBQSxFQUNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JDLFFEcUNxQixDQUNyQkMsTUFBWXpCLEVBQ1owQixNQUFZekIsRUFDWlcsT0E3QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1Q2hCLEVBQWxDLFNBOENMK0IsTUFBWXpCLEVBQ1owQixLQTdDdUMxQixFQUFsQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0E4Q0wyQixLQTdDdUMzQixFQUFsQyxTQThDTFcsV0FBWVYsRUFDWjJCLEtBN0N1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MzQixFQUFsQyxTQThDTDRCLFFBeEN1Q25DLEVBQWxDLFNBK0JnQixFQ3BDckJvQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0MxQmtCLENBQ2xCSixLQUFZLGlCQUNaQyxLQUFZLGFBQ1pJLE1BQVksb0JBQ1onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxLQUFZLG1CQUNaQyxPQUFZLGlCQUNaQyxNQUFZLGdCQUNaQyxLQUFZLGlCQUNaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsTUFBWSxpQkFDWkMsU0FBWSxXQUNaZCxNQUFZLFFBQ1plLE9BQVkseUJBQ1pDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXQUFZLFVBWk0sRUQyQmxCQyxjQUFlLENBQ2JqQyxNQUFhLEVBQ2JrQyxZQUFhLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNiQyxTQUFhLE9BSEEsQ0FyQmdCLEVFRmpCLFNBQUFwRCxFQUFVcUQsRUFBeUJDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFnQkMsR0FDakUsT0FBT0MsTUFBTUMsVUFBVXpELE1BQU0wRCxLQUFNTCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV0MsRUFBT0MsQ0FBOUMsQ0FDVCxDQ2FPLFNBQVNJLEVBQU9DLEdBRXJCLE9BQU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUFLQyxLQUFMRixNQUFBQyxFQUFXLENBQUEsTUFBUzVELE9BQUFBLEVBQU84JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsVUFBVyxDQUFYLEVBQWxDLENBQ0YsQ0NmQSxTQUFTQyxFQUFRaEQsRUFBY2lELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUM3QixPQUFPLE9BQU9BLElBQVlqRCxDQUM1QixDQVNPLFNBQVNrRCxFQUFVRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDeEIsT0ErQ21CLE9BL0NGQSxHQUFhRCxFQUFRLFNBQVVDLENBQWxCLENBQ2hDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQVNPLElBQU1FLEVBQXFEVixNQUFNVSxRQWtCM0RDLEdBVDZEUixFQUFPSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUSxVQUFSLEVBU2RKLEVBQU9JLEVBQVEsUUFBUixHQzFDbkUsU0FBU0ssRUFBWWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxHQUMxQixPQUFPZ0UsRUFBU2hFLENBQUEsRUFBVUEsRUFBUSxDQUFFQSxFQUN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsQ0NIZ0IsU0FBQW1FLEVBQVlDLEVBQWlCQyxHQUNsQ0gsRUFBQUUsQ0FBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU0QsUUFBU0UsQ0FBbEIsQ0FDWCxDQ0FnQixTQUFBQyxFQUFTQyxFQUFZQyxHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNUIsT0FEUEQsRUFBTUQsS0FBTkMsTUFBQUEsRUFBZUwsRUFBU00sQ0FBQSxDQUF4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFDT0QsQ0FDVCxDQ0hnQixTQUFBRSxFQUFTQyxFQUE0QkMsR0FDNUMsT0pzRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGLFNBQXdCYixHQUN6QixJQUNGLE9BQU9BLGFBQXVCQSxFQUFrQmMsY0FBY0MsYUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWVDLFFBQVNDLFdBR3hGLE9BRlVDLEdBQ0QsTUFBQSxDQUFBLENBQ1QsQ0FDRixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0k1RXdCTixDQUFmLElBQTBCQSxFQUFBLG1CQUE4QkEsRUFBSUQsU0FBVWpCLEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNa0IsRUFBS0MsQ0FBdkQsQ0FDbkMsQ0NGZ0IsU0FBQU0sRUFBOEJDLEVBQXFCUCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDakUsT0FBT0EsR0NBNkRBLEVEQTdCQSxFQ0NqQ1EsR0FEeUNELEVEQWhCQSxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDTHBGLEVBQU9vRixFQUFPQyxRQUFkLEVBQWtDLElBQ3JEUixFQUFXUSxFQUFTQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FBUSxTQUFBSCxHQUFBLE9BQVNSLEVBQVNRLEVBQU9OLEVBQXpCLENBQWpCUSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBeURBLEdERnhCLElBQU1ELEVBQU9HLGtCQ0FsRCxJQUFzRFYsQ0RDdEUsQ0xnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0R5RWxCLEVBQU9JLEVBQVEsV0FBUixFTzFEekUsSUFBTXlCLEVBQVVDLE9BQU9DLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQ1NkLFNBQUFDLEVBQ2RDLEVBQ0FyQixFQUNBOUYsR0FFS21ILElBQ0RuSCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUStHLEVBQVNJLENBQUEsRUFBU0MsUUFBbEIsRUFBOEJMLEVBQVNJLENBQUEsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1d2QixRQUFTLFNBQU95QixHQUNsRSxjQUFSQSxHQUF1QnZCLEVBQVVxQixFQUFRRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBT0EsQ0FBekIsQ0FDdkIsQ0FGQSxDQU1OLENDa0JPLFNBQVNDLEVBQTBCSCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FRakMsT0FOUDVGLEVBQU84RCxVQUFXLENBQWxCLEVBQXNCTyxRQUFTLFNBQVUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsR0FDL0JMLEVBQUFLLEVBQVEsU0FBRTlGLEVBQU80RixHQUN2QkYsRUFBUUUsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVFFLEVBQVFGLEVBQ3hCLENBRk0sQ0FHUixDQUpGLEVBTU9GLENBQ1QsQ0NDTywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU0ssRUFBeUJMLEdBY2hDLE9BWlA1RixFQUFPOEQsVUFBVyxDQUFsQixFQUFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JPLFFBQVMsU0FBVTJCLEdBQy9CTCxFQUFBSyxFQUFRLFNBQUU5RixFQUFPNEYsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ2xCNUIsRUFBU2hFLENBQVQsRUFDSzBGLEVBQUFFLEdBQVE1RixFQUFNRixNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCxFQUNFaUUsRUFBVS9ELENBQUEsRUFDcEIwRixFQUFRRSxHQUFRRyxFQUFPLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJaEMsRUFBVTJCLEVBQVFFLEVBQVIsRUFBa0JGLEVBQVFFLEdBQVEsR0FBSTVGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUEzRCxFQUVoQjBGLEVBQVFFLEdBQVE1RixDQUVsQixDQVJNLENBU1IsQ0FWRiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFZTzBGLENBQ1QsQ0MzRE8sU0FBU00sRUFBUUMsR0FDdEI5QixFQUFTOEIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08sU0FBUUMsR0FDakJBLEdBQVFBLEVBQUtDLFlBQ1hELEVBQUFDLFdBQVdDLFlBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhRixDQUF4QixDQUVQLENBSkYsQ0FLRixDQ0hPLFNBQVNHLEVBQU1yRyxHQUNwQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBT2lFLEVBQVVqRSxHQUFVQSxFQUFRQSxFQUFZQSxFQUFaLEtBQXlCLEVBQzlEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQ0pnQixTQUFBc0csRUFBUUMsRUFBZ0JDLEdBQ3RDLEdBQUssQ0FBRUQsRUFDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBTSxJQUFJRSxNQUFZeEcsSUFBQUEsUUFBbUJ1RyxHQUFXLEdBQXBELENBRUonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENDYjhDRSxLQUEvQkMsSUFBUixJQUFhQyxFQUEwQkYsS0FBMUJFLElBQTBCRixLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBckJHLE1BQXFCSCxLQUFkSSxLQUFjSixLQUFSSyxJQ0svQixTQUFTQyxFQUFjQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDNUIsT0FBT0EsRUFBTzFILFFBQVMscUJBQXNCLE9BQXRDLEVBQWdESSxZQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndkQsQ0FDRixDQ0NBLElBQU11SCxFQUE4QixHQ3VCN0IsU0FBU0MsSUFLZCxJQUFJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsRUFBb0YsR0F1Ri9FLFNBQUFDLEVBQ1BDLEVBQ0FDLEVBQ0FsRCxHQUVBRixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU21ELEVBQVMsU0FBVUUsR0FDaEJBLEdBQUFyRCxFQUFTb0QsRUFBUSxTQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDekJBLEVBQU9FLE1BQU8sR0FBZEYsRUFBb0JwRCxRQUFTLFNBQVd1RCxHQUNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDLEVBQVdELEVBQVFELE1BQU8sR0FBZixFQUNqQnBELEVBQVVtRCxFQUFRRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVSxHQUFLQSxFQUFVLEVBQTNDLENBQ0EsQ0FIRkosQ0FJQSxDQUxRLENBTVYsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUEYsQ0FRRixDQVVPLE1BQUEsQ0FDTDVELEtBaEdGLFNBQ0UyRCxFQUNBQyxFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssRUFDQTNJLEdBRUFvSSxFQUFjQyxFQUFTQyxFQUFRLFNBQUVDLEVBQVFLLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPQyxHQUM5QyxJQUFNQyxFQUFnQixxQkFBc0JQLEVBQ3RDUSxFQUFVRCxFQUNaUCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBT1Msb0JBQW9CdEUsS0FBTTZELEVBQVFLLEVBQU9ELEVBQVUzSSxDQUExRCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQXVJLEVBQUEsZUFBMkI3RCxLQUFNNkQsRUFBUUksQ0FBekMsRUFFWUcsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQLEVBQU9VLGlCQUFrQkwsRUFBT0QsRUFBVTNJLENBQTFDLEVBQXNEdUksRUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWUFBeUJJLENBQXpCLEVBQ3RFUixFQUFVOUMsS0FBTSxDQUFFa0QsRUFBUUssRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09DLEVBQVdGLEVBQVVJLEVBQXRELENBQ0EsQ0FSRixDQVNGLEVBa0ZFRyxPQXpFTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBUWIsRUFBdUJDLEVBQTJCSyxHQUNqRVAsRUFBY0MsRUFBU0MsRUFBUSxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUMsRUFBUUssRUFBT0MsR0FDbENWLEVBQUFBLEVBQVVoQyxPQUFRLFNBQVlnRCxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDeEMsTUFBS0EsQ0FBQUEsRUFBQUEsRUFBVSxLQUFRWixHQUNsQlksRUFBVSxLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUVAsR0FDbEJPLEVBQVUsS0FBUU4sR0FDZEYsR0FBWVEsRUFBVSxLQUFRUixLQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckNRLEVBQVUsR0FBVixFQUNPLENBQUEsRUFJVCxDQVhVLENBWVosQ0FiRixDQWNGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQTJERUMsU0FoRE8sU0FBYWIsRUFBcUIzRyxFQUFjeUgsR0FDbkQsSUFBQXRELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQVdHLE1BUnFCLFlBQXZCLE9BQU91RCxZQUNWdkQsRUFBSSxJQUFJdUQsWUFBYTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSCxFQUFNLENBQUUySCxRQUhmLENBQUEsRUFHd0JGLE9BQUFBLENBQVgsQ0FBdkIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBRUF0RCxFQUFBeUQsU0FBU0MsWUFBYSxhQUF0QixHQUNGQyxnQkFBaUI5SCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOTCxDQUFBLEVBTW9CLENBQUEsRUFBT3lILENBQXpDLEVBR0ZkLEVBQU9vQixjQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTVELENBQXRCLEVBQ09BLENBQ1QsRUFvQ0U2RCxRQVRGLFdBQ0V6QixFQUFVakQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQVMsU0FBUTJFLEdBQUVBLEVBQU0sR0FBTixDQUFjLENBQTNDLEVBQ08xQixFQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6SUgyQixPQUFTLENEMElmLENBRU8sQ0FNVCxDRXZITyxTQUFTQyxFQUFnQmpLLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUs5QixJQUFNa0ssRUFBTWxLLEVBQVNBLEVBQU84SSxNQUFNb0IsSUFBTVIsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTLHVCQUFqRCxFQUtNQyxFQUFTaEMsRUFBZixFQTZCQSxPQUpLcEksR0FDSEEsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU84SSxNQUFNdUIsR0NsRHVCLFVEa0RKRCxFQUFPTixPQUF2QzlKLEVBR0s4RywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUXNELEVBQVEsQ0FDckJGLElBQUFBLEVBQ0FHLEdBdkJPLFNBQUk3QixFQUEyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JLLEdBQy9CdUIsRUFBQXhGLEtBQU1zRixFQUFLL0UsRUFBU3FELENBQUEsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4QixLQUFNLEdBQXhCLEVBQStCLFNBQUtyRSxHQUMzQzRDLEVBQUFuRSxNQUFPbUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVU1RCxFQUFTZ0IsRUFBRXNELE1BQUYsRUFBYXRELEVBQUVzRCxPQUFTLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FsRCxDQUNULENBRkssQ0FHVCxFQW9CRWdCLElBQUs3RixFQUFPMEYsRUFBT2hCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPQUFRYyxDQUF0QixFQUNMTSxLQWJGLFNBQWUxQixHQUVic0IsRUFBT2QsU0FBVVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUtwQixFQUFPL0gsRUFBTzhELFVBQVcsQ0FBWCxDQUFwQyxDQUNGLENBTXVCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQU16QixDRTlFTyxJQ1FNNEYsRUFBMEMsQ0FDckRDLFFBQVUsS0FDVkMsU0FBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFGMkMsRUNPMUNDLGFBc0JYLFNBQWFDLEVBQUFBLEVBQVkzSyxHQWxCekI0SywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBaUJDLE9BQWlCLEdBbUJoQ0QsS0FBS0QsR0FBVUEsRUFDZkMsS0FBSzVLLFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FVQSxDQUNqQiw0QkFVQThLLEtBQUEsU0FBTXBGLEVBQWtCeEYsRUFBY2EsRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCZ0ssR0FFdERDLEVBQWNKLEtBQUtDLE9BRHpCRSxFQUFhQSxHQUFjLFdBQ3FCSCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBS0MsT0FBUUUsSUFBZ0IsSUFDekRDLEVBQVd0RixHQUFhc0YsRUFBV3RGLElBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FjLElBQzdEeEYsR0FBU2EsQ0FDbkIsSUFPQWtLLE1BQUEsV0FBZ0IsSUFBQUMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFOLEtBQ1ZPLEVBQU0sR0FnQkgsT0FkRlAsS0FBS0MsT0FBT08sVUFDZkQsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU9QLEtBQUtTLGVBQWdCVCxLQUFLQyxPQUFPTyxPQUFqQyxHQUdGOUUsT0FBQUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQU1xRSxLQUFLQyxNQUFYLEVBQ0pTLEtBQU0sU0FBRUMsRUFBR0MsR0FBTCxNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBd0MsUUFBNUJOLEVBQUtsTCxRQUFReUwsV0FBdUIsQ0FBQ0YsRUFBSSxDQUFDQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBSSxDQUFDQSxFQUFJLENBQUNELENBQWhFLENBREYsRUFFSnJHLFFBQVMsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2M2RixHQUNGLFlBQWZBLElBR0lJLEdBRlBBLEdBQUEsaUNBQXlDSixFQUF6QyxTQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDT0csRUFBS0csZUFBZ0JILEVBQUtMLE9BQVFFLEVBQWxDLEVBQ0EsSUFFVCxDQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQVVBSSxDQUNULElBU1FFLGVBQUEsU0FBZ0JMLEdBQXFFLElBQUFVLEVBQUFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUN2Rk8sRUFBTSxHQWVILE9BYkMzRSxFQUFBd0UsRUFBVyxTQUFFSCxFQUFRbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGLEdBQzNCQSxPQUFnQmdHLEVBQUtmLEdBQVFqRixJQUFBQSxHQUFZaUcsS0FBekMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQ0FSLEdBQVd6RixFQUFYLEtBRVFjLEVBQUFxRSxFQUFRLFNBQUU5SixFQUFPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2IsR0FDbEJhLENBQUFBLEdBQW1CLElBQVZBLElBQ1pvSyxHQUFXakwsRUFBV2EsSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFBLEVBQXRCLElBRUYsQ0FKTSxFQU1Eb0ssR0FBQSxHQUNQLENBWE0sRUFhREEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQ1QseUJDSEEsU0FBQVMsRUFBYUMsRUFBcUM3TCxFQUFtQjhMLEVBQXlCQyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F4QzlGbkIsS0FBaUJvQixPQUF5QixHQWUxQ3BCLEtBQWlCNUssUUFBbUIsR0FlcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDNEssS0FBaUJxQixZQUFxQyxHQVc3Q25GLEVBQUFuRixFQUFVb0ssR0FBWSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEIsRUFDUGpGLEVBQU9BLEVBQU84RCxLQUFLNUssUUFBUzJCLEdBQVkzQixHQUFXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFuRCxFQUVBNEssS0FBS2lCLFNBQVlBLEVBQ2pCakIsS0FBS2tCLE9BQVlsRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUSxHQUFJMkQsRUFBeUJ1QixHQUFVLEVBQXZDLEVBQ3pCbEIsS0FBS0QsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVlDLEtBQUtrQixPQUFPbkIsSVI3RnhCLElBRGlCdUIsRVE4RnVCLFlDdEc1QkMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VUU1VsRSxFQUFLaUUsSUFBYWpFLEVBQUtpRSxJQUFZLEdBQU0sR1NSdEQsR0FBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLElBQUFBLEtBQWdCQSxHRHNHeEN2QixLQUFLRixNQUFZLElBQUlBLEVBQU9FLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLRCxHQUFJQyxLQUFLNUssT0FBekIsRUFDakI0SyxLQUFLL0ssVUFBWUEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1csRUFBTSxFQUFNK0ssS0FBSzVLLE9BQTVCLEVBRVRxSCxFQUFBdUQsS0FBS2lCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFTL0IsT0FBUSw2QkFBdEIsRUFFUmMsS0FBS3dCLEtBQUwsQ0FDRixHQXpFT0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQVAsU0FBY0MsR0FDWixJRWpDK0U1RyxFRmlDdkV5RSxFQUFPSixFQUFnQnVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFoQixFQUFQbkMsR0FDQW9DLEVBQVNELEVBQVRDLEtBQ0ZDLEdFbkM2Q3ZHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRm1DMUJzRyxHRW5Dc0Q3RyxFRm1DaEUsSUFBcUJwRSxHRWxDcEJULEVBQVVvRiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBT3dHLGlCQUFrQi9HLENBQXpCLENBQUEsRUFBd0MsSUZvQ2xFeUUsRUpoRG9DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxVSWdEakIsV0FDVHBELEVBQUFmLEVBQU91RyxFQUFNLE9BQWIsQ0FBQSxDQUNSLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUZGLEVBSUF4RixFQUFReUYsQ0FBUixDQUNGLDZCQW9FUUosS0FBQSxXQUNOeEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUs4QixpQkFBTCxFQUNBOUIsS0FBSytCLFdBQUwsRUFDQS9CLEtBQUtnQyxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JBQUwsRUFDQWhDLEtBQUtpQyxvQkFBTCxFQUNBakMsS0FBS2tDLG9CQUFMLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbEMsS0FBS21DLG1CQUFMLENBQ0YsSUFLUUosV0FBQSxXQUFtQixJQUFBSyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXBDLEtBQ3pCdkYsRUFBTXVGLEtBQUtvQixPQUFRcEIsS0FBS2lCLFNBQVNvQixJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSyxTQUFFQyxFQUFTN00sSUFDL0M2TSxFQUFVbEksRUFBVWtJLEdBQVksQ0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEtBQU1ELENBQVIsRUFBb0JBLEdBQzVDckMsT0FBU3FDLEVBQVFyQyxRQUFVLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUMzQnFDLEVBQUFFLE1BQVNGLEVBQVFFLE9BQVMsR0FFbENKLEVBQUtLLE1BQU9IJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFaLEVBRU1ySyxFQUFjbUssRUFBS2hOLFFBQVE2QyxRQUFRQyxNQUFuQyxLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBd0QsSUFBVnpDLEU3QnRHakJxQixZNkJzRzhDLElBTzFFLE9BTFBrRixFQUFRc0cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFFLE1BQU8sQ0FDckJFLE9BQVd6SyxFQUFKLEtBQWlCcUssRUFBUUUsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01FLE9BQVMsS0FBTTNCLEtBRGhDLEVBRXJCNEIsTUFBT1AsRUFBS1EsWUFBYU4sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVFyQyxNQUExQixDQUZjLENBQXZCLEVBS09xQyxDQUNQLENBZmlCLENBQW5CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCS3RDLEtBQUs2QyxPQUFMLEdBQ0U3QyxLQUFBOEMsZUFBZ0I5QyxLQUFLb0IsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01BQXJCLENBRVQsSUFLUVksbUJBQUEsV0FBMkIsSUFBQWUsRUFBQS9DLEtBQ2pDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBS3FCLFlBQVkvRyxRQUFTLFNBQTBCMEksR0FBQSxJQUF0QnhPLEVBQXNCd08nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUEsR0FBZjVOLEVBQWU0TixFQUFBLEdBQzdDRCxFQUFBakQsTUFBTUksS0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sSUFBSyxZQUFhMUQsRUFBTXBILEVBQVFaLE9BQVNBLENBQXJELENBQ0wsQ0FGRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FHRixJQUtReU4sb0JBQUEsV0FBNEIsSUFBQWdCLEVBQUFqRCxLQUMxQkYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVFLEtBQVZGLE1BQ0ZoRixNQUFnQnZFLEVBRXRCeUosS0FBS3FCLFlBQVkvRyxRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUyxTQUEwQjRJLEdBQUEsSUFBdEIxTyxFQUFzQjBPLEVBQUEsR0FBZjlOLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOE4sRUFBQSxHQUNsRHBELEVBQU1JLEtBQU1wRixFQUFVbUksRUFBSzVOLFFBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGFBQWQsRUFBK0I0TixFQUFLRSxXQUFZL04sRUFBUyxDQUFBLENBQTFCLEVBQW1DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1osQ0FBeEZzTCxFQUNBQSxFQUFNSSxLQUFNcEYsRUFBVW1JLEVBQUs1TixRQUFTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjQUFkLEVBQWdDNE4sRUFBS0UsV0FBWS9OLEVBQVMsQ0FBQSxDQUExQixFQUFrQ1onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQXhGc0wsRUFDQUEsRUFBTUksS0FBTXBGLEVBQVUsU0FBVW1JLEVBQUtHLGVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FnQmhPLENBQXJCLEVBQWdDWixDQUFoRXNMLENBQ0EsQ0FKRixDQUtGLElBS1FxQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbUJBQUEsV0FBMkIsSUFBQWtCLEVBQUFyRCxLQUN6QkYsRUFBVUUsS0FBVkYsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0ZoRixNQUFnQnRFLEVBRXRCd0osS0FBS3FCLFlBQVkvRyxRQUFTLFNBQTBCZ0osJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQUEsSUFBdEI5TyxFQUFzQjhPLEVBQUEsR0FBZmxPLEVBQWVrTyxFQUFBLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsRHhELEVBQU1JLEtBQU1wRixFQUFVLFlBQWF1SSxFQUFLRSxlQUFnQm5PLENBQXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFnQ1osQ0FBbkVzTCxFQUVPdUQsRUFBS0csZUFBZ0JwTyxDQUFyQixHQUNMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBLLEVBQU1JLEtBQU1wRixFQUFVLGVBQWdCdUksRUFBS0ksZUFBZ0JyTyxDQUFyQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBZ0NaLENBQXRFc0wsQ0FFRixDQU5GLENBT0YsSUFLUW9DLG9CQUFBLFdBQTQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixJQUFBd0IsRUFBQTFELEtBQzFCRixFQUFVRSxLQUFWRixNQUNGaEYsTUFBZ0JyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UsRUFFdEJ1SixLQUFLcUIsWUFBWS9HLFFBQVMsU0FBMEJxSixHQUFBLElBQXRCbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQLEVBQXNCbVAsRUFBQSxHQUFmdk8sRUFBZXVPLEVBQUEsR0FDbEQ3RCxFQUFNSSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBTXBGLEVBQVUsUUFBUzRJLEVBQUtFLGNBQWV4TyxDQUFwQixFQUErQlosQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlEc0wsRUFDQUEsRUFBTUksS0FBTXBGLEVBQVUsU0FBVTRJLEVBQUtGLGVBQWdCcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLENBQXJCLEdBQWtDLE9BQVFaLENBQTFFc0wsRUFDQUEsRUFBTUksS0FBTXBGLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVNEksRUFBS3JPLFFBQVMsYUFBZCxFQUErQm1ILEVBQU1wSCxFQUFReU8sR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsR0FBdUIsTUFBT3JQLENBQW5Gc0wsRUFDQUEsRUFBTUksS0FBVXBGLFdBQW1CLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVQUFXMUYsRUFBUXFOLE1BQVEsT0FBUyxTQUFVak8sQ0FBakZzTCxDQUNBLENBTEYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBTUYsSUFTUXlELGVBQUEsU0FBZ0JuTyxHQUN0QixJQUFBME8sRUFBNEI5RCxLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSy9LLFVBQXpCSSxJQUFBQSxRQUFTYSxJQUFBQSxPQUNYcUUsRUFBUyxHQVVmLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPQVJBQSxFQUFPRSxLQUFNdUYsS0FBSytELGdCQUFpQjNPLENBQXRCLENBQWIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FtRixFQUFPRSxLQUFNdUYsS0FBS2dFLGNBQWU1TyxDQUFwQixDQUFiLEVBRUs0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssS0FBS2lFLFNBQVU3TyxDQUFmLElBQ0htRixFQUFPRSxLQUFNdUYsS0FBS2tFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjQUFlaE8sRUFBUSxDQUFJLElBQUcsR0FBbkMsQ0FBYixFQUNBcUUsRUFBT0UsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVBiLE1BQUFXLEVBQWdCeUYsS0FBS21FLGdCQUFpQi9PLENBQXRCLENBQWhCLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dLbUYsRUFDSmdCLE9BQVE2SSxPQURKLEVBRUovQixJQUFLLFNBQUFsTSxHQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBLFlBQXNCZCxFQUFTLEdBQVQsTUFBb0JjLEVBQTFDLEdBQUEsQ0FGRCxFQUcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSnFKLEtBQU0sR0FIRixDQUlULElBVVF1RSxnQkFBQSxTQUFpQjNPLEdBQ3ZCLElBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lVZSxFQUpWa08sRUFBNEJyRSxLQUFLL0ssVUFBekJJLElBQUFBLFFBQVNhLElBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxPQUNYb08sRUFBYXRFLEtBQUt1RSxjQUFsQixFQUVELE9BQUF2RSxLQUFLd0UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGFBQWNwUCxDQUFuQixHQUNLZSxHQUFnQnNPLEVBQUF6RSxLQUFLMEUsY0FBZXRQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFTQyxFQUFTLFlBQUEsRUFBdEMsR0FBaEJjLE1BQU9xRyxJQUFBQSxLQUNSdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidELEtBQUtrRSxjQUFlaE8sRUFBUUMsQ0FBUixFQUFrQm1PLEVBQVk5SCxDQUFsRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FJRXRHLEVBREssSUFBTW9PLEVBQWFsUCxFQUFRK0IsU0FDcEMsR0FDVCxJQWNRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dOLGdCQUFBLFNBQWlCL08sR0FDdkIsSUFRUStCLEVBS0VoQixFQWJWd08sRUFBNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCM0UsS0FBSy9LLFVBQXpCSSxJQUFBQSxRQUFTYSxJQUFBQSxPQUVaLE9BQUE4SiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBS3dFLGFBQWNwUCxDQUFuQixHQUNLZSxHQUFnQnlPLEVBQUE1RSxLQUFLMEUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NBQWV0UCxFQUFTQyxFQUFTLFlBQUEsRUFBdEMsR0FBaEJjLE1BQU9xRyxJQUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FDUixDQUFFd0QsS0FBS2tFLGNBQWVoTyxFQUFRQyxFQUFRLENBQWhCLEVBQXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQnFHLENBQXpDLEtBSUhyRixFQUFpQi9CLEVBQWpCK0IsUUFBUzBNLEVBQVF6TyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUnlPLEtBRFh0SixFQUFTLElBR1JFLEtBQVV2RSxFQUFRLEdBQUtpQixDQUFMLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUF6QixHQUFBLEVBRUswTSxJQUNLMU4sR0FBUjBPLEVBQXdCN0UsS0FBSzBFLGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFlYixDQUFwQixHQUFoQjFOLE1BQU9xRyxJQUFBQSxLQUVmakMsRUFBT0UsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ011RixLQUFLa0UsY0FBZWhPLEdBRGJDLEVBQVFnQixFQUFVaEIsR0FBVSxHQUNNcScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHLENBQXpDLENBQWIsR0FHS2pDLEVBQ1QsSUFTUXlKLGNBQUEsU0FBZTVPLEdBQ2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBR0ljLEVBQ0FDLEVBQU9xRyxFQUpYOEgsRUFBYXRFLEtBQUt1RSxjQUFsQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFRCxPQUFBRCxHQUFjbFAsRUFBUXlPLEtBQ2pCM04sRUFBVzhKLEtBQUsvSyxVQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaEJpQixPQUNBQyxHQUFGMk8sRUFBa0I5RSxLQUFLMEUsY0FBZXRQLEVBQVF5TywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBNUIsR0FBaEIxTixNQUFPcUcsSUFBQUEsS0FFVndELEtBQUt3RSxhQUFjcFAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQW5CLEVBQ0k0SyxLQUFLa0UsY0FBZWhPLEVBQVFDLEVBQVFtTyxDQUFoQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBOEI5SCxDQUFsRCxHQUdEckYsRUFBWS9CLEVBQVorQixRQUVENkksS0FBS2tFLGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFlaE8sRUFEZG9PLEVBQWFuTixFQUNnQmhCLENBQWYsRUFBd0JxRyxDQUE1QyxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FHRixFQUNULElBU1FuSCxRQUFBLFNBQVNDLEdBQ2YsT0FBTzZILEVBQWM2QyxLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSy9LLFVBQVVJLFFBQVNDLENBQXhCLENBQUEsQ0FDdkIsSUFVUTZOLFdBQUEsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVkvTixFQUFrQlYsR0FDNUJxUSxFQUFZM1AsRUFBWjJQLFFBQ0Z6UCxFQUFPMEssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQUsvSyxVQUFVSSxRQUFTWCxFQUFRLFFBQVUsT0FBUSxDQUFBLENBQWxELEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOLE9BQUFxUSxHQUFXdkksRUFBTXVJLEVBQVN6UCxLQUFZNEUsRUFBVTZLLEdBQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUlBLEtBQWUsS0FDeEYsSUFTUTNCLGVBQUEsU0FBZ0JoTyxHQUN0QixJQUFJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzRQLEVBQVMsR0FRTixPQU5GaEYsS0FBS2lGLFdBQUwsSUFFSHhJLEVBRFN1SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWhGLEtBQUtrRixVQUFXOVAsQ0FBaEIsRUFDTyxzQkFBaEIsRUFDUzRQLFVBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUFULE1BQXVCaEYsS0FBS21ELFdBQVkvTixFQUFTLENBQUEsQ0FBMUIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZCLE1BQWdFNEssS0FBS21ELFdBQVkvTixFQUFTLENBQUEsQ0FBMUIsRUFBaEUsSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0o0UCxDQUNULElBU1FFLFVBQUEsU0FBVzlQLEdBQ1YsT0FBQW9ILEVBQU1wSCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUTRQLE1BQWQsQ0FDVCxJQVNRcEIsY0FBQSxTQUFleE8sR0FDckIsT0FBT0EsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVErUCxVQUNYLEdBQ0EzSSxFQUFNcEgsRUFBUWdRLFVBQWQsSUFBZ0NwRixLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBS2lGLFdBQUwsRUFBb0IsR0FBS2pGLEtBQUtxRixhQUFjalEsQ0FBbkIsRUFDL0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBU1FvTyxlQUFBLFNBQWdCcE8sR0FDdEIsT0FBT29ILEVBQU1wSCxFQUFRa1EsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VBQ2R0RixLQUFLaUYsV0FDSjdQLEVBQUFBLEVBQVFtUSxXQUFhLEdBQUt2RixLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBS3FGLGFBQWNqUSxDQUFuQixFQUM1QjRLLEtBQUtrRixVQUFXOVAsQ0FBaEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVIsSUFTUWlRLGFBQUEsU0FBY2pRLEdBQ2QsSUFBQXlPLEVBQU1ySCxFQUFNcEgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVF5TyxHQUFSLEVBQ1gsTUFBQSxjQUFjQSxTQUFjQSxHQUE1QixNQUF5Q3pPLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRK0IsU0FBVyxJQUFNME0sU0FBY0EsR0FBaEYsR0FDVCxJQVNRSixlQUFBLFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFnQnJPLEdBQ2RvUSxFQUFnQnBRLEVBQWhCb1EsWUFDRCxPQUFBQSxFQUFBLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FrQixFQUFJQSxFQUFpQixFQUNoRCxJQVVRdEIsY0FBQSxTQUFlL04sRUFBZXFHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNwQyxNQUFXckcsR0FBQUEsRUFBVXFHLENBQ3ZCLElBU1FrSSxjQUFBLFNBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndk8sR0FDaEIsT0FBQWlFLEVBQVVqRSxDQUFWLEVBR0ksQ0FBRUEsTUFGTXNQLFdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FZdFAsQ0FBQSxHQUFXLEVBRWRxRyxLQURUckcsRUFBTVQsUUFBUyxjQUFlLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5QixHQUFzQyxJQUM5QyxFQUdGLENBQUVTLE1BQUFBLEVBQU9xRyxLQUFNLElBQWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQ1QsSUFLUXNGLGlCQUFBLFdBQXlCLElBQUE0RCxFQUFBMUYsS0FDdkJxQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZ0JyQixLQUFLNUssUUFBckJpTSxZQUVSckIsS0FBS3FCLFlBQVk1RyxLQUFNLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFFLFVBQVd1RixLQUFLNUssUUFBekMsRUFFS2lNLEdBQ0t6RixFQUFBeUYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWEsU0FBRWpNLEVBQVNaLEdBQzlCa1IsRUFBS3JFLFlBQVk1RyxLQUFNLENBQUVqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0csRUFBTzBILEVBQU9BLEVBQU8sR0FBSXdKLEVBQUt0USxPQUFoQixFQUEyQkEsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQTNCLEVBQXZDLENBQ0EsQ0FGTSxDQUlaLElBT1FvUCxhQUFBLFNBQWNwUCxHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEIsTUFBTyxDQUFDLENBQUVBLEVBQVM0SyxLQUFLL0ssVUFBVUksUUFBUyxZQUF4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFDckIsSUFPUXdOLE9BQUEsV0FDQyxNR3RkUyxTSHNkVDdDLEtBQUs1SyxRQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUTRCLElBQ3RCLElBT1FpTixTQUFBLFNBQVU3TyxHQUNaLEdBQWtCLFdBQWxCQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUXVRLE1BQXFCLENBQzFCLEdBQUEzRixLQUFLNkMsT0FBTCxFQUNJLE1BQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQUEsRUFHSixHRzNlVSxVSDJlVjdDLEtBQUs1SyxRQUFRNEIsS0FDVCxNQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFFZ0osS0FBSzVLLFFBQVEwQyxTQUUxQixDQUVPLE1BQUEsQ0FBQSxDQUNULEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU9RbU4sV0FBQSxXQUNDLE9BQUFqRixLQUFLNUssUUFBUUksWUFBY2xCLENBQ3BDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQU9Rc1IsYUFBQSxXQUNBLElBQUV4USxFQUFZNEssS0FBWjVLLFFBRUQsTUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FDTGtCLEVBQ0lBLE9BQWlCbEIsRUFBUTRCLEtBQ3pCVixPQUFpQmxCLEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSSxVQUM3QkosRUFBUXlDLE1BQVl2QixFQUFwQixjQUNBbEIsRUFBUXlRLGNBQW9CJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZQLEVBTHZCLFFBTUxPLEVBQ0EsQ0FBRW1KLEtBQUtrQixPQUFPNEUsUUhoaEJVLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlR2loQnhCdkssT0FBUTZJLE9BUkgsRUFRYTVFLEtBQU0sR0FSbkIsQ0FTVCxJQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUXVHLFdBQUEsU0FBWXZELEdBQ2xCLElBQUl3RCxFQUFPLEdBTVgsT0FKUXBLLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBNEcsRUFBTyxTQUFFck0sRUFBTzRGLEdBQ3RCaUssR0FBUTdQLEVBQVEsSUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnSCxFQUFjcEIsQ0FBQSxFQUFuQixLQUErQjVGLEVBQS9CLElBQTJDLEVBQzNELEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUZNLEVBSUQ2UCxFQUFLakYsS0FBWixDQUNGLElBU1E2QixZQUFBLFNBQWEzQyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDbkIsSUFBSTBDLEVBQVEsR0FNWixPQUpRL0csRUFBQXFFLEVBQVEsU0FBRTlKLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPNEYsR0FDZDRHLE9BQUt4RixFQUFjcEIsQ0FBQSxFQUFuQixJQUE4QjVGLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUE5QixHQUNULENBRk0sRUFJRHdNLEVBQU01QixLQUFiLENBQ0YsSUFPUWtGLGFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLFdBQXVCLElBQUFDLEVBQUFsRyxLQUNYbUcsRUFBUW5HLEtBQUtrQixPQUF2QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyQixTQUVELE9BQUFHLEtBQUtvQixPQUFPaUIsSUFBSyxTQUFXQyxHQUMxQixNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxJQUFLNkQsRUFBUyxJQUFBRCxFQUFLSCxXQUFZekQsRUFBUUUsS0FBekIsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NDRixFQUFRQyxNQUFRLFNBQVM0RCxFQUE3RSxHQUNQLENBRkssRUFFSDNHLEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNLEVBRkgsQ0FHVCxJQU9RaUQsTUFBQSxTQUFPSCxHQUNiLElBQVFyQyxFQUFzQnEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUF0QnJDLE9BQXNCcUMsRUFBQUEsRUFBZEMsS0FBQUEsYUFBTyxHQUF2QjZEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUVLcEcsS0FBSzVLLFFBQVFxTixPQUFXekMsQ0FBQUEsS0FBSzVLLFFBQVFpUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsV0FDbENDLEVBQU0vRCxFQUFLNU0sTUFBTyxvQ0FBWixJQUVBMlEsRUFBSyxLQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUnJHLEVBQUFzRyxXQUFBLCtCQUE2Q0QsRUFBSyxHQUFsRCxLQUdiLElBT1F4RCxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxTQUFnQjdCLEdBS2QsSUFKRixJQUFFaEosRUFBWStILEtBQUs1SyxRQUFqQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2QyxRQUNGdU8sRUFBU3hHLEtBQUt1RSxjQUFkLEVBQ0FuRCxFQUFTSCxFQUFTaEwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQWxCLEVBRUVtTCxFQUFPbEMsT0FBU3NILEdBQ3RCL0wsRUFBTTJHLEVBQVFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFkLEVBR0YzRyxFQUFNMkcsRUFBT25MLE1BQU8sQ0FBQ3VRLENBQWYsRUFBdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCMUssUUFBN0IsRUFBd0NzRixFQUFPbkwsTUFBTyxFQUFHdVEsQ0FBakIsQ0FBeEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQW1FbE0sUUFBUyxTQUFFZ0ksRUFBUzdNLEdBQ3JGLElBQU0rTSxFQUFReEcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVEsR0FBSXNHLEVBQVFFLE1BQU8sQ0FBRUUsTUFBV0osRUFBUUUsTUFBTUUsTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWxCLElBQTZCekssRUFBUUUsS0FBOUMsQ0FBM0IsRUFDUkEsRUFBUTZELEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQUlzRyxFQUFTLENBQUVFLE1BQUFBLENBQUYsQ0FBYixFQUN0Qi9NLEVBQVErJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1EsRUFBUXZGLEVBQVN3RixRQUFTdE8sQ0FBbEIsRUFBNEI4SSxFQUFTeEcsS0FBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0QyxDQUFmLENBQzVDLENBSkYsQ0FLRixJQU9Rb00sY0FBQSxXQUNELElBQ0tuUCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFETCxPQUFBNEssS0FBSzZDLE9BQUwsR0FDS3pOLEVBQVk0SyxLQUFaNUssU0FFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0t3TSxRQUlHN0UsRUFBQW5ELGFBQVFvRyxLQUFLcUIsWUFBWWdCLElBQUssU0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxRSxHQUFBLE9BQUFBLEVBQUEsR0FBNkJ2UCxPQUE3QixDQUF0QixDQUFSLElBQ0snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL0IsRUFBUXVSLGVBQWlCLEdBQU0sR0FHL0MsQ0FDVCxJQU9RQyxhQUFBLFdBQ04sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQUlyRSxFQUFPLEdBT0osT0FMQ0Esa0JBQWdCdkMsS0FBSzVLLFFBQVE2QyxRQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUVosT0FBckMsTUFDQTJJLEtBQUs2RyxZQUFhLENBQUEsQ0FBbEIsRUFDQTdHLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLNkcsWUFBYSxDQUFBLENBQWxCLEVBQ0EsUUFHVixJQVVRQSxZQUFBLFNBQWF4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08sR0FDbkIsSUFBQXlPLEVBQTBCOUcsS0FBSzVLLFFBQXZCNkMsSUFBQUEsUUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRLElBQUFBLEtBQ1grSixFQUFRLENBQ1pFLE1BQWV6SyxFQUFRRyxXQUFXQyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0osRUFBUUksS0FBT0osRUFBUUssTUFDaEV0QixLQUFXLFNBQ1grUCxVQUFXMU8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9JLEVBQUtKLEtBQU9JLEVBQUtILElBSHZCLEVBTWQsTUFBbUIsV0FBQTBILCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFLK0YsV0FBWXZELENBQWpCLEVBQW5CLGlHQUVpQnhDLEtBQUs1SyxRQUFRNFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFdsQ3ZwQmQseUZrQ3FwQmhCLHFCQUtGLElBT0F6RSxLQUFBLFdBQ1EsSUFBQTBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUE2RmpILEtBQUtrQixPQUFoR2dHLElBQUFBLFVBQVd0SCxJQUFBQSxRQUFTdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJLElBQUFBLE9BQVE4UCxJQUFBQSxZQUFhQyxJQUFBQSxXQUFZQyxJQUFBQSxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUUMsSUFBQUEsYUFBY0MsSUFBQUEsWUFFL0VoRixFQUFPLEdBaUNKLE9BOUJDQSxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FEUkEsR0FBQSxZQUFxQnZDLEtBQUtELEdBQWdCLFlBQUFDLEtBQUs0RixhQUFMLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUF5QnNCLEtBQUFBLEdBQWEsSUFBaEYsaUJBQ21CbEgsS0FBS0YsTUFBTU8sUUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXRCLFlBRUhnSCxJQUVLOUUsRUFEUkEsR0FBUStFLEdBQWdCLElBQ2hCLGdDQUdWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9FLEdBQVE0RSxHQUFlLEdBRWxCOVAsSUFDSGtMLEdBQVF2QyxLQUFLNEcsYUFBYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FXRnJFLEdBSEFBLEdBSkFBLEVBRFFBLEVBQUEsK0JBQ1IsSUFBYTNDLEVBQWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDJCQUVRSSxLQUFLaUcsYUFBYixHQUVBLEtBQWNyRyxFQUFkLE1BQ1EsVUFFQXdIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFjLElBRWpCQyxJQUVIOUUsRUFEUUEsRUFBQSxVQUNBZ0YsR0FBZSxLQUdqQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoRixHQUFBLFFBR1YifScsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUtcmVuZGVyZXIubWluLmpzLm1hcCcsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9fSwKIDMxOiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYidmdW5jdGlvbiByKG4sdCl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciByPXRbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ldO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyLmtleSxyKX19ZnVuY3Rpb24gSnQobix0LGkpe3QmJnIobi5wcm90b3R5cGUsdCksaSYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IobixpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwicHJvdG90eXBlIix7d3JpdGFibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiExfSl9XG4vKiFcbiAqIFNwbGlkZS5qc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2Vuc2UgIDogTUlUXG4gKiBDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICovXG52YXIgbix0O249dGhpcyx0PWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igdj0iKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiLEc9NCxybj01LHI9e0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVBVEVEOjEsTU9VTlRFRDoyLElETEU6MyxNT1ZJTkc6RyxTQ1JPTExJTkc6cm4sRFJBRycKICAgICAgICAgICAgICAgICAgICAgICAgYidHSU5HOjYsREVTVFJPWUVEOjd9O2Z1bmN0aW9uIEQobil7bi5sZW5ndGg9MH1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gbyhuLHQsaSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4sdCxpKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gUihuKXtyZXR1cm4gbi5iaW5kLmFwcGx5KG4sW251bGxdLmNvbmNhdChvKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmd1bWVudHMsMSkpKX1mdW5jdGlvbiBvbigpe312YXIgcD1zZXRUaW1lb3V0O2Z1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBoKG4pe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9ZnVuY3Rpb24gdSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbix0KXtyZXR1cm4gdHlwZW9mIHQ9PT1ufWZ1bmN0aW9uIHVuKG4pe3JldHVybiFjKG4pJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmdSgib2JqZWN0IixuKX12YXIgZT1BcnJheS5pc0FycmF5LHg9Uih1LCJmdW5jdGlvbiIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDPVIodSwic3RyaW5nIiksZW49Uih1LCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBjKG4pe3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gbnVsbD09PW59ZnVuY3Rpb24gbShuKXt0cnl7cmV0dXJuIG4gaW5zdGFuY2VvZicKICAgICAgICAgICAgICAgICAgICAgICAgYicobi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cpLkhUTUxFbGVtZW50fWNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaChuKXtyZXR1cm4hMX19ZnVuY3Rpb24geShuKXtyZXR1cm4gZShuKT9uOltuXX1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZyhuLHQpe3kobikuZm9yRWFjaCh0KX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJuLScKICAgICAgICAgICAgICAgICAgICAgICAgYicxPG4uaW5kZXhPZih0KX1mdW5jdGlvbiBrKG4sdCl7cmV0dXJuIG4ucHVzaC5hcHBseShuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx5KHQpKSxufWZ1bmN0aW9uIEEodCxuLGkpe3QmJmcobixmdW5jdGlvbihuKXtuJiZ0LmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc0xpc3RbaT8iYWRkIjoicmVtb3ZlIl0obil9KX1mdW5jdGlvbiBNKG4sdCl7QShuLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDKHQpP3Quc3BsaXQoIiAiKTp0LCEwKX1mdW5jdGlvbiBMKG4sdCl7Zyh0LG4uYXBwZW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NoaWxkLmJpbmQobikpfWZ1bmN0aW9uIE8obixpKXtnKG4sZnVuY3Rpb24obil7dmFyIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPShpfHxuKS5wYXJlbnROb2RlO3QmJnQuaW5zZXJ0QmVmb3JlKG4saSl9KX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY24obix0KXtyZXR1cm4gbShuKSYmKG4ubXNNYXRjaGVzU2VsZWN0b3J8fG4ubWF0Y2hlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpLmNhbGwobix0KX1mdW5jdGlvbiBTKG4sdCl7bj1uP28obi5jaGlsZHJlbik6W107cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB0P24uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBjbihuLHQpfSk6bn1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZm4obix0KXtyZXR1cm4gdD9TKG4sdClbMF06bi5maXJzdEVsZW1lbnRDaGlsZH12JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIEU9T2JqZWN0LmtleXM7ZnVuY3Rpb24gdyh0LGksbil7dCYmKG4/RSh0KS5yZXZlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpOkUodCkpLmZvckVhY2goZnVuY3Rpb24obil7Il9fcHJvdG9fXyIhPT1uJiZpKHRbbicKICAgICAgICAgICAgICAgICAgICAgICAgYiddLG4pfSl9ZnVuY3Rpb24gYW4ocil7cmV0dXJuIG8oYXJndW1lbnRzLDEpLmZvckVhY2goJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKGkpe3coaSxmdW5jdGlvbihuLHQpe3JbdF09aVt0XX0pfSkscn1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gZChpKXtyZXR1cm4gbyhhcmd1bWVudHMsMSkuZm9yRWFjaChmdW5jdGlvbihuKXt3KCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLGZ1bmN0aW9uKG4sdCl7ZShuKT9pW3RdPW4uc2xpY2UoKTp1bihuKT9pW3RdPWQoe30sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuKGlbdF0pP2lbdF06e30sbik6aVt0XT1ufSl9KSxpfWZ1bmN0aW9uIHNuKHQsbil7ZygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnx8RSh0KSxmdW5jdGlvbihuKXtkZWxldGUgdFtuXX0pfWZ1bmN0aW9uIFAobixpKXtnKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLGZ1bmN0aW9uKHQpe2coaSxmdW5jdGlvbihuKXt0JiZ0LnJlbW92ZUF0dHJpYnV0ZShuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9KX0pfWZ1bmN0aW9uIEkoaSx0LHIpe3VuKHQpP3codCxmdW5jdGlvbihuLHQpe0koaSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxuKX0pOmcoaSxmdW5jdGlvbihuKXtjKHIpfHwiIj09PXI/UChuLHQpOm4uc2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZSh0LFN0cmluZyhyKSl9KX1mdW5jdGlvbiBqKG4sdCxpKXtuPWRvY3VtZW50LmNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhdGVFbGVtZW50KG4pO3JldHVybiB0JiYoQyh0KT9NOkkpKG4sdCksaSYmTChpLG4pLG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInfWZ1bmN0aW9uIF8obix0LGkpe2lmKGVuKGkpKXJldHVybiBnZXRDb21wdXRlZFN0eWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduKVt0XTtjKGkpfHwobi5zdHlsZVt0XT0iIitpKX1mdW5jdGlvbiBsbihuLHQpe18obiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BsYXkiLHQpfWZ1bmN0aW9uIGRuKG4pe24uc2V0QWN0aXZlJiZuLnNldEFjdGl2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXx8bi5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfWZ1bmN0aW9uIHoobix0KXtyZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG4uZ2V0QXR0cmlidXRlKHQpfWZ1bmN0aW9uIHZuKG4sdCl7cmV0dXJuIG4mJm4uY2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzTGlzdC5jb250YWlucyh0KX1mdW5jdGlvbiBOKG4pe3JldHVybiBuLmdldEJvdW5kaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBUKG4pe2cobixmdW5jdGlvbihuKXtuJiZuLnBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9KX1mdW5jdGlvbiBobihuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7cmV0dXJuIGZuKChuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcobiwidGV4dC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHRtbCIpLmJvZHkpfWZ1bmN0aW9uIEYobix0KXtuLnByZXZlbnREZWZhdWx0KCksdCYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnN0b3BQcm9wYWdhdGlvbigpLG4uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBwbihuLHQpe3JldHVybiBuJiZuLnF1ZXJ5U2VsZWN0b3IodCl9ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGduKG4sdCl7cmV0dXJuIHQ/byhuLnF1ZXJ5U2VsZWN0b3JBbGwodCkpOltdfWZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBYKG4sdCl7QShuLHQsITEpfWZ1bmN0aW9uIG1uKG4pe3JldHVybiBuLnRpbWVTdGFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B9ZnVuY3Rpb24gVyhuKXtyZXR1cm4gQyhuKT9uOm4/bisicHgiOiIifXZhciB5bj0ic3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSIsZj0iZGF0YS0iK3luO2Z1bmN0aW9uIGJuKG4sdCl7aWYoIW4pdGhyb3cgbmV3ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFcnJvcigiWyIreW4rIl0gIisodHx8IiIpKX12YXIgWT1NYXRoLm1pbix3bj1NYXRoLm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gseG49TWF0aC5mbG9vcixrbj1NYXRoLmNlaWwsVT1NYXRoLmFicztmdW5jdGlvbiBTbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInbix0LGkpe3JldHVybiBVKG4tdCk8aX1mdW5jdGlvbiBFbihuLHQsaSxyKXt2YXIgbz1ZKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0LGkpLHQ9d24odCxpKTtyZXR1cm4gcj9vPG4mJm48dDpvPD1uJiZuPD10fWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBxKG4sdCxpKXt2YXIgcj1ZKHQsaSksdD13bih0LGkpO3JldHVybiBZKHduKHIsbiksdCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInfWZ1bmN0aW9uIExuKG4pe3JldHVybigwPG4pLShuPDApfWZ1bmN0aW9uIE9uKHQsbil7cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBnKG4sZnVuY3Rpb24obil7dD10LnJlcGxhY2UoIiVzIiwiIituKX0pLHR9ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIEFuKG4pe3JldHVybiBuPDEwPyIwIituOiIiK259dmFyIF9uPXt9O2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB6bigpe3ZhciBjPVtdO2Z1bmN0aW9uIGkobixpLHIpe2cobixmdW5jdGlvbih0KXt0JicKICAgICAgICAgICAgICAgICAgICAgICAgYicmZyhpLGZ1bmN0aW9uKG4pe24uc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe249JwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uc3BsaXQoIi4iKTtyKHQsblswXSxuWzFdKX0pfSl9KX1yZXR1cm57YmluZDpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24obix0LHUsZSl7aShuLHQsZnVuY3Rpb24obix0LGkpe3ZhciByPSJhZGRFdmVudExpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5lciJpbiBuLG89cj9uLnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZChuLHQsdSxlKTpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5yZW1vdmVMaXN0ZW5lci5iaW5kKG4sdSk7cj9uLmFkZEV2ZW50TGlzdGVuZXIodCx1LGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTpuLmFkZExpc3RlbmVyKHUpLGMucHVzaChbbix0LGksdSxvXSl9KX0sdW5iaW5kOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihuLHQsbyl7aShuLHQsZnVuY3Rpb24odCxpLHIpe2M9Yy5maWx0ZXIoZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKG4pe3JldHVybiEhKG5bMF0hPT10fHxuWzFdIT09aXx8blsyXSE9PXJ8fG8mJm5bM10nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09byl8fChuWzRdKCksITEpfSl9KX0sZGlzcGF0Y2g6ZnVuY3Rpb24obix0LGkpe3ZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgQ3VzdG9tRXZlbnQ/cj1uZXcgQ3VzdG9tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50KHQse2J1YmJsZXM6ITAsZGV0YWlsOml9KToocj1kb2N1bWVudC5jcmVhdGVFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoIkN1c3RvbUV2ZW50IikpLmluaXRDdXN0b21FdmVudCh0LCEwLCExLGkpLG4uZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGNoRXZlbnQocikscn0sZGVzdHJveTpmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24obil7bls0XSgpfSksRChjKX19fXZhciBCPSJtb3VudGVkIixIPSJtb3ZlIixEbj0ibW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVkIixNbj0iY2xpY2siLFBuPSJhY3RpdmUiLEluPSJpbmFjdGl2ZSIsUm49InZpc2libCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIixDbj0iaGlkZGVuIixKPSJyZWZyZXNoIixLPSJ1cGRhdGVkIixqbj0icmVzaXplIixOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ249InJlc2l6ZWQiLFRuPSJzY3JvbGwiLFY9InNjcm9sbGVkIixhPSJkZXN0cm95IixHbj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIm5hdmlnYXRpb246bW91bnRlZCIsRm49ImF1dG9wbGF5OnBsYXkiLFhuPSJhdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYic6cGF1c2UiLFduPSJsYXp5bG9hZDpsb2FkZWQiLFluPSJzayIsVW49InNoIjtmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gUShuKXt2YXIgaT1uP24uZXZlbnQuYnVzOmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdtZW50KCkscj16bigpO3JldHVybiBuJiZuLmV2ZW50Lm9uKGEsci5kZXN0cm95KSxhbicKICAgICAgICAgICAgICAgICAgICAgICAgYicocix7YnVzOmksb246ZnVuY3Rpb24obix0KXtyLmJpbmQoaSx5KG4pLmpvaW4oIiAiKSxmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24obil7dC5hcHBseSh0LGUobi5kZXRhaWwpP24uZGV0YWlsOltdKX0pfSxvZmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOlIoci51bmJpbmQsaSksZW1pdDpmdW5jdGlvbihuKXtyLmRpc3BhdGNoKGksbixvKGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWVudHMsMSkpfX0pfWZ1bmN0aW9uIHFuKHQsbixpLHIpe3ZhciBvLHUsZT1EYXRlLm5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3csYz0wLGY9ITAsYT0wO2Z1bmN0aW9uIHMoKXtpZighZil7aWYoYz10P1koKGUoKS1vKS8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwxKToxLGkmJmkoYyksMTw9YyYmKG4oKSxvPWUoKSxyJiYrK2E+PXIpKXJldHVybiBsKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO3U9aChzKX19ZnVuY3Rpb24gbCgpe2Y9ITB9ZnVuY3Rpb24gZCgpe3UmJmNhbmNlbEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltYXRpb25GcmFtZSh1KSxmPSEodT1jPTApfXJldHVybntzdGFydDpmdW5jdGlvbihuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnx8ZCgpLG89ZSgpLShuP2MqdDowKSxmPSExLHU9aChzKX0scmV3aW5kOmZ1bmN0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpe289ZSgpLGM9MCxpJiZpKGMpfSxwYXVzZTpsLGNhbmNlbDpkLHNldDpmdW5jdGlvbihuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dD1ufSxpc1BhdXNlZDpmdW5jdGlvbigpe3JldHVybiBmfX19ZnVuY3Rpb24gcyhuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHQ9bjtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pe3Q9bn0saXM6ZnVuY3Rpb24obil7cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBiKHkobiksdCl9fX12YXIgbj0iQXJyb3ciLEJuPW4rIkxlZnQiLEhuPW4rIlJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCIsdD1uKyJVcCIsbj1uKyJEb3duIixKbj0idHRiIixsPXt3aWR0aDpbImhlaWdodCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSxsZWZ0OlsidG9wIiwicmlnaHQiXSxyaWdodDpbImJvdHRvbSIsImxlZnQiXSx4OlsieScKICAgICAgICAgICAgICAgICAgICAgICAgYiciXSxYOlsiWSJdLFk6WyJYIl0sQXJyb3dMZWZ0Olt0LEhuXSxBcnJvd1JpZ2h0OltuLEJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ119O3ZhciBaPSJyb2xlIiwkPSJ0YWJpbmRleCIsaT0iYXJpYS0iLEtuPWkrImNvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsVm49aSsiY3VycmVudCIsUW49aSsic2VsZWN0ZWQiLG5uPWkrImxhYmVsIixabj1pKycKICAgICAgICAgICAgICAgICAgICAgICAgYicibGFiZWxsZWRieSIsJG49aSsiaGlkZGVuIixudD1pKyJvcmllbnRhdGlvbiIsdHQ9aSsiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbGVkZXNjcmlwdGlvbiIsaXQ9aSsibGl2ZSIscnQ9aSsiYnVzeSIsb3Q9aSsiYXRvbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYyIsdXQ9W1osJCwiZGlzYWJsZWQiLEtuLFZuLG5uLFpuLCRuLG50LHR0XSxpPXluKyJfXycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLGV0PXluLGN0PWkrInRyYWNrIixmdD1pKyJsaXN0IixhdD1pKyJzbGlkZSIsc3Q9YXQrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyItLWNsb25lIixsdD1hdCsiX19jb250YWluZXIiLGR0PWkrImFycm93cyIsdnQ9aSsiYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93IixodD12dCsiLS1wcmV2IixwdD12dCsiLS1uZXh0IixndD1pKyJwYWdpbmF0aW9uIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsbXQ9Z3QrIl9fcGFnZSIseXQ9aSsicHJvZ3Jlc3MiKyJfX2JhciIsYnQ9aSsidG9nZ2xlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsd3Q9aSsic3IiLHRuPSJpcy1hY3RpdmUiLHh0PSJpcy1wcmV2IixrdD0iaXMtbmV4dCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFN0PSJpcy12aXNpYmxlIixFdD0iaXMtbG9hZGluZyIsTHQ9ImlzLWZvY3VzLWluIixPdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9ImlzLW92ZXJmbG93IixBdD1bdG4sU3QseHQsa3QsRXQsTHQsT3RdO3ZhciBfdD0idG91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Noc3RhcnQgbW91c2Vkb3duIix6dD0idG91Y2htb3ZlIG1vdXNlbW92ZSIsRHQ9InRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVuZCB0b3VjaGNhbmNlbCBtb3VzZXVwIGNsaWNrIjt2YXIgTXQ9InNsaWRlIixQdD0ibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvb3AiLEl0PSJmYWRlIjtmdW5jdGlvbiBSdChvLHIsdCx1KXt2YXIgZSxuPVEobyksaT1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5vbixjPW4uZW1pdCxmPW4uYmluZCxhPW8uQ29tcG9uZW50cyxzPW8ucm9vdCxsPW8ub3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsZD1sLmlzTmF2aWdhdGlvbix2PWwudXBkYXRlT25Nb3ZlLGg9bC5pMThuLHA9bCcKICAgICAgICAgICAgICAgICAgICAgICAgYicucGFnaW5hdGlvbixnPWwuc2xpZGVGb2N1cyxtPWEuRGlyZWN0aW9uLnJlc29sdmUseT16JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh1LCJzdHlsZSIpLGI9eih1LG5uKSx3PS0xPHQseD1mbih1LCIuIitsdCk7ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGsoKXt2YXIgbj1vLnNwbGlkZXMubWFwKGZ1bmN0aW9uKG4pe249bi5zcGxpZGUuQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMuU2xpZGVzLmdldEF0KHIpO3JldHVybiBuP24uc2xpZGUuaWQ6IiJ9KS5qb2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJygiICIpO0kodSxubixPbihoLnNsaWRlWCwodz90OnIpKzEpKSxJKHUsS24sbiksSSh1LFonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGc/ImJ1dHRvbiI6IiIpLGcmJlAodSx0dCl9ZnVuY3Rpb24gUygpe2V8fEUoKX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gRSgpe3ZhciBuLHQsaTtlfHwobj1vLmluZGV4LChpPUwoKSkhPT12bih1LHRuKSYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhBKHUsdG4saSksSSh1LFZuLGQmJml8fCIiKSxjKGk/UG46SW4sTykpLGk9ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCl7aWYoby5pcyhJdCkpcmV0dXJuIEwoKTt2YXIgbj1OKGEuRWxlbWVudHMudHJhY2spLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PU4odSksaT1tKCJsZWZ0IiwhMCkscj1tKCJyaWdodCIsITApO3JldHVybiB4bihuW2ldJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk8PWtuKHRbaV0pJiZ4bih0W3JdKTw9a24obltyXSl9KCksdD0haSYmKCFMKCl8fHcpLG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0YXRlLmlzKFtHLHJuXSl8fEkodSwkbix0fHwiIiksSShnbih1LGwuZm9jdXNhYmxlTicKICAgICAgICAgICAgICAgICAgICAgICAgYidvZGVzfHwiIiksJCx0Py0xOiIiKSxnJiZJKHUsJCx0Py0xOjApLGkhPT12bih1LFN0KSYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhBKHUsU3QsaSksYyhpP1JuOkNuLE8pKSxpfHxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXV8fCh0PWEuU2xpZGVzLmdldEF0KG8uaW5kZXgpKSYmZG4odC5zbGlkZSksQSh1LHh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyPT09bi0xKSxBKHUsa3Qscj09PW4rMSkpfWZ1bmN0aW9uIEwoKXt2YXIgbj1vLmluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJztyZXR1cm4gbj09PXJ8fGwuY2xvbmVTdGF0dXMmJm49PT10fXZhciBPPXtpbmRleDpyLHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZUluZGV4OnQsc2xpZGU6dSxjb250YWluZXI6eCxpc0Nsb25lOncsbW91bnQ6ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKCl7d3x8KHUuaWQ9cy5pZCsiLXNsaWRlIitBbihyKzEpLEkodSxaLHA/InRhYnBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbCI6Imdyb3VwIiksSSh1LHR0LGguc2xpZGUpLEkodSxubixifHxPbihoLnNsaWRlTGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVsLFtyKzEsby5sZW5ndGhdKSkpLGYodSwiY2xpY2siLFIoYyxNbixPKSksZih1LCJrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5ZG93biIsUihjLFluLE8pKSxpKFtEbixVbixWXSxFKSxpKEduLGspLHYmJmkoSCxTKX0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3k6ZnVuY3Rpb24oKXtlPSEwLG4uZGVzdHJveSgpLFgodSxBdCksUCh1LHV0KSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSSh1LCJzdHlsZSIseSksSSh1LG5uLGJ8fCIiKX0sdXBkYXRlOkUsc3R5bGU6ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4sdCxpKXtfKGkmJnh8fHUsbix0KX0saXNXaXRoaW46ZnVuY3Rpb24obix0KXtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIG49VShuLXIpLChuPXd8fCFsLnJld2luZCYmIW8uaXMoUHQpP246WShuLG8ubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaC1uKSk8PXR9fTtyZXR1cm4gT312YXIgQ3Q9ZisiLWludGVydmFsIjt2YXIganQ9e3BhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzaXZlOiExLGNhcHR1cmU6ITB9O3ZhciBOdD17U3BhY2ViYXI6IiAiLFJpZ2h0OkhuLExlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0OkJuLFVwOnQsRG93bjpufTtmdW5jdGlvbiBUdChuKXtyZXR1cm4gbj1DKG4pP246bi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5LE50W25dfHxufXZhciBHdD0ia2V5ZG93biI7dmFyIEZ0PWYrIi1sYXp5IixYdD1GdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrIi1zcmNzZXQiLFd0PSJbIitGdCsiXSwgWyIrWHQrIl0iO3ZhciBZdD1bIiAiLCJFbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IiXTt2YXIgVXQ9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTWVkaWE6ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKHIsbixvKXt2YXIgdT1yLnN0YXRlLHQ9by5icmVha3BvaW50c3x8e30sZT1vLnJlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1Y2VkTW90aW9ufHx7fSxpPXpuKCksYz1bXTtmdW5jdGlvbiBmKG4pe24mJmkuZGVzdHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3koKX1mdW5jdGlvbiBhKG4sdCl7dD1tYXRjaE1lZGlhKHQpO2kuYmluZCh0LCJjaGFuZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIixzKSxjLnB1c2goW24sdF0pfWZ1bmN0aW9uIHMoKXt2YXIgbj11LmlzKDcpLHQ9by5kaScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWN0aW9uLGk9Yy5yZWR1Y2UoZnVuY3Rpb24obix0KXtyZXR1cm4gZChuLHRbMV0ubWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXM/dFswXTp7fSl9LHt9KTtzbihvKSxsKGkpLG8uZGVzdHJveT9yLmRlc3Ryb3koImMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wbGV0ZWx5Ij09PW8uZGVzdHJveSk6bj8oZighMCksci5tb3VudCgpKTp0IT09by5kaScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWN0aW9uJiZyLnJlZnJlc2goKX1mdW5jdGlvbiBsKG4sdCxpKXtkKG8sbiksdCYmZChPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LmdldFByb3RvdHlwZU9mKG8pLG4pLCFpJiZ1LmlzKDEpfHxyLmVtaXQoSyxvKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJue3NldHVwOmZ1bmN0aW9uKCl7dmFyIGk9Im1pbiI9PT1vLm1lZGlhUXVlcnk7RScKICAgICAgICAgICAgICAgICAgICAgICAgYicodCkuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBpPytuLSt0Oit0LStufSkuZm9yRWFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2goZnVuY3Rpb24obil7YSh0W25dLCIoIisoaT8ibWluIjoibWF4IikrIi13aWR0aDoiK24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyJweCkiKX0pLGEoZSx2KSxzKCl9LGRlc3Ryb3k6ZixyZWR1Y2U6ZnVuY3Rpb24obil7bScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGNoTWVkaWEodikubWF0Y2hlcyYmKG4/ZChvLGUpOnNuKG8sRShlKSkpfSxzZXQ6bH19JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxEaXJlY3Rpb246ZnVuY3Rpb24obix0LG8pe3JldHVybntyZXNvbHZlOmZ1bmN0aW9uKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHQsaSl7dmFyIHI9InJ0bCIhPT0oaT1pfHxvLmRpcmVjdGlvbil8fHQ/aT09PUpuPzA6LScKICAgICAgICAgICAgICAgICAgICAgICAgYicxOjE7cmV0dXJuIGxbbl0mJmxbbl1bcl18fG4ucmVwbGFjZSgvd2lkdGh8bGVmdHxyaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QvaSxmdW5jdGlvbihuLHQpe249bFtuLnRvTG93ZXJDYXNlKCldW3JdfHxuO3JldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDx0P24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKTpufSl9LG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6ZnVuY3Rpb24obil7cmV0dXJuIG4qKCJydGwiPT09by5kaXJlY3Rpb24/MTotMSl9fX0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzOmZ1bmN0aW9uKG4sdCxpKXt2YXIgcixvLHUsZT1RKG4pLGM9ZS5vbixmPWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmJpbmQsYT1uLnJvb3Qscz1pLmkxOG4sbD17fSxkPVtdLHY9W10saD1bXTtmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcCgpe3I9eSgiLiIrY3QpLG89Zm4ociwiLiIrZnQpLGJuKHImJm8sIkEgdHJhY2svbGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgZWxlbWVudCBpcyBtaXNzaW5nLiIpLGsoZCxTKG8sIi4iK2F0KyI6bm90KC4iK3N0KyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSIpKSx3KHthcnJvd3M6ZHQscGFnaW5hdGlvbjpndCxwcmV2Omh0LG5leHQ6cHQsYmFyOicKICAgICAgICAgICAgICAgICAgICAgICAgYid5dCx0b2dnbGU6YnR9LGZ1bmN0aW9uKG4sdCl7bFt0XT15KCIuIituKX0pLGFuKGwse3JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290OmEsdHJhY2s6cixsaXN0Om8sc2xpZGVzOmR9KTt2YXIgbj1hLmlkfHxmdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInbil7cmV0dXJuIiIrbitBbihfbltuXT0oX25bbl18fDApKzEpfSh5biksdD1pLnJvbGU7YScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaWQ9bixyLmlkPXIuaWR8fG4rIi10cmFjayIsby5pZD1vLmlkfHxuKyItbGlzdCIsIXooJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EsWikmJiJTRUNUSU9OIiE9PWEudGFnTmFtZSYmdCYmSShhLFosdCksSShhLHR0LHMuY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm91c2VsKSxJKG8sWiwicHJlc2VudGF0aW9uIiksbSgpfWZ1bmN0aW9uIGcobil7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PXV0LmNvbmNhdCgic3R5bGUiKTtEKGQpLFgoYSx2KSxYKHIsaCksUChbcixvXSx0KSxQJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhhLG4/dDpbInN0eWxlIix0dF0pfWZ1bmN0aW9uIG0oKXtYKGEsdiksWChyLGgpLHY9YignCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQpLGg9YihjdCksTShhLHYpLE0ocixoKSxJKGEsbm4saS5sYWJlbCksSShhLFpuLGkubCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsbGVkYnkpfWZ1bmN0aW9uIHkobil7bj1wbihhLG4pO3JldHVybiBuJiZmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24obix0KXtpZih4KG4uY2xvc2VzdCkpcmV0dXJuIG4uY2xvc2VzdCh0KTtmb3IodmFyIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInPW47aSYmMT09PWkubm9kZVR5cGUmJiFjbihpLHQpOylpPWkucGFyZW50RWxlbWVudDtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGl9KG4sIi4iK2V0KT09PWE/bjp2b2lkIDB9ZnVuY3Rpb24gYihuKXtyZXR1cm5bJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24rIi0tIitpLnR5cGUsbisiLS0iK2kuZGlyZWN0aW9uLGkuZHJhZyYmbisiLS1kcmFnZ2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlIixpLmlzTmF2aWdhdGlvbiYmbisiLS1uYXYiLG49PT1ldCYmdG5dfXJldHVybiBhbicKICAgICAgICAgICAgICAgICAgICAgICAgYicobCx7c2V0dXA6cCxtb3VudDpmdW5jdGlvbigpe2MoSixnKSxjKEoscCksYyhLLG0pLGYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RvY3VtZW50LF90KyIga2V5ZG93biIsZnVuY3Rpb24obil7dT0ia2V5ZG93biI9PT1uLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlfSx7Y2FwdHVyZTohMH0pLGYoYSwiZm9jdXNpbiIsZnVuY3Rpb24oKXtBKGEsTHQsIScKICAgICAgICAgICAgICAgICAgICAgICAgYichdSl9KX0sZGVzdHJveTpnfSl9LFNsaWRlczpmdW5jdGlvbihyLG8sdSl7dmFyIG49UShyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksdD1uLm9uLGU9bi5lbWl0LGM9bi5iaW5kLGY9KG49by5FbGVtZW50cykuc2xpZGVzLGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPW4ubGlzdCxzPVtdO2Z1bmN0aW9uIGkoKXtmLmZvckVhY2goZnVuY3Rpb24obix0KXtkKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQsLTEpfSl9ZnVuY3Rpb24gbCgpe2goZnVuY3Rpb24obil7bi5kZXN0cm95KCl9KSxEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzKX1mdW5jdGlvbiBkKG4sdCxpKXt0PVJ0KHIsdCxpLG4pO3QubW91bnQoKSxzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHQpLHMuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBuLmluZGV4LXQuaW5kZXh9KX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdihuKXtyZXR1cm4gbj9wKGZ1bmN0aW9uKG4pe3JldHVybiFuLmlzQ2xvbmV9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6c31mdW5jdGlvbiBoKG4sdCl7dih0KS5mb3JFYWNoKG4pfWZ1bmN0aW9uIHAodCl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBzLmZpbHRlcih4KHQpP3Q6ZnVuY3Rpb24obil7cmV0dXJuIEModCk/Y24obi5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUsdCk6Yih5KHQpLG4uaW5kZXgpfSl9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7aSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx0KEosbCksdChKLGkpfSxkZXN0cm95OmwsdXBkYXRlOmZ1bmN0aW9uKCl7aChmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24obil7bi51cGRhdGUoKX0pfSxyZWdpc3RlcjpkLGdldDp2LGdldEluOmZ1bmN0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduKXt2YXIgdD1vLkNvbnRyb2xsZXIsaT10LnRvSW5kZXgobikscj10Lmhhc0ZvY3VzKCk/JwogICAgICAgICAgICAgICAgICAgICAgICBiJzE6dS5wZXJQYWdlO3JldHVybiBwKGZ1bmN0aW9uKG4pe3JldHVybiBFbihuLmluZGV4LGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGkrci0xKX0pfSxnZXRBdDpmdW5jdGlvbihuKXtyZXR1cm4gcChuKVswXX0sYWRkOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihuLG8pe2cobixmdW5jdGlvbihuKXt2YXIgdCxpLHI7bShuPUMobik/aG4obik6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pJiYoKHQ9ZltvXSk/TyhuLHQpOkwoYSxuKSxNKG4sdS5jbGFzc2VzLnNsaWRlKSx0PW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGk9UihlLGpuKSx0PWduKHQsImltZyIpLChyPXQubGVuZ3RoKT90LmZvckVhY2goZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKG4pe2MobiwibG9hZCBlcnJvciIsZnVuY3Rpb24oKXstLXJ8fGkoKX0pfSk6aSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9KSxlKEopfSxyZW1vdmU6ZnVuY3Rpb24obil7VChwKG4pLm1hcChmdW5jdGlvbihuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIG4uc2xpZGV9KSksZShKKX0sZm9yRWFjaDpoLGZpbHRlcjpwLHN0eWxlOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbih0LGkscil7aChmdW5jdGlvbihuKXtuLnN0eWxlKHQsaSxyKX0pfSxnZXRMZW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoOmZ1bmN0aW9uKG4pe3JldHVybihuP2Y6cykubGVuZ3RofSxpc0Vub3VnaDpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24oKXtyZXR1cm4gcy5sZW5ndGg+dS5wZXJQYWdlfX19LExheW91dDpmdW5jdGlvbih0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLGkpe3ZhciByLG8sdSxlPShhPVEodCkpLm9uLGM9YS5iaW5kLGY9YS5lbWl0LGE9bi5TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzLHM9bi5EaXJlY3Rpb24ucmVzb2x2ZSxsPShuPW4uRWxlbWVudHMpLnJvb3QsZD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi50cmFjayx2PW4ubGlzdCxoPWEuZ2V0QXQscD1hLnN0eWxlO2Z1bmN0aW9uIGcoKXtyPScKICAgICAgICAgICAgICAgICAgICAgICAgYidpLmRpcmVjdGlvbj09PUpuLF8obCwibWF4V2lkdGgiLFcoaS53aWR0aCkpLF8oZCxzKCJwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZGluZ0xlZnQiKSx5KCExKSksXyhkLHMoInBhZGRpbmdSaWdodCIpLHkoITApKSxtKCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCl9ZnVuY3Rpb24gbShuKXt2YXIgdD1OKGwpOyFuJiZvLndpZHRoPT09dC53aWR0aCYmbycKICAgICAgICAgICAgICAgICAgICAgICAgYicuaGVpZ2h0PT09dC5oZWlnaHR8fChfKGQsImhlaWdodCIsZnVuY3Rpb24oKXt2YXIgbj0iJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7ciYmKGJuKG49YigpLCJoZWlnaHQgb3IgaGVpZ2h0UmF0aW8gaXMgbWlzc2luZy4iKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj0iY2FsYygiK24rIiAtICIreSghMSkrIiAtICIreSghMCkrIikiKTtyZXR1cm4gbn0oKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpLHAocygibWFyZ2luUmlnaHQiKSxXKGkuZ2FwKSkscCgid2lkdGgiLGkuYXV0b1dpZHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJz9udWxsOlcoaS5maXhlZFdpZHRoKXx8KHI/IiI6dygpKSkscCgiaGVpZ2h0IixXKGkuZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGVkSGVpZ2h0KXx8KHI/aS5hdXRvSGVpZ2h0P251bGw6dygpOmIoKSksITApLG89dCxmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidObiksdSE9PSh1PU8oKSkmJihBKGwsT3QsdSksZigib3ZlcmZsb3ciLHUpKSl9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHkobil7dmFyIHQ9aS5wYWRkaW5nLG49cyhuPyJyaWdodCI6ImxlZnQiKTtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHQmJlcodFtuXXx8KHVuKHQpPzA6dCkpfHwiMHB4In1mdW5jdGlvbiBiKCl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidXKGkuaGVpZ2h0fHxOKHYpLndpZHRoKmkuaGVpZ2h0UmF0aW8pfWZ1bmN0aW9uIHcoKXt2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIG49VyhpLmdhcCk7cmV0dXJuImNhbGMoKDEwMCUiKyhuJiYiICsgIituKSsiKS8iKygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaS5wZXJQYWdlfHwxKSsobiYmIiAtICIrbikrIikifWZ1bmN0aW9uIHgoKXtyZXR1cm4gTicKICAgICAgICAgICAgICAgICAgICAgICAgYicodilbcygid2lkdGgiKV19ZnVuY3Rpb24gayhuLHQpe249aChufHwwKTtyZXR1cm4gbj9OJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhuLnNsaWRlKVtzKCJ3aWR0aCIpXSsodD8wOkwoKSk6MH1mdW5jdGlvbiBTKG4sdCl7dmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBpLG49aChuKTtyZXR1cm4gbj8obj1OKG4uc2xpZGUpW3MoInJpZ2h0IildLGk9Tih2KScKICAgICAgICAgICAgICAgICAgICAgICAgYidbcygibGVmdCIpXSxVKG4taSkrKHQ/MDpMKCkpKTowfWZ1bmN0aW9uIEUobil7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTKHQubGVuZ3RoLTEpLVMoMCkraygwLG4pfWZ1bmN0aW9uIEwoKXt2YXIgbj1oKDApO3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gbiYmcGFyc2VGbG9hdChfKG4uc2xpZGUscygibWFyZ2luUmlnaHQiKSkpfHwwfScKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBPKCl7cmV0dXJuIHQuaXMoSXQpfHxFKCEwKT54KCl9cmV0dXJue21vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpmdW5jdGlvbigpe3ZhciBuLHQsaTtnKCksYyh3aW5kb3csInJlc2l6ZSBsb2FkIiwobj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUihmLGpuKSxpPXFuKHR8fDAsbixudWxsLDEpLGZ1bmN0aW9uKCl7aS5pc1BhdXNlZCgpJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmaS5zdGFydCgpfSkpLGUoW0ssSl0sZyksZShqbixtKX0scmVzaXplOm0sbGlzdFNpemU6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gsc2xpZGVTaXplOmssc2xpZGVyU2l6ZTpFLHRvdGFsU2l6ZTpTLGdldFBhZGRpbmc6ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKG4pe3JldHVybiBwYXJzZUZsb2F0KF8oZCxzKCJwYWRkaW5nIisobj8iUmlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IjoiTGVmdCIpKSkpfHwwfSxpc092ZXJmbG93Ok99fSxDbG9uZXM6ZnVuY3Rpb24oYyxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxmKXt2YXIgdCxyPVEoYyksbj1yLm9uLGE9aS5FbGVtZW50cyxzPWkuU2xpZGVzLG89aS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uLnJlc29sdmUsbD1bXTtmdW5jdGlvbiB1KCl7aWYobihKLGQpLG4oW0ssaicKICAgICAgICAgICAgICAgICAgICAgICAgYiduXSx2KSx0PWgoKSl7dmFyIG89dCx1PXMuZ2V0KCkuc2xpY2UoKSxlPXUubGVuZ3RoO2lmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKXtmb3IoO3UubGVuZ3RoPG87KWsodSx1KTtrKHUuc2xpY2UoLW8pLHUuc2xpY2UoMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbykpLmZvckVhY2goZnVuY3Rpb24obix0KXt2YXIgaT10PG8scj1mdW5jdGlvbihuLHQpeycKICAgICAgICAgICAgICAgICAgICAgICAgYiduPW4uY2xvbmVOb2RlKCEwKTtyZXR1cm4gTShuLGYuY2xhc3Nlcy5jbG9uZSksbi5pZD1jJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5yb290LmlkKyItY2xvbmUiK0FuKHQrMSksbn0obi5zbGlkZSx0KTtpP08ocix1WzBdLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk6TChhLmxpc3QsciksayhsLHIpLHMucmVnaXN0ZXIocix0LW8rKGk/MDplKSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCl9KX1pLkxheW91dC5yZXNpemUoITApfX1mdW5jdGlvbiBkKCl7ZSgpLHUoKX1mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZSgpe1QobCksRChsKSxyLmRlc3Ryb3koKX1mdW5jdGlvbiB2KCl7dmFyIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWgoKTt0IT09biYmKHQ8bnx8IW4pJiZyLmVtaXQoSil9ZnVuY3Rpb24gaCgpe3ZhciBuLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PWYuY2xvbmVzO3JldHVybiBjLmlzKFB0KT9lbih0KSYmKHQ9KG49ZltvKCJmaXhlZFdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCIpXSYmaS5MYXlvdXQuc2xpZGVTaXplKDApKSYma24oTihhLnRyYWNrKVtvKCJ3aWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGgiKV0vbil8fGZbbygiYXV0b1dpZHRoIildJiZjLmxlbmd0aHx8MipmLnBlclBhZ2UpOicKICAgICAgICAgICAgICAgICAgICAgICAgYid0PTAsdH1yZXR1cm57bW91bnQ6dSxkZXN0cm95OmV9fSxNb3ZlOmZ1bmN0aW9uKHIsYyxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dmFyIGUsbj1RKHIpLHQ9bi5vbixmPW4uZW1pdCxhPXIuc3RhdGUuc2V0LHU9KG49Yy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTGF5b3V0KS5zbGlkZVNpemUsaT1uLmdldFBhZGRpbmcscz1uLnRvdGFsU2l6ZSxsPW4ubCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3RTaXplLGQ9bi5zbGlkZXJTaXplLHY9KG49Yy5EaXJlY3Rpb24pLnJlc29sdmUsaD1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5vcmllbnQscD0obj1jLkVsZW1lbnRzKS5saXN0LGc9bi50cmFjaztmdW5jdGlvbiBtKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2MuQ29udHJvbGxlci5pc0J1c3koKXx8KGMuU2Nyb2xsLmNhbmNlbCgpLHkoci5pbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpLGMuU2xpZGVzLnVwZGF0ZSgpKX1mdW5jdGlvbiB5KG4pe2IoUyhuLCEwKSl9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGIobix0KXtyLmlzKEl0KXx8KHQ9dD9uOmZ1bmN0aW9uKG4pe3t2YXIgdCxpO3IuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFB0KSYmKHQ9ayhuKSxpPXQ+Yy5Db250cm9sbGVyLmdldEVuZCgpLCh0PDB8fGkpJiYobicKICAgICAgICAgICAgICAgICAgICAgICAgYic9dyhuLGkpKSl9cmV0dXJuIG59KG4pLF8ocCwidHJhbnNmb3JtIiwidHJhbnNsYXRlIit2JwogICAgICAgICAgICAgICAgICAgICAgICBiJygiWCIpKyIoIit0KyJweCkiKSxuIT09dCYmZihVbikpfWZ1bmN0aW9uIHcobix0KXt2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGk9bi1MKHQpLHI9ZCgpO3JldHVybiBuLT1oKHIqKGtuKFUoaSkvcil8fDEpKSoodD8xOicKICAgICAgICAgICAgICAgICAgICAgICAgYictMSl9ZnVuY3Rpb24geCgpe2IoRSgpLCEwKSxlLmNhbmNlbCgpfWZ1bmN0aW9uIGsobil7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zvcih2YXIgdD1jLlNsaWRlcy5nZXQoKSxpPTAscj0xLzAsbz0wO288dC5sZW5ndGg7bysnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyl7dmFyIHU9dFtvXS5pbmRleCxlPVUoUyh1LCEwKS1uKTtpZighKGU8PXIpKWJyZWFrOycKICAgICAgICAgICAgICAgICAgICAgICAgYidyPWUsaT11fXJldHVybiBpfWZ1bmN0aW9uIFMobix0KXt2YXIgaT1oKHMobi0xKS0obj1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiY2VudGVyIj09PShpPW8uZm9jdXMpPyhsKCktdShuLCEwKSkvMjoraSp1KG4pfHwwKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiB0PyhuPWksbj1vLnRyaW1TcGFjZSYmci5pcyhNdCk/cShuLDAsaChkKCEwKScKICAgICAgICAgICAgICAgICAgICAgICAgYictbCgpKSk6bik6aX1mdW5jdGlvbiBFKCl7dmFyIG49digibGVmdCIpO3JldHVybiBOKHApJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tuXS1OKGcpW25dK2goaSghMSkpfWZ1bmN0aW9uIEwobil7cmV0dXJuIFMobj9jLkNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9sbGVyLmdldEVuZCgpOjAsISFvLnRyaW1TcGFjZSl9cmV0dXJue21vdW50OmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpe2U9Yy5UcmFuc2l0aW9uLHQoW0IsTm4sSyxKXSxtKX0sbW92ZTpmdW5jdGlvbihuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx0LGkscil7dmFyIG8sdTtuIT09dCYmKG89aTxuLHU9aCh3KEUoKSxvKSksbz8wPD11OnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPD1wW3YoInNjcm9sbFdpZHRoIildLU4oZylbdigid2lkdGgiKV0pJiYoeCgpLGIodyhFKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpLGk8biksITApKSxhKEcpLGYoSCx0LGksbiksZS5zdGFydCh0LGZ1bmN0aW9uKCl7YSgzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksZihEbix0LGksbiksciYmcigpfSl9LGp1bXA6eSx0cmFuc2xhdGU6YixzaGlmdDp3LGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZWw6eCx0b0luZGV4OmssdG9Qb3NpdGlvbjpTLGdldFBvc2l0aW9uOkUsZ2V0TGltaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0OkwsZXhjZWVkZWRMaW1pdDpmdW5jdGlvbihuLHQpe3Q9ZW4odCk/RSgpOnQ7dmFyIGk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyEwIT09biYmaCh0KTxoKEwoITEpKSxuPSExIT09biYmaCh0KT5oKEwoITApKTtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGl8fG59LHJlcG9zaXRpb246bX19LENvbnRyb2xsZXI6ZnVuY3Rpb24obyx1LGUpe3ZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgYyxmLGEscyxuPVEobyksdD1uLm9uLGk9bi5lbWl0LGw9dS5Nb3ZlLGQ9bC5nZXRQb3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24scj1sLmdldExpbWl0LHY9bC50b1Bvc2l0aW9uLGg9KG49dS5TbGlkZXMpLmlzRW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VnaCxwPW4uZ2V0TGVuZ3RoLGc9ZS5vbWl0RW5kLG09by5pcyhQdCkseT1vLmlzKE10KScKICAgICAgICAgICAgICAgICAgICAgICAgYicsYj1SKEwsITEpLHc9UihMLCEwKSx4PWUuc3RhcnR8fDAsaz14O2Z1bmN0aW9uIFMoKXtmJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1wKCEwKSxhPWUucGVyTW92ZSxzPWUucGVyUGFnZSxjPV8oKTt2YXIgbj1xKHgsMCxnP2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmYtMSk7biE9PXgmJih4PW4sbC5yZXBvc2l0aW9uKCkpfWZ1bmN0aW9uIEUoKXtjIT09XycKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSYmaSgiZWkiKX1mdW5jdGlvbiBMKG4sdCl7dmFyIGk9YXx8KFAoKT8xOnMpLGk9Tyh4JwogICAgICAgICAgICAgICAgICAgICAgICBiJytpKihuPy0xOjEpLHgsIShhfHxQKCkpKTtyZXR1cm4tMT09PWkmJnkmJiFTbihkKCkscignCiAgICAgICAgICAgICAgICAgICAgICAgIGInIW4pLDEpP24/MDpjOnQ/aTpBKGkpfWZ1bmN0aW9uIE8obix0LGkpe3ZhciByO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaCgpfHxQKCk/KChyPWZ1bmN0aW9uKG4pe2lmKHkmJiJtb3ZlIj09PWUudHJpbVNwYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYmbiE9PXgpZm9yKHZhciB0PWQoKTt0PT09dihuLCEwKSYmRW4obiwwLG8ubGVuZ3RoLTEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCFlLnJld2luZCk7KW48eD8tLW46KytuO3JldHVybiBufShuKSkhPT1uJiYodD1uLG49cicKICAgICAgICAgICAgICAgICAgICAgICAgYicsaT0hMSksbjwwfHxjPG4/bj1hfHwhRW4oMCxuLHQsITApJiYhRW4oYyx0LG4sITApP20/JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k/bjwwPy0oZiVzfHxzKTpmOm46ZS5yZXdpbmQ/bjwwP2M6MDotMTp6KEQobikpOmkmJm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09dCYmKG49eihEKHQpKyhuPHQ/LTE6MSkpKSk6bj0tMSxufWZ1bmN0aW9uIEEobil7cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBtPyhuK2YpJWZ8fDA6bn1mdW5jdGlvbiBfKCl7Zm9yKHZhciBuPWYtKFAoKXx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ20mJmE/MTpzKTtnJiYwPG4tLTspaWYodihmLTEsITApIT09dihuLCEwKSl7bisrO2JyZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIna31yZXR1cm4gcShuLDAsZi0xKX1mdW5jdGlvbiB6KG4pe3JldHVybiBxKFAoKT9uOnMqbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsMCxjKX1mdW5jdGlvbiBEKG4pe3JldHVybiBQKCk/WShuLGMpOnhuKChjPD1uP2YtMTpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJykvcyl9ZnVuY3Rpb24gTShuKXtuIT09eCYmKGs9eCx4PW4pfWZ1bmN0aW9uIFAoKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIWVuKGUuZm9jdXMpfHxlLmlzTmF2aWdhdGlvbn1mdW5jdGlvbiBJKCl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvLnN0YXRlLmlzKFtHLHJuXSkmJiEhZS53YWl0Rm9yVHJhbnNpdGlvbn1yZXR1cm57bW91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250OmZ1bmN0aW9uKCl7UygpLHQoW0ssSiwiZWkiXSxTKSx0KE5uLEUpfSxnbzpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24obix0LGkpe3ZhciByO0koKXx8LTE8KHI9QShuPWZ1bmN0aW9uKG4pe3ZhciB0PXg7eycKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaSxyO0Mobik/KHI9bi5tYXRjaCgvKFsrXFwtPD5dKShcXGQrKT8vKXx8W10saScKICAgICAgICAgICAgICAgICAgICAgICAgYic9clsxXSxyPXJbMl0sIisiPT09aXx8Ii0iPT09aT90PU8oeCsgKygiIitpKygrcnx8MSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx4KToiPiI9PT1pP3Q9cj96KCtyKTpiKCEwKToiPCI9PT1pJiYodD13KCEwKSkpOnQ9bT8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjpxKG4sMCxjKX1yZXR1cm4gdH0obikpKSYmKHR8fHIhPT14KSYmKE0ociksbC5tb3ZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLHIsayxpKSl9LHNjcm9sbDpmdW5jdGlvbihuLHQsaSxyKXt1LlNjcm9sbC5zY3JvbGwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sdCxpLGZ1bmN0aW9uKCl7dmFyIG49QShsLnRvSW5kZXgoZCgpKSk7TShnP1kobixjKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiksciYmcigpfSl9LGdldE5leHQ6YixnZXRQcmV2OncsZ2V0QWRqYWNlbnQ6TCxnZXRFbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkOl8sc2V0SW5kZXg6TSxnZXRJbmRleDpmdW5jdGlvbihuKXtyZXR1cm4gbj9rOnh9LHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4OnosdG9QYWdlOkQsdG9EZXN0OmZ1bmN0aW9uKG4pe3JldHVybiBuPWwudG9JbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgobikseT9xKG4sMCxjKTpufSxoYXNGb2N1czpQLGlzQnVzeTpJfX0sQXJyb3dzOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihvLG4sdCl7dmFyIGkscix1PVEobyksZT11Lm9uLGM9dS5iaW5kLGY9dS5lbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxhPXQuY2xhc3NlcyxzPXQuaTE4bixsPW4uRWxlbWVudHMsZD1uLkNvbnRyb2xsZXIsdj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC5hcnJvd3MsaD1sLnRyYWNrLHA9dixnPWwucHJldixtPWwubmV4dCx5PXt9O2Z1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBiKCl7dmFyIG49dC5hcnJvd3M7IW58fGcmJm18fChwPXZ8fGooImRpdiIsYS5hcnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dzKSxnPVMoITApLG09UyghMSksaT0hMCxMKHAsW2csbV0pLHZ8fE8ocCxoKSksZyYmbSYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJihhbih5LHtwcmV2OmcsbmV4dDptfSksbG4ocCxuPyIiOiJub25lIiksTShwLHI9ZHQrIicKICAgICAgICAgICAgICAgICAgICAgICAgYictLSIrdC5kaXJlY3Rpb24pLG4mJihlKFtCLERuLEosViwiZWkiXSxFKSxjKG0sImNsaWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsUihrLCI+IikpLGMoZywiY2xpY2siLFIoaywiPCIpKSxFKCksSShbZyxtXSxLbixoLmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCksZigiYXJyb3dzOm1vdW50ZWQiLGcsbSkpKSxlKEssdyl9ZnVuY3Rpb24gdygpe3goKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsYigpfWZ1bmN0aW9uIHgoKXt1LmRlc3Ryb3koKSxYKHAsciksaT8oVCh2P1tnLG1dOnApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxnPW09bnVsbCk6UChbZyxtXSx1dCl9ZnVuY3Rpb24gayhuKXtkLmdvKG4sITApfWZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBTKG4pe3JldHVybiBobihcJzxidXR0b24gY2xhc3M9IlwnK2EuYXJyb3crIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIisobj9hLnByZXY6YS5uZXh0KStcJyIgdHlwZT0iYnV0dG9uIj48c3ZnIHhtbG5zPSJodHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCIgd2lkdGg9IicKICAgICAgICAgICAgICAgICAgICAgICAgYic0MCIgaGVpZ2h0PSI0MCIgZm9jdXNhYmxlPSJmYWxzZSI+PHBhdGggZD0iXCcrKHQuYXJybycKICAgICAgICAgICAgICAgICAgICAgICAgYid3UGF0aHx8Im0xNS41IDAuOTMyLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA0LjQgMTQuNi0xNC42IDQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IikrXCciIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPicpfWZ1bmN0aW9uIEUoKXt2YXIgbix0LGkscjtnJiZtJiYocj1vLmluZGV4LG49ZC5nZSIKICAgICAgICAgICAgICAgICAgICAgICAgYid0UHJldigpLHQ9ZC5nZXROZXh0KCksaT0tMTxuJiZyPG4/cy5sYXN0OnMucHJldixyPS0xJwogICAgICAgICAgICAgICAgICAgICAgICBiJzx0JiZ0PHI/cy5maXJzdDpzLm5leHQsZy5kaXNhYmxlZD1uPDAsbS5kaXNhYmxlZD10PDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEkoZyxubixpKSxJKG0sbm4sciksZigiYXJyb3dzOnVwZGF0ZWQiLGcsbSxuLHQpKX1yZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJue2Fycm93czp5LG1vdW50OmIsZGVzdHJveTp4LHVwZGF0ZTpFfX0sQXV0b3BsYXk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKG4sdCxpKXt2YXIgcixvLHU9UShuKSxlPXUub24sYz11LmJpbmQsZj11LmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0LGE9cW4oaS5pbnRlcnZhbCxuLmdvLmJpbmQobiwiPiIpLGZ1bmN0aW9uKG4pe3ZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdD1sLmJhcjt0JiZfKHQsIndpZHRoIiwxMDAqbisiJSIpLGYoImF1dG9wbGF5OnBsYXlpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nIixuKX0pLHM9YS5pc1BhdXNlZCxsPXQuRWxlbWVudHMsZD0odT10LkVsZW1lbnRzKS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCx2PXUudG9nZ2xlLGg9aS5hdXRvcGxheSxwPSJwYXVzZSI9PT1oO2Z1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidnKCl7cygpJiZ0LlNsaWRlcy5pc0Vub3VnaCgpJiYoYS5zdGFydCghaS5yZXNldFByb2dyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzcyksbz1yPXA9ITEsYigpLGYoRm4pKX1mdW5jdGlvbiBtKG4pe3A9ISEobj12b2lkIDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT09bj8hMDpuKSxiKCkscygpfHwoYS5wYXVzZSgpLGYoWG4pKX1mdW5jdGlvbiB5KCl7cCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fChyfHxvP20oITEpOmcoKSl9ZnVuY3Rpb24gYigpe3YmJihBKHYsdG4sIXApLEkodixuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24saS5pMThuW3A/InBsYXkiOiJwYXVzZSJdKSl9ZnVuY3Rpb24gdyhuKXtuPXQuU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5nZXRBdChuKTthLnNldChuJiYreihuLnNsaWRlLEN0KXx8aS5pbnRlcnZhbCl9cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybnttb3VudDpmdW5jdGlvbigpe2gmJihpLnBhdXNlT25Ib3ZlciYmYyhkLCJtb3VzZWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlciBtb3VzZWxlYXZlIixmdW5jdGlvbihuKXtyPSJtb3VzZWVudGVyIj09PW4udHlwZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpfSksaS5wYXVzZU9uRm9jdXMmJmMoZCwiZm9jdXNpbiBmb2N1c291dCIsZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4pe289ImZvY3VzaW4iPT09bi50eXBlLHkoKX0pLHYmJmModiwiY2xpY2siLGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbigpe3A/ZygpOm0oITApfSksZShbSCxUbixKXSxhLnJld2luZCksZShILHcpLHYmJkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHYsS24sbC50cmFjay5pZCkscHx8ZygpLGIoKSl9LGRlc3Ryb3k6YS5jYW5jZWwscGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYic6ZyxwYXVzZTptLGlzUGF1c2VkOnN9fSxDb3ZlcjpmdW5jdGlvbihuLHQsaSl7dmFyIHI9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1Eobikub247ZnVuY3Rpb24gbyhpKXt0LlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgdD1mbihuLmNvbnRhaW5lcnx8bi5zbGlkZSwiaW1nIik7dCYmdC5zcmMmJnUoaSx0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduKX0pfWZ1bmN0aW9uIHUobix0LGkpe2kuc3R5bGUoImJhY2tncm91bmQiLG4/XCdjZW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyL2NvdmVyIG5vLXJlcGVhdCB1cmwoIlwnK3Quc3JjK1wnIilcJzoiIiwhMCksbG4odCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj8ibm9uZSI6IiIpfXJldHVybnttb3VudDpmdW5jdGlvbigpe2kuY292ZXImJihyKFduLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidSKHUsITApKSxyKFtCLEssSl0sUihvLCEwKSkpfSxkZXN0cm95OlIobywhMSl9fSxTY3JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsOmZ1bmN0aW9uKG4sYyx1KXt2YXIgZixhLHQ9UShuKSxpPXQub24scz10LmVtaXQsbD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5zdGF0ZS5zZXQsZD1jLk1vdmUsdj1kLmdldFBvc2l0aW9uLGU9ZC5nZXRMaW1pdCxoPScKICAgICAgICAgICAgICAgICAgICAgICAgYidkLmV4Y2VlZGVkTGltaXQscD1kLnRyYW5zbGF0ZSxnPW4uaXMoTXQpLG09MTtmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24geShuLHQsaSxyLG8pe3ZhciB1LGU9digpLGk9KHgoKSwhaXx8ZyYmaCgpfHwoaT1jLkwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXlvdXQuc2xpZGVyU2l6ZSgpLHU9TG4obikqaSp4bihVKG4pL2kpfHwwLG49ZC50b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihjLkNvbnRyb2xsZXIudG9EZXN0KG4laSkpK3UpLFNuKGUsbiwxKSk7bT0xLHQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k/MDp0fHx3bihVKG4tZSkvMS41LDgwMCksYT1yLGY9cW4odCxiLFIodyxlLG4sbyksMSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGwocm4pLHMoVG4pLGYuc3RhcnQoKX1mdW5jdGlvbiBiKCl7bCgzKSxhJiZhKCkscyhWKScKICAgICAgICAgICAgICAgICAgICAgICAgYid9ZnVuY3Rpb24gdyhuLHQsaSxyKXt2YXIgbz12KCkscj0obisodC1uKSoodD1yLChuPXUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vhc2luZ0Z1bmMpP24odCk6MS1NYXRoLnBvdygxLXQsNCkpLW8pKm07cChvK3IpLGcmJiEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSYmaCgpJiYobSo9LjYsVShyKTwxMCYmeShlKGgoITApKSw2MDAsITEsYSwhMCkpfWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiB4KCl7ZiYmZi5jYW5jZWwoKX1mdW5jdGlvbiByKCl7ZiYmIWYuaXNQYXVzZWQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykmJih4KCksYigpKX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtpKEgseCksaShbSyxKXSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncil9LGRlc3Ryb3k6eCxzY3JvbGw6eSxjYW5jZWw6cn19LERyYWc6ZnVuY3Rpb24oZSxvLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjKXt2YXIgZix0LHUsYSxzLGwsZCx2LG49UShlKSxpPW4ub24saD1uLmVtaXQscD1uLmJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kLGc9bi51bmJpbmQsbT1lLnN0YXRlLHk9by5Nb3ZlLGI9by5TY3JvbGwsdz1vLkNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9sbGVyLHg9by5FbGVtZW50cy50cmFjayxrPW8uTWVkaWEucmVkdWNlLHI9KG49by5EaScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWN0aW9uKS5yZXNvbHZlLFM9bi5vcmllbnQsRT15LmdldFBvc2l0aW9uLEw9eS5leGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkZWRMaW1pdCxPPSExO2Z1bmN0aW9uIGooKXt2YXIgbj1jLmRyYWc7QyghbiksYT0iZnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWUiPT09bn1mdW5jdGlvbiBOKG4pe3ZhciB0LGkscjtsPSExLGR8fCh0PVIobiksaT1uLicKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQscj1jLm5vRHJhZyxjbihpLCIuIittdCsiLCAuIit2dCl8fHImJmNuKGkscil8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3whdCYmbi5idXR0b258fCh3LmlzQnVzeSgpP0YobiwhMCk6KHY9dD94OndpbmRvdyxzPW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzKFtHLHJuXSksdT1udWxsLHAodix6dCxBLGp0KSxwKHYsRHQsXyxqdCkseS5jYW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsKCksYi5jYW5jZWwoKSx6KG4pKSkpfWZ1bmN0aW9uIEEobil7dmFyIHQsaSxyLG8sdTttJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyg2KXx8KG0uc2V0KDYpLGgoImRyYWciKSksbi5jYW5jZWxhYmxlJiYocz8oeS50cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNsYXRlKGYrRChuKS8oTyYmZS5pcyhNdCk/NToxKSksdT0yMDA8TShuKSx0PU8hPT0oTycKICAgICAgICAgICAgICAgICAgICAgICAgYic9TCgpKSwodXx8dCkmJnoobiksbD0hMCxoKCJkcmFnZ2luZyIpLEYobikpOlUoRCh1PW4pJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk+VShEKHUsITApKSYmKHQ9bixpPWMuZHJhZ01pblRocmVzaG9sZCxyPXVuKGkpLG89ciYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJmkubW91c2V8fDAscj0ocj9pLnRvdWNoOitpKXx8MTAscz1VKEQodCkpPihSKHQpP3I6bycKICAgICAgICAgICAgICAgICAgICAgICAgYicpLEYobikpKX1mdW5jdGlvbiBfKG4pe3ZhciB0LGkscjttLmlzKDYpJiYobS5zZXQoMyksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2goImRyYWdnZWQiKSkscyYmKGk9ZnVuY3Rpb24obil7cmV0dXJuIEUoKStMbihuKSpZKFUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG4pKihjLmZsaWNrUG93ZXJ8fDYwMCksYT8xLzA6by5MYXlvdXQubGlzdFNpemUoKSooYycKICAgICAgICAgICAgICAgICAgICAgICAgYicuZmxpY2tNYXhQYWdlc3x8MSkpfSh0PWZ1bmN0aW9uKG4pe2lmKGUuaXMoUHQpfHwhTyl7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciB0PU0obik7aWYodCYmdDwyMDApcmV0dXJuIEQobikvdH1yZXR1cm4gMH0odD1uKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHI9Yy5yZXdpbmQmJmMucmV3aW5kQnlEcmFnLGsoITEpLGE/dy5zY3JvbGwoaSwwLGMucycKICAgICAgICAgICAgICAgICAgICAgICAgYiduYXApOmUuaXMoSXQpP3cuZ28oUyhMbih0KSk8MD9yPyI8IjoiLSI6cj8iPiI6IisiKTplJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhNdCkmJk8mJnI/dy5nbyhMKCEwKT8iPiI6IjwiKTp3LmdvKHcudG9EZXN0KGkpLCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCksayghMCksRihuKSksZyh2LHp0LEEpLGcodixEdCxfKSxzPSExfWZ1bmN0aW9uIFQobicKICAgICAgICAgICAgICAgICAgICAgICAgYicpeyFkJiZsJiZGKG4sITApfWZ1bmN0aW9uIHoobil7dT10LHQ9bixmPUUoKX1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gRChuLHQpe3JldHVybiBJKG4sdCktSShQKG4pLHQpfWZ1bmN0aW9uIE0obil7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtbihuKS1tbihQKG4pKX1mdW5jdGlvbiBQKG4pe3JldHVybiB0PT09biYmdXx8dH1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gSShuLHQpe3JldHVybihSKG4pP24uY2hhbmdlZFRvdWNoZXNbMF06bilbInBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dlIityKHQ/IlkiOiJYIildfWZ1bmN0aW9uIFIobil7cmV0dXJuInVuZGVmaW5lZCIhPXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlb2YgVG91Y2hFdmVudCYmbiBpbnN0YW5jZW9mIFRvdWNoRXZlbnR9ZnVuY3Rpb24gQycKICAgICAgICAgICAgICAgICAgICAgICAgYicobil7ZD1ufXJldHVybnttb3VudDpmdW5jdGlvbigpe3AoeCx6dCxvbixqdCkscCh4LER0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvbixqdCkscCh4LF90LE4sanQpLHAoeCwiY2xpY2siLFQse2NhcHR1cmU6ITB9KSxwKHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJkcmFnc3RhcnQiLEYpLGkoW0IsS10sail9LGRpc2FibGU6Qyxpc0RyYWdnaW5nOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbigpe3JldHVybiBzfX19LEtleWJvYXJkOmZ1bmN0aW9uKHQsbixpKXt2YXIgcixvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx1PVEodCksZT11Lm9uLGM9dS5iaW5kLGY9dS51bmJpbmQsYT10LnJvb3Qscz1uLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24ucmVzb2x2ZTtmdW5jdGlvbiBsKCl7dmFyIG49aS5rZXlib2FyZDtuJiYocj0iZycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb2JhbCI9PT1uP3dpbmRvdzphLGMocixHdCxoKSl9ZnVuY3Rpb24gZCgpe2YocixHdCl9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIHYoKXt2YXIgbj1vO289ITAscChmdW5jdGlvbigpe289bn0pfWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBoKG4pe298fCgobj1UdChuKSk9PT1zKEJuKT90LmdvKCI8Iik6bj09PXMoSG4pJiZ0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidnbygiPiIpKX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtsKCksZShLLGQpLGUoSyxsKSxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhILHYpfSxkZXN0cm95OmQsZGlzYWJsZTpmdW5jdGlvbihuKXtvPW59fX0sTGF6eUxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmZ1bmN0aW9uKGksbixvKXt2YXIgdD1RKGkpLHI9dC5vbix1PXQub2ZmLGU9dC5iaW5kLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjPXQuZW1pdCxmPSJzZXF1ZW50aWFsIj09PW8ubGF6eUxvYWQsYT1bRG4sVl0scz1bXTtmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gbCgpe0Qocyksbi5TbGlkZXMuZm9yRWFjaChmdW5jdGlvbihyKXtnbihyLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSxXdCkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgdD16KG4sRnQpLGk9eihuLFh0KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7dD09PW4uc3JjJiZpPT09bi5zcmNzZXR8fCh0PW8uY2xhc3Nlcy5zcGlubmVyLHQ9Zm4oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k9bi5wYXJlbnRFbGVtZW50LCIuIit0KXx8aigic3BhbiIsdCxpKSxzLnB1c2goW24sciwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndF0pLG4uc3JjfHxsbihuLCJub25lIikpfSl9KSwoZj9wOih1KGEpLHIoYSxkKSxkKSkoKScKICAgICAgICAgICAgICAgICAgICAgICAgYid9ZnVuY3Rpb24gZCgpeyhzPXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3ZhciB0PW8ucGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UqKChvLnByZWxvYWRQYWdlc3x8MSkrMSktMTtyZXR1cm4hblsxXS5pc1dpdGhpbihpLmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCx0KXx8dihuKX0pKS5sZW5ndGh8fHUoYSl9ZnVuY3Rpb24gdihuKXt2YXIgdD1uWycKICAgICAgICAgICAgICAgICAgICAgICAgYicwXTtNKG5bMV0uc2xpZGUsRXQpLGUodCwibG9hZCBlcnJvciIsUihoLG4pKSxJKHQsInNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2MiLHoodCxGdCkpLEkodCwic3Jjc2V0Iix6KHQsWHQpKSxQKHQsRnQpLFAodCxYdCl9ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGgobix0KXt2YXIgaT1uWzBdLHI9blsxXTtYKHIuc2xpZGUsRXQpLCJlcnJvcicKICAgICAgICAgICAgICAgICAgICAgICAgYiciIT09dC50eXBlJiYoVChuWzJdKSxsbihpLCIiKSxjKFduLGksciksYyhqbikpLGYmJnAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9ZnVuY3Rpb24gcCgpe3MubGVuZ3RoJiZ2KHMuc2hpZnQoKSl9cmV0dXJue21vdW50OmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbigpe28ubGF6eUxvYWQmJihsKCkscihKLGwpKX0sZGVzdHJveTpSKEQscyksYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoZWNrOmR9fSxQYWdpbmF0aW9uOmZ1bmN0aW9uKGwsbixkKXt2YXIgdixoLHQ9UShsKSxwJwogICAgICAgICAgICAgICAgICAgICAgICBiJz10Lm9uLGc9dC5lbWl0LG09dC5iaW5kLHk9bi5TbGlkZXMsYj1uLkVsZW1lbnRzLHc9bi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29udHJvbGxlcix4PXcuaGFzRm9jdXMscj13LmdldEluZGV4LGU9dy5nbyxjPW4uRGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbi5yZXNvbHZlLGs9Yi5wYWdpbmF0aW9uLFM9W107ZnVuY3Rpb24gRSgpe3YmJihUJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhrP28odi5jaGlsZHJlbik6diksWCh2LGgpLEQoUyksdj1udWxsKSx0LmRlc3Ryb3koKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gTChuKXtlKCI+IituLCEwKX1mdW5jdGlvbiBPKG4sdCl7dmFyIGk9Uy5sZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZ3RoLHI9VHQodCksbz1BKCksdT0tMSxvPShyPT09YyhIbiwhMSxvKT91PSsrbiVpOnI9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz09YyhCbiwhMSxvKT91PSgtLW4raSklaToiSG9tZSI9PT1yP3U9MDoiRW5kIj09PXImJignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndT1pLTEpLFNbdV0pO28mJihkbihvLmJ1dHRvbiksZSgiPiIrdSksRih0LCEwKSl9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIEEoKXtyZXR1cm4gZC5wYWdpbmF0aW9uRGlyZWN0aW9ufHxkLmRpcmVjdGlvbn1mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gXyhuKXtyZXR1cm4gU1t3LnRvUGFnZShuKV19ZnVuY3Rpb24geigpe3ZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbix0PV8ocighMCkpLGk9XyhyKCkpO3QmJihYKG49dC5idXR0b24sdG4pLFAobixRbiksSScKICAgICAgICAgICAgICAgICAgICAgICAgYicobiwkLC0xKSksaSYmKE0obj1pLmJ1dHRvbix0biksSShuLFFuLCEwKSxJKG4sJCwiIikpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxnKCJwYWdpbmF0aW9uOnVwZGF0ZWQiLHtsaXN0OnYsaXRlbXM6U30sdCxpKX1yZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2l0ZW1zOlMsbW91bnQ6ZnVuY3Rpb24gbigpe0UoKSxwKFtLLEosImVpIl0sbik7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PWQucGFnaW5hdGlvbjtpZihrJiZsbihrLHQ/IiI6Im5vbmUiKSx0KXtwKFtILFRuLFZdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx6KTt2YXIgdD1sLmxlbmd0aCxpPWQuY2xhc3NlcyxyPWQuaTE4bixvPWQucGVyUGFnZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndT14KCk/dy5nZXRFbmQoKSsxOmtuKHQvbyk7TSh2PWt8fGooInVsIixpLnBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLGIudHJhY2sucGFyZW50RWxlbWVudCksaD1ndCsiLS0iK0EoKSksSSh2LFosInRhYmxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IiksSSh2LG5uLHIuc2VsZWN0KSxJKHYsbnQsQSgpPT09Sm4/InZlcnRpY2FsIjoiIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2Zvcih2YXIgZT0wO2U8dTtlKyspe3ZhciBjPWooImxpIixudWxsLHYpLGY9aigiYnV0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiIse2NsYXNzOmkucGFnZSx0eXBlOiJidXR0b24ifSxjKSxhPXkuZ2V0SW4oZSkubWFwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbihuKXtyZXR1cm4gbi5zbGlkZS5pZH0pLHM9IXgoKSYmMTxvP3IucGFnZVgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOnIuc2xpZGVYO20oZiwiY2xpY2siLFIoTCxlKSksZC5wYWdpbmF0aW9uS2V5Ym9hcmQmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidtKGYsImtleWRvd24iLFIoTyxlKSksSShjLFosInByZXNlbnRhdGlvbiIpLEkoZixaLCJ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FiIiksSShmLEtuLGEuam9pbigiICIpKSxJKGYsbm4sT24ocyxlKzEpKSxJKGYsJCwtMSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFMucHVzaCh7bGk6YyxidXR0b246ZixwYWdlOmV9KX16KCksZygicGFnaW5hdGlvbjptbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnRlZCIse2xpc3Q6dixpdGVtczpTfSxfKGwuaW5kZXgpKX19LGRlc3Ryb3k6RSxnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6Xyx1cGRhdGU6en19LFN5bmM6ZnVuY3Rpb24oaSxuLHQpe3ZhciByPXQuaXNOYXZpZ2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbixvPXQuc2xpZGVGb2N1cyx1PVtdO2Z1bmN0aW9uIGUoKXt2YXIgbix0O2kuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMuZm9yRWFjaChmdW5jdGlvbihuKXtuLmlzUGFyZW50fHwoZihpLG4uc3BsaWRlKSxmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhuLnNwbGlkZSxpKSl9KSxyJiYobj1RKGkpLCh0PW4ub24pKE1uLHMpLHQoWW4sbCksdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW0IsS10sYSksdS5wdXNoKG4pLG4uZW1pdChHbixpLnNwbGlkZXMpKX1mdW5jdGlvbiBjKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpe3UuZm9yRWFjaChmdW5jdGlvbihuKXtuLmRlc3Ryb3koKX0pLEQodSl9ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YobixyKXtuPVEobik7bi5vbihILGZ1bmN0aW9uKG4sdCxpKXtyLmdvKHIuaXMoUHQpP2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInOm4pfSksdS5wdXNoKG4pfWZ1bmN0aW9uIGEoKXtJKG4uRWxlbWVudHMubGlzdCxudCx0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXJlY3Rpb249PT1Kbj8idmVydGljYWwiOiIiKX1mdW5jdGlvbiBzKG4pe2kuZ28obi5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpfWZ1bmN0aW9uIGwobix0KXtiKFl0LFR0KHQpKSYmKHMobiksRih0KSl9cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbntzZXR1cDpSKG4uTWVkaWEuc2V0LHtzbGlkZUZvY3VzOmVuKG8pP3I6b30sITApLG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudDplLGRlc3Ryb3k6YyxyZW1vdW50OmZ1bmN0aW9uKCl7YygpLGUoKX19fSxXaGVlbDpmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24oZSxjLGYpe3ZhciBuPVEoZSkuYmluZCxhPTA7ZnVuY3Rpb24gdChuKXt2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHQsaSxyLG8sdTtuLmNhbmNlbGFibGUmJih0PSh1PW4uZGVsdGFZKTwwLGk9bW4obikscicKICAgICAgICAgICAgICAgICAgICAgICAgYic9Zi53aGVlbE1pblRocmVzaG9sZHx8MCxvPWYud2hlZWxTbGVlcHx8MCxVKHUpPnImJm88JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ktYSYmKGUuZ28odD8iPCI6Ij4iKSxhPWkpLHU9dCxmLnJlbGVhc2VXaGVlbCYmIWUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlLmlzKEcpJiYtMT09PWMuQ29udHJvbGxlci5nZXRBZGphY2VudCh1KXx8RihuKSl9cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybnttb3VudDpmdW5jdGlvbigpe2Yud2hlZWwmJm4oYy5FbGVtZW50cy50cmFjaywiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3doZWVsIix0LGp0KX19fSxMaXZlOmZ1bmN0aW9uKG4sdCxpKXt2YXIgcj1RKG4pLm9uLG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXQuRWxlbWVudHMudHJhY2ssdT1pLmxpdmUmJiFpLmlzTmF2aWdhdGlvbixlPWooInNwYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIix3dCksYz1xbig5MCxSKGYsITEpKTtmdW5jdGlvbiBmKG4pe0kobyxydCxuKSxuPyhMJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhvLGUpLGMuc3RhcnQoKSk6KFQoZSksYy5jYW5jZWwoKSl9ZnVuY3Rpb24gYShuKXt1JiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSShvLGl0LG4/Im9mZiI6InBvbGl0ZSIpfXJldHVybnttb3VudDpmdW5jdGlvbigpe3UmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicoYSghdC5BdXRvcGxheS5pc1BhdXNlZCgpKSxJKG8sb3QsITApLGUudGV4dENvbnRlbnQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJceGUyXHg4MFx4YTYiLHIoRm4sUihhLCEwKSkscihYbixSKGEsITEpKSxyKFtEbixWXSxSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmLCEwKSkpfSxkaXNhYmxlOmEsZGVzdHJveTpmdW5jdGlvbigpe1AobyxbaXQsb3QscnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSksVChlKX19fX0pLHF0PXt0eXBlOiJzbGlkZSIscm9sZToicmVnaW9uIixzcGVlZDo0MCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLHBlclBhZ2U6MSxjbG9uZVN0YXR1czohMCxhcnJvd3M6ITAscGFnaW5hdGlvbjohMCxwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnaW5hdGlvbktleWJvYXJkOiEwLGludGVydmFsOjVlMyxwYXVzZU9uSG92ZXI6ITAscGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlT25Gb2N1czohMCxyZXNldFByb2dyZXNzOiEwLGVhc2luZzoiY3ViaWMtYmV6aWVyKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLjI1LCAxLCAwLjUsIDEpIixkcmFnOiEwLGRpcmVjdGlvbjoibHRyIix0cmltU3BhY2U6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyEwLGZvY3VzYWJsZU5vZGVzOiJhLCBidXR0b24sIHRleHRhcmVhLCBpbnB1dCwgc2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgaWZyYW1lIixsaXZlOiEwLGNsYXNzZXM6e3NsaWRlOmF0LGNsb25lOnN0LGFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgYic6ZHQsYXJyb3c6dnQscHJldjpodCxuZXh0OnB0LHBhZ2luYXRpb246Z3QscGFnZTptdCxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Bpbm5lcjppKyJzcGlubmVyIn0saTE4bjp7cHJldjoiUHJldmlvdXMgc2xpZGUiLG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiJOZXh0IHNsaWRlIixmaXJzdDoiR28gdG8gZmlyc3Qgc2xpZGUiLGxhc3Q6IkdvIHRvICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXN0IHNsaWRlIixzbGlkZVg6IkdvIHRvIHNsaWRlICVzIixwYWdlWDoiR28gdG8gcGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgJXMiLHBsYXk6IlN0YXJ0IGF1dG9wbGF5IixwYXVzZToiUGF1c2UgYXV0b3BsYXkiLGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJvdXNlbDoiY2Fyb3VzZWwiLHNsaWRlOiJzbGlkZSIsc2VsZWN0OiJTZWxlY3QgYSBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUgdG8gc2hvdyIsc2xpZGVMYWJlbDoiJXMgb2YgJXMifSxyZWR1Y2VkTW90aW9uOntzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZWQ6MCxyZXdpbmRTcGVlZDowLGF1dG9wbGF5OiJwYXVzZSJ9fTtmdW5jdGlvbiBCdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbix0LGkpe3ZhciByPXQuU2xpZGVzO2Z1bmN0aW9uIG8oKXtyLmZvckVhY2goZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4pe24uc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoLSIrMTAwKm4uaW5kZXgrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIlKSIpfSl9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7UShuKS5vbihbQixKXSxvKX0sc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0OmZ1bmN0aW9uKG4sdCl7ci5zdHlsZSgidHJhbnNpdGlvbiIsIm9wYWNpdHkgIitpLicKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGVlZCsibXMgIitpLmVhc2luZykscCh0KX0sY2FuY2VsOm9ufX1mdW5jdGlvbiBIdCh1JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxuLGUpe3ZhciBjLGY9bi5Nb3ZlLGE9bi5Db250cm9sbGVyLHM9bi5TY3JvbGwsdD1uLkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50cy5saXN0LGw9UihfLHQsInRyYW5zaXRpb24iKTtmdW5jdGlvbiBpKCl7bCgiIicKICAgICAgICAgICAgICAgICAgICAgICAgYicpLHMuY2FuY2VsKCl9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7USh1KS5iaW5kKHQsInRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fuc2l0aW9uZW5kIixmdW5jdGlvbihuKXtuLnRhcmdldD09PXQmJmMmJihpKCksYygpKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0sc3RhcnQ6ZnVuY3Rpb24obix0KXt2YXIgaT1mLnRvUG9zaXRpb24obiwhMCkscj1mLicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRQb3NpdGlvbigpLG89ZnVuY3Rpb24obil7dmFyIHQ9ZS5yZXdpbmRTcGVlZDtpZih1JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhNdCkmJnQpe3ZhciBpPWEuZ2V0SW5kZXgoITApLHI9YS5nZXRFbmQoKTtpZigwPT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPWkmJnI8PW58fHI8PWkmJjA9PT1uKXJldHVybiB0fXJldHVybiBlLnNwZWVkfShuKTsxPCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9VShpLXIpJiYxPD1vP2UudXNlU2Nyb2xsP3Muc2Nyb2xsKGksbywhMSx0KToobCgidHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zZm9ybSAiK28rIm1zICIrZS5lYXNpbmcpLGYudHJhbnNsYXRlKGksITApLGM9dCk6KGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmp1bXAobiksdCgpKX0sY2FuY2VsOml9fXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKG4sdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpe3RoaXMuZXZlbnQ9USgpLHRoaXMuQ29tcG9uZW50cz17fSx0aGlzLnN0YXRlPXMoMSksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuc3BsaWRlcz1bXSx0aGlzLm49e30sdGhpcy50PXt9O249QyhuKT9wbihkb2N1bWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQsbik6bjtibihuLG4rIiBpcyBpbnZhbGlkLiIpLHQ9ZCh7bGFiZWw6eih0aGlzLnJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0PW4sbm4pfHwiIixsYWJlbGxlZGJ5Onoobixabil8fCIifSxxdCxpLmRlZmF1bHRzLHR8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x7fSk7dHJ5e2QodCxKU09OLnBhcnNlKHoobixmKSkpfWNhdGNoKG4pe2JuKCExLCJJbnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxpZCBKU09OIil9dGhpcy5uPU9iamVjdC5jcmVhdGUoZCh7fSx0KSl9dmFyIG49aS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG90eXBlO3JldHVybiBuLm1vdW50PWZ1bmN0aW9uKG4sdCl7dmFyIGk9dGhpcyxyPXRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnN0YXRlLG89dGhpcy5Db21wb25lbnRzO3JldHVybiBibihyLmlzKFsxLDddKSwiQWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhZHkgbW91bnRlZCEiKSxyLnNldCgxKSx0aGlzLmk9byx0aGlzLnI9dHx8dGhpcy5yfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8KHRoaXMuaXMoSXQpP0J0Okh0KSx0aGlzLnQ9bnx8dGhpcy50LHcoYW4oe30sVXQsdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MudCx7VHJhbnNpdGlvbjp0aGlzLnJ9KSxmdW5jdGlvbihuLHQpe249bihpLG8saS5uKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG9bdF09bikuc2V0dXAmJm4uc2V0dXAoKX0pLHcobyxmdW5jdGlvbihuKXtuLm1vdW50JicKICAgICAgICAgICAgICAgICAgICAgICAgYicmbi5tb3VudCgpfSksdGhpcy5lbWl0KEIpLE0odGhpcy5yb290LCJpcy1pbml0aWFsaXplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QiKSxyLnNldCgzKSx0aGlzLmVtaXQoInJlYWR5IiksdGhpc30sbi5zeW5jPWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihuKXtyZXR1cm4gdGhpcy5zcGxpZGVzLnB1c2goe3NwbGlkZTpufSksbi5zcGxpZGVzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKHtzcGxpZGU6dGhpcyxpc1BhcmVudDohMH0pLHRoaXMuc3RhdGUuaXMoMykmJih0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5pLlN5bmMucmVtb3VudCgpLG4uQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKSksdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN9LG4uZ289ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuaS5Db250cm9sbGVyLmdvKG4pLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzfSxuLm9uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuZXZlbnQub24obix0KSx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpc30sbi5vZmY9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuZXZlbnQub2ZmKG4pLHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSxuLmVtaXQ9ZnVuY3Rpb24obil7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5ldmVudCkuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuYXBwbHkodCxbbl0uY29uY2F0KG8oYXJndW1lbnRzLDEpKSksdGhpc30sbi5hZGQ9ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKG4sdCl7cmV0dXJuIHRoaXMuaS5TbGlkZXMuYWRkKG4sdCksdGhpc30sbi5yZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmkuU2xpZGVzLnJlbW92ZShuKSx0aGlzfScKICAgICAgICAgICAgICAgICAgICAgICAgYicsbi5pcz1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5uLnR5cGU9PT1ufSxuLnJlZnJlc2g9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdChKKSx0aGlzfSxuLmRlc3Ryb3k9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbj10aGlzLmV2ZW50LGk9dGhpcy5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGU7cmV0dXJuIGkuaXMoMSk/USh0aGlzKS5vbigicmVhZHkiLHRoaXMuZGVzdHJveS5iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCh0aGlzLHQpKToodyh0aGlzLmksZnVuY3Rpb24obil7bi5kZXN0cm95JiZuLmRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm95KHQpfSwhMCksbi5lbWl0KGEpLG4uZGVzdHJveSgpLHQmJkQodGhpcy5zcGxpZGVzKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsaS5zZXQoNykpLHRoaXN9LEp0KGksW3trZXk6Im9wdGlvbnMiLGdldDpmdW5jdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tyZXR1cm4gdGhpcy5ufSxzZXQ6ZnVuY3Rpb24obil7dGhpcy5pLk1lZGlhLnNldChuLCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCwhMCl9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmkuUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcy5nZXRMZW5ndGgoITApfX0se2tleToiaW5kZXgiLGdldDpmdW5jdGlvbigpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gdGhpcy5pLkNvbnRyb2xsZXIuZ2V0SW5kZXgoKX19XSksaX0oKTtyZXR1cm4gdC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVmYXVsdHM9e30sdC5TVEFURVM9cix0fSwib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCk6ImZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQpOihuPSJ1bmRlZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpufHxzZWxmKS5TcGxpZGU9dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwbGlkZS5taW4uanMubWFwXG4nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLm1pbi5qcycsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ2Z1bmN0aW9uIHIobix0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyPXRbaV07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VQcm9wZXJ0eShuLHIua2V5LHIpfX1mdW5jdGlvbiBKdChuLHQsaSl7dCYmcihuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcm90b3R5cGUsdCksaSYmcihuLGkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX1cbi8qIVxuICogU3BsaWRlLmpzXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZW5zZSAgOiBNSVRcbiAqIENvcHlyaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKi9cbnZhciBuLHQ7bj10aGlzLHQ9ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB2PSIocHJlZmVycy1yZWR1Y2VkLW1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb246IHJlZHVjZSkiLEc9NCxybj01LHI9e0NSRUFURUQ6MSxNT1VOVEVEOjIsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidETEU6MyxNT1ZJTkc6RyxTQ1JPTExJTkc6cm4sRFJBR0dJTkc6NixERVNUUk9ZRUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjd9O2Z1bmN0aW9uIEQobil7bi5sZW5ndGg9MH1mdW5jdGlvbiBvKG4sdCxpKXtyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4sdCxpKX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUihuKXtyZXR1cm4gbi5iaW5kLmFwcGx5KG4sW251bGxdLmNvbmNhdChvKGFyZ3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudHMsMSkpKX1mdW5jdGlvbiBvbigpe312YXIgcD1zZXRUaW1lb3V0O2Z1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBoKG4pe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHUobix0KXtyZXR1cm4gdHlwZW9mIHQ9PT1ufWZ1bmN0aW9uIHVuKG4pe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hYyhuKSYmdSgib2JqZWN0IixuKX12YXIgZT1BcnJheS5pc0FycmF5LHg9Uih1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiZnVuY3Rpb24iKSxDPVIodSwic3RyaW5nIiksZW49Uih1LCJ1bmRlZmluZWQiKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7ZnVuY3Rpb24gYyhuKXtyZXR1cm4gbnVsbD09PW59ZnVuY3Rpb24gbShuKXt0cnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiBuIGluc3RhbmNlb2Yobi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8d2luZG93KS5IVE1MRWxlbWVudH1jYXRjaChuKXtyZXR1cm4hMX19ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHkobil7cmV0dXJuIGUobik/bjpbbl19ZnVuY3Rpb24gZyhuLHQpe3kobikuZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2godCl9ZnVuY3Rpb24gYihuLHQpe3JldHVybi0xPG4uaW5kZXhPZih0KX1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gayhuLHQpe3JldHVybiBuLnB1c2guYXBwbHkobix5KHQpKSxufWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBBKHQsbixpKXt0JiZnKG4sZnVuY3Rpb24obil7biYmdC5jbGFzc0xpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW2k/ImFkZCI6InJlbW92ZSJdKG4pfSl9ZnVuY3Rpb24gTShuLHQpe0EobixDKHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz90LnNwbGl0KCIgIik6dCwhMCl9ZnVuY3Rpb24gTChuLHQpe2codCxuLmFwcGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDaGlsZC5iaW5kKG4pKX1mdW5jdGlvbiBPKG4saSl7ZyhuLGZ1bmN0aW9uKG4pe3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgdD0oaXx8bikucGFyZW50Tm9kZTt0JiZ0Lmluc2VydEJlZm9yZShuLGkpfSl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGNuKG4sdCl7cmV0dXJuIG0obikmJihuLm1zTWF0Y2hlc1NlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnx8bi5tYXRjaGVzKS5jYWxsKG4sdCl9ZnVuY3Rpb24gUyhuLHQpe249bj9vKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNoaWxkcmVuKTpbXTtyZXR1cm4gdD9uLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGNuKG4sdCl9KTpufWZ1bmN0aW9uIGZuKG4sdCl7cmV0dXJuIHQ/UyhuLHQpWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXTpuLmZpcnN0RWxlbWVudENoaWxkfXZhciBFPU9iamVjdC5rZXlzO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB3KHQsaSxuKXt0JiYobj9FKHQpLnJldmVyc2UoKTpFKHQpKS5mb3JFYWNoKGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbihuKXsiX19wcm90b19fIiE9PW4mJmkodFtuXSxuKX0pfWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbihyKXtyZXR1cm4gbyhhcmd1bWVudHMsMSkuZm9yRWFjaChmdW5jdGlvbihpKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndyhpLGZ1bmN0aW9uKG4sdCl7clt0XT1pW3RdfSl9KSxyfWZ1bmN0aW9uIGQoaSl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBvKGFyZ3VtZW50cywxKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3cobixmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24obix0KXtlKG4pP2lbdF09bi5zbGljZSgpOnVuKG4pP2lbdF09ZCh7fSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW4oaVt0XSk/aVt0XTp7fSxuKTppW3RdPW59KX0pLGl9ZnVuY3Rpb24gc24odCxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7ZyhufHxFKHQpLGZ1bmN0aW9uKG4pe2RlbGV0ZSB0W25dfSl9ZnVuY3Rpb24gUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobixpKXtnKG4sZnVuY3Rpb24odCl7ZyhpLGZ1bmN0aW9uKG4pe3QmJnQucmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUF0dHJpYnV0ZShuKX0pfSl9ZnVuY3Rpb24gSShpLHQscil7dW4odCk/dyh0LGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbihuLHQpe0koaSx0LG4pfSk6ZyhpLGZ1bmN0aW9uKG4pe2Mocil8fCIiPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PXI/UChuLHQpOm4uc2V0QXR0cmlidXRlKHQsU3RyaW5nKHIpKX0pfWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBqKG4sdCxpKXtuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobik7cmV0dXJuIHQmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYoQyh0KT9NOkkpKG4sdCksaSYmTChpLG4pLG59ZnVuY3Rpb24gXyhuLHQsaSl7aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKGVuKGkpKXJldHVybiBnZXRDb21wdXRlZFN0eWxlKG4pW3RdO2MoaSl8fChuLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZVt0XT0iIitpKX1mdW5jdGlvbiBsbihuLHQpe18obiwiZGlzcGxheSIsdCl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGRuKG4pe24uc2V0QWN0aXZlJiZuLnNldEFjdGl2ZSgpfHxuLmZvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cyh7cHJldmVudFNjcm9sbDohMH0pfWZ1bmN0aW9uIHoobix0KXtyZXR1cm4gbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0QXR0cmlidXRlKHQpfWZ1bmN0aW9uIHZuKG4sdCl7cmV0dXJuIG4mJm4uY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzTGlzdC5jb250YWlucyh0KX1mdW5jdGlvbiBOKG4pe3JldHVybiBuLmdldEJvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGluZ0NsaWVudFJlY3QoKX1mdW5jdGlvbiBUKG4pe2cobixmdW5jdGlvbihuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9KX1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaG4obil7cmV0dXJuIGZuKChuZXcgRE9NUGFyc2VyKS5wYXJzZUZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtU3RyaW5nKG4sInRleHQvaHRtbCIpLmJvZHkpfWZ1bmN0aW9uIEYobix0KXtuLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2ZW50RGVmYXVsdCgpLHQmJihuLnN0b3BQcm9wYWdhdGlvbigpLG4uc3RvcEltJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lZGlhdGVQcm9wYWdhdGlvbigpKX1mdW5jdGlvbiBwbihuLHQpe3JldHVybiBuJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmbi5xdWVyeVNlbGVjdG9yKHQpfWZ1bmN0aW9uIGduKG4sdCl7cmV0dXJuIHQ/bygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5xdWVyeVNlbGVjdG9yQWxsKHQpKTpbXX1mdW5jdGlvbiBYKG4sdCl7QShuLHQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyExKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gbi50aW1lU3RhbXB9ZnVuY3Rpb24gVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobil7cmV0dXJuIEMobik/bjpuP24rInB4IjoiIn12YXIgeW49InNwbGlkZSIsZj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRhdGEtIit5bjtmdW5jdGlvbiBibihuLHQpe2lmKCFuKXRocm93IG5ldyBFcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoIlsiK3luKyJdICIrKHR8fCIiKSl9dmFyIFk9TWF0aC5taW4sd249TWF0aC5tYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4LHhuPU1hdGguZmxvb3Isa249TWF0aC5jZWlsLFU9TWF0aC5hYnM7ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNuKG4sdCxpKXtyZXR1cm4gVShuLXQpPGl9ZnVuY3Rpb24gRW4obix0LGkscil7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBvPVkodCxpKSx0PXduKHQsaSk7cmV0dXJuIHI/bzxuJiZuPHQ6bzw9biYmbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8PXR9ZnVuY3Rpb24gcShuLHQsaSl7dmFyIHI9WSh0LGkpLHQ9d24odCxpKTtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIFkod24ocixuKSx0KX1mdW5jdGlvbiBMbihuKXtyZXR1cm4oMDxuKS0objwwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9ZnVuY3Rpb24gT24odCxuKXtyZXR1cm4gZyhuLGZ1bmN0aW9uKG4pe3Q9dC5yZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGFjZSgiJXMiLCIiK24pfSksdH1mdW5jdGlvbiBBbihuKXtyZXR1cm4gbjwxMD8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjAiK246IiIrbn12YXIgX249e307ZnVuY3Rpb24gem4oKXt2YXIgYz1bXTtmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gaShuLGkscil7ZyhuLGZ1bmN0aW9uKHQpe3QmJmcoaSxmdW5jdGlvbihuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7bi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24obil7bj1uLnNwbGl0KCIuIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3IodCxuWzBdLG5bMV0pfSl9KX0pfXJldHVybntiaW5kOmZ1bmN0aW9uKG4sdCx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxlKXtpKG4sdCxmdW5jdGlvbihuLHQsaSl7dmFyIHI9ImFkZEV2ZW50TGlzdGVuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyImluIG4sbz1yP24ucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKG4sdCx1LGUpOm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnJlbW92ZUxpc3RlbmVyLmJpbmQobix1KTtyP24uYWRkRXZlbnRMaXN0ZW5lcih0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx1LGUpOm4uYWRkTGlzdGVuZXIodSksYy5wdXNoKFtuLHQsaSx1LG9dKX0pfSx1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiaW5kOmZ1bmN0aW9uKG4sdCxvKXtpKG4sdCxmdW5jdGlvbih0LGkscil7Yz1jLmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuISEoblswXSE9PXR8fG5bMV0hPT1pfHxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1syXSE9PXJ8fG8mJm5bM10hPT1vKXx8KG5bNF0oKSwhMSl9KX0pfSxkaXNwYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6ZnVuY3Rpb24obix0LGkpe3ZhciByO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ3VzdG9tRXZlbnQ/cj1uZXcgQ3VzdG9tRXZlbnQodCx7YnViYmxlczohMCxkZXRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsOml9KToocj1kb2N1bWVudC5jcmVhdGVFdmVudCgiQ3VzdG9tRXZlbnQiKSkuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXRDdXN0b21FdmVudCh0LCEwLCExLGkpLG4uZGlzcGF0Y2hFdmVudChyKSxyfSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveTpmdW5jdGlvbigpe2MuZm9yRWFjaChmdW5jdGlvbihuKXtuWzRdKCl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksRChjKX19fXZhciBCPSJtb3VudGVkIixIPSJtb3ZlIixEbj0ibW92ZWQiLE1uPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciY2xpY2siLFBuPSJhY3RpdmUiLEluPSJpbmFjdGl2ZSIsUm49InZpc2libGUiLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj0iaGlkZGVuIixKPSJyZWZyZXNoIixLPSJ1cGRhdGVkIixqbj0icmVzaXplIixOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249InJlc2l6ZWQiLFRuPSJzY3JvbGwiLFY9InNjcm9sbGVkIixhPSJkZXN0cm95IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR249Im5hdmlnYXRpb246bW91bnRlZCIsRm49ImF1dG9wbGF5OnBsYXkiLFhuPSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXV0b3BsYXk6cGF1c2UiLFduPSJsYXp5bG9hZDpsb2FkZWQiLFluPSJzayIsVW49JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJzaCI7ZnVuY3Rpb24gUShuKXt2YXIgaT1uP24uZXZlbnQuYnVzOmRvY3VtZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscj16bigpO3JldHVybiBuJiZuLmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5vbihhLHIuZGVzdHJveSksYW4ocix7YnVzOmksb246ZnVuY3Rpb24obix0KXtyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5iaW5kKGkseShuKS5qb2luKCIgIiksZnVuY3Rpb24obil7dC5hcHBseSh0LGUobicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGV0YWlsKT9uLmRldGFpbDpbXSl9KX0sb2ZmOlIoci51bmJpbmQsaSksZW1pdDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24obil7ci5kaXNwYXRjaChpLG4sbyhhcmd1bWVudHMsMSkpfX0pfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBxbih0LG4saSxyKXt2YXIgbyx1LGU9RGF0ZS5ub3csYz0wLGY9ITAsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9MDtmdW5jdGlvbiBzKCl7aWYoIWYpe2lmKGM9dD9ZKChlKCktbykvdCwxKToxLGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiZpKGMpLDE8PWMmJihuKCksbz1lKCksciYmKythPj1yKSlyZXR1cm4gbCgpO3U9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2gocyl9fWZ1bmN0aW9uIGwoKXtmPSEwfWZ1bmN0aW9uIGQoKXt1JiZjYW5jZWxBbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWF0aW9uRnJhbWUodSksZj0hKHU9Yz0wKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4pe258fGQoKSxvPWUoKS0obj9jKnQ6MCksZj0hMSx1PWgocyl9LHJld2luZDpmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24oKXtvPWUoKSxjPTAsaSYmaShjKX0scGF1c2U6bCxjYW5jZWw6ZCxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OmZ1bmN0aW9uKG4pe3Q9bn0saXNQYXVzZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfX1mdW5jdGlvbiBzKG4pe3ZhciB0PW47cmV0dXJue3NldDpmdW5jdGlvbihuKXt0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1ufSxpczpmdW5jdGlvbihuKXtyZXR1cm4gYih5KG4pLHQpfX19dmFyIG49IkFycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdyIsQm49bisiTGVmdCIsSG49bisiUmlnaHQiLHQ9bisiVXAiLG49bisiRG93biInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEpuPSJ0dGIiLGw9e3dpZHRoOlsiaGVpZ2h0Il0sbGVmdDpbInRvcCIsInJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJdLHJpZ2h0OlsiYm90dG9tIiwibGVmdCJdLHg6WyJ5Il0sWDpbIlkiXSxZOlsiWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciXSxBcnJvd0xlZnQ6W3QsSG5dLEFycm93UmlnaHQ6W24sQm5dfTt2YXIgWj0icm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUiLCQ9InRhYmluZGV4IixpPSJhcmlhLSIsS249aSsiY29udHJvbHMiLFZuPWkrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJjdXJyZW50IixRbj1pKyJzZWxlY3RlZCIsbm49aSsibGFiZWwiLFpuPWkrImxhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGxlZGJ5Iiwkbj1pKyJoaWRkZW4iLG50PWkrIm9yaWVudGF0aW9uIix0dD1pKyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9sZWRlc2NyaXB0aW9uIixpdD1pKyJsaXZlIixydD1pKyJidXN5IixvdD1pKyJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvbWljIix1dD1bWiwkLCJkaXNhYmxlZCIsS24sVm4sbm4sWm4sJG4sbnQsdHRdLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpPXluKyJfXyIsZXQ9eW4sY3Q9aSsidHJhY2siLGZ0PWkrImxpc3QiLGF0PWkrInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSIsc3Q9YXQrIi0tY2xvbmUiLGx0PWF0KyJfX2NvbnRhaW5lciIsZHQ9aSsiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93cyIsdnQ9aSsiYXJyb3ciLGh0PXZ0KyItLXByZXYiLHB0PXZ0KyItLW5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IixndD1pKyJwYWdpbmF0aW9uIixtdD1ndCsiX19wYWdlIix5dD1pKyJwcm9ncmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3MiKyJfX2JhciIsYnQ9aSsidG9nZ2xlIix3dD1pKyJzciIsdG49ImlzLWFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiLHh0PSJpcy1wcmV2IixrdD0iaXMtbmV4dCIsU3Q9ImlzLXZpc2libGUiLEV0PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciaXMtbG9hZGluZyIsTHQ9ImlzLWZvY3VzLWluIixPdD0iaXMtb3ZlcmZsb3ciLEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD1bdG4sU3QseHQsa3QsRXQsTHQsT3RdO3ZhciBfdD0idG91Y2hzdGFydCBtb3VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vkb3duIix6dD0idG91Y2htb3ZlIG1vdXNlbW92ZSIsRHQ9InRvdWNoZW5kIHRvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaGNhbmNlbCBtb3VzZXVwIGNsaWNrIjt2YXIgTXQ9InNsaWRlIixQdD0ibG9vcCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEl0PSJmYWRlIjtmdW5jdGlvbiBSdChvLHIsdCx1KXt2YXIgZSxuPVEobyksaT1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5vbixjPW4uZW1pdCxmPW4uYmluZCxhPW8uQ29tcG9uZW50cyxzPW8ucm9vdCxsPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvLm9wdGlvbnMsZD1sLmlzTmF2aWdhdGlvbix2PWwudXBkYXRlT25Nb3ZlLGg9bC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaTE4bixwPWwucGFnaW5hdGlvbixnPWwuc2xpZGVGb2N1cyxtPWEuRGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5yZXNvbHZlLHk9eih1LCJzdHlsZSIpLGI9eih1LG5uKSx3PS0xPHQseD1mbih1LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLiIrbHQpO2Z1bmN0aW9uIGsoKXt2YXIgbj1vLnNwbGlkZXMubWFwKGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbihuKXtuPW4uc3BsaWRlLkNvbXBvbmVudHMuU2xpZGVzLmdldEF0KHIpO3JldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbj9uLnNsaWRlLmlkOiIifSkuam9pbigiICIpO0kodSxubixPbihoLnNsaWRlWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsKHc/dDpyKSsxKSksSSh1LEtuLG4pLEkodSxaLGc/ImJ1dHRvbiI6IiIpLGcmJlAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHUsdHQpfWZ1bmN0aW9uIFMoKXtlfHxFKCl9ZnVuY3Rpb24gRSgpe3ZhciBuLHQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k7ZXx8KG49by5pbmRleCwoaT1MKCkpIT09dm4odSx0bikmJihBKHUsdG4saSksSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodSxWbixkJiZpfHwiIiksYyhpP1BuOkluLE8pKSxpPWZ1bmN0aW9uKCl7aWYoby4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoSXQpKXJldHVybiBMKCk7dmFyIG49TihhLkVsZW1lbnRzLnRyYWNrKSx0PU4oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3UpLGk9bSgibGVmdCIsITApLHI9bSgicmlnaHQiLCEwKTtyZXR1cm4geG4obltpXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpPD1rbih0W2ldKSYmeG4odFtyXSk8PWtuKG5bcl0pfSgpLHQ9IWkmJighTCgpfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndyksby5zdGF0ZS5pcyhbRyxybl0pfHxJKHUsJG4sdHx8IiIpLEkoZ24odSxsLmZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c2FibGVOb2Rlc3x8IiIpLCQsdD8tMToiIiksZyYmSSh1LCQsdD8tMTowKSxpIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PXZuKHUsU3QpJiYoQSh1LFN0LGkpLGMoaT9SbjpDbixPKSksaXx8ZG9jdW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmFjdGl2ZUVsZW1lbnQhPT11fHwodD1hLlNsaWRlcy5nZXRBdChvLmluZGV4KSkmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZkbih0LnNsaWRlKSxBKHUseHQscj09PW4tMSksQSh1LGt0LHI9PT1uKzEpKX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gTCgpe3ZhciBuPW8uaW5kZXg7cmV0dXJuIG49PT1yfHxsLmNsb25lU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR1cyYmbj09PXR9dmFyIE89e2luZGV4OnIsc2xpZGVJbmRleDp0LHNsaWRlOnUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRhaW5lcjp4LGlzQ2xvbmU6dyxtb3VudDpmdW5jdGlvbigpe3d8fCh1LmlkPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmlkKyItc2xpZGUiK0FuKHIrMSksSSh1LFoscD8idGFicGFuZWwiOiJncm91cCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxJKHUsdHQsaC5zbGlkZSksSSh1LG5uLGJ8fE9uKGguc2xpZGVMYWJlbCxbcisxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxvLmxlbmd0aF0pKSksZih1LCJjbGljayIsUihjLE1uLE8pKSxmKHUsImtleWRvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIixSKGMsWW4sTykpLGkoW0RuLFVuLFZdLEUpLGkoR24sayksdiYmaShILFMpfSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveTpmdW5jdGlvbigpe2U9ITAsbi5kZXN0cm95KCksWCh1LEF0KSxQKHUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0KSxJKHUsInN0eWxlIix5KSxJKHUsbm4sYnx8IiIpfSx1cGRhdGU6RSxzdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6ZnVuY3Rpb24obix0LGkpe18oaSYmeHx8dSxuLHQpfSxpc1dpdGhpbjpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24obix0KXtyZXR1cm4gbj1VKG4tciksKG49d3x8IWwucmV3aW5kJiYhby5pcyhQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpP246WShuLG8ubGVuZ3RoLW4pKTw9dH19O3JldHVybiBPfXZhciBDdD1mKyItaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsIjt2YXIganQ9e3Bhc3NpdmU6ITEsY2FwdHVyZTohMH07dmFyIE50PXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BhY2ViYXI6IiAiLFJpZ2h0OkhuLExlZnQ6Qm4sVXA6dCxEb3duOm59O2Z1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBUdChuKXtyZXR1cm4gbj1DKG4pP246bi5rZXksTnRbbl18fG59dmFyIEd0PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicia2V5ZG93biI7dmFyIEZ0PWYrIi1sYXp5IixYdD1GdCsiLXNyY3NldCIsV3Q9IlsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIitGdCsiXSwgWyIrWHQrIl0iO3ZhciBZdD1bIiAiLCJFbnRlciJdO3ZhciBVdD1PJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsTWVkaWE6ZnVuY3Rpb24ocixuLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvKXt2YXIgdT1yLnN0YXRlLHQ9by5icmVha3BvaW50c3x8e30sZT1vLnJlZHVjZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW90aW9ufHx7fSxpPXpuKCksYz1bXTtmdW5jdGlvbiBmKG4pe24mJmkuZGVzdHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koKX1mdW5jdGlvbiBhKG4sdCl7dD1tYXRjaE1lZGlhKHQpO2kuYmluZCh0LCJjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmdlIixzKSxjLnB1c2goW24sdF0pfWZ1bmN0aW9uIHMoKXt2YXIgbj11LmlzKDcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSx0PW8uZGlyZWN0aW9uLGk9Yy5yZWR1Y2UoZnVuY3Rpb24obix0KXtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qobix0WzFdLm1hdGNoZXM/dFswXTp7fSl9LHt9KTtzbihvKSxsKGkpLG8uZGVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3k/ci5kZXN0cm95KCJjb21wbGV0ZWx5Ij09PW8uZGVzdHJveSk6bj8oZighMCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHIubW91bnQoKSk6dCE9PW8uZGlyZWN0aW9uJiZyLnJlZnJlc2goKX1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbChuLHQsaSl7ZChvLG4pLHQmJmQoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSwhaSYmdS5pcygxKXx8ci5lbWl0KEssbyl9cmV0dXJue3NldHVwOmZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbigpe3ZhciBpPSJtaW4iPT09by5tZWRpYVF1ZXJ5O0UodCkuc29ydChmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24obix0KXtyZXR1cm4gaT8rbi0rdDordC0rbn0pLmZvckVhY2goZnVuY3Rpb24obicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe2EodFtuXSwiKCIrKGk/Im1pbiI6Im1heCIpKyItd2lkdGg6IituKyJweCkiKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxhKGUsdikscygpfSxkZXN0cm95OmYscmVkdWNlOmZ1bmN0aW9uKG4pe21hdGNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01lZGlhKHYpLm1hdGNoZXMmJihuP2QobyxlKTpzbihvLEUoZSkpKX0sc2V0Omx9fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRGlyZWN0aW9uOmZ1bmN0aW9uKG4sdCxvKXtyZXR1cm57cmVzb2x2ZTpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24obix0LGkpe3ZhciByPSJydGwiIT09KGk9aXx8by5kaXJlY3Rpb24pfHx0P2k9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09Sm4/MDotMToxO3JldHVybiBsW25dJiZsW25dW3JdfHxuLnJlcGxhY2UoL3dpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aHxsZWZ0fHJpZ2h0L2ksZnVuY3Rpb24obix0KXtuPWxbbi50b0xvd2VyQ2FzZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKV1bcl18fG47cmV0dXJuIDA8dD9uLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK24uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWNlKDEpOm59KX0sb3JpZW50OmZ1bmN0aW9uKG4pe3JldHVybiBuKigicnRsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT1vLmRpcmVjdGlvbj8xOi0xKX19fSxFbGVtZW50czpmdW5jdGlvbihuLHQsaSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3ZhciByLG8sdSxlPVEobiksYz1lLm9uLGY9ZS5iaW5kLGE9bi5yb290LHM9aS5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE4bixsPXt9LGQ9W10sdj1bXSxoPVtdO2Z1bmN0aW9uIHAoKXtyPXkoIi4iK2N0KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbz1mbihyLCIuIitmdCksYm4ociYmbywiQSB0cmFjay9saXN0IGVsZW1lbnQgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1pc3NpbmcuIiksayhkLFMobywiLiIrYXQrIjpub3QoLiIrc3QrIikiKSksdyh7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93czpkdCxwYWdpbmF0aW9uOmd0LHByZXY6aHQsbmV4dDpwdCxiYXI6eXQsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZ2dsZTpidH0sZnVuY3Rpb24obix0KXtsW3RdPXkoIi4iK24pfSksYW4obCx7cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Q6YSx0cmFjazpyLGxpc3Q6byxzbGlkZXM6ZH0pO3ZhciBuPWEuaWR8fGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbihuKXtyZXR1cm4iIituK0FuKF9uW25dPShfbltuXXx8MCkrMSl9KHluKSx0PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpLnJvbGU7YS5pZD1uLHIuaWQ9ci5pZHx8bisiLXRyYWNrIixvLmlkPW8uaWR8fG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyItbGlzdCIsIXooYSxaKSYmIlNFQ1RJT04iIT09YS50YWdOYW1lJiZ0JiZJKGEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1osdCksSShhLHR0LHMuY2Fyb3VzZWwpLEkobyxaLCJwcmVzZW50YXRpb24iKSxtKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfWZ1bmN0aW9uIGcobil7dmFyIHQ9dXQuY29uY2F0KCJzdHlsZSIpO0QoZCksWCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSx2KSxYKHIsaCksUChbcixvXSx0KSxQKGEsbj90Olsic3R5bGUiLHR0XSl9ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG0oKXtYKGEsdiksWChyLGgpLHY9YihldCksaD1iKGN0KSxNKGEsdiksTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocixoKSxJKGEsbm4saS5sYWJlbCksSShhLFpuLGkubGFiZWxsZWRieSl9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHkobil7bj1wbihhLG4pO3JldHVybiBuJiZmdW5jdGlvbihuLHQpe2lmKHgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uY2xvc2VzdCkpcmV0dXJuIG4uY2xvc2VzdCh0KTtmb3IodmFyIGk9bjtpJiYxPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PWkubm9kZVR5cGUmJiFjbihpLHQpOylpPWkucGFyZW50RWxlbWVudDtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGl9KG4sIi4iK2V0KT09PWE/bjp2b2lkIDB9ZnVuY3Rpb24gYihuKXtyZXR1cm5bJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24rIi0tIitpLnR5cGUsbisiLS0iK2kuZGlyZWN0aW9uLGkuZHJhZyYmbisiLS1kcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2dhYmxlIixpLmlzTmF2aWdhdGlvbiYmbisiLS1uYXYiLG49PT1ldCYmdG5dfXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gYW4obCx7c2V0dXA6cCxtb3VudDpmdW5jdGlvbigpe2MoSixnKSxjKEosJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ApLGMoSyxtKSxmKGRvY3VtZW50LF90KyIga2V5ZG93biIsZnVuY3Rpb24obil7dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ImtleWRvd24iPT09bi50eXBlfSx7Y2FwdHVyZTohMH0pLGYoYSwiZm9jdXNpbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGZ1bmN0aW9uKCl7QShhLEx0LCEhdSl9KX0sZGVzdHJveTpnfSl9LFNsaWRlczpmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24ocixvLHUpe3ZhciBuPVEociksdD1uLm9uLGU9bi5lbWl0LGM9bi5iaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCxmPShuPW8uRWxlbWVudHMpLnNsaWRlcyxhPW4ubGlzdCxzPVtdO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBpKCl7Zi5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7ZChuLHQsLTEpfSl9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGwoKXtoKGZ1bmN0aW9uKG4pe24uZGVzdHJveSgpfSksRChzKX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZChuLHQsaSl7dD1SdChyLHQsaSxuKTt0Lm1vdW50KCkscy5wdXNoKHQpLHMuc28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnQoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5pbmRleC10LmluZGV4fSl9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHYobil7cmV0dXJuIG4/cChmdW5jdGlvbihuKXtyZXR1cm4hbi5pc0Nsb25lfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOnN9ZnVuY3Rpb24gaChuLHQpe3YodCkuZm9yRWFjaChuKX1mdW5jdGlvbiBwKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gcy5maWx0ZXIoeCh0KT90OmZ1bmN0aW9uKG4pe3JldHVybiBDKHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz9jbihuLnNsaWRlLHQpOmIoeSh0KSxuLmluZGV4KX0pfXJldHVybnttb3VudDpmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24oKXtpKCksdChKLGwpLHQoSixpKX0sZGVzdHJveTpsLHVwZGF0ZTpmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24oKXtoKGZ1bmN0aW9uKG4pe24udXBkYXRlKCl9KX0scmVnaXN0ZXI6ZCxnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0OnYsZ2V0SW46ZnVuY3Rpb24obil7dmFyIHQ9by5Db250cm9sbGVyLGk9dC50bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleChuKSxyPXQuaGFzRm9jdXMoKT8xOnUucGVyUGFnZTtyZXR1cm4gcChmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24obil7cmV0dXJuIEVuKG4uaW5kZXgsaSxpK3ItMSl9KX0sZ2V0QXQ6ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKG4pe3JldHVybiBwKG4pWzBdfSxhZGQ6ZnVuY3Rpb24obixvKXtnKG4sZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uKG4pe3ZhciB0LGkscjttKG49QyhuKT9obihuKTpuKSYmKCh0PWZbb10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT9PKG4sdCk6TChhLG4pLE0obix1LmNsYXNzZXMuc2xpZGUpLHQ9bixpPVIoZSxqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pLHQ9Z24odCwiaW1nIiksKHI9dC5sZW5ndGgpP3QuZm9yRWFjaChmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobil7YyhuLCJsb2FkIGVycm9yIixmdW5jdGlvbigpey0tcnx8aSgpfSl9KTppKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX0pLGUoSil9LHJlbW92ZTpmdW5jdGlvbihuKXtUKHAobikubWFwKGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuKXtyZXR1cm4gbi5zbGlkZX0pKSxlKEopfSxmb3JFYWNoOmgsZmlsdGVyOnAscycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlOmZ1bmN0aW9uKHQsaSxyKXtoKGZ1bmN0aW9uKG4pe24uc3R5bGUodCxpLHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX0pfSxnZXRMZW5ndGg6ZnVuY3Rpb24obil7cmV0dXJuKG4/ZjpzKS5sZW5ndGh9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxpc0Vub3VnaDpmdW5jdGlvbigpe3JldHVybiBzLmxlbmd0aD51LnBlclBhZ2V9fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LExheW91dDpmdW5jdGlvbih0LG4saSl7dmFyIHIsbyx1LGU9KGE9USh0KSkub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGM9YS5iaW5kLGY9YS5lbWl0LGE9bi5TbGlkZXMscz1uLkRpcmVjdGlvbi5yZXNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x2ZSxsPShuPW4uRWxlbWVudHMpLnJvb3QsZD1uLnRyYWNrLHY9bi5saXN0LGg9YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ2V0QXQscD1hLnN0eWxlO2Z1bmN0aW9uIGcoKXtyPWkuZGlyZWN0aW9uPT09Sm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLF8obCwibWF4V2lkdGgiLFcoaS53aWR0aCkpLF8oZCxzKCJwYWRkaW5nTGVmdCIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx5KCExKSksXyhkLHMoInBhZGRpbmdSaWdodCIpLHkoITApKSxtKCEwKX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbShuKXt2YXIgdD1OKGwpOyFuJiZvLndpZHRoPT09dC53aWR0aCYmby5oZWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0PT09dC5oZWlnaHR8fChfKGQsImhlaWdodCIsZnVuY3Rpb24oKXt2YXIgbj0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7ciYmKGJuKG49YigpLCJoZWlnaHQgb3IgaGVpZ2h0UmF0aW8gaXMgbWlzc2luZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuIiksbj0iY2FsYygiK24rIiAtICIreSghMSkrIiAtICIreSghMCkrIikiKTtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIG59KCkpLHAocygibWFyZ2luUmlnaHQiKSxXKGkuZ2FwKSkscCgid2lkdGgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxpLmF1dG9XaWR0aD9udWxsOlcoaS5maXhlZFdpZHRoKXx8KHI/IiI6dygpKSkscCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoImhlaWdodCIsVyhpLmZpeGVkSGVpZ2h0KXx8KHI/aS5hdXRvSGVpZ2h0P251bGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOncoKTpiKCkpLCEwKSxvPXQsZihObiksdSE9PSh1PU8oKSkmJihBKGwsT3QsdSksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YoIm92ZXJmbG93Iix1KSkpfWZ1bmN0aW9uIHkobil7dmFyIHQ9aS5wYWRkaW5nLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduPXMobj8icmlnaHQiOiJsZWZ0Iik7cmV0dXJuIHQmJlcodFtuXXx8KHVuKHQpPzAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOnQpKXx8IjBweCJ9ZnVuY3Rpb24gYigpe3JldHVybiBXKGkuaGVpZ2h0fHxOKHYpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy53aWR0aCppLmhlaWdodFJhdGlvKX1mdW5jdGlvbiB3KCl7dmFyIG49VyhpLmdhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO3JldHVybiJjYWxjKCgxMDAlIisobiYmIiArICIrbikrIikvIisoaS5wZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXx8MSkrKG4mJiIgLSAiK24pKyIpIn1mdW5jdGlvbiB4KCl7cmV0dXJuIE4odilbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoIndpZHRoIildfWZ1bmN0aW9uIGsobix0KXtuPWgobnx8MCk7cmV0dXJuIG4/TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobi5zbGlkZSlbcygid2lkdGgiKV0rKHQ/MDpMKCkpOjB9ZnVuY3Rpb24gUyhuLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXt2YXIgaSxuPWgobik7cmV0dXJuIG4/KG49TihuLnNsaWRlKVtzKCJyaWdodCIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10saT1OKHYpW3MoImxlZnQiKV0sVShuLWkpKyh0PzA6TCgpKSk6MH1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRShuKXtyZXR1cm4gUyh0Lmxlbmd0aC0xKS1TKDApK2soMCxuKX1mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTCgpe3ZhciBuPWgoMCk7cmV0dXJuIG4mJnBhcnNlRmxvYXQoXyhuLnNsaWRlLHMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJtYXJnaW5SaWdodCIpKSl8fDB9ZnVuY3Rpb24gTygpe3JldHVybiB0LmlzKEl0KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fEUoITApPngoKX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXt2YXIgbix0LGk7ZygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxjKHdpbmRvdywicmVzaXplIGxvYWQiLChuPVIoZixqbiksaT1xbih0fHwwLG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsMSksZnVuY3Rpb24oKXtpLmlzUGF1c2VkKCkmJmkuc3RhcnQoKX0pKSxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbSyxKXSxnKSxlKGpuLG0pfSxyZXNpemU6bSxsaXN0U2l6ZTp4LHNsaWRlU2l6ZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInayxzbGlkZXJTaXplOkUsdG90YWxTaXplOlMsZ2V0UGFkZGluZzpmdW5jdGlvbihuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7cmV0dXJuIHBhcnNlRmxvYXQoXyhkLHMoInBhZGRpbmciKyhuPyJSaWdodCI6IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMZWZ0IikpKSl8fDB9LGlzT3ZlcmZsb3c6T319LENsb25lczpmdW5jdGlvbihjLGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGYpe3ZhciB0LHI9UShjKSxuPXIub24sYT1pLkVsZW1lbnRzLHM9aS5TbGlkZXMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ289aS5EaXJlY3Rpb24ucmVzb2x2ZSxsPVtdO2Z1bmN0aW9uIHUoKXtpZihuKEosZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLG4oW0ssam5dLHYpLHQ9aCgpKXt2YXIgbz10LHU9cy5nZXQoKS5zbGljZSgpLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXUubGVuZ3RoO2lmKGUpe2Zvcig7dS5sZW5ndGg8bzspayh1LHUpO2sodS5zbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoLW8pLHUuc2xpY2UoMCxvKSkuZm9yRWFjaChmdW5jdGlvbihuLHQpe3ZhciBpPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0PG8scj1mdW5jdGlvbihuLHQpe249bi5jbG9uZU5vZGUoITApO3JldHVybiBNKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGYuY2xhc3Nlcy5jbG9uZSksbi5pZD1jLnJvb3QuaWQrIi1jbG9uZSIrQW4odCsxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksbn0obi5zbGlkZSx0KTtpP08ocix1WzBdLnNsaWRlKTpMKGEubGlzdCxyKSxrKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsLHIpLHMucmVnaXN0ZXIocix0LW8rKGk/MDplKSxuLmluZGV4KX0pfWkuTGF5b3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5yZXNpemUoITApfX1mdW5jdGlvbiBkKCl7ZSgpLHUoKX1mdW5jdGlvbiBlKCl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1QobCksRChsKSxyLmRlc3Ryb3koKX1mdW5jdGlvbiB2KCl7dmFyIG49aCgpO3QhPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9biYmKHQ8bnx8IW4pJiZyLmVtaXQoSil9ZnVuY3Rpb24gaCgpe3ZhciBuLHQ9Zi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xvbmVzO3JldHVybiBjLmlzKFB0KT9lbih0KSYmKHQ9KG49ZltvKCJmaXhlZFdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCIpXSYmaS5MYXlvdXQuc2xpZGVTaXplKDApKSYma24oTihhLnRyYWNrKVtvKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicid2lkdGgiKV0vbil8fGZbbygiYXV0b1dpZHRoIildJiZjLmxlbmd0aHx8MipmLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJQYWdlKTp0PTAsdH1yZXR1cm57bW91bnQ6dSxkZXN0cm95OmV9fSxNb3ZlOmZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbihyLGMsbyl7dmFyIGUsbj1RKHIpLHQ9bi5vbixmPW4uZW1pdCxhPXIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlLnNldCx1PShuPWMuTGF5b3V0KS5zbGlkZVNpemUsaT1uLmdldFBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHM9bi50b3RhbFNpemUsbD1uLmxpc3RTaXplLGQ9bi5zbGlkZXJTaXplLHY9KG49JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MuRGlyZWN0aW9uKS5yZXNvbHZlLGg9bi5vcmllbnQscD0obj1jLkVsZW1lbnRzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdCxnPW4udHJhY2s7ZnVuY3Rpb24gbSgpe2MuQ29udHJvbGxlci5pc0J1c3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCl8fChjLlNjcm9sbC5jYW5jZWwoKSx5KHIuaW5kZXgpLGMuU2xpZGVzLnVwZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoKSl9ZnVuY3Rpb24geShuKXtiKFMobiwhMCkpfWZ1bmN0aW9uIGIobix0KXtyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyhJdCl8fCh0PXQ/bjpmdW5jdGlvbihuKXt7dmFyIHQsaTtyLmlzKFB0KSYmKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWsobiksaT10PmMuQ29udHJvbGxlci5nZXRFbmQoKSwodDwwfHxpKSYmKG49dyhuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxpKSkpfXJldHVybiBufShuKSxfKHAsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSIrdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIlgiKSsiKCIrdCsicHgpIiksbiE9PXQmJmYoVW4pKX1mdW5jdGlvbiB3KG4sdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3ZhciBpPW4tTCh0KSxyPWQoKTtyZXR1cm4gbi09aChyKihrbihVKGkpL3IpfHwxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpKih0PzE6LTEpfWZ1bmN0aW9uIHgoKXtiKEUoKSwhMCksZS5jYW5jZWwoKX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gayhuKXtmb3IodmFyIHQ9Yy5TbGlkZXMuZ2V0KCksaT0wLHI9MS8wLG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciB1PXRbb10uaW5kZXgsZT1VKFModSwhMCktJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pO2lmKCEoZTw9cikpYnJlYWs7cj1lLGk9dX1yZXR1cm4gaX1mdW5jdGlvbiBTKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQpe3ZhciBpPWgocyhuLTEpLShuPW4sImNlbnRlciI9PT0oaT1vLmZvY3VzKT8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGwoKS11KG4sITApKS8yOitpKnUobil8fDApKTtyZXR1cm4gdD8obj1pLG49by50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbVNwYWNlJiZyLmlzKE10KT9xKG4sMCxoKGQoITApLWwoKSkpOm4pOml9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIEUoKXt2YXIgbj12KCJsZWZ0Iik7cmV0dXJuIE4ocClbbl0tTihnKVtuXSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaChpKCExKSl9ZnVuY3Rpb24gTChuKXtyZXR1cm4gUyhuP2MuQ29udHJvbGxlci5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0RW5kKCk6MCwhIW8udHJpbVNwYWNlKX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7ZT1jLlRyYW5zaXRpb24sdChbQixObixLLEpdLG0pfSxtb3ZlOmZ1bmN0aW9uKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHQsaSxyKXt2YXIgbyx1O24hPT10JiYobz1pPG4sdT1oKHcoRSgpLG8pKSxvPzA8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz11OnU8PXBbdigic2Nyb2xsV2lkdGgiKV0tTihnKVt2KCJ3aWR0aCIpXSkmJih4KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGIodyhFKCksaTxuKSwhMCkpLGEoRyksZihILHQsaSxuKSxlLnN0YXJ0KHQsZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKCl7YSgzKSxmKERuLHQsaSxuKSxyJiZyKCl9KX0sanVtcDp5LHRyYW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhdGU6YixzaGlmdDp3LGNhbmNlbDp4LHRvSW5kZXg6ayx0b1Bvc2l0aW9uOlMsZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldFBvc2l0aW9uOkUsZ2V0TGltaXQ6TCxleGNlZWRlZExpbWl0OmZ1bmN0aW9uKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHQpe3Q9ZW4odCk/RSgpOnQ7dmFyIGk9ITAhPT1uJiZoKHQpPGgoTCghMSkpLG49JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyExIT09biYmaCh0KT5oKEwoITApKTtyZXR1cm4gaXx8bn0scmVwb3NpdGlvbjptfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LENvbnRyb2xsZXI6ZnVuY3Rpb24obyx1LGUpe3ZhciBjLGYsYSxzLG49UShvKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD1uLm9uLGk9bi5lbWl0LGw9dS5Nb3ZlLGQ9bC5nZXRQb3NpdGlvbixyPWwuZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xpbWl0LHY9bC50b1Bvc2l0aW9uLGg9KG49dS5TbGlkZXMpLmlzRW5vdWdoLHA9bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ2V0TGVuZ3RoLGc9ZS5vbWl0RW5kLG09by5pcyhQdCkseT1vLmlzKE10KSxiPVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEwsITEpLHc9UihMLCEwKSx4PWUuc3RhcnR8fDAsaz14O2Z1bmN0aW9uIFMoKXtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1wKCEwKSxhPWUucGVyTW92ZSxzPWUucGVyUGFnZSxjPV8oKTt2YXIgbj1xKHgsMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZz9jOmYtMSk7biE9PXgmJih4PW4sbC5yZXBvc2l0aW9uKCkpfWZ1bmN0aW9uIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCl7YyE9PV8oKSYmaSgiZWkiKX1mdW5jdGlvbiBMKG4sdCl7dmFyIGk9YXx8KFAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk/MTpzKSxpPU8oeCtpKihuPy0xOjEpLHgsIShhfHxQKCkpKTtyZXR1cm4tMT09PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpJiZ5JiYhU24oZCgpLHIoIW4pLDEpP24/MDpjOnQ/aTpBKGkpfWZ1bmN0aW9uIE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4sdCxpKXt2YXIgcjtyZXR1cm4gaCgpfHxQKCk/KChyPWZ1bmN0aW9uKG4pe2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh5JiYibW92ZSI9PT1lLnRyaW1TcGFjZSYmbiE9PXgpZm9yKHZhciB0PWQoKTt0PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PXYobiwhMCkmJkVuKG4sMCxvLmxlbmd0aC0xLCFlLnJld2luZCk7KW48eD8tLW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOisrbjtyZXR1cm4gbn0obikpIT09biYmKHQ9bixuPXIsaT0hMSksbjwwfHxjPG4/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249YXx8IUVuKDAsbix0LCEwKSYmIUVuKGMsdCxuLCEwKT9tP2k/bjwwPy0oZiVzfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8cyk6ZjpuOmUucmV3aW5kP248MD9jOjA6LTE6eihEKG4pKTppJiZuIT09dCYmKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXooRCh0KSsobjx0Py0xOjEpKSkpOm49LTEsbn1mdW5jdGlvbiBBKG4pe3JldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbT8obitmKSVmfHwwOm59ZnVuY3Rpb24gXygpe2Zvcih2YXIgbj1mLShQKCl8fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtJiZhPzE6cyk7ZyYmMDxuLS07KWlmKHYoZi0xLCEwKSE9PXYobiwhMCkpe24rKzsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnJlYWt9cmV0dXJuIHEobiwwLGYtMSl9ZnVuY3Rpb24geihuKXtyZXR1cm4gcShQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpP246cypuLDAsYyl9ZnVuY3Rpb24gRChuKXtyZXR1cm4gUCgpP1kobixjKTp4bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKGM8PW4/Zi0xOm4pL3MpfWZ1bmN0aW9uIE0obil7biE9PXgmJihrPXgseD1uKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gUCgpe3JldHVybiFlbihlLmZvY3VzKXx8ZS5pc05hdmlnYXRpb259JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIEkoKXtyZXR1cm4gby5zdGF0ZS5pcyhbRyxybl0pJiYhIWUud2FpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGb3JUcmFuc2l0aW9ufXJldHVybnttb3VudDpmdW5jdGlvbigpe1MoKSx0KFtLLEonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJlaSJdLFMpLHQoTm4sRSl9LGdvOmZ1bmN0aW9uKG4sdCxpKXt2YXIgcjtJKCl8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wtMTwocj1BKG49ZnVuY3Rpb24obil7dmFyIHQ9eDt7dmFyIGkscjtDKG4pPyhyPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLm1hdGNoKC8oWytcXC08Pl0pKFxcZCspPy8pfHxbXSxpPXJbMV0scj1yWzJdLCIrIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT1pfHwiLSI9PT1pP3Q9Tyh4KyArKCIiK2krKCtyfHwxKSkseCk6Ij4iPT09aT8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD1yP3ooK3IpOmIoITApOiI8Ij09PWkmJih0PXcoITApKSk6dD1tP246cShuLDAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MpfXJldHVybiB0fShuKSkpJiYodHx8ciE9PXgpJiYoTShyKSxsLm1vdmUobixyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrLGkpKX0sc2Nyb2xsOmZ1bmN0aW9uKG4sdCxpLHIpe3UuU2Nyb2xsLnNjcm9sbCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbix0LGksZnVuY3Rpb24oKXt2YXIgbj1BKGwudG9JbmRleChkKCkpKTtNKGc/WShuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxjKTpuKSxyJiZyKCl9KX0sZ2V0TmV4dDpiLGdldFByZXY6dyxnZXRBZGphY2VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6TCxnZXRFbmQ6XyxzZXRJbmRleDpNLGdldEluZGV4OmZ1bmN0aW9uKG4pe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gbj9rOnh9LHRvSW5kZXg6eix0b1BhZ2U6RCx0b0Rlc3Q6ZnVuY3Rpb24obil7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBuPWwudG9JbmRleChuKSx5P3EobiwwLGMpOm59LGhhc0ZvY3VzOlAsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzQnVzeTpJfX0sQXJyb3dzOmZ1bmN0aW9uKG8sbix0KXt2YXIgaSxyLHU9UShvKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZT11Lm9uLGM9dS5iaW5kLGY9dS5lbWl0LGE9dC5jbGFzc2VzLHM9dC5pMThuLGw9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uRWxlbWVudHMsZD1uLkNvbnRyb2xsZXIsdj1sLmFycm93cyxoPWwudHJhY2sscCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9dixnPWwucHJldixtPWwubmV4dCx5PXt9O2Z1bmN0aW9uIGIoKXt2YXIgbj10LmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3M7IW58fGcmJm18fChwPXZ8fGooImRpdiIsYS5hcnJvd3MpLGc9UyghMCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ209UyghMSksaT0hMCxMKHAsW2csbV0pLHZ8fE8ocCxoKSksZyYmbSYmKGFuKHkseycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2OmcsbmV4dDptfSksbG4ocCxuPyIiOiJub25lIiksTShwLHI9ZHQrIi0tIisnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5kaXJlY3Rpb24pLG4mJihlKFtCLERuLEosViwiZWkiXSxFKSxjKG0sImNsaWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsUihrLCI+IikpLGMoZywiY2xpY2siLFIoaywiPCIpKSxFKCksSShbZyxtXSxLbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaC5pZCksZigiYXJyb3dzOm1vdW50ZWQiLGcsbSkpKSxlKEssdyl9ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHcoKXt4KCksYigpfWZ1bmN0aW9uIHgoKXt1LmRlc3Ryb3koKSxYKHAsciksaT8oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Qodj9bZyxtXTpwKSxnPW09bnVsbCk6UChbZyxtXSx1dCl9ZnVuY3Rpb24gayhuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ7ZC5nbyhuLCEwKX1mdW5jdGlvbiBTKG4pe3JldHVybiBobignPGJ1dHRvbiBjbGEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3M9IlwnK2EuYXJyb3crIiAiKyhuP2EucHJldjphLm5leHQpK1wnIiB0eXBlPSJidXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dCb3g9IjAgMCA0MCA0MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmb2N1c2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPSJmYWxzZSI+PHBhdGggZD0iXCcrKHQuYXJyb3dQYXRofHwibTE1LjUgMC45MzItJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LjYgNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IikrXCciIC8+XCcpfWZ1bmN0aW9uIEUoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7dmFyIG4sdCxpLHI7ZyYmbSYmKHI9by5pbmRleCxuPWQuZ2V0UHJldigpLHQ9ZC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0TmV4dCgpLGk9LTE8biYmcjxuP3MubGFzdDpzLnByZXYscj0tMTx0JiZ0PHI/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZmlyc3Q6cy5uZXh0LGcuZGlzYWJsZWQ9bjwwLG0uZGlzYWJsZWQ9dDwwLEkoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbm4saSksSShtLG5uLHIpLGYoImFycm93czp1cGRhdGVkIixnLG0sbix0KSl9cmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybnthcnJvd3M6eSxtb3VudDpiLGRlc3Ryb3k6eCx1cGRhdGU6RX19LEF1dG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTpmdW5jdGlvbihuLHQsaSl7dmFyIHIsbyx1PVEobiksZT11Lm9uLGM9dS5iaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCxmPXUuZW1pdCxhPXFuKGkuaW50ZXJ2YWwsbi5nby5iaW5kKG4sIj4iKSxmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24obil7dmFyIHQ9bC5iYXI7dCYmXyh0LCJ3aWR0aCIsMTAwKm4rIiUiKSxmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygiYXV0b3BsYXk6cGxheWluZyIsbil9KSxzPWEuaXNQYXVzZWQsbD10LkVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyxkPSh1PXQuRWxlbWVudHMpLnJvb3Qsdj11LnRvZ2dsZSxoPWkuYXV0b3BsYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHA9InBhdXNlIj09PWg7ZnVuY3Rpb24gZygpe3MoKSYmdC5TbGlkZXMuaXNFbm91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2doKCkmJihhLnN0YXJ0KCFpLnJlc2V0UHJvZ3Jlc3MpLG89cj1wPSExLGIoKSxmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGbikpfWZ1bmN0aW9uIG0obil7cD0hIShuPXZvaWQgMD09PW4/ITA6biksYigpLHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCl8fChhLnBhdXNlKCksZihYbikpfWZ1bmN0aW9uIHkoKXtwfHwocnx8bz9tKCExJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6ZygpKX1mdW5jdGlvbiBiKCl7diYmKEEodix0biwhcCksSSh2LG5uLGkuaTE4bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbcD8icGxheSI6InBhdXNlIl0pKX1mdW5jdGlvbiB3KG4pe249dC5TbGlkZXMuZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEF0KG4pO2Euc2V0KG4mJit6KG4uc2xpZGUsQ3QpfHxpLmludGVydmFsKX1yZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jue21vdW50OmZ1bmN0aW9uKCl7aCYmKGkucGF1c2VPbkhvdmVyJiZjKGQsIm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWVudGVyIG1vdXNlbGVhdmUiLGZ1bmN0aW9uKG4pe3I9Im1vdXNlZW50ZXIiPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPW4udHlwZSx5KCl9KSxpLnBhdXNlT25Gb2N1cyYmYyhkLCJmb2N1c2luIGZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291dCIsZnVuY3Rpb24obil7bz0iZm9jdXNpbiI9PT1uLnR5cGUseSgpfSksdiYmYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodiwiY2xpY2siLGZ1bmN0aW9uKCl7cD9nKCk6bSghMCl9KSxlKFtILFRuLEpdLGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnJld2luZCksZShILHcpLHYmJkkodixLbixsLnRyYWNrLmlkKSxwfHxnKCksYigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9LGRlc3Ryb3k6YS5jYW5jZWwscGxheTpnLHBhdXNlOm0saXNQYXVzZWQ6c319LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3ZlcjpmdW5jdGlvbihuLHQsaSl7dmFyIHI9UShuKS5vbjtmdW5jdGlvbiBvKGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXt0LlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0PWZuKG4uY29udGFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lcnx8bi5zbGlkZSwiaW1nIik7dCYmdC5zcmMmJnUoaSx0LG4pfSl9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHUobix0LGkpe2kuc3R5bGUoImJhY2tncm91bmQiLG4/XCdjZW50ZXIvY292ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25vLXJlcGVhdCB1cmwoIlwnK3Quc3JjK1wnIilcJzoiIiwhMCksbG4odCxuPyJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZSI6IiIpfXJldHVybnttb3VudDpmdW5jdGlvbigpe2kuY292ZXImJihyKFduLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSKHUsITApKSxyKFtCLEssSl0sUihvLCEwKSkpfSxkZXN0cm95OlIobywhMSl9fSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2Nyb2xsOmZ1bmN0aW9uKG4sYyx1KXt2YXIgZixhLHQ9UShuKSxpPXQub24scz10JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5lbWl0LGw9bi5zdGF0ZS5zZXQsZD1jLk1vdmUsdj1kLmdldFBvc2l0aW9uLGU9ZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ2V0TGltaXQsaD1kLmV4Y2VlZGVkTGltaXQscD1kLnRyYW5zbGF0ZSxnPW4uaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKE10KSxtPTE7ZnVuY3Rpb24geShuLHQsaSxyLG8pe3ZhciB1LGU9digpLGk9KHgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksIWl8fGcmJmgoKXx8KGk9Yy5MYXlvdXQuc2xpZGVyU2l6ZSgpLHU9TG4obikqaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqeG4oVShuKS9pKXx8MCxuPWQudG9Qb3NpdGlvbihjLkNvbnRyb2xsZXIudG9EZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChuJWkpKSt1KSxTbihlLG4sMSkpO209MSx0PWk/MDp0fHx3bihVKG4tZSkvMS41JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyw4MDApLGE9cixmPXFuKHQsYixSKHcsZSxuLG8pLDEpLGwocm4pLHMoVG4pLGYucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJ0KCl9ZnVuY3Rpb24gYigpe2woMyksYSYmYSgpLHMoVil9ZnVuY3Rpb24gdygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbix0LGkscil7dmFyIG89digpLHI9KG4rKHQtbikqKHQ9ciwobj11LmVhc2luZ0Z1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jKT9uKHQpOjEtTWF0aC5wb3coMS10LDQpKS1vKSptO3AobytyKSxnJiYhaSYmaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSYmKG0qPS42LFUocik8MTAmJnkoZShoKCEwKSksNjAwLCExLGEsITApKX1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24geCgpe2YmJmYuY2FuY2VsKCl9ZnVuY3Rpb24gcigpe2YmJiFmLmlzUGF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlZCgpJiYoeCgpLGIoKSl9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7aShILHgpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpKFtLLEpdLHIpfSxkZXN0cm95Ongsc2Nyb2xsOnksY2FuY2VsOnJ9fSxEcmFnOmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbihlLG8sYyl7dmFyIGYsdCx1LGEscyxsLGQsdixuPVEoZSksaT1uLm9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxoPW4uZW1pdCxwPW4uYmluZCxnPW4udW5iaW5kLG09ZS5zdGF0ZSx5PW8uTW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsYj1vLlNjcm9sbCx3PW8uQ29udHJvbGxlcix4PW8uRWxlbWVudHMudHJhY2ssaz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby5NZWRpYS5yZWR1Y2Uscj0obj1vLkRpcmVjdGlvbikucmVzb2x2ZSxTPW4ub3JpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCxFPXkuZ2V0UG9zaXRpb24sTD15LmV4Y2VlZGVkTGltaXQsTz0hMTtmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gaigpe3ZhciBuPWMuZHJhZztDKCFuKSxhPSJmcmVlIj09PW59ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE4obil7dmFyIHQsaSxyO2w9ITEsZHx8KHQ9UihuKSxpPW4udGFyZ2V0LHI9Yy5uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29EcmFnLGNuKGksIi4iK210KyIsIC4iK3Z0KXx8ciYmY24oaSxyKXx8IXQmJm4uYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbnx8KHcuaXNCdXN5KCk/RihuLCEwKToodj10P3g6d2luZG93LHM9bS5pcygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW0cscm5dKSx1PW51bGwscCh2LHp0LEEsanQpLHAodixEdCxfLGp0KSx5LmNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2woKSxiLmNhbmNlbCgpLHoobikpKSl9ZnVuY3Rpb24gQShuKXt2YXIgdCxpLHIsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdTttLmlzKDYpfHwobS5zZXQoNiksaCgiZHJhZyIpKSxuLmNhbmNlbGFibGUmJignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncz8oeS50cmFuc2xhdGUoZitEKG4pLyhPJiZlLmlzKE10KT81OjEpKSx1PTIwMDxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuKSx0PU8hPT0oTz1MKCkpLCh1fHx0KSYmeihuKSxsPSEwLGgoImRyYWdnaW5nIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEYobikpOlUoRCh1PW4pKT5VKEQodSwhMCkpJiYodD1uLGk9Yy5kcmFnTWluVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzaG9sZCxyPXVuKGkpLG89ciYmaS5tb3VzZXx8MCxyPShyP2kudG91Y2g6K2kpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8MTAscz1VKEQodCkpPihSKHQpP3I6byksRihuKSkpfWZ1bmN0aW9uIF8obil7dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciB0LGkscjttLmlzKDYpJiYobS5zZXQoMyksaCgiZHJhZ2dlZCIpKSxzJiYoaT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24obil7cmV0dXJuIEUoKStMbihuKSpZKFUobikqKGMuZmxpY2tQb3dlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J8fDYwMCksYT8xLzA6by5MYXlvdXQubGlzdFNpemUoKSooYy5mbGlja01heFBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3x8MSkpfSh0PWZ1bmN0aW9uKG4pe2lmKGUuaXMoUHQpfHwhTyl7dmFyIHQ9TSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbik7aWYodCYmdDwyMDApcmV0dXJuIEQobikvdH1yZXR1cm4gMH0odD1uKSkscj1jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5yZXdpbmQmJmMucmV3aW5kQnlEcmFnLGsoITEpLGE/dy5zY3JvbGwoaSwwLGMucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXApOmUuaXMoSXQpP3cuZ28oUyhMbih0KSk8MD9yPyI8IjoiLSI6cj8iPiI6IisnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIik6ZS5pcyhNdCkmJk8mJnI/dy5nbyhMKCEwKT8iPiI6IjwiKTp3LmdvKHcudG9EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdChpKSwhMCksayghMCksRihuKSksZyh2LHp0LEEpLGcodixEdCxfKSxzPSExfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBUKG4peyFkJiZsJiZGKG4sITApfWZ1bmN0aW9uIHoobil7dT10LHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPW4sZj1FKCl9ZnVuY3Rpb24gRChuLHQpe3JldHVybiBJKG4sdCktSShQKG4pLHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiBNKG4pe3JldHVybiBtbihuKS1tbihQKG4pKX1mdW5jdGlvbiBQKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKXtyZXR1cm4gdD09PW4mJnV8fHR9ZnVuY3Rpb24gSShuLHQpe3JldHVybihSKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT9uLmNoYW5nZWRUb3VjaGVzWzBdOm4pWyJwYWdlIityKHQ/IlkiOiJYIildfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBSKG4pe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgVG91Y2hFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJm4gaW5zdGFuY2VvZiBUb3VjaEV2ZW50fWZ1bmN0aW9uIEMobil7ZD1ufXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm57bW91bnQ6ZnVuY3Rpb24oKXtwKHgsenQsb24sanQpLHAoeCxEdCxvbixqdCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AoeCxfdCxOLGp0KSxwKHgsImNsaWNrIixULHtjYXB0dXJlOiEwfSkscCh4LCJkcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ3N0YXJ0IixGKSxpKFtCLEtdLGopfSxkaXNhYmxlOkMsaXNEcmFnZ2luZzpmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24oKXtyZXR1cm4gc319fSxLZXlib2FyZDpmdW5jdGlvbih0LG4saSl7dmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByLG8sdT1RKHQpLGU9dS5vbixjPXUuYmluZCxmPXUudW5iaW5kLGE9dC5yb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzPW4uRGlyZWN0aW9uLnJlc29sdmU7ZnVuY3Rpb24gbCgpe3ZhciBuPWkua2V5Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJkO24mJihyPSJnbG9iYWwiPT09bj93aW5kb3c6YSxjKHIsR3QsaCkpfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBkKCl7ZihyLEd0KX1mdW5jdGlvbiB2KCl7dmFyIG49bztvPSEwLHAoZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKCl7bz1ufSl9ZnVuY3Rpb24gaChuKXtvfHwoKG49VHQobikpPT09cyhCbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInP3QuZ28oIjwiKTpuPT09cyhIbikmJnQuZ28oIj4iKSl9cmV0dXJue21vdW50OmZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbigpe2woKSxlKEssZCksZShLLGwpLGUoSCx2KX0sZGVzdHJveTpkLGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlOmZ1bmN0aW9uKG4pe289bn19fSxMYXp5TG9hZDpmdW5jdGlvbihpLG4sbyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3ZhciB0PVEoaSkscj10Lm9uLHU9dC5vZmYsZT10LmJpbmQsYz10LmVtaXQsZj0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcXVlbnRpYWwiPT09by5sYXp5TG9hZCxhPVtEbixWXSxzPVtdO2Z1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKCl7RChzKSxuLlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2duKHIuc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFd0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0PXoobixGdCksaT16KG4sWHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzt0PT09bi5zcmMmJmk9PT1uLnNyY3NldHx8KHQ9by5jbGFzc2VzLnNwaW5uZXIsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9Zm4oaT1uLnBhcmVudEVsZW1lbnQsIi4iK3QpfHxqKCJzcGFuIix0LGkpLHMucHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2goW24scix0XSksbi5zcmN8fGxuKG4sIm5vbmUiKSl9KX0pLChmP3A6KHUoYSksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoYSxkKSxkKSkoKX1mdW5jdGlvbiBkKCl7KHM9cy5maWx0ZXIoZnVuY3Rpb24obicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3ZhciB0PW8ucGVyUGFnZSooKG8ucHJlbG9hZFBhZ2VzfHwxKSsxKS0xO3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4hblsxXS5pc1dpdGhpbihpLmluZGV4LHQpfHx2KG4pfSkpLmxlbmd0aHx8dShhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9ZnVuY3Rpb24gdihuKXt2YXIgdD1uWzBdO00oblsxXS5zbGlkZSxFdCksZSh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicibG9hZCBlcnJvciIsUihoLG4pKSxJKHQsInNyYyIseih0LEZ0KSksSSh0LCJzcmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0Iix6KHQsWHQpKSxQKHQsRnQpLFAodCxYdCl9ZnVuY3Rpb24gaChuLHQpe3ZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaT1uWzBdLHI9blsxXTtYKHIuc2xpZGUsRXQpLCJlcnJvciIhPT10LnR5cGUmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoVChuWzJdKSxsbihpLCIiKSxjKFduLGksciksYyhqbikpLGYmJnAoKX1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gcCgpe3MubGVuZ3RoJiZ2KHMuc2hpZnQoKSl9cmV0dXJue21vdW50OmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbigpe28ubGF6eUxvYWQmJihsKCkscihKLGwpKX0sZGVzdHJveTpSKEQscyksYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZWNrOmR9fSxQYWdpbmF0aW9uOmZ1bmN0aW9uKGwsbixkKXt2YXIgdixoLHQ9USgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCkscD10Lm9uLGc9dC5lbWl0LG09dC5iaW5kLHk9bi5TbGlkZXMsYj1uLkVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cyx3PW4uQ29udHJvbGxlcix4PXcuaGFzRm9jdXMscj13LmdldEluZGV4LGU9dycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ28sYz1uLkRpcmVjdGlvbi5yZXNvbHZlLGs9Yi5wYWdpbmF0aW9uLFM9W107ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIEUoKXt2JiYoVChrP28odi5jaGlsZHJlbik6diksWCh2LGgpLEQoUyksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Y9bnVsbCksdC5kZXN0cm95KCl9ZnVuY3Rpb24gTChuKXtlKCI+IituLCEwKX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gTyhuLHQpe3ZhciBpPVMubGVuZ3RoLHI9VHQodCksbz1BKCksdT0tMSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbz0ocj09PWMoSG4sITEsbyk/dT0rK24laTpyPT09YyhCbiwhMSxvKT91PSgtLW4rJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kpJWk6IkhvbWUiPT09cj91PTA6IkVuZCI9PT1yJiYodT1pLTEpLFNbdV0pO28mJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZG4oby5idXR0b24pLGUoIj4iK3UpLEYodCwhMCkpfWZ1bmN0aW9uIEEoKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGQucGFnaW5hdGlvbkRpcmVjdGlvbnx8ZC5kaXJlY3Rpb259ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ18obil7cmV0dXJuIFNbdy50b1BhZ2UobildfWZ1bmN0aW9uIHooKXt2YXIgbix0PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfKHIoITApKSxpPV8ocigpKTt0JiYoWChuPXQuYnV0dG9uLHRuKSxQKG4sUW4pLEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4sJCwtMSkpLGkmJihNKG49aS5idXR0b24sdG4pLEkobixRbiwhMCksSShuLCQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiKSksZygicGFnaW5hdGlvbjp1cGRhdGVkIix7bGlzdDp2LGl0ZW1zOlN9LHQsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfXJldHVybntpdGVtczpTLG1vdW50OmZ1bmN0aW9uIG4oKXtFKCkscChbSyxKLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWkiXSxuKTt2YXIgdD1kLnBhZ2luYXRpb247aWYoayYmbG4oayx0PyIiOiJub25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIpLHQpe3AoW0gsVG4sVl0seik7dmFyIHQ9bC5sZW5ndGgsaT1kLmNsYXNzZXMscicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ZC5pMThuLG89ZC5wZXJQYWdlLHU9eCgpP3cuZ2V0RW5kKCkrMTprbih0L28pO00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHY9a3x8aigidWwiLGkucGFnaW5hdGlvbixiLnRyYWNrLnBhcmVudEVsZW1lbnQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxoPWd0KyItLSIrQSgpKSxJKHYsWiwidGFibGlzdCIpLEkodixubixyLnNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEkodixudCxBKCk9PT1Kbj8idmVydGljYWwiOiIiKTtmb3IodmFyIGU9MDtlPHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2UrKyl7dmFyIGM9aigibGkiLG51bGwsdiksZj1qKCJidXR0b24iLHtjbGFzczppJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5wYWdlLHR5cGU6ImJ1dHRvbiJ9LGMpLGE9eS5nZXRJbihlKS5tYXAoZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4pe3JldHVybiBuLnNsaWRlLmlkfSkscz0heCgpJiYxPG8/ci5wYWdlWDpyLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVg7bShmLCJjbGljayIsUihMLGUpKSxkLnBhZ2luYXRpb25LZXlib2FyZCYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20oZiwia2V5ZG93biIsUihPLGUpKSxJKGMsWiwicHJlc2VudGF0aW9uIiksSShmLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidaLCJ0YWIiKSxJKGYsS24sYS5qb2luKCIgIikpLEkoZixubixPbihzLGUrMSkpLEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGYsJCwtMSksUy5wdXNoKHtsaTpjLGJ1dHRvbjpmLHBhZ2U6ZX0pfXooKSxnKCJwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnaW5hdGlvbjptb3VudGVkIix7bGlzdDp2LGl0ZW1zOlN9LF8obC5pbmRleCkpfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LGRlc3Ryb3k6RSxnZXRBdDpfLHVwZGF0ZTp6fX0sU3luYzpmdW5jdGlvbihpLG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHQpe3ZhciByPXQuaXNOYXZpZ2F0aW9uLG89dC5zbGlkZUZvY3VzLHU9W107ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGUoKXt2YXIgbix0O2kuc3BsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uKG4peycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLmlzUGFyZW50fHwoZihpLG4uc3BsaWRlKSxmKG4uc3BsaWRlLGkpKX0pLHImJignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj1RKGkpLCh0PW4ub24pKE1uLHMpLHQoWW4sbCksdChbQixLXSxhKSx1LnB1c2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pLG4uZW1pdChHbixpLnNwbGlkZXMpKX1mdW5jdGlvbiBjKCl7dS5mb3JFYWNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbihuKXtuLmRlc3Ryb3koKX0pLEQodSl9ZnVuY3Rpb24gZihuLHIpe24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPVEobik7bi5vbihILGZ1bmN0aW9uKG4sdCxpKXtyLmdvKHIuaXMoUHQpP2k6bil9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksdS5wdXNoKG4pfWZ1bmN0aW9uIGEoKXtJKG4uRWxlbWVudHMubGlzdCxudCx0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXJlY3Rpb249PT1Kbj8idmVydGljYWwiOiIiKX1mdW5jdGlvbiBzKG4pe2kuZ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4uaW5kZXgpfWZ1bmN0aW9uIGwobix0KXtiKFl0LFR0KHQpKSYmKHMobiksRih0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpfXJldHVybntzZXR1cDpSKG4uTWVkaWEuc2V0LHtzbGlkZUZvY3VzOmVuKG8pPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyOm99LCEwKSxtb3VudDplLGRlc3Ryb3k6YyxyZW1vdW50OmZ1bmN0aW9uKCl7YygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxlKCl9fX0sV2hlZWw6ZnVuY3Rpb24oZSxjLGYpe3ZhciBuPVEoZSkuYmluZCxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0wO2Z1bmN0aW9uIHQobil7dmFyIHQsaSxyLG8sdTtuLmNhbmNlbGFibGUmJih0PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodT1uLmRlbHRhWSk8MCxpPW1uKG4pLHI9Zi53aGVlbE1pblRocmVzaG9sZHx8MCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbz1mLndoZWVsU2xlZXB8fDAsVSh1KT5yJiZvPGktYSYmKGUuZ28odD8iPCI6Ij4iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksYT1pKSx1PXQsZi5yZWxlYXNlV2hlZWwmJiFlLnN0YXRlLmlzKEcpJiYtMT09PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjLkNvbnRyb2xsZXIuZ2V0QWRqYWNlbnQodSl8fEYobikpfXJldHVybnttb3VudDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24oKXtmLndoZWVsJiZuKGMuRWxlbWVudHMudHJhY2ssIndoZWVsIix0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxqdCl9fX0sTGl2ZTpmdW5jdGlvbihuLHQsaSl7dmFyIHI9UShuKS5vbixvPXQuRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnRzLnRyYWNrLHU9aS5saXZlJiYhaS5pc05hdmlnYXRpb24sZT1qKCJzcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsd3QpLGM9cW4oOTAsUihmLCExKSk7ZnVuY3Rpb24gZihuKXtJKG8scnQsbiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24/KEwobyxlKSxjLnN0YXJ0KCkpOihUKGUpLGMuY2FuY2VsKCkpfWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhKG4pe3UmJkkobyxpdCxuPyJvZmYiOiJwb2xpdGUiKX1yZXR1cm57bW91bnQ6ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKCl7dSYmKGEoIXQuQXV0b3BsYXkuaXNQYXVzZWQoKSksSShvLG90LCEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksZS50ZXh0Q29udGVudD0iXHhlMlx4ODBceGE2IixyKEZuLFIoYSwhMCkpLHIoWG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFIoYSwhMSkpLHIoW0RuLFZdLFIoZiwhMCkpKX0sZGlzYWJsZTphLGRlc3Ryb3k6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKCl7UChvLFtpdCxvdCxydF0pLFQoZSl9fX19KSxxdD17dHlwZToicycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIixyb2xlOiJyZWdpb24iLHNwZWVkOjQwMCxwZXJQYWdlOjEsY2xvbmVTdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVzOiEwLGFycm93czohMCxwYWdpbmF0aW9uOiEwLHBhZ2luYXRpb25LZXlib2FyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q6ITAsaW50ZXJ2YWw6NWUzLHBhdXNlT25Ib3ZlcjohMCxwYXVzZU9uRm9jdXM6IScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwLHJlc2V0UHJvZ3Jlc3M6ITAsZWFzaW5nOiJjdWJpYy1iZXppZXIoMC4yNSwgMSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDAuNSwgMSkiLGRyYWc6ITAsZGlyZWN0aW9uOiJsdHIiLHRyaW1TcGFjZTohMCxmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXNhYmxlTm9kZXM6ImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBpZnJhbWUiLGxpdmU6ITAsY2xhc3Nlczp7c2xpZGU6YXQsY2xvbmU6c3QsYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm93czpkdCxhcnJvdzp2dCxwcmV2Omh0LG5leHQ6cHQscGFnaW5hdGlvbjpndCxwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZTptdCxzcGlubmVyOmkrInNwaW5uZXIifSxpMThuOntwcmV2OiJQcmV2aW91cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGUiLG5leHQ6Ik5leHQgc2xpZGUiLGZpcnN0OiJHbyB0byBmaXJzdCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUiLGxhc3Q6IkdvIHRvIGxhc3Qgc2xpZGUiLHNsaWRlWDoiR28gdG8gc2xpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyVzIixwYWdlWDoiR28gdG8gcGFnZSAlcyIscGxheToiU3RhcnQgYXV0b3BsYXkiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZToiUGF1c2UgYXV0b3BsYXkiLGNhcm91c2VsOiJjYXJvdXNlbCIsc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiJzbGlkZSIsc2VsZWN0OiJTZWxlY3QgYSBzbGlkZSB0byBzaG93IixzbGlkZUxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlbDoiJXMgb2YgJXMifSxyZWR1Y2VkTW90aW9uOntzcGVlZDowLHJld2luZFNwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZDowLGF1dG9wbGF5OiJwYXVzZSJ9fTtmdW5jdGlvbiBCdChuLHQsaSl7dmFyIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXQuU2xpZGVzO2Z1bmN0aW9uIG8oKXtyLmZvckVhY2goZnVuY3Rpb24obil7bi5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoLSIrMTAwKm4uaW5kZXgrIiUpIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfSl9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7UShuKS5vbihbQixKXSxvKX0sc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0OmZ1bmN0aW9uKG4sdCl7ci5zdHlsZSgidHJhbnNpdGlvbiIsIm9wYWNpdHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIraS5zcGVlZCsibXMgIitpLmVhc2luZykscCh0KX0sY2FuY2VsOm9ufX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gSHQodSxuLGUpe3ZhciBjLGY9bi5Nb3ZlLGE9bi5Db250cm9sbGVyLHM9bi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2Nyb2xsLHQ9bi5FbGVtZW50cy5saXN0LGw9UihfLHQsInRyYW5zaXRpb24iKTtmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaSgpe2woIiIpLHMuY2FuY2VsKCl9cmV0dXJue21vdW50OmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpe1EodSkuYmluZCh0LCJ0cmFuc2l0aW9uZW5kIixmdW5jdGlvbihuKXtuLnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQ9PT10JiZjJiYoaSgpLGMoKSl9KX0sc3RhcnQ6ZnVuY3Rpb24obix0KXt2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGk9Zi50b1Bvc2l0aW9uKG4sITApLHI9Zi5nZXRQb3NpdGlvbigpLG89ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKG4pe3ZhciB0PWUucmV3aW5kU3BlZWQ7aWYodS5pcyhNdCkmJnQpe3ZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaT1hLmdldEluZGV4KCEwKSxyPWEuZ2V0RW5kKCk7aWYoMD09PWkmJnI8PW58fHI8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1pJiYwPT09bilyZXR1cm4gdH1yZXR1cm4gZS5zcGVlZH0obik7MTw9VShpLXIpJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmMTw9bz9lLnVzZVNjcm9sbD9zLnNjcm9sbChpLG8sITEsdCk6KGwoInRyYW5zZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm0gIitvKyJtcyAiK2UuZWFzaW5nKSxmLnRyYW5zbGF0ZShpLCEwKSxjPXQpOihmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5qdW1wKG4pLHQoKSl9LGNhbmNlbDppfX10PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobix0KXt0aGlzLmV2ZW50PVEoKSx0aGlzLkNvbXBvbmVudHM9e30sdGhpcy5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGU9cygxKSx0aGlzLnNwbGlkZXM9W10sdGhpcy5uPXt9LHRoaXMudD17fTtuPUMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pP3BuKGRvY3VtZW50LG4pOm47Ym4obixuKyIgaXMgaW52YWxpZC4iKSx0PWQoeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYWJlbDp6KHRoaXMucm9vdD1uLG5uKXx8IiIsbGFiZWxsZWRieTp6KG4sWm4pfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiJ9LHF0LGkuZGVmYXVsdHMsdHx8e30pO3RyeXtkKHQsSlNPTi5wYXJzZSh6KG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YpKSl9Y2F0Y2gobil7Ym4oITEsIkludmFsaWQgSlNPTiIpfXRoaXMubj1PYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmNyZWF0ZShkKHt9LHQpKX12YXIgbj1pLnByb3RvdHlwZTtyZXR1cm4gbi5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ9ZnVuY3Rpb24obix0KXt2YXIgaT10aGlzLHI9dGhpcy5zdGF0ZSxvPXRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHM7cmV0dXJuIGJuKHIuaXMoWzEsN10pLCJBbHJlYWR5IG1vdW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkISIpLHIuc2V0KDEpLHRoaXMuaT1vLHRoaXMucj10fHx0aGlzLnJ8fCh0aGlzLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyhJdCk/QnQ6SHQpLHRoaXMudD1ufHx0aGlzLnQsdyhhbih7fSxVdCx0aGlzLnQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tUcmFuc2l0aW9uOnRoaXMucn0pLGZ1bmN0aW9uKG4sdCl7bj1uKGksbyxpLm4pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicob1t0XT1uKS5zZXR1cCYmbi5zZXR1cCgpfSksdyhvLGZ1bmN0aW9uKG4pe24ubW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50JiZuLm1vdW50KCl9KSx0aGlzLmVtaXQoQiksTSh0aGlzLnJvb3QsImlzLWluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aWFsaXplZCIpLHIuc2V0KDMpLHRoaXMuZW1pdCgicmVhZHkiKSx0aGlzfSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzeW5jPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLnNwbGlkZXMucHVzaCh7c3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTpufSksbi5zcGxpZGVzLnB1c2goe3NwbGlkZTp0aGlzLGlzUGFyZW50OiEwfSksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuc3RhdGUuaXMoMykmJih0aGlzLmkuU3luYy5yZW1vdW50KCksbi5Db21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cy5TeW5jLnJlbW91bnQoKSksdGhpc30sbi5nbz1mdW5jdGlvbihuKXtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHRoaXMuaS5Db250cm9sbGVyLmdvKG4pLHRoaXN9LG4ub249ZnVuY3Rpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sdCl7cmV0dXJuIHRoaXMuZXZlbnQub24obix0KSx0aGlzfSxuLm9mZj1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24obil7cmV0dXJuIHRoaXMuZXZlbnQub2ZmKG4pLHRoaXN9LG4uZW1pdD1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24obil7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5ldmVudCkuZW1pdC5hcHBseSh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxbbl0uY29uY2F0KG8oYXJndW1lbnRzLDEpKSksdGhpc30sbi5hZGQ9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4sdCl7cmV0dXJuIHRoaXMuaS5TbGlkZXMuYWRkKG4sdCksdGhpc30sbi5yZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLmkuU2xpZGVzLnJlbW92ZShuKSx0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpc30sbi5pcz1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5uLnR5cGU9PT1ufSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWZyZXNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdChKKSx0aGlzfSxuLmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0cm95PWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PSEwKTt2YXIgbj10aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5ldmVudCxpPXRoaXMuc3RhdGU7cmV0dXJuIGkuaXMoMSk/USh0aGlzKS5vbigicicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYWR5Iix0aGlzLmRlc3Ryb3kuYmluZCh0aGlzLHQpKToodyh0aGlzLmksZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKG4pe24uZGVzdHJveSYmbi5kZXN0cm95KHQpfSwhMCksbi5lbWl0KGEpLG4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3koKSx0JiZEKHRoaXMuc3BsaWRlcyksaS5zZXQoNykpLHRoaXN9LEp0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpLFt7a2V5OiJvcHRpb25zIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ufSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0OmZ1bmN0aW9uKG4pe3RoaXMuaS5NZWRpYS5zZXQobiwhMCwhMCl9fSx7a2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzoibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pLlNsaWRlcy5nZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0TGVuZ3RoKCEwKX19LHtrZXk6ImluZGV4IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuaS5Db250cm9sbGVyLmdldEluZGV4KCl9fV0pLGl9KCk7cmV0dXJuIHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZmF1bHRzPXt9LHQuU1RBVEVTPXIsdH0sIm9iamVjdCI9PXR5cGVvZiBleHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6KG49InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fHNlbGYpLlNwbGlkZT10KCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pbi5qcy5tYXBcbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUubWluLmpzJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogMzI6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ0g0c0lBQUFBQUFBQUNvMTkrM0xidU5Mbi8rY3BaTzRaSFRDQ2FHbHU1L3NvTTZva2RpYVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VNY081bEp4dXRLMFJJbE1hWkFEUWxKZGl4VjdkUHNnKzJUN0s4YjRFMldaN2RxSmdKQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFTVNsMGYzckMrREpVbzEwbktwV0pwVFU3c01remNRcXpGcHgwQnZFUjlwTElqWFZzMEhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJzZiZ1BWSjRGK2lxK0htUmVwSmJ6S0F0dmtpaW9aemFiZzc3TXZGR3FKdkYwYVo0ZjlLU3onCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3BObDVNVDRUcnN0TW0rZHhkbytjK1g1emRkb3BMMXhOSWxWOUQ1TEYxR203OUdkekx1TicKICAgICAgICAgICAgICAgICAgICAgICAgYic3bVhtYnJlVG9wZS9hdXFtak4wSDNXNmp5OTRpUzNXcTd4Y1JPaTlqTHNQVEo1dDB5dnFPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZDZzY0Ui8wdCs3Mkg0ZlBEdjdSZXRhNlhDVHhPUEsrNXBUNVBjcHkrbTdMYi8zbzliMGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncWV3MEhrVXFqNmpzN08wSEtubVZMdTZ6ZURyVGZ1djczdmZmdDk2RitFZytpMXV2bDEveCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDVlE1L0FkTkhybytVSUdleGJuVVFURW00VDQ0U3pTWDZ5d2VhV2RBRlZlQkl4WlpOTUhYJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3UxazBYbzZpY1hlZVVtMi9aZkt1STM4SmZwU1pDbjZTV2ZEdzZ1TGt4WWVUWTc4dno4NC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndnFQVTkvTHQ4ZW1KL3dNS2ZuLzc3aGYvRjNuNTZ1TDg5SlRTbVpMSEZ5OSsrWVhTUDh2aicKICAgICAgICAgICAgICAgICAgICAgICAgYidrOHNQRitlZjhjNi90NE55cG8rRmNoK1VYZitnVnkxQldxeEFGdWxscGxvdnNpeThyOWJCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3l4UE1qemNLazhSV3JGNjlvRGJ0YThxN2lkWFlDeGVMaEJibVNpMlQ1SnJvWmhScWtZb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbTRLa2xNNWwzM1ZyVGZCOGJXbU9Ga0VlNlEveFBFcVh1dXIyclBhSkxQcHJHZVg2aFlybicKICAgICAgICAgICAgICAgICAgICAgICAgYidJVDE4bllYekNNK3IxcGFHNkcxOTZuNDZhZWtnQ0ZTdGpxcWFQQmdoM1c0dmhaTXlnVGtTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JWRm5vc0JNUTV6enI3d0xMc1JTT2tVamppdGZtUkphWlRWRlBsS21ZS2tNa1k0ZHR4ckYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncUQ1Um1KaG1qK2IwVkdmM1pZMVdySElkcWhGNmp5MlJybFdVSGFjam5qL2FBdUV5MGIvSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwWHF6V1dQSzA3WHJ2Zmx3ZG5xU1JGUmhpL2tlMVdZTmU2SDYwbjJ0SHpSelErVmZxZXZxJwogICAgICAgICAgICAgICAgICAgICAgICBiJytkVE1IMVh6d0RsT1FyU2thL043VTUvZmJ2OUllZWhBZEhjK2FkUzZiYXdDOXZReW41V0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY1krcXJxeU4vb1hRVWxrT1FOOHY5eEhSYTd1dHZWRVM1dmxwbklOUkRaMXdQSFo4SjR2bScKICAgICAgICAgICAgICAgICAgICAgICAgYic2U3B5cm1ueGF4OCtNeDkrZ1o5WCtNeFFlemsydnhaT3kzRjlMY0dicXJxbnB1NlV2azZkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k5VDQxU3hPeGt6R2FMZFc5Wng1ME1OdTU0aE9kQ0RpelFhenRRZ3pUUDY3ZEJ3Tk5IVWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS3dnVzlUTENMRWI4ZXIyZkk5V1lvVGtUSVZaNm5wL1I0a1g1WlpTQUd0TU1UWHR6VStTVycKICAgICAgICAgICAgICAgICAgICAgICAgYidXN0RXMEtWcFJ3VnFpRzNzaldnQTZJZnJYNEdsMjAwd1ZONGtUblNVaVhybjdWUGJrNjNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJzExWmswdXllSHByUFhQV3VmV29yeTdXbE5aNHczaThuZ2VYUTRQQjVSZmRyekc0c0ZhK3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVU1NVExJcVhSU3V3d1VpNFBtVXJPcXYzenZueWhSblFseS9PQWJaS3V4MExEVUtWemVVTycKICAgICAgICAgICAgICAgICAgICAgICAgYidsY2pLWGpaWnpPTldzWUJyRWRjV2tFZDRwYStER1ArZ1dWZG1WZE5qRWY5L3Q2eW9aYlhUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ011OHVhamxRaG9OaXZNeDVUT0ZZUEd3bDhwUXhSVDRLc0hEbUZlNU9YSFVuVjBTbVRJS2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRFUxYmd4REhvQllkdFdpRzZ0UHpmZy9aTXNYSGpiZVpYTTJHZXFIQnpXNldPakw3cXRiVycKICAgICAgICAgICAgICAgICAgICAgICAgYidXN3lrSWJvZmx0VEdrTmExT1Y1VGdWN3pkejh3d2lwdE5vNERwcGNOMzNOMTBCR1lmZlU1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xTK1pqNkptNDdOZkM5bWtnbkhCQUVkWkZPcklVaURhTHdrZEpNYTcvc3gvNi9KWENEK2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3FLL09yLzVVclFaVDBSRWRPSGFCcWFSZnBYT0YralArRkxmSnpRSldJekJDRlUyRyt5dScKICAgICAgICAgICAgICAgICAgICAgICAgYiduQXBwZVJ5blU1ZUNpWjBDYXRnWngyQTU0YjNUMktaanc4eDR6Q2haUmUxMkxTTmMydVlUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pDOFhEd3ZhSGtwZmpySTBTZnlEWG4wMnZ1M3cxV2xqQ21zVlY4ME5yT2h6SlJjbG1heEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOEtmR0srOGFvaHd0djB3aHliQWtyNUlZL2JuQTNoYTE2aCtFZXN3UStUc1ZJMnptTElreCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5OWhoMjdNNlJ3THpFU3BhdDQ3UHo5Nkg0Qk1aODlZOGVwMmxjMHNrbUdZZDNlbkRtWjRuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2p1dmRwT1A3V211dkxVLzA3RlFlRzRFcFhNbE1DTXVZTGdoQmh0UFF3RFZweXQ3TzU5RTQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQm1rMUh0WWFYdXlaVlFDUzdMN2cxbzBKbmU0eVVXTFFqZW92d003QkFNR3JxN2MrVlJJTScKICAgICAgICAgICAgICAgICAgICAgICAgYic4cXBmYTIrdUdpdWtBWlF1ZFRoZlZEWCtxRlY0WllTN0dxcU9zN2lEeEhTWVRkK3J3TWtaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0R6dHlFampqVUlkZHAzT3ZLbzU5WTd1TnpYR2dYRDNMMG5XTGx1TWt5ekJBNTRwcWQ1enInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHRNUm1qYTFhL0RTNXdDU2ErYk5ZeVhYeXFiRE8zbG4wNU1rVFRONWEzT2pLRTdrUjVNTycKICAgICAgICAgICAgICAgICAgICAgICAgYidiMnJpNGxMdFlOR1BRblcxZTFUamhDZTJDdkVpK25BYWZDWVpnOFVOMW9wVEJUL0lodWtSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JkR1I5dE9qZ0ZPQnJocjZxL2lVMFlLZWF1V3pRRUZHTEtTK3VLZTF4UkM5SStWMmhUcXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbzR0enk3QUwxckt6VTNSQUxCZU1BbkxCK1M1M0pGZ0s3UWxaNitDTHhvSWY5WHREcDRkYScKICAgICAgICAgICAgICAgICAgICAgICAgYidQbFhsT2YraWdvY2F3UDlHU0pyS1J3R2tmMWtja3hTZzJkcVZBd3kzbXB4YTFmRFNYam1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dyS0tCM3liMFNBQkMvQlAvOXBJREhkcmV2eEFNTXF2eXdpNWxCSG9pcE9OOG5JTkNOeWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMEpZbE5oVUI5SkorcVdRS3NhRXMrMmc4dGxETk51MFhkWFlmTDlGUk5MRGJ1Q2hmdzVPeScKICAgICAgICAgICAgICAgICAgICAgICAgYidjT25LRVFOV2NXWG9iQ2xUSGhxazllTWhwWThHWkVsekZJeWVSbDBIQjRKbURjZ0dXNGltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RpbENrVmZmVXdxZ0x3V3hYdjFBbVpSRno5V1AxMkJUeEE2NEp5UmpDQlQ2ZTZmUlVtNmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncStBelJoRjZ0UVNmbS9Na0RMT0Fkbld0QkQxL3VGbmVRSDNPSVhia09JS01TUHdZOGx4aycKICAgICAgICAgICAgICAgICAgICAgICAgYidqNFF2ditEVTNnWWZBT1NOZGJOQnRIUFFwMjJsdktMUDVsRkdZQXZmZ1BhVTNsZkR3THp0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0p6dWVBR3lQWXpGeXQxdW0vcGVCTTRlSWdyQjI1QnRLUXgrUXg4cWtVSGFHNUFqQTY5YVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNzVFTVdkUTY4aTNTc1NweUY4aXQ0anpHcUIzNUNwbFpQQjVIeXBHL0J0QXhKbG1Venh6NScKICAgICAgICAgICAgICAgICAgICAgICAgYidXK0FzRjJDVjFPcFhSUS95K0J2cXZ5dlRlUENCT0NzTGJVZitYaVRwUVFnMmE4WUpEUitWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZMaUtqWER4eS82L3BnNHVJWU9BSEh3REh6NDFpc0psamcvK2diSWsvSGFmcE9IWXAzL28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInM2MvMFlRenlJLzNPbkdyai82ZlFVV0pvQjhwaldlamRMSE4vWnpFTHpSTGE5SlFoRmRZbScKICAgICAgICAgICAgICAgICAgICAgICAgYidJR1l5cUFzNjh6cVdJNVNaWndma1NrTGdSRGE1SDBzTWFBZGNtdzBZUzFZbnY2YXhZc2JTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1pJUldMOVFTY01zelJBZkJaVk1RalV6dzZXVGlYNGpNTTF1UUNDcWF4OXB2N0t5U3dnancnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneVIyRHc3WU9OLzVTUnVNc1JRanhnZUFZVStHcGRDMUhRUSt5RWFRYkJyMXFObk5oWk9LRScKICAgICAgICAgICAgICAgICAgICAgICAgYidmMGFCSG40V0F0Q3RtN3FIR3Avdys0UTJZOUNuN0I4RkkwSWFtTWcwaUdnNjIrMU9KM3dlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1pDWFVUREM3eTJBbThyb3RESVVQOU9HNkZnTEEzVzZQeUJTUTdKZzl3S2hRV1N3RDlMZGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJrT3MrYThRRjhZRngyQmtCcU9ubW0veDYvMnBlMkJ6S0oxZzdPNUQ2YmZOQk4yVUZ2SicKICAgICAgICAgICAgICAgICAgICAgICAgYidOT2duMG5UR0gwdmdWNzhwMDlSV3h2bDdxdGRvckFCMjI5cFk4MHFCVm9PaTgvc2I5Qjh6JwogICAgICAgICAgICAgICAgICAgICAgICBiJzBOYU5JSm9pa1d5WUFXai9CUURLMnBFdklhSTZ6bWswMFdBTG5MNGdReDd3T0tVL0xoekonCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGNmcG1uWTUzdFA2eHBGSjhMQ094M3JtWHptemlPdGZ5d1J0SUk4dENQR2MyVUpqRmJ4eScKICAgICAgICAgICAgICAgICAgICAgICAgYidibElOUG9jSFZBdmxkeWk3eCs4bi9IN0c3MmY4ZnNJdjkrcVVXOUxvankyNE1LMG85UFo2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3l3YkNQOEZLVW1KQy8wU1B3aHUycWpneUJnL0lZa0EwK1pzSzRvNUR5QjNWZ0JkK04vbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUnZEYWtmL2hiTTdBa3BpQzRud1Mza1JnUjM5V0dYQ2tHekNYZjNKSndldVVwbHlhRWM1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidBc05rY1JIMUNGdDlsTVVMVXh4emNjS3NNK00wdGo3YVN6a2RZa2Jpa1NPWE9yajZVLzZUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RTRXl4NDZwKytneGVvVys0T1A0SXI1d2plRVJsb1NPTHlPTnBCeHhNem9MaVdsUDdMZHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInREMva2RHNXdhNjZEVUhlY2JuZVVwQXI1eE9TL2ZMRjZEV0NESEpzTzBWeGpzbFpWenBFeicKICAgICAgICAgICAgICAgICAgICAgICAgYidIYXo0ZFZJUEhMa29zZ29haFNPblhCWHdIekxDakhtdWd5azNqMEo4N2Q1VXlOSXBXSC91JwogICAgICAgICAgICAgICAgICAgICAgICBiJzBJT2JFRis4TVgxUHAxTmF4YlhwTU1vMXladThXd2ljTzgxWjgrMWJrekZmdmpTWlVocWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbUR5eGVUSXd5bE9UWnpXeEc2Tmo1NllBMGk0RHZNYklYbURldFVKRCtBcmFSZ3Q0Q2RXdScKICAgICAgICAgICAgICAgICAgICAgICAgYidtY0srb0xwT2w2TVo4NGdXWkErMktlK0NiOFVUa3B6bWdaV214WU5JalZ1Y01KdmYxRmt1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1drYStjdk5ucUdzWDZEMlN3UHZZTm0rUm1rQk0xYVRTaFJhcHpBaXltZjBmWVQvK1I2VFEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMVFFdFU5QUFmb2k1ZzBNWml6TFljT3FSWG83RkptNmVJNXVscWNhZVRiMlVDVE9YNHlEeCcKICAgICAgICAgICAgICAgICAgICAgICAgYic0dnhkS1ZybENnVkdhSityTXd4R3pxaEcvNytVWENCUnJhK2NJc3Y5ZmswVEsrZEI2QjNIJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1djU2RCWjdNMHdRdjN3ZmZqSzMzSGl2anlodk9LakNnZGREdEgyRytBMml0cU9BNW5VVFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInekw2M0ZwRXJkTldvWFRuVW9zVmVTQTBOdVJxbGQya3FzNFlQdEZTSzRxRXl2ZlhpTWVsMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidOYkU2ZU10OWt0QThacWJPSnluV1ErMW5iZ2NTVU5KamJFTmxVbi9LNlJDYkYweE1rWExvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ltbTcvUjdsdW1sZGRCOGlzamZWeWs2S0lSSGlIRVNFVGpFNDVsZFN4TUVwTkdiQTFoVk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDJhcjVndE9rY3ltNzRJTGpDRlJXSE9VSXhFUDN5di9MVHJ0RWdIVVpBWmtMRnJOeFZ0ZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5a3cwUFRDVCtVNkVuclgvNUI2ekMxTGMzcEZJaklPNU1EeVpyTDBBTXNnYTNrMzVZaHJ2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ01QTlg4YlY3Rk53Q0MxQ3EzYjZqVkdiTEZLVzJaRElJRGlBQnhjRXBHV25Xa0tNZXRnK0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXJwMjlZdk0xRFdLYVZ4Z2FrWWR4aWluTlBqRUdIU0kvNUgxSXpjUC95bjFzTnN2SnB4ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidOQ1hvYTF6TTI2VXU1dTJTZFZLYXBndmx2N0xUQklGZUFEakRWZXhVNFBVbGxnUGNzRWs5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RuVmNORHJHR0ExdHVKTGFCNS9JeUJYUjdadjhyYzBUd2RRdDVSVVZjMU1sTlFhc3JTUWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYytKTFRNd3lCMVpFcVdhcGZCNDhjSDAvay96UnQ1elJKdU12WmNtdy9UdkkrVmZVaUwrVycKICAgICAgICAgICAgICAgICAgICAgICAgYidqSXJyK0dHTlVTMUI4RUdPZjhDcURadnBRRC9PMEZGTHpvc2h5YzFGcUNEeGZHZWFwY3VGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1k1NXBMV2ZGb08wZXVkbHNxbTF5U29KUlhxRXRySzV4ajEyN21PZ0o3V2lyUVZ5SUVSUUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbm44dXZvM3VEZStrQjUvdHdvaXJZd1VZTG4rL2xpZVUvVVZKRU9hS0FOUWJlZW51MVhmWScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYW9LUUEyQys0VG1YMmhYMG1aY2F0Tmp5M2prZlgwQW9DSG9wTXppL0JQSk5SN3BnMThFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lQZHVzOEU3aEpVd3lYL0VlaFkvQXVyRmNwSzVCYW9adGpUbS9DRHhEREJzdHc5NEw3N1gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWkZMNmpIZUtlZW9xMXlXanlyYWdpSE5lOTFjNm1HQ2RZaWczMlNwTWpJRDRxb09IUlpqbicKICAgICAgICAgICAgICAgICAgICAgICAgYidJRmdmMkhNVUx2QkdSQlpPZnZ3T2p5OFg0U2lDTlBYQno2VEJTRytVWlBUMEVqTzdBT2tRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J2TlZ6ZXJ4UWRldEpFRmg5MkpQOHp1eWlFT3Y1azc5QWxsVUxCdC84YlhwSlNsVVVMZDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOEpwZ1FKNk5BRU9oYXFIMmxkT2hzbXZaUXVvVHBjeUxueUZucVlmT0NRM1FNZUwxb3k0OCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkFhbzIrUmVDaGRHRDU1L09RWkdSZXJpYzlJU1RIN2FobGtocXVBMjZUZURaU3kyd1c0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VnYlBlTmhDTTRHOE15N2pNL1lZYzJuTUdwcHNtbm9tMWdnYlYvUlVjNWFZdGRZQis1TzQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTndLeUtqWkttZ2FwejBKRkNDZHZXRUN1M1cxREJ6S01ZRW4wOEcrWE96d3V4Q1U2TmJKZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGWHNKakcwMVYvM3J3cVUxMU9SU2VpQU5ELzhNY2tVNElCRXhzVms3Z21HcGJBcWczL21DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hCM0pQYmtTeWlxdXI0WUNtaG14ZTQrWkIyU1FUK3l3MXJkMk8vT3NRbCtmbE1LbC9UQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS2xGc0lSNEx1NDdnbnU4TEovajVoTHFHQ2lRTmVQQjlNUDZNa1lyNERRdTVyWFNZNWFLKycKICAgICAgICAgICAgICAgICAgICAgICAgYid3WTBDN3N4alpUck5OdWIva0JsNHdONndQTTMwL3RtS2h4M1Y3V2kvbzdzZHRkMXZqd3VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1c4d1JUZ2RDZ3IvaU8vUHd6bkZCeTBhamNUcHNBbllkc3ArRUlwSXJWMkloYTl4SW1qVnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkZrMUlsbTV4WHF4RDQ5bUtuSjlXaXg1SWlKeTVyTXFtR3kzc2tST2o2eGtkbm9zb05wdicKICAgICAgICAgICAgICAgICAgICAgICAgYid1SUlLcEJQeTl3RkhRTXJWVmc5enJZY3g1dTlYTmV6NUVKZjlndUVrR0g2N1RmOUNZcE1iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BiQ3FIdkxvTndRRk5nd0FEbmQ5ZnlyQWE1NU9UOU4xbEwwS3lTTnBHeWthN3gyUjh4VDcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW9NWTdibW8rM0d4S09wMkNyOWVuM3luWktSZ0JXcWZ0cXFlQ1I1YTBDREpZUjhqSVFWVycKICAgICAgICAgICAgICAgICAgICAgICAgYidGbGhtLzdSSVk1OGdjdzcyZTBRZ2VZSWZpNDJWQWNONUVCdDRDMDBXU3d1MkFBaU1mMllOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JyRWdiVHk0SitOdFo2VEpLakFoVGtUWkNiSTN5TFRicVhSZXRCaFZIWkwyMVlwTTcxcHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInM3BySDROOXE2a0d5M29xeHZBUUowTHVrZnZrcTFRTHBIR25RR3FDeGVERDZsei9Xc2dMYycKICAgICAgICAgICAgICAgICAgICAgICAgYicvaFE1YUQvK1RFdFNmUHlGbHNUeTc2RVNzdkxrMytqdHprb2w1SFF6dldZamVhaEVJaDlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJzNING91YWRBR05SWFB6WFlBdC9jRm1BeEJHalliQjZ2Q3BuUkNVTjhVU0Nld1B4c05qMEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneTF0eFQ3d0FVMG9hOElCYUNDaDZDVDhadDRZZDFiVnFha3FsYVZscTlOV0RieUtVZndKdycKICAgICAgICAgICAgICAgICAgICAgICAgYidPWmNucno2OFBYOUhWQjE2T3B5K0MrZFJ1NjBKKzZHR1pBRWZFa1RKdlZHWWtWcVZVRkdLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1oxQXlvN3hVeVYwNXJ6T3VhV1UvV2VvaXlxWlFVQWJIWWt4SUlxUzkvZ2tMUENNOGNRVksnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXBZTUxVS3BobVRGc0xoQ043Zzh2dlBRZkhjVjNJZ0lMODd3UzJSelpwNmVtYWMwQUVDUycKICAgICAgICAgICAgICAgICAgICAgICAgYicyR01MZzhuL1dlYlo0bEJyL2Q3b1BBc3lKS3E2aWJHNTVNRC9keFRRa0tRNTJGU3BBNVFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0pMcXEwRFkxQUZ2dVkzdkZuZ0xZL2dDT0RkQXlVdVNUZGdjdTJJbDFSTnFkVm53MjNwSXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVdTRjBlSHRFTWhobGNialZzMEVkMU5SekJVdGNOZnB4QjdIcDVXNW1nRDB4bGtJWU0rUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLRGtOV1plUEc4cXBmYTdDRlJtamdpQWlEN3k2dGlLa1phamJDSkxGWXpROEVyL0tLU2tGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Y4b0YvZndtNXdSS0M1MUFmc0VHYkpYNHRFNzN5d29BRWNqblVVRHkxcEFZTlJSS2h6V1gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndVA0MmVTUkRzaVljSEN5TkM4SUtqeWxsakxwUnh6WnBvZDZUY3AvUlhtTGxQaXFVKzFHaCcKICAgICAgICAgICAgICAgICAgICAgICAgYiczRThDMWg4TER1Z2FTSjR6WTZPOUJNYldkR2E1RDVNOWtwQkl4bmlDdXYyR2E1bHNxanUrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hCbzRJb2RDWHZmVGw4R0l3UVhVYm1tQ1Z3YTZnQlhZcFF5TU5LV2VsdHcyS3FxcnpXKzknCiAgICAgICAgICAgICAgICAgICAgICAgIGInUDZ1NldCZ3U5am1IOExiUmhiYVFzalVudWZuRWlrQkRNUUgxMExlRnFEcVFGNzZuTzQ2QycKICAgICAgICAgICAgICAgICAgICAgICAgYicyaWVUT0ZLQ29uL01qRk5NQmhsVk5mbHFqTDVZdWZJZTBXQk1takVJTURFL2NZMGdra0luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FWWGZYUUJUUXpBaFpkR1VYRytaUDVZQVhQNksvbjJyR2owMmJJNk1RR3o5VEtJTVNGTkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR3JNK1NXSXhRM1lXNW16Q0VTNEU2OUtEbkg0ZlRxTmlwKytiYWZZbFc5TkZMT05PWm1oSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzdHE4Yjg0V0ZCSFN1OTdLY056d0E2WlB4SWFSaTJFd0YxWXI0U2dIbjIwaVVOSW5WK20xJwogICAgICAgICAgICAgICAgICAgICAgICBiJ096dzMwVENuekF3bGhhOHRUYUFHdEhlcnNtTHJZTGdYQUc1ZldTaE55WHZoeEhPS09SUTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0tPS1ViRGJQb1E0SWc1SFJzUldSQjc4eHA3dWRxRzl4N3dPcmg5VHJJTXJJL0VycndwWicKICAgICAgICAgICAgICAgICAgICAgICAgYidBQnR6OEVIUThCK1pyMHFTNSs1dTNhSUYyeGQvSmcwcGdwWHQ2S2pXVTdwTEhGekxQclNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Njb2ozTE1pZ0tNVEgwekRUQUhwdHljcVhVNW5lN3dQdWEzMHZDUU5RbDZuNFgyNjFQVSsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVYzY0pVS3dNSXBUWStOa1dMQ3QwREF5NGxPRy9ZRlRxVDJtdzRRWW5Lb3hPSVpyWTJLLycKICAgICAgICAgICAgICAgICAgICAgICAgYidCQ0FnV3kyam02Rkpwank1UUlwbm9lSjdVd1p1TlZIRFdGaCtnYVFndVA4SFlWMG9yU0wyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dQWmlGYjRBbitYQ1dZQlVnZGpZSCtMS2UzSFFmL1RNK0VmNFljOGxtTkVJazV4WE8vQ2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU056QkFjUlhhcjVDZGg2VG9pTGpOK0V5azl4c0JIMm9jS2pVQ2MrNmJKd0JCWTlUeEFtQScKICAgICAgICAgICAgICAgICAgICAgICAgYidoVnZVYktWWnk2UXVTRnp1NEU3eTZvYkpTTEJhMCtxMm5BNFBxa29Ed1JFQUxaSEZGblF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Z3TGpuWWNaVUdneFhKcXNhYmpnaDg3YVRHRHNrY3VWWjNOSVNydFBsU2J4WFRUbU12TEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWjBQSDhkZkNOZThWWXl2cnZlRUNVOUcwWmtwTWMzZ1BYQmF2a3JLYUJocmk5aDAyOVpKMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidubVZ3TGx4aitFdmtPZG5IOGRTcHJQdkxSdGowZmJVc2hHMTRJVEUzT1hhRXRYZjZ4Z3hhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Q0LzdReGlEaURCQmZEMGZaTDNaT0wzRm5WTUhQT1dlb1ZFVmEvbU85RUNlcG1kRklTOVAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclUvcmNtV0x1UzFDRVhqRlJML1grdzU2S2dqSWFYVmFoT1d4VW9la3VSWmJjclBCU3BvSycKICAgICAgICAgICAgICAgICAgICAgICAgYiczYUpDcld0M1ZkZW9PMWQ1c1hCdUxZTHF0dER1WmhRcjJhdVp6dDhWd3E3eFprZG96QVRaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JmMWUzZlJ0cEMzQlM4bHQxUm9TWklLdXQyVm0zQ1dQVnRFeE0vblhra3hxc1Z0OXBQR1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGIna3hvSHZSUUZLNGNZNmw1QzMremNpcDVVZXcyeE05R3JZMmNUSUFjdXI3SGxDb20rUy9HMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicxclZ2bjFlVHFhMmxuVXo5b016bm1PY25SWDlsKzUrUy9VbVlDSFJwQXlGYUpHa2NNaUJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lBa0xyRGdnZHp1K0RNN0tkckMrVytjRWhJeU54MWk0WkxoaTV4UkpKSklqVjcvSlg2OEonCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0ViaXF3TE1KYmxFWC9IbnJPMWRVdkxPYUh5Y3ZqWHBqRE1uMENkMW1IRDZrcVRJZTdOTCcKICAgICAgICAgICAgICAgICAgICAgICAgYic5Z3IyK3Z6VmVTT1I2OUI2a0gzalZYYnRSRUxZbk52TjZaOURsREJrcTRIZ0VTVFlwQUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dXVElpSmhYUm1Ja3hKNHRCQUpyN2xhQ3BFanVreUIxQkx3MHpoRUYyQVVkVDlFY2ZWWFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncEk1cFVJVmJCTVdCZndUc0FCQnVFWDRNV2JZc2ovOU1SR1RPQmcyS3NxTjA0TjZTMGRrZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic0TWUrMUUzQm5XeTZCNXl6endwVjdwTkFINlVZNmE2VlJSbjNBSGxCUk0wSFEyQm5Vb0lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzTFljMHhHUk1oSVkrczNQbDdTMHpYWitzSE5LOEE2aUlHZk1ya0VKTE43a1lDVWthWVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInV1NnUytzbTlBbUlTb08rbVpDanIrVkVENThhZUFRS2VvUytXZ00wb0RKcS9aVjBCUndFZycKICAgICAgICAgICAgICAgICAgICAgICAgYidVVUlhUk9KV0lUR2lnZldyN1FvbHdnU3lDMzBFdG5SQU1OQ2FEMyt0UjhKV095eVltRW5KJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l3a2JGVGI0aUxnM3RVVFFBamhTT0pXSUFzdWhiV1NIVTI0TnNBdThjYXNFdWM2TXg0emUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSzNqZ0lWbll1S1ZTL25GREkwc2JtODMzenlZRmszWjlIZlNrYm5LSVpha0FBRmZKc3daNCcKICAgICAgICAgICAgICAgICAgICAgICAgYid6T1NvTUhVYmIyK2xFRTRLaFRBc2JPQVVGZzNheGNoR2RoUnVOUXgyRWxkYm1TRlh1Y3V4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VReVU0c3c0c0lUQzNBQXdpMXNzZDVkYmJxOFo5WVJOZHdCZVhLbkNha3hLMHdLckRXcWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUNMVktuMEVLL055bWQrVGoxQ01QQk83N1JsZnVTQmdsVmxTazZQQ05WZW9RTHNpL1VhUScKICAgICAgICAgICAgICAgICAgICAgICAgYic1Q0VnOXZqUVRjbWxzZklBRkExR1ZpZ2NnOHhTQ2RQSHJXQU9ySjgzT29zSlBGRVVGQVJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdFRUI0TE1ud1pwUEM3Z0Y1eWZncEFncUxpUkZaS2djRzUvaVhUaWRvTzlPWnlXY1QyUm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQmhiVDFzUXNGUVUxdHRzVDhiRnhnbVpkWnhPcWUwcDZaaGFNYXpGbVhXeVM3SmtBaVg0VScKICAgICAgICAgICAgICAgICAgICAgICAgYidzWHRJSndZQVZaOUJiaG96YVFNRTNJZ1RZVUJVVkU1ekF3RlU1eDUxTUtxNVF3Vk5SdytmJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdoK0NuUVc5UVZvZGlVeUxJNUhMUUVNNXM0cGhGSHpFa2l6cFkxMWdBQW9CRTlFUmhYS3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbzJhUUJVU1Z5MjFwVWRvTElTalFTcENidFV2YWdIUkdFYnVPQXJaMXA4WlY3QTRGaHRGZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicydlUvL043dnhNK1FJMm5qVmpDTzBBZEJraFJFR2MvWlpVYXNCS3QrQnQ1QVVjMDlPUk5qJwogICAgICAgICAgICAgICAgICAgICAgICBiJzRtSGRoQUVIblNyWjQ4QVBWbUlISXI0VEN4Y0FzZnRPVE9tM014TXhLd3lOUTFNMXdLS0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZStuSzc4bURnMXIzbmdZVEVSYm5BeEZVek9ZekxhNWV5bmRLc3RnbmNiK2poRGJpdnVWeScKICAgICAgICAgICAgICAgICAgICAgICAgYidZSWxOUUc0ZUtZNW1Xek5oUUU3SmROZzdDcGIrOGloWVhHR2dKaDZ6NEd4bWhLdUtBZElXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHSEpHOXNDMm1QNklvL0pMd1RFMzFoYkVBak9RQlJkUnpHaCtJRXFIYXVpVmtZSFYxbDknCiAgICAgICAgICAgICAgICAgICAgICAgIGInL2JxY0wveDdXVzRiLzBibXMzaWkvWFVSU1hjbnJTVUQrRVduNzFNekdSYXpGTGtUMW9OaicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbm84bGRIZEtJckcwZGprbS9KV0J5d2VoaGlGcndlRytBNTZSdmFRNGVwb0prNk5GcWlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2czNVYvcHpMYTRSR0Fja0V1QlpGRitZRWNzclZyajZibXNCdWpqeVhFeG5LdkFqcHNVdysnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTHBoOEFnREN3VGdVcmxNYkhmWWo1M2s4SExwVHpRUDRzeUIvbzluRHJsZW8rR0RXTEFxTScKICAgICAgICAgICAgICAgICAgICAgICAgYidiUUJNT3ZKU3ZBMENsUE9nY0ZmTGU1TThJK2NHSU9rcHhWREx0VW1CZTl3RmRqa0puOTRHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q3V1RDQnlMdVdDdllvaGFrSDNjODl5a1NRN0tVZkNsREVuNVM5eGgzMDJISTMrQ1hjNlUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVVjMGhjMU9idlJpRWhzTW4zYmlDQlcvTVBRVlRoUTdqODhubWhVTXdmVGZzMlVySnc1MicKICAgICAgICAgICAgICAgICAgICAgICAgYidMdTdBRzdEL3lCV0dZY2dEZ1JydmFiY1Bpck9aWkExdnQrL2I3WU5MSllqYlozU2dBL0I3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NENjBrYStIc2Y5QzFNOHhuZThMSXlkSXdrMFBoYWhqTzBhaGFOMEVYcE1WdTg2UGVQeHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneFlPSjA1TnRZR1dZVzd2Tnh6aDZWU0JCWHg1RU50ekFIYmpxNkc3WTdTcS8wMUdEdWpoeScKICAgICAgICAgICAgICAgICAgICAgICAgYidDd3lGYVFXV3hrelFlaXFTWXFNak5WUTBUd2RvbXBRTmJUNUUyUkdkVEtQc2NENk1oNmcrJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdJckpkL2xtazd2K3hGZCs4V1YrTlBMWncvaE4wSUZwY0U0ekdENDZGRkNoSmczMVNKdXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWi9ZYW9QZU44NndWajV5RFczY203bmNURUpqZk9JTldTU2hndUM0dDdtWXpiN2REWHVMQicKICAgICAgICAgICAgICAgICAgICAgICAgYid0TjN1SGFsdWQrQmlsbGRpUXZQVDQ4QXFLeDBlVktjellBbFVTQjdEK1NjTldmbXQxcFcvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21JQ1VueitqZXFOYXJlTmFMYXBERVI0ajE3OVRRb3lPQWpWRW01QWhoM1ZEK1JuYjZpeVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInWStOZ0o5VVYxZmVsYm5rQWJoUlorYmJaUkEwL1NQMTBZWFhZOGxHQUZkWVF0TEVPWS8wNicKICAgICAgICAgICAgICAgICAgICAgICAgYid6U3BwOGFSUXVXVGpOT21Pa3JiVXRieWtQTVRLQ1ZrVDB5Y09UYnlsQmVqMmowRGtMd2hXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1A3SS8zdzJzTlNBYnNEa1hGZTNaWEhFb3Jqci9zM3YwL05vVi8zUGNjWWVIYU9xS2pBSFonCiAgICAgICAgICAgICAgICAgICAgICAgIGInVmY4YXpDMjcrdjVhT2gzYUpSVDUxdVhFVVBNMmJuVUVIU2ZzaUU3R2lFZmV1Yjd6dktpUicKICAgICAgICAgICAgICAgICAgICAgICAgYidEYi9oQVJtTnNPaStjK1NZWFkwTnNHWm1UVmg4amtVMWl6OHF3WnZtM2NJZ2NMUEplRE1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZVYklPL0ZveDlKdERQS1dBTjlXR3RtNFI4NHVDeWhyYXRnSGoreDRMMFJTR3VQSHpJUE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneExTZ29vWXdCTDkrUno3Zkc1WnQ1QVZlczdWOS9EVWtSQVRSWmpDRS80VkNDb3hRUERNZScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVXJ1c3pzUGIvMjdiU2xCdjVFRUJXLzJqNUU0aGtheTk1MGdxVHNQN29mRjdHR0h5c0tOJwogICAgICAgICAgICAgICAgICAgICAgICBiJzRMK1hCdFQ3YnlIM1hoaFBkazNtMWN4RFVFR052Q01GbTYzRXk4Skt2Q3kwRzExb3VwQWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXZEVVYyWmhWbGRxL2cyU2djWjd6b0dyeGxTOENGWWNya3J1Y3dpNXhDUC9PVVJjL1JEWScKICAgICAgICAgICAgICAgICAgICAgICAgYidUYmtxMmpZd09JQytDWDR5aHdoQkM1dk5WK0dNNDVValExdkJSYU9YTE9qbTlOc25BWFBRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s2ZEEvbGRUT2I5MkpWNDZSNDdNeXRRUUtDbFU0bDd5V1ZWL2F0ejQ4eTFJUzZHV0lnT3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbzBodEo0L0dnbkMrTnE1U1hZdm9rTVRISXdKOFFFMi95dC90WGowaG05SzhGbmQzSzdFYicKICAgICAgICAgICAgICAgICAgICAgICAgYidYQ3FkTmt1UHFKU3cybHZCM2FUZzFwa1hqOWxzYWlNUHlnTTJxT0N5U2VrM3VkNnhXQnJZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q2TmdMQnNSZVF1eUk4UkQ4VUdzaHZ3dGYwR1ROZy9Jb09YNjcyMEhsbnBYQ1JsNzA5UXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0laYVVGTGlUSWwvSFprbzNCYlRSK0Q4cTJQWHBlTzAyUG9VOG5yN0lhKzIyL21YdzlkYScKICAgICAgICAgICAgICAgICAgICAgICAgYidCRVh3N3ZPamZEVnQzYzBUaFpkbldpLzh3OFAxZXUydGY0QldPejM4dnRmckhhS0cwMXJGJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBmcGxlaGM0dlZhdjlTUDk1N1NNR2QraHBEWGZjN3FNWEtYbzdTU1A4SkZGcUdldE1YVlAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV01KNkg1SmR3Sm4zZi9KK2F2VzgvLzdoKys2UDNnOHQvUDlmcmY2UEtNTS9QM2VMMUU4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic4L0RIc3Zobnl0RXJYZlA3WTdkODhzM2hjUjQrLzlkVGdjZGd3cFlTc3pMNldBVmp6N0lWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0R0emxITEViVnZyb3NncndJYUNFM01OTWF6ODMreWpqQ081Mld4OWx3OXhjYm9CSHZMT20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWG5HQUlRQXdrUE1xQzcyWjRudzU3SUVJY0U2cHJFNTU1WUV4VUFiemlsSUpzaFh1cldmLycKICAgICAgICAgICAgICAgICAgICAgICAgYidwalNjM0pYUm5NUndpcU5mVDRZRW1ZQ2d2MkU1ZnlrUmUwVU1wZ1JZVG9zRGtiU2o5dHhrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tYZzNZVWEzVjN3aEQ2TjFpZlI3dldlcTQzem5tTkhWRDZueHNRUU95TWtweXNiYWNjSFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZEoydmlXVXRiOTFmSy9UU1JQdUF2UmszQ1RVSUR1ZVlvMjRRYzdPbTl5c25rS3dMVmI3UScKICAgICAgICAgICAgICAgICAgICAgICAgYidBcWhRaEZZbE80akpxTU5SZTN3NGcxd3NXYkNnazA3a1hwcUkxdzJiQkh1MjhQUUE0dDVFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZWQlV4UENnUnpLTFhzalpub1A5UjEzaUJqNnBwc0VHNzVPblo3TkpoM1BpblA1VU5BMDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbUZyMjZLd29CUDVnUWJTeU1zRXlKQUt1RmtPSFQvdjVkdGpYT3pZVE1wL3FaalMzY2djaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicyY2pJUzlMNVZscERYNUZkcUZydXAxWHVHZm9UbXlHZHF6ZmtYbXEzUitTbTR6TWRiSll3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h6dVNLS1F6SUEzNUdkUnFWVEVrMG9SU2xLMnkvTFN0MmxBU3cxTFNwVzQybUFabHJNbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXl0cVlGV3kvTm9JRmtQTXNtL2NsT3dsZUNNL0tMSVloSVVDZ2NJMzRQUFVCczMzYjZTRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzUWhsOFlBbG14cWVYd3RiQ0swZFNUSjFUKzFwdDNsMW5pMW43WGRWVjN3YnNZdTBHN0VUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0s2Sk42UWFSY3ZIMnVlYk5ycVBMVnJ3eUVwNUNHTTJLR2hlL3VVd216MFowU1ZGeHc4Yk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZlVkOGw0WDFtenMzR0NaRnZ5czZCVGI4bHpFMEhZNm81eTJWZHFHS1JxRnVMYk5FZ0pkeicKICAgICAgICAgICAgICAgICAgICAgICAgYid5MkMxN3I5OHh4eVlTTmdIUGpUeW04NHBQQjBENG8wTTlZaE0vS0hraGJHUmtab0ptYzRXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25BdkFKQWFwMVRSekVRVTl5c3RIb0hOVXhBeVJEVUViOWtaeEhtQnZoSm1zQlVIVnpNVGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS21DdGZHVlpmMkV6aUV6ZTJCTm15RFFzSm1Belk2ODB5TEI5MTlvSTVrRi9VTnZlVnRTVScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZHBvZDhYQ2hHMUZCekhqS3RhUFJWeWFxMnRXWi9JWkJIeFZ3TFA0MlIxWk5xRkcwV1VpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BSWldsWkZETk94b0Jya0s5UjNRZVdmcFN1anZFV1FJbElNQk9raHhpZVM2M1d6VzNHSTMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2cvNzNrL3l2M3BzcXNnZ0F2aUE2dzNtZnkwakRqTW5wMXNpTWtVODdRUCtuWlIrdGdhdicKICAgICAgICAgICAgICAgICAgICAgICAgYidTc2lNRlVJSlplYjMrNjc5dG43cHdvcFBDVU81RmJxcnlFeUxEN09kSmdySlUvOGFMMExaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hMTHM5N3Q4ejhNaVhZdCtWOHNmWFRveSsydytXSWdVbWcwQlNvcXBOcHg4L2l6d2ZwWWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2FZYzlYdnQ5ajBBNHN4RUpmemM0NlBrNFk1cG5MRGFwTjJlN0xFQ1orYlJ3YVRoWWJSVycKICAgICAgICAgICAgICAgICAgICAgICAgYidQdmZ2WXB2ZVFBZWoweHhNeEZtTmV1OEtWZW0rc04xbEZQU2NoVFduWWdUWlBDcm9tRzRZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lIdFlJc2R5eFZheHFEem9OaXVzWW9zaUZvNEkwWjV3bmh2RGxJN1lnc1UwZm9PRTJUUnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInM1F5R3Vxc0YwRmxWNFpiZW91aHRHNC9QYTRXeVBmNlB5OHIvY1JMY043YlJLZkxOblhNTycKICAgICAgICAgICAgICAgICAgICAgICAgYidZVnJ0a0srbHNqSGl3RWNveG1SaUNzSFZzNGlGZUUzSGY5Y01pMHBJTEkvWmwzRmhkanJZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Y1amg4K2pyeUZNcFRhdmtFRTRLMEp4RGhaQXRKRllrNkVobTBSUHlFaHhvT3A1dTBEQ2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVzVlK21PRnJBNzE5c1FyMDhNNjNudW84bU5lTUM5aWc3SlZlUUU1ODAvS0YvS3Bkemh4cicKICAgICAgICAgICAgICAgICAgICAgICAgYicrWVV6OTVVajU2WktmbVA5MnQyeCtwVERJNEEyNE8vOFROeGh6aEw3WjFmT29IdGhYS1M2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tOc1lJVXJRWlQ0VTl4VlRFcE1PV1dVT3hYbTdIUlcyL1ovSTRJUU9BOU1mbmZIeDUrQ2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSWtmTytkU2RGTXZOaHZ3KzFEVXd5b05lOGJXcHVhRHVOZHV6UG9waklES2tubk9LOTVPMScKICAgICAgICAgICAgICAgICAgICAgICAgYidxTVYyR2M5aTlXRkdKeVhTWkl6Rm9GdXFHRXFSWTVIbFB6RXdFQlJGdVBDcFVMOURUSzNmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3c5eCtaQXVaKzF4Y2tCRTY4MVA3WGJkdSsyckd4NWxab3QzUHMvUkRPVXRUdWtNUG5JZ1EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUzhNZ1U0VHZDYmRqdU90blpxM1B3RVluQkJmZVUwVC9adk16YzhSaC83RG5wd1Z6THZ5RCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcXA5RnQ2UnlTQm44OHRXNkYwaloyU055U0MxODBKbzAvU1RMNGdWQjZ4SEVaL01pMWE0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JsczlhazJSVE9TRE1lWXNWWkY2ZWM4VWZzc2FkemhjRjBhV21Fd1JYcTdDaGV0SDF1V0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncDFBa0w4VXBjVlQzcURmTWh0Qi9mYWZyK0VnOVI2cmoyTnBuUkFLZ21zeTh3elo5VXdVSycKICAgICAgICAgICAgICAgICAgICAgICAgYidzODlsNjBMQ3hNYUhkc3ZLUHkrVG5OcDlZRkswQ1FqZEgvUjNibjQ2d0VDU2R2djFybkw3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3pjUVphNDVhbkFTTms2UEhqUmpadDV6cnZoWHZ4YzdkT21kMSt5a3RRaGYvVXEzbTFXWlYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOUVyQVJtR2kvcnBGc2ZZeGNjR253anh6d21uOGdZODA1M3lkblh2bDhMbnVUaWIwMFBtTScKICAgICAgICAgICAgICAgICAgICAgICAgYidhZnJVaUNhcTNYQlp1OW54b0xoUmhadmlLMDNBaEdxM050WWVWRzI5WXBOQThMVGxjaUh1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FQTEJlUTBYdXFNRnFPVythUG11ekJUSStNTk9CRGMvbyszREl0NlJyMW1XQVpKZHk2L20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInN2hpK0l2VVZvTzJ4WlE3N3dpVXBPdkszNlA0bURiUHgwL0dSSEJxNVZ3bTFnb3dzWC9hQScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cDdveUVxVUpLVW9pZW5vSG45Mm9GaS9kNlpKZWhQeTZSazFORXpjRCtWSVpQSVhUVGFwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1pxREdoTXYzUm1Ha2c1UzRZaTErbFRRUTFiaUpqTFVTY0d4SVN6NVpTTWNDY3ZGU1VYZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGc1dklzVmxieFFycEZSSUJxb25GNVdrQmRtZHh1WW5NZHJKcWdZcnh1V2lOSFVqWlNKVScKICAgICAgICAgICAgICAgICAgICAgICAgYid2OTJmMG4wdjViTzRPamxJS0RrMjRjOHBPVUR4TTVsZ09iUlpoMUVCbXllQms5UGRxVXJIJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29UMkdsTmgyc1VKMGJQWDM2NTFJZTFvUUNvNlg2a2tWaHU2VXdyOVdYL2xEN3oraVp2cEonCiAgICAgICAgICAgICAgICAgICAgICAgIGInVjllOXBodjVPUFZKRzNlUU1wcE5YQ1RCL3hrUnBGVVE5Q0pXVUlzazYwbUVFUnJuT0JnYScKICAgICAgICAgICAgICAgICAgICAgICAgYidFR2YrS3B4OEVkTEZGV1NReWN2aml4a2RZSlRjOW1iRDkvUlp5eVRIUEVzeEdTNThzUlFoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FTMGhMZEhZZGNVT1JZazh5UGZkNVZTRXBWdDM0RE1oVWpJcFVRUmNLVTg2ZmJkYm5GVTcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb0p1ZXZPSUlMdHRteUd4RjNWL3hoWGh1R1cxRFBkbzVNMkR2U2dIVEdvQkJVa3RtMms5bycKICAgICAgICAgICAgICAgICAgICAgICAgYicvNUc5cGg3amZTRm1VdkdaZnp6QTJCM2dGVTN6WHhYeEtWY3EvVVNsNzgxai92MmtteHVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ZyaEJWMzFsQVgxOThLbGNlT3FCWXo1TWpqSlc0ckZ4SVNldXZyOW1qUklRamsvNy8yRXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInM1VIcUsvVU82SHhSbjJ3Nm5WYUVhYmZiSzRIVkowLzUzNEgxaW83eHhZU2RuSFFxb2FGeCcKICAgICAgICAgICAgICAgICAgICAgICAgYidIdk9KMWxrMHV2WEgyRkR2cTZOb1pVTUp0dFRZakhJbFo2eDhZcDh1ekxhYUZydG9YdXlyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyt5cm8rNlp1eEY4M2pmaDN3Ym84bFlCcFczdUZJd003bEFReG40SjVITzkzRzl6VUw2aTQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYkd6TEUydFMraUJ1aDZsWTFXNTg1ZU5hS3pxUWRTd3U2Y3dXRzZlbDNoZVp4bUVjRVRHdScKICAgICAgICAgICAgICAgICAgICAgICAgYid6bzRBUDYrdjk2VmRESFQrQTUyNEFnaDh3VHB0dDQra29Lc0NSdUNEcEppbDduQVpkRHJRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dYMVQvTElxRnQydUFrTEVJK2ROT28vTVBhRExvT2M3SjJyTU9ReG9HY1IwQzhIbDFmTGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSGFRb0dDdnNKd1ByaWNLcHIwdENLWHBIQlh4UkNhMXhiZDdLZWQxc3hwWGJZUWVGRnBFcycKICAgICAgICAgICAgICAgICAgICAgICAgYidWd1NKYU5PaThMcU9acXBvdkM4aU01cG96RW1YTFRQaWt5QURuZWtsM1hjaDZYclQvL0FkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0cwcitrdzRqOFNXazRveUNkdXIxM25JOWhsK21LdDJrQ014VnUzcW1zaUUvOE5uR2xZeDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTk0vOXk2MjVoZHZ1Q1Z1NGMxQ3NSYnVEdkNPTHVpZFVtWEFGc28xWDN5RWNld3M0cDhTdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicxSFhualNaRVlxeHJFQS9maW5lVGdpcGlORk40dFRLazJhdVZVdHMyUUdJWlFOc2Vyc3ZBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29FN2ZwL3MyRGxQeUVLNkNXK2JieThSaDAyRko4RGZXVnRmZzlIVDRjR3JkU0MrRWF3eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZjBxNjg0R1BYSmFXVlhBbHZnWEpGZ0RLQ3RjY0hIWldVYWJqVVppd1hhczhQUmdGdlVGMCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0QnhFUmZqWEtFQ3ZrdGd4NGNvcnVpc0xCZGJkQXJCRkkvYTV4NUVrWHVjWHo3WlEvQ0ZPJwogICAgICAgICAgICAgICAgICAgICAgICBiJzc4MCtoNnIvL3pnczQ4Vmp0cDBmM0pGbG9uK1VEak51OVpOdldldW53VnhNYWw2dlV4bGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNVBXMUt4QmF1ODAxYTlkU25IUGR0MkswNXlUcFc5UTFjMmN6dnlrWlZqZkptREp6bFV3dScKICAgICAgICAgICAgICAgICAgICAgICAgYidJM3Q3ek1UUXM3dzB3aFUwNlkra0diay9vUU8ra1I5QnFHTFA3SkJ4NllSN1JNWmZSRkxjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RiS3RPUGFKUFlEMXBmQ0hmQ056NGIwYU5TR1FMdjkrUWZQbW56VFE5UXQ5bGczMkdWVTcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWhDWFYvTHN2WEtRelVaRWdVQWtFL3FpclU1K2dDTE4vbk4yY0F0bG9KZ3dNVSt1T0ZNaycKICAgICAgICAgICAgICAgICAgICAgICAgYidkclQ0ck13cE9ZUEFRd3FuNXZrakQ2aUovLzJGM0FHMkszWEdObUkvNVA2K05ZOHdMbXR2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RjaXpUMzREc3A4T3FDOUFtN3NtNjR4Z2ExYkVFOGMrTzNIS2p0WHZqS0NMblNzSlp3SmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInNmZhdW5aTklPNXRyNTU2M21OMmdSYmgxRFdMeUt0Nkl6MXF5ZkNFakFMMUFYTjdkdVZJQicKICAgICAgICAgICAgICAgICAgICAgICAgYidpcGkxYUpIbDk2RmFZVCtpYXlQSTFMQmxkbXI0WUZTUzA0Z1BzejA2UkVzeWhRL2YvekdMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29xUnV2eHNWWWZ2R1hsY2N0Sy9kQmFnZjIzcDJyRG1hM0Y2MFRJa09QME5ocDN1SmxEbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1BIVzlNVzZrWVhzS1dueDRES0pvZ1dWZk1TNlBxZnorRWR4TnlSbk9jMmlOb28vT2ZEQycKICAgICAgICAgICAgICAgICAgICAgICAgYidJQ1paREhRUDZKQkVZUjd4VU5ydGc2aUtvZmtGYzhxeFlMdVJta1hNQlQ2eTJiRHUveVRJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoMkRoaXRHdTRaR2h4OFI3djdLbC9ISjAvako2eDJzaTRSMzZFNHprUDVld3ZkaUh6VFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2dNcWxkaCtyZWtDaEwrVStPK2VwT01sRk1XNGMva0puWnpQTkYvNFBSU25mRk1GR1ZPTScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZHYxQVp1NG9ERGpOYTlINGJzV3FZV1lYU0JRcGNneGx5YmdWMy9qQjFtU0IxSWNhSzl3JwogICAgICAgICAgICAgICAgICAgICAgICBiJzJkYnN6ZVlvZjZwdHFESmRXazJyZ0lFSHp2LzVYLy9iQVZ4OVRhNlRzSENkZkxLNXZuR2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInR01XTXgycjlLRlpSRFBmZEpmUWUzN3BDMy9HOWpOUWVHaXlXQkZ2N0x4MDhHRkZscjJpaicKICAgICAgICAgICAgICAgICAgICAgICAgYidldzNvcnloTVNTRElmQkZGWS8vSEhuUmpJN245dnF4ZDZVVFh3VnF2TmFuUEZXZHY1RXBqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVb0xONlQvVS9TRHJQc2F6U3VWbDVEeURaOHRGUmdYZ3UrTWxqZnhxSHNUZll1aGVmVzgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNzMrU3JiNXM5VHo2ZFIxSk5nNitxYmE4ZE1SSk5OMjRWNFFoMHNQbUpWeStFOHFXUldFdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidXZzB3ZUpURWFySFVzbVdBQTdJVHVtRFRrUWxmVmRTVEZ1UDRodW40b1RhVDQ0TVZWamRjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NNcGZQYjdjWXVmcUM1cmR1WlpXci9YcGxrQ1RCSHdnQU9XYnFCcUh3aGppZEptMzdJcHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3c2Rk14UWxKbGJCK1NWdDZiVEZtZUlKeHpmWUI1UXV5ZzJvS0o1d3JrV1hUeHZRWVlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidZMHJKRStwYzhtMkJoWWZlc1k1Umh5bThWbHhjWG9GVnN5bjd1Wkxrek95aVFmNXRoZmI3JwogICAgICAgICAgICAgICAgICAgICAgICBiJzFKRVpuVytzN3VMeW5lL3lWanFoVG14bDQrb2pMQUdUYXM5ZVdYcHBjMlZZZ3ZXamIyc1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVM5MWt3c1ZMdG02cDVZazRuNUJhNzJxZTA5QWZCSUFveHdmWVVSYngvbU9iOWw1a2xWWScKICAgICAgICAgICAgICAgICAgICAgICAgYidCa2hZNE5kcnVqUkk3dDdYYXM1NTFEL0tuaGg4TlFWRngvcStSUmRPOENSMG5Ibk9PYk5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NPblRGVi9XTVFWVnArSnRielRkR2xZTDBvWm9ZcDlTMkZSWXlVWm5YVXc2MkpYNlNYQWgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm1BaTY5MXltemN6SklMMC9MeHl4ajA5RVV1M3ZIZXFhaThpcDNWei9vMUxLT0FBWExwVScKICAgICAgICAgICAgICAgICAgICAgICAgYidOK1pEaDJ5KzJUdDVSbkdkMUgycnl0NEVPS243dHZoSzNNZlduQ0lTbUFtTEZLTmxhVk92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1lyRkxQZDdjT1dVS1dNR2hOM29tUkRNN0NxQjY0bCtrT2JERUxVTXpiU0l5NjBpUm1vUCsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVWZCUnhOMk05WUFnSFVZZXlOZ3N4VEN2UEFQa1BLZjdBa1JTSTBrUVFXcUpJU3FKWVZMeicKICAgICAgICAgICAgICAgICAgICAgICAgYidKY1U4QWFPQVhweDRkQ0NCVGU0Yy8yREpKZDV1RzMvQXFyYXM1bFRCTE03TkZkQ1E0bmlYJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0VnRsWFRsRUJjeDdBam9jaXliTjZpV0xpTGl2Q3ByYW9wYXRCY2pMRlIxZXduZGtERGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndjBGQXg3dmpITHdaY2lRZTA5RnZDaU4vNEV0bC9HK0NXeUhMTW9XQ0svNzdJcks2Y01ZbicKICAgICAgICAgICAgICAgICAgICAgICAgYidLK09mcG5nTDhVYzNzNWcvQTVIVFBZMTAyeGo5dlNXaXYxOHZ6OStadnpBaDZLVUp5ZG55JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1R5aWhKNWh4NTYzcFJJdnFZb2Zic2RoN3dzd3Qyb0wvb291MmZ3NkJ0UDN5TDJpVkllem0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInR3BGZ0g4WHkzeERMZ21vV0NTVTFaN2xvaG01cFlnOW1YLzRiVXQ1NWthQUQ0L3VXMWJNTycKICAgICAgICAgICAgICAgICAgICAgICAgYidISmVWWUYydVFoeWtKcEhSZmZNbVJXWldmbWI4U3krMS8wYTd4ZElvVzB2TE5VVjZZbHdmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RYMG1INm9JYk44MHRYVWZYYXlsbUZaakQ1UXRVdjZETnE3SE1ONyszWlBsZ2pXWE5RQkwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYzd2ekdLaVN2WEJsYS92RWl0SkxpaWN0MTEzUzViZDA1WHlNcGFFcjJJdGgvMUIveCtHNScKICAgICAgICAgICAgICAgICAgICAgICAgYidjVXpSbHBRNEtKTDduSWwxZXJVYXJzblI1VjZsOHJmemlGZXQwQk9OKzZWYVFacmJIOWkzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3loUHRrUXJyV1YyRS8raEkvYnJYeHJPcXQ5UDB5YjdHRFVDZjhwYTJiNlZxaDhicTc1VVgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWZOZnlDbGZtVXllL0pKOVl6S3BmNE5tOXpFRHRUUktCeFRMTjEydVc5N3pmcVdlL0t0dycKICAgICAgICAgICAgICAgICAgICAgICAgYidaZVBoZVB3M0l5ak9TMU8xNWlqTXRTVi9NMlgyUlZPdlBwdzRmL0l0RTViR3dRejhDYjVFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NNNHNHM05sVHZTVzdWcVlYbFduSFY4RUcycldGT2xNdEEzWkx1ZE14alZXVUo3SU12Y08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRHYvREZNVkl3cEszb1RyN0xTdFkrWThTa3M2enRnUzRzOVZzYmRwc2hUV0I4QU9KQ211WScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTjNHemFUbzdiR29ieE1LK2FNTjkrOXk1WDdWMlBoWEQ3Y1JrSmk5bXRuaGEzMmVtQzIxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZYeUx2Rm1vVXRWbjhjMDI2cTAwRFJ2cjQ5KzJHOWRpSnMwQk1WRnZ3ZDZ1L3JjTk5MVmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSSs3UndqWDlXYTdxMkdyNTUvaU1EUFF1UDd6NGNISVpaRkp2WmZFbkJjcy92eEhkTGRKTScKICAgICAgICAgICAgICAgICAgICAgICAgYic1KzMyUGsveVBCMHZrMmhvZmp4Yk5RQXo4UGY4SVEvemRydHRmcjF3UGg2YUpBVmNDUlhzJwogICAgICAgICAgICAgICAgICAgICAgICBiJys0RHhvbjdBNklaVjBnZXJCekNmdUo3NUs1bjB3Y0UvRGcvL1J5dFBsOWtvT3NPdUJaNzQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUhFYTJEdXE1N0h5dnZJdDF2LzR2d05UZjhscmRBQUEnLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLm1pbi5qcy5neicsCiAgICAgICAgICAgICAnSXNUZXh0JzogMCwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ0g0c0lBQUFBQUFBQUNvMTkrM0xidU5Mbi8rY3BaTzRaSFRDQ2FHbHU1L3NvTTZvaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaWFac2VNY081bEp4dXRLMFJJbE1hWkFEUWxKZGl4VjdkUHNnKzJUN0s4YjRFMlcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWjdkcUpnSkFFTVNsMGYzckMrREpVbzEwbktwV0pwVFU3c01remNRcXpGcHgwQnZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1I5cExJalhWczBIYzZiZ1BWSjRGK2lxK0htUmVwSmJ6S0F0dmtpaW9aemFiZzc3TScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2RkdxSnZGMGFaNGY5S1N6Q3BObDVNVDRUcnN0TW0rZHhkbytjK1g1emRkb3BMMXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTklsVjlENUxGMUdtNzlHZHpMdU43bVhtYnJlVG9wZS9hdXFtak4wSDNXNmp5OTRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MzV3E3eGNST2k5akxzUFRKNXQweXZxT2ZDZzY0Ui8wdCs3Mkg0ZlBEdjdSZXRhNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYQ1R4T1BLKzVwVDVQY3B5K203TGIvM285YjBmcWV3MEhrVXFqNmpzN08wSEtubVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTHU2emVEclRmdXY3M3ZmZnQ5NkYrRWcraTF1dmwxL3hDVlE1L0FkTkhybytVSUdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hiblVRVEVtNFQ0NFN6U1g2eXdlYVdkQUZWZUJJeFpaTk1IWHUxazBYbzZpY1hlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVbTIvWmZLdUkzOEpmcFNaQ242U1dmRHc2dUxreFllVFk3OHZ6ODQvdnFQVTkvTHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOGVtSi93TUtmbi83N2hmL0YzbjU2dUw4OUpUU21aTEhGeTkrK1lYU1A4dmprOHNQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YrZWY4YzYvdDROeXBvK0ZjaCtVWGYrZ1Z5MUJXcXhBRnVsbHBsb3ZzaXk4cjliQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5eFBNanpjS2s4UldyRjY5b0RidGE4cTdpZFhZQ3hlTGhCYm1TaTJUNUpyb1poUnEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna1lvd200S2tsTTVsMzNWclRmQjhiV21PRmtFZTZRL3hQRXFYdXVyMnJQYUpMUHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dlWDZoWXJuSVQxOG5ZWHpDTStyMXBhRzZHMTk2bjQ2YWVrZ0NGU3RqcXFhUEJnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczVzR2aFpNeWdUa1NyVkZub3NCTVE1enpyN3dMTHNSU09rVWpqaXRmbVJKYVpUVkYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGxLbVlLa01rWTRkdHhyRnFENVJtSmhtaitiMFZHZjNaWTFXckhJZHFoRjZqeTJSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JsV1VIYWNqbmovYUF1RXkwYi9IMFhxeldXUEswN1hydmZsd2RucVNSRlJoaS9rZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxV1lOZTZINjBuMnRIelJ6UStWZnFldnErZFRNSDFYendEbE9RclNrYS9ON1U1L2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnY5SWVlaEFkSGMrYWRTNmJhd0M5dlF5bjVXRWNZK3FycXlOL29YUVVsa09RTjh2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzl4SFJhN3V0dlZFUzV2bHBuSU5SRFoxd1BIWjhKNHZtNlNweXJtbnhheDgrTXg5KycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnWjlYK014UWV6azJ2eFpPeTNGOUxjR2JxcnFucHU2VXZrNmRpOVQ0MVN4T3hrekcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUxkVzlaeDUwTU51NTRoT2RDRGl6UWF6dFFnelRQNjdkQndOTkhVYUt3Z1c5VExDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFYjhlcjJmSTlXWW9Ua1RJVlo2bnAvUjRrWDVaWlNBR3RNTVRYdHpVK1NXVzdEVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwS1ZwUndWcWlHM3NqV2dBNklmclg0R2wyMDB3Vk40a1RuU1VpWHJuN1ZQYms2M3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTFaazB1eWVIcHJQWFBXdWZXb3J5N1dsTlo0dzNpOG5nZVhRNFBCNVJmZHJ6RzRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZhK3RVTU1UTElxWFJTdXd3VWk0UG1Vck9xdjN6dm55aFJuUWx5L09BYlpLdXgwTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEVUtWemVVT2xjaktYalpaek9OV3NZQnJFZGNXa0VkNHBhK0RHUCtnV1ZkbVZkTmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWY5L3Q2eW9aYlhUTXU4dWFqbFFob05pdk14NVRPRllQR3dsOHBReFJUNEtzSERtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZlNU9YSFVuVjBTbVRJS2JEVTFiZ3hESG9CWWR0V2lHNnRQemZnL1pNc1hIamJlWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYTTJHZXFIQnpXNldPakw3cXRiV1c3eWtJYm9mbHRUR2tOYTFPVjVUZ1Y3emR6OHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2lwdE5vNERwcGNOMzNOMTBCR1lmZlU1TFMrWmo2Sm00N05mQzlta2duSEJBRWRaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZPcklVaURhTHdrZEpNYTcvc3gvNi9KWENEK2NDcUsvT3IvNVVyUVpUMFJFZE9IYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCcWFSZnBYT0YralArRkxmSnpRSldJekJDRlUyRyt5dW5BcHBlUnluVTVlQ2laMEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRnWngyQTU0YjNUMktaanc4eDR6Q2haUmUxMkxTTmMydVlUakM4WER3dmFIa3BmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pySTBTZnlEWG4wMnZ1M3cxV2xqQ21zVlY4ME5yT2h6SlJjbG1heEQ4S2ZHSys4YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaHd0djB3aHliQWtyNUlZL2JuQTNoYTE2aCtFZXN3UStUc1ZJMnptTElreHk5aGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjdNNlJ3THpFU3BhdDQ3UHo5Nkg0Qk1aODlZOGVwMmxjMHNrbUdZZDNlbkRtWjRuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2p1dmRwT1A3V211dkxVLzA3RlFlRzRFcFhNbE1DTXVZTGdoQmh0UFF3RFZweXQ3TycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic1OUU0Qm1rMUh0WWFYdXlaVlFDUzdMN2cxbzBKbmU0eVVXTFFqZW92d003QkFNR3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncTdjK1ZSSU04cXBmYTIrdUdpdWtBWlF1ZFRoZlZEWCtxRlY0WllTN0dxcU9zN2lEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hIU1lUZCtyd01rWkR6dHlFampqVUlkZHAzT3ZLbzU5WTd1TnpYR2dYRDNMMG5XTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdU1reXpCQTU0cHFkNXpybHRNUm1qYTFhL0RTNXdDU2ErYk5ZeVhYeXFiRE8zbG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMDVNa1RUTjVhM09qS0U3a1I1TU9iMnJpNGxMdFlOR1BRblcxZTFUamhDZTJDdkVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJytuQWFmQ1laZzhVTjFvcFRCVC9JaHVrUnJkR1I5dE9qZ0ZPQnJocjZxL2lVMFlLZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdVd6UUVGR0xLUyt1S2UxeFJDOUkrVjJoVHFxbzR0enk3QUwxckt6VTNSQUxCZU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQW5MQitTNTNKRmdLN1FsWjYrQ0x4b0lmOVh0RHA0ZGFQbFhsT2YraWdvY2F3UDlHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NKcktSd0drZjFrY2t4U2cyZHFWQXd5M21weGExZkRTWGptbmdyS0tCM3liMFNBQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDL0JQLzlwSURIZHJldnhBTU1xdnl3aTVsQkhvaXBPTjhuSU5DTnlkMEpZbE5oVUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOUpKK3FXUUtzYUVzKzJnOHRsRE5OdTBYZFhZZkw5RlJOTERidUNoZnc1T3ljT25LJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VRTldjV1hvYkNsVEhocWs5ZU1ocFk4R1pFbHpGSXllUmwwSEI0Sm1EY2dHVzRpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEaWxDa1ZmZlV3cWdMd1d4WHYxQW1aUkZ6OVdQMTJCVHhBNjRKeVJqQ0JUNmU2ZlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVW02bHErQXpSaEY2dFFTZm0vTWtETE9BZG5XdEJEMS91Rm5lUUgzT0lYYmtPSUtNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NQd1k4bHhrajRRdnYrRFUzZ1lmQU9TTmRiTkJ0SFBRcDIybHZLTFA1bEZHWUF2ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnUGFVM2xmRHdMenRKenVlQUd5UFl6Rnl0MXVtL3BlQk00ZUlnckIyNUJ0S1F4K1EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDhxa1VIYUc1QWpBNjlhUjc1RU1XZFE2OGkzU3NTcHlGOGl0NGp6R3FCMzVDcGxaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BCNUh5cEcvQnRBeEpsbVV6eHo1VytBc0YyQ1YxT3BYUlEveStCdnF2eXZUZVBDQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPQ3NMYlVmK1hpVHBRUWcyYThZSkRSK1ZWTGlLalhEeHkvNi9wZzR1SVlPQUhId0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSHo0MWlzSmxqZy8rZ2JJay9IYWZwT0hZcDMvbzNjLzBZUXp5SS8zT25HcmovNmZRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VXSm9COHBqV2VqZExITi9aekVMelJMYTlKUWhGZFltSUdZeXFBczY4enFXSTVTWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidad2ZrU2tMZ1JEYTVIMHNNYUFkY213MFlTMVludjZheFlzYlNaSVJXTDlRU2NNc3onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkFmQlpWTVFqVXp3NldUaVg0ak1NMXVRQ0NxYXg5cHY3S3lTd2dqd3lSMkR3N1lPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04vNVNSdU1zUlFqeGdlQVlVK0dwZEMxSFFRK3lFYVFiQnIxcU5uTmhaT0tFZjBhQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidIbjRXQXRDdG03cUhHcC93KzRRMlk5Q243QjhGSTBJYW1NZzBpR2c2MisxT0ozd2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWkNYVVREQzd5MkFtOHJvdERJVVA5T0c2RmdMQTNXNlB5QlNRN0pnOXdLaFFXU3dEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlMZGt1cmtPcythOFFGOFlGeDJCa0JxT25tbS94Ni8ycGUyQnpLSjFnN081RDZiZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOQk4yVUZ2Sk5PZ24wblRHSDB2Z1Y3OHAwOVJXeHZsN3F0ZG9yQUIyMjlwWTgwcUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVm9PaTgvc2I5Qjh6ME5hTklKb2lrV3lZQVdqL0JRREsycEV2SWFJNnptazAwV0FMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25MNGdReDd3T0tVL0xoekpoY2ZwbW5ZNTN0UDZ4cEZKOExDT3gzcm1Yem16aU90ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5d1J0SUk4dENQR2MyVUpqRmJ4eWJsSU5Qb2NIVkF2bGR5aTd4KzhuL0g3RzcyZjgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnNJdjkrcVVXOUxvankyNE1LMG85UFo2eXdiQ1A4RktVbUpDLzBTUHdodTJxamd5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JnL0lZa0EwK1pzSzRvNUR5QjNWZ0JkK04vbGxSdkRha2YvaGJNN0FrcGlDNG53UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicza1JnUjM5V0dYQ2tHekNYZjNKSndldVVwbHlhRWM1bkFzTmtjUkgxQ0Z0OWxNVUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVXh4emNjS3NNK00wdGo3YVN6a2RZa2Jpa1NPWE9yajZVLzZUZFNFeXg0NnArK2d4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VvVys0T1A0SXI1d2plRVJsb1NPTHlPTnBCeHhNem9MaVdsUDdMZHlEQy9rZEc1dycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhNjZEVUhlY2JuZVVwQXI1eE9TL2ZMRjZEV0NESEpzTzBWeGpzbFpWenBFekhhejQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFZJUEhMa29zZ29haFNPblhCWHdIekxDakhtdWd5azNqMEo4N2Q1VXlOSXBXSC91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBJT2JFRis4TVgxUHAxTmF4YlhwTU1vMXladThXd2ljTzgxWjgrMWJrekZmdmpTWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVaHFkbUR5eGVUSXd5bE9UWnpXeEc2Tmo1NllBMGk0RHZNYklYbURldFVKRCtBcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmd0NENkV3VtY0srb0xwT2w2TVo4NGdXWkErMktlK0NiOFVUa3B6bWdaV214WU5JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pWdWNNSnZmMUZrdVdrYStjdk5ucUdzWDZEMlN3UHZZTm0rUm1rQk0xYVRTaFJhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6QWl5bWYwZllULytSNlRRMVFFdFU5QUFmb2k1ZzBNWml6TFljT3FSWG83RkptNmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSTV1bHFjYWVUYjJVQ1RPWDR5RHg0dnhkS1ZybENnVkdhSityTXd4R3pxaEcvNytVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1hDQlJyYStjSXN2OWZrMFRLK2RCNkIzSFdjU2RCWjdNMHdRdjN3ZmZqSzMzSGl2aicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5aHZPS2pDZ2RkRHRIMkcrQTJpdHFPQTVuVVRYekw2M0ZwRXJkTldvWFRuVW9zVmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0EwTnVScWxkMmtxczRZUHRGU0s0cUV5dmZYaU1lbDBOYkU2ZU10OWt0QThacWJPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0p5bldRKzFuYmdjU1VOSmpiRU5sVW4vSzZSQ2JGMHhNa1hMb3ltbTcvUjdsdW1sZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkQjhpc2pmVnlrNktJUkhpSEVTRVRqRTQ1bGRTeE1FcE5HYkExaFZOaDJhcjVndE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2N5bTc0SUxqQ0ZSV0hPVUl4RVAzeXYvTFRydEVnSFVaQVprTEZyTnhWdGR5a3cwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BUQ1QrVTZFbnJYLzVCNnpDMUxjM3BGSWpJTzVNRHlackwwQU1zZ2EzazM1WWhydicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNUE5YOGJWN0ZOd0NDMUNxM2I2alZHYkxGS1cyWkRJSURpQUJ4Y0VwR1duV2tLTWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGcrQUFycDI5WXZNMURXS2FWeGdha1lkeGlpbk5QakVHSFNJLzVIMUl6Y1AveW4xJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NOc3ZKcHhmTkNYb2Exek0yNlV1NXUyU2RWS2FwZ3ZsdjdMVEJJRmVBRGpEVmV4VScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0UFVsbGdQY3NFazlkblZjTkRyR0dBMXR1SkxhQjUvSXlCWFI3WnY4cmMwVHdkUXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNVJVVmMxTWxOUWFzclNRZWMrSkxUTXd5QjFaRXFXYXBmQjQ4Y0gwL2svelJ0NXpSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0p1TXZaY213L1R2SStWZlVpTCtXaklycitHR05VUzFCOEVHT2Y4Q3FEWnZwUUQvTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwRkZMem9zaHljMUZxQ0R4ZkdlYXBjdUZZNTVwTFdmRm9PMGV1ZGxzcW0xeVNvSlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWHFFdHJLNXhqMTI3bU9nSjdXaXJRVnlJRVJRS25uOHV2bzN1RGUra0I1L3R3b2lyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1l3VVlMbisvbGllVS9VVkpFT2FLQU5RYmVlbnUxWGZZbWFvS1FBMkMrNFRtWDJoWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwbVpjYXROankzamtmWDBBb0NIb3BNemkvQlBKTlI3cGcxOEVpUGR1czhFN2hKVXcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneVgvRWVoWS9BdXJGY3BLNUJhb1p0alRtL0NEeEREQnN0dzk0TDc3WFpGTDZqSGVLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vlb3ExeVdqeXJhZ2lITmU5MWM2bUdDZFlpZzMyU3BNaklENHFvT0hSWmpuSUZnZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicySE1VTHZCR1JCWk9mdndPank4WDRTaUNOUFhCejZUQlNHK1VaUFQwRWpPN0FPa1EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnZOVnplcnhRZGV0SkVGaDkySlA4enV5aUVPdjVrNzlBbGxVTEJ0LzhiWHBKU2xVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VMZDA4SnBnUUo2TkFFT2hhcUgybGRPaHNtdlpRdW9UcGN5TG55Rm5xWWZPQ1EzUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNZUwxb3k0OElOQWFvMitSZUNoZEdENTUvT1FaR1JlcmljOUlTVEg3YWhsa2hxdUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjZUZURaU3kyd1c0dWdiUGVOaENNNEc4TXk3ak0vWVljMm5NR3Bwc21ub20xZ2diJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YvUlVjNWFZdGRZQis1TzROd0t5S2paS21nYXB6MEpGQ0NkdldFQ3UzVzFEQnpLTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZRW4wOEcrWE96d3V4Q1U2TmJKZEZYc0pqRzAxVi8zcndxVTExT1JTZWlBTkQvOE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tVNElCRXhzVms3Z21HcGJBcWczL21DSEIzSlBia1N5aXF1cjRZQ21obXhlNCtaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IyU1FUK3l3MXJkMk8vT3NRbCtmbE1LbC9UQUdLbEZzSVI0THU0N2dudThMSi9qNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoTHFHQ2lRTmVQQjlNUDZNa1lyNERRdTVyWFNZNWFLK3dZMEM3c3hqWlRyTk51Yi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna0JsNHdONndQTTMwL3RtS2h4M1Y3V2kvbzdzZHRkMXZqd3VOVzh3UlRnZENnci9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08vUHd6bkZCeTBhamNUcHNBbllkc3ArRUlwSXJWMkloYTl4SW1qVnI2RmsxSWxtNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4WHF4RDQ5bUtuSjlXaXg1SWlKeTVyTXFtR3kzc2tST2o2eGtkbm9zb05wdnVJSUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEJQeTl3RkhRTXJWVmc5enJZY3g1dTlYTmV6NUVKZjlndUVrR0g2N1RmOUNZcE1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BiQ3FIdkxvTndRRk5nd0FEbmQ5ZnlyQWE1NU9UOU4xbEwwS3lTTnBHeWthN3gyUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4eFQ3SW9NWTdibW8rM0d4S09wMkNyOWVuM3luWktSZ0JXcWZ0cXFlQ1I1YTBDREonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWVI4aklRVldGbGhtLzdSSVk1OGdjdzcyZTBRZ2VZSWZpNDJWQWNONUVCdDRDMDBXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N3dTJBQWlNZjJZTkJyRWdiVHk0SitOdFo2VEpLakFoVGtUWkNiSTN5TFRicVhSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0QmhWSFpMMjFZcE03MXB4M3BySDROOXE2a0d5M29xeHZBUUowTHVrZnZrcTFRTHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSEduUUdxQ3hlREQ2bHovV3NnTGMvaFE1YUQvK1RFdFNmUHlGbHNUeTc2RVNzdkxrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMranR6a29sNUhRenZXWWplYWhFSWg5bzNING91YWRBR05SWFB6WFlBdC9jRm1BeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCR2pZYkI2dkNwblJDVU44VVNDZXdQeHNOajBDeTF0eFQ3d0FVMG9hOElCYUNDaDYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1Q4WnQ0WWQxYlZxYWtxbGFWbHE5TldEYnlLVWZ3SndPWmNucno2OFBYOUhWQjE2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09weStDK2RSdTYwSis2R0daQUVmRWtUSnZWR1lrVnFWVUZHS1oxQXlvN3hVeVYwNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyek91YVdVL1dlb2l5cVpRVUFiSFlreElJcVM5L2drTFBDTThjUVZLdXBZTUxVS3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG1URnNMaENON2c4dnZQUWZIY1YzSWdJTDg3d1MyUnpacDZlbWFjMEFFQ1MyR01MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2c4bi9XZWJaNGxCci9kN29QQXN5SktxNmliRzU1TUQvZHhUUWtLUTUyRlNwQTVRbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKTHFxMERZMUFGdnVZM3ZGbmdMWS9nQ09EZEF5VXVTVGRnY3UySWwxUk5xZFZudzInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM3BJdkVXU0YwZUh0RU1oaGxjYmpWczBFZDFOUnpCVXRjTmZweEI3SHA1VzVtZ0QwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hsa0lZTStQS0RrTldaZVBHOHFwZmE3Q0ZSbWpnaUFpRDd5NnRpS2taYWpiQ0pMRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZelE4RXIvS0tTa0Z2OG9GL2Z3bTV3UktDNTFBZnNFR2JKWDR0RTczeXdvQUVjam4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVVEeTFwQVlOUlJLaHpXWHVQNDJlU1JEc2lZY0hDeU5DOElLanlsbGpMcFJ4elpwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29kNlRjcC9SWG1MbFBpcVUrMUdoM0U4QzFoOExEdWdhU0o0elk2TzlCTWJXZEdhNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidENU05a3BCSXhuaUN1djJHYTVsc3FqdStoQm80SW9kQ1h2ZlRsOEdJd1FYVWJtbUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVndhNmdCWFlwUXlNTktXZWx0dzJLcXFyelcrOVA2dTZXQmd1OWptSDhMYlJoYmFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NqVW51Zm5FaWtCRE1RSDEwTGVGcURxUUY3Nm5PNDZDMmllVE9GS0Nvbi9NakZOTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCaGxWTmZscWpMNVl1ZkllMFdCTW1qRUlNREUvY1kwZ2trSW5xVlhmWFFCVFF6QWgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWmRHVVhHK1pQNVlBWFA2Sy9uMnJHajAyYkk2TVFHejlUS0lNU0ZOREdyTStTV0l4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1EzWVc1bXpDRVM0RTY5S0RuSDRmVHFOaXArK2JhZllsVzlORkxPTk9abWhIc3RxOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiODRXRkJIU3U5N0tjTnp3QTZaUHhJYVJpMkV3RjFZcjRTZ0huMjBpVU5JblYrbTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3p3MzBUQ256QXdsaGE4dFRhQUd0SGVyc21McllMZ1hBRzVmV1NoTnlYdmh4SE9LJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09SUTBjS09LVWJEYlBvUTRJZzVIUnNSV1JCNzh4cDd1ZHFHOXg3d09yaDlUcklNcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJL0VycndwWkFCdHo4RUhROEIrWnIwcVM1KzV1M2FJRjJ4ZC9KZzBwZ3BYdDZLalcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVTdwTEhGekxQclNyY2NvajNMTWlnS01USDB6RFRBSHB0eWNxWFU1bmU3d1B1YTMwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZDUU5RbDZuNFgyNjFQVStxVjNjSlVLd01JcFRZK05rV0xDdDBEQXk0bE9HL1lGVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxVDJtdzRRWW5Lb3hPSVpyWTJLL0JDQWdXeTJqbTZGSnBqeTVRSXBub2VKN1V3WnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlZIRFdGaCtnYVFndVA4SFlWMG9yU0wyR1BaaUZiNEFuK1hDV1lCVWdkallIK0xLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UzSFFmL1RNK0VmNFljOGxtTkVJazV4WE8vQ2RTTnpCQWNSWGFyNUNkaDZUb2lMaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOK0V5azl4c0JIMm9jS2pVQ2MrNmJKd0JCWTlUeEFtQWhWdlViS1ZaeTZRdVNGenUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNEU3eTZvYkpTTEJhMCtxMm5BNFBxa29Ed1JFQUxaSEZGblF0RndMam5ZY1pVR2d4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1hKcXNhYmpnaDg3YVRHRHNrY3VWWjNOSVNydFBsU2J4WFRUbU12TEZaMFBIOGRmQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOZThWWXl2cnZlRUNVOUcwWmtwTWMzZ1BYQmF2a3JLYUJocmk5aDAyOVpKMG5tVncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGx4aitFdmtPZG5IOGRTcHJQdkxSdGowZmJVc2hHMTRJVEUzT1hhRXRYZjZ4Z3hhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Q0LzdReGlEaURCQmZEMGZaTDNaT0wzRm5WTUhQT1dlb1ZFVmEvbU85RUNlcG1kRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJUzlQclUvcmNtV0x1UzFDRVhqRlJML1grdzU2S2dqSWFYVmFoT1d4VW9la3VSWmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JQQlNwb0szYUpDcld0M1ZkZW9PMWQ1c1hCdUxZTHF0dER1WmhRcjJhdVp6dDhWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dxN3haa2RvekFUWnJmMWUzZlJ0cEMzQlM4bHQxUm9TWklLdXQyVm0zQ1dQVnRFeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNL25Ya2t4cXNWdDlwUEdWa3hvSHZSUUZLNGNZNmw1QzMremNpcDVVZXcyeE05R3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWTJjVElBY3VyN0hsQ29tK1MvRzAxclZ2bjFlVHFhMmxuVXo5b016bm1PY25SWDlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJys1K1MvVW1ZQ0hScEF5RmFKR2tjTWlCZWlBa0xyRGdnZHp1K0RNN0tkckMrVytjRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoSXlOeDFpNFpMaGk1eFJKSkpJalY3L0pYNjhKN0ViaXF3TE1KYmxFWC9IbnJPMWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVXZMT2FIeWN2alhwakRNbjBDZDFtSEQ2a3FUSWU3Tkw5Z3IyK3Z6VmVTT1I2OUI2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tIM2pWWGJ0UkVMWW5Odk42WjlEbERCa3E0SGdFU1RZcEFBQ0dXVElpSmhYUm1JaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4SjR0QkFKcjdsYUNwRWp1a3lCMUJMdzB6aEVGMkFVZFQ5RWNmVlhYcEk1cFVJVmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQk1XQmZ3VHNBQkJ1RVg0TVdiWXNqLzlNUkdUT0JnMktzcU4wNE42UzBka2Q0TWUrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFFM0JuV3k2QjV5enp3cFY3cE5BSDZVWTZhNlZSUm4zQUhsQlJNMEhRMkJuVW9JZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc0xZYzB4R1JNaElZK3MzUGw3UzB6WForc0hOSzhBNmlJR2ZNcmtFSkxON2tZQ1UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2FZWldTZ1Mrc205QW1JU29PK21aQ2pyK1ZFRDU4YWVBUUtlb1MrV2dNMG9ESnEvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1pWMEJSd0VnVVVJYVJPSldJVEdpZ2ZXcjdRb2x3Z1N5QzMwRXRuUkFNTkNhRDMrdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSOEpXT3l5WW1Fbkppd2tiRlRiNGlMZzN0VVRRQWpoU09KV0lBc3VoYldTSFUyNE4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc0F1OGNhc0V1YzZNeDR6ZUszamdJVm5ZdUtWUy9uRkRJMHNibTgzM3p5WUZrM1o5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hmU2tibktJWmFrQUFGZkpzd1o0ek9Tb01IVWJiMitsRUU0S2hUQXNiT0FVRmczYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4Y2hHZGhSdU5ReDJFbGRibVNGWHVjdXhVUXlVNHN3NHNJVEMzQUF3aTFzc2Q1ZGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnE4WjlZUk5kd0JlWEtuQ2FreEswd0tyRFdxZ2lDTFZLbjBFSy9OeW1kK1RqMUNNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BCTzc3UmxmdVNCZ2xWbFNrNlBDTlZlb1FMc2kvVWFRNUNFZzl2alFUY21sc2ZJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGQTFHVmlnY2c4eFNDZFBIcldBT3JKODNPb3NKUEZFVUZBUmE3RUVCNExNbndacFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQzdnRjV5ZmdwQWdxTGlSRlpLZ2NHNS9pWFRpZG9POU9aeVdjVDJSb0JoYlQxc1FzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZRVTF0dHNUOGJGeGdtWmRaeE9xZTBwNlpoYU1hekZtWFd5UzdKa0FpWDRVc1h0SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKd1lBVlo5QmJob3phUU1FM0lnVFlVQlVWRTV6QXdGVTV4NTFNS3E1UXdWTlJ3K2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN2grQ25RVzlRVm9kaVV5TEk1SExRRU01czRwaEZIekVraXpwWTExZ0FBb0JFOUVSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hYS3hvMmFRQlVTVnkyMXBVZG9MSVNqUVNwQ2J0VXZhZ0hSR0VidU9BcloxcDhaVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic3QTRGaHRGZDJ2VS8vTjd2eE0rUUkybmpWakNPMEFkQmtoUkVHYy9aWlVhc0JLdCsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQnQ1QVVjMDlPUk5qNG1IZGhBRUhuU3JaNDhBUFZtSUhJcjRUQ3hjQXNmdE9UT20zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ014TXhLd3lOUTFNMXdLS0dlK25LNzhtRGcxcjNuZ1lURVJibkF4RlV6T1l6TGE1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bmRLc3RnbmNiK2poRGJpdnVWeVlJbE5RRzRlS1k1bVd6TmhRRTdKZE5nN0NwYisnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOGloWVhHR2dKaDZ6NEd4bWhLdUtBZElXQUdISkc5c0MybVA2SW8vSkx3VEUzMWhiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBak9RQlJkUnpHaCtJRXFIYXVpVmtZSFYxbDkvYnFjTC94N1dXNGIvMGJtczNpaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvWFVSU1hjbnJTVUQrRVduNzFNekdSYXpGTGtUMW9OamlubzhsZEhkS0lyRzBkamsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbS9KV0J5d2VoaGlGcndlRytBNTZSdmFRNGVwb0prNk5GcWlDZzM1Vi9wekxhNFJHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Fja0V1QlpGRitZRWNzclZyajZibXNCdWpqeVhFeG5LdkFqcHNVdytMcGg4QWdEQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3VGdVcmxNYkhmWWo1M2s4SExwVHpRUDRzeUIvbzluRHJsZW8rR0RXTEFxTWJRQk0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3ZKU3ZBMENsUE9nY0ZmTGU1TThJK2NHSU9rcHhWREx0VW1CZTl3RmRqa0puOTRHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q3V1RDQnlMdVdDdllvaGFrSDNjODl5a1NRN0tVZkNsREVuNVM5eGgzMDJISTMrQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYYzZVZVVjMGhjMU9idlJpRWhzTW4zYmlDQlcvTVBRVlRoUTdqODhubWhVTXdmVGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInczJVckp3NTJMdTdBRzdEL3lCV0dZY2dEZ1JydmFiY1Bpck9aWkExdnQrL2I3WU5MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0pZamJaM1NnQS9CN1NENjBrYStIc2Y5QzFNOHhuZThMSXlkSXdrMFBoYWhqTzBhaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhTjBFWHBNVnU4NlBlUHh1eFlPSjA1TnRZR1dZVzd2Tnh6aDZWU0JCWHg1RU50ekEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSGJqcTZHN1k3U3EvMDFHRHVqaHlDd3lGYVFXV3hrelFlaXFTWXFNak5WUTBUd2RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wUU5iVDVFMlJHZFRLUHNjRDZNaDZnKzdJckpkL2xtazd2K3hGZCs4V1YrTlBMWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3L2hOMElGcGNFNHpHRDQ2RkZDaEpnMzFTSnVwWi9ZYW9QZU44NndWajV5RFczY20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN25jVEVKamZPSU5XU1NoZ3VDNHQ3bVl6YjdkRFh1TEJ0TjN1SGFsdWQrQmlsbGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1F2UFQ0OEFxS3gwZVZLY3pZQWxVU0I3RCtTY05XZm10MXBXL21JQ1VueitqZXFOYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZU5hTGFwREVSNGoxNzlUUW95T0FqVkVtNUFoaDNWRCtSbmI2aXlSWStOZ0o5VVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMWZlbGJua0FiaFJaK2JiWlJBMC9TUDEwWVhYWThsR0FGZFlRdExFT1kvMDZ6U3BwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzhhUlF1V1RqTk9tT2tyYlV0YnlrUE1US0NWa1QweWNPVGJ5bEJlajJqMERrTHdoVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQN0kvM3cyc05TQWJzRGtYRmUzWlhIRW9yanIvczN2MC9Ob1YvM1BjY1llSGFPcUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakFIWlZmOGF6QzI3K3Y1YU9oM2FKUlQ1MXVYRVVQTTJiblVFSFNmc2lFN0dpRWZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ViN3p2S2lSRGIvaEFSbU5zT2krYytTWVhZME5zR1ptVFZoOGprVTFpejhxd1p2bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczY0lnY0xQSmVETWlmVWJJTy9Gb3g5SnREUEtXQU45V0d0bTRSODR1Q3locmF0Z0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInait4NEwwUlNHdVBIeklQT3hMU2dvb1l3Qkw5K1J6N2ZHNVp0NUFWZXM3VjkvRFVrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JBVFJaakNFLzRWQ0NveFFQRE1lQVVydXN6c1BiLzI3YlNsQnY1RUVCVy8yajVFNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoa2F5OTUwZ3FUc1A3b2ZGN0dHSHlzS040TCtYQnRUN2J5SDNYaGhQZGszbTFjeEQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVUVHTnZDTUZtNjNFeThKS3ZDeTBHMTFvdXBBZ3V2RFVWMlpoVmxkcS9nMlNnY1o3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3pvR3J4bFM4Q0ZZY3JrcnVjd2k1eENQL09VUmMvUkRZVGJrcTJqWXdPSUMrQ1g0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidod2hCQzV2TlYrR000NVVqUTF2QlJhT1hMT2ptOU5zbkFYUFFrNmRBL2xkVE9iOTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSlY0NlI0N015dFFRS0NsVTRsN3lXVlYvYXR6NDh5MUlTNkdXSWdPcG8waHRKNC9HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2duQytOcTVTWFl2b2tNVEhJd0o4UUUyL3l0L3RYajBobTlLOEZuZDNLN0ViWENxZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOa3VQcUpTdzJsdkIzYVRnMXBrWGo5bHNhaU1QeWdNMnFPQ3lTZWszdWQ2eFdCclknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDZOZ0xCc1JlUXV5SThSRDhVR3Nodnd0ZjBHVE5nL0lvT1g2NzIwSGxucFhDUmw3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA5UXc3SVphVUZMaVRJbC9IWmtvM0JiVFIrRDhxMlBYcGVPMDJQb1U4bnI3SWErMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyL21YdzlkYUJFWHc3dk9qZkRWdDNjMFRoWmRuV2kvOHc4UDFldTJ0ZjRCV096MzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndnRmckhhS0cwMXJGMGZwbGVoYzR2VmF2OVNQOTU3U01HZCtocERYZmM3cU1YS1hvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdTU1A4SkZGcUdldE1YVlBXTUo2SDVKZHdKbjNmL0orYXZXOC8vN2grKzZQM2c4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvUDlmcmY2UEtNTS9QM2VMMUU4dDgvREhzdmhueXRFclhmUDdZN2Q4OHMzaGNSNCsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLzlkVGdjZGd3cFlTc3pMNldBVmp6N0lWRHR6bEhMRWJWdnJvc2dyd0lhQ0UzTU5NJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F6ODMreWpqQ081Mld4OWx3OXhjYm9CSHZMT21YbkdBSVFBd2tQTXFDNzJaNG53NScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic3SUVJY0U2cHJFNTU1WUV4VUFiemlsSUpzaFh1cldmL3BqU2MzSlhSbk1Sd2lxTmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVDRZRW1ZQ2d2MkU1ZnlrUmUwVU1wZ1JZVG9zRGtiU2o5dHhra1hnM1lVYTNWM3doJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Q2TjFpZlI3dldlcTQzem5tTkhWRDZueHNRUU95TWtweXNiYWNjSFhkSjJ2aVdVdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiOTFmSy9UU1JQdUF2UmszQ1RVSUR1ZVlvMjRRYzdPbTl5c25rS3dMVmI3UUFxaFEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEZZbE80akpxTU5SZTN3NGcxd3NXYkNnazA3a1hwcUkxdzJiQkh1MjhQUUE0dDVFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZWQlV4UENnUnpLTFhzalpub1A5UjEzaUJqNnBwc0VHNzVPblo3TkpoM1BpblA1VScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOQTAzbUZyMjZLd29CUDVnUWJTeU1zRXlKQUt1RmtPSFQvdjVkdGpYT3pZVE1wL3EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWmpTM2NnY2gyY2pJUzlMNVZscERYNUZkcUZydXAxWHVHZm9UbXlHZHF6ZmtYbXEzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1IrU200ek1kYkpZd3h6dVNLS1F6SUEzNUdkUnFWVEVrMG9SU2xLMnkvTFN0MmxBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3MUxTcFc0Mm1BWmxyTWx1YXl0cVlGV3kvTm9JRmtQTXNtL2NsT3dsZUNNL0tMSVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaElVQ2djSTM0UFBVQnMzM2I2U0RzUWhsOFlBbG14cWVYd3RiQ0swZFNUSjFUKzFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QzbDFuaTFuN1hkVlYzd2JzWXUwRzdFVEs2Sk42UWFSY3ZIMnVlYk5ycVBMVnJ3eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFcDVDR00yS0doZS91VXdtejBaMFNWRnh3OGJPZlVkOGw0WDFtenMzR0NaRnZ5czYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQlRiOGx6RTBIWTZvNXkyVmRxR0tScUZ1TGJORWdKZHp5MkMxN3I5OHh4eVlTTmdIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BqVHltODRwUEIwRDRvME05WWhNL0tIa2hiR1JrWm9KbWM0V25BdkFKQWFwMVRSeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFUVU5eXN0SG9ITlV4QXlSRFVFYjlrWnhIbUJ2aEptc0JVSFZ6TVRrS21DdGZHVlonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZjJFemlFemUyQk5teURRc0ptQXpZNjgweUxCOTE5b0k1a0YvVU52ZVZ0U1VjZHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q4WENoRzFGQnpIakt0YVBSVnlhcTJ0V1ovSVpCSHhWd0xQNDJSMVpOcUZHMFdVaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUlpXbFpGRE5PeG9CcmtLOVIzUWVXZnBTdWp2RVdRSWxJTUJPa2h4aWVTNjNXelcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM0dJM2NnLzczay95djNwc3FzZ2dBdmlBNnczbWZ5MGpEak1ucDFzaU1rVTg3UVArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25aUit0Z2F2U3NpTUZVSUpaZWIzKzY3OXRuN3B3b3BQQ1VPNUZicXJ5RXlMRDdPZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKZ3JKVS84YUwwTFpoTExzOTd0OHo4TWlYWXQrVjhzZlhUb3krMncrV0lnVW1nMEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU29xcE5weDgvaXp3ZnBZZm9hWWM5WHZ0OWowQTRzeEVKZnpjNDZQazRZNXBuTERhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BOMmU3TEVDWitiUndhVGhZYlJXUHZmdllwdmVRQWVqMHh4TXhGbU5ldThLVmVtKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTjFsRlBTY2hUV25ZZ1RaUENyb21HNFlJSHRZSXNkeXhWYXhxRHpvTml1c1lvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRm80STBaNXduaHZEbEk3WWdzVTBmb09FMlRSeTNReUd1cXNGMEZsVjRaYmVvdWh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0c0L1BhNFd5UGY2UHk4ci9jUkxjTjdiUktmTE5uWE1PWVZydGtLK2xzakhpd0VjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4bVJpQ3NIVnM0aUZlRTNIZjljTWkwcElMSS9abDNGaGRqcllmNWpoOCtqcnlGTXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGF2a0VFNEswSnhEaFpBdEpGWWs2RWhtMFJQeUVoeG9PcDV1MERDYVc1ZSttT0ZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E3MTlzUXIwOE02M251bzhtTmVNQzlpZzdKVmVRRTU4MC9LRi9LcGR6aHhyK1lVeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5NVVqNTZaS2ZtUDkydDJ4K3BUREk0QTI0Ty84VE54aHpoTDdaMWZPb0h0aFhLUzYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS05zWUlVclFaVDRVOXhWVEVwTU9XV1VPeFhtN0hSVzIvWi9JNElRT0E5TWZuZkh4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzUrQ2NJa2ZPK2RTZEZNdk5odncrMURVd3lvTmU4YldwdWFEdU5kdXpQb3BqSURLaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidubk9LOTVPMXFNVjJHYzlpOVdGR0p5WFNaSXpGb0Z1cUdFcVJZNUhsUHpFd0VCUkYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndVBDcFVMOURUSzNmdzl4K1pBdVorMXhja0JFNjgxUDdYYmR1KzJyR3g1bFpvdDNQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvUkRPVXRUdWtNUG5JZ1FTOE1nVTRUdkNiZGp1T3RuWnEzUHdFWW5CQmZlVTBULycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidadk16YzhSaC83RG5wd1Z6THZ5RG9xcDlGdDZSeVNCbjg4dFc2RjBqWjJTTnlTQzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInODBKbzAvU1RMNGdWQjZ4SEVaL01pMWE0UmxzOWFrMlJUT1NETWVZc1ZaRjZlYzhVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zzc2FkemhjRjBhV21Fd1JYcTdDaGV0SDF1V0hwMUFrTDhVcGNWVDNxRGZNaHRCLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWZyK0VnOVI2cmoyTnBuUkFLZ21zeTh3elo5VXdVS3M4OWw2MExDeE1hSGRzdksnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUHkrVG5OcDlZRkswQ1FqZEgvUjNibjQ2d0VDU2R2djFybkw3emNRWmE0NWFuQVNOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2s2UEhqUmpadDV6cnZoWHZ4YzdkT21kMSt5a3RRaGYvVXEzbTFXWlY5RXJBUm1HaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvcnBGc2ZZeGNjR253anh6d21uOGdZODA1M3lkblh2bDhMbnVUaWIwMFBtTWFmclUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaUNhcTNYQlp1OW54b0xoUmhadmlLMDNBaEdxM050WWVWRzI5WXBOQThMVGxjaUh1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FQTEJlUTBYdXFNRnFPVythUG11ekJUSStNTk9CRGMvbyszREl0NlJyMW1XQVpKZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5Ni9tN2hpK0l2VVZvTzJ4WlE3N3dpVXBPdkszNlA0bURiUHgwL0dSSEJxNVZ3bTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ293c1gvYUF5cDdveUVxVUpLVW9pZW5vSG45Mm9GaS9kNlpKZWhQeTZSazFORXpjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QrVklaUElYVFRhcFpxREdoTXYzUm1Ha2c1UzRZaTErbFRRUTFiaUpqTFVTY0d4SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTejVaU01jQ2N2RlNVWGd0dGc1dklzVmxieFFycEZSSUJxb25GNVdrQmRtZHh1WW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWRySnFnWXJ4dVdpTkhValpTSlV2OTJmMG4wdjViTzRPamxJS0RrMjRjOHBPVUR4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ001bGdPYlJaaDFFQm15ZUJrOVBkcVVySG9UMkdsTmgyc1VKMGJQWDM2NTFJZTFvUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbzZYNmtrVmh1NlV3cjlXWC9sRDd6K2ladnBKVjllOXBodjVPUFZKRzNlUU1wcE4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWENUQi94a1JwRlVROUNKV1VJc2s2MG1FRVJybk9CZ2FFR2YrS3B4OEVkTEZGV1NRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ljdmppeGtkWUpUYzltYkQ5L1JaeXlUSFBFc3hHUzU4c1JRaHFTMGhMZEhZZGNVTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSWWs4eVBmZDVWU0VwVnQzNERNaFVqSXBVUVJjS1U4NmZiZGJuRlU3b0p1ZXZPSUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTHR0bXlHeEYzVi94aFhodUdXMURQZG81TTJEdlNnSFRHb0JCVWt0bTJrOW8vNUc5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BoN2pmU0ZtVXZHWmZ6ekEyQjNnRlUzelh4WHhLVmNxL1VTbDc4MWovdjJrbXh1aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGcmhCVjMxbEFYMTk4S2xjZU9xQll6NU1qakpXNHJGeElTZXV2cjltalJJUWprLzcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLzJFdTNVSHFLL1VPNkh4Um4ydzZuVmFFYWJmYks0SFZKMC81MzRIMWlvN3h4WVNkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25IUXFvYUZ4SHZPSjFsazB1dlhIMkZEdnE2Tm9aVU1KdHRUWWpISWxaNng4WXA4dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6TGFhRnJ0b1h1eXIreXJvKzZadXhGODNqZmgzd2JvOGxZQnBXM3VGSXdNN2xBUXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjRKNUhPOTNHOXpVTDZpNGJHekxFMnRTK2lCdWg2bFkxVzU4NWVOYUt6cVFkU3d1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzZjd1dHNmVsM2hlWnhtRWNFVEd1em80QVA2K3Y5NlZkREhUK0E1MjRBZ2g4d1RwdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0NCtrb0tzQ1J1Q0RwSmlsN25BWmREclFXWDFUL0xJcUZ0MnVBa0xFSStkTk9vL00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFETG9PYzdKMnJNT1F4b0djUjBDOEhsMWZMYUhhUW9HQ3ZzSndQcmljS3ByMHRDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tYcEhCWHhSQ2ExeGJkN0tlZDFzeHBYYllRZUZGcEVzVndTSmFOT2k4THFPWnFwbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2QzhpTTVwb3pFbVhMVFBpa3lBRG5la2wzWGNoNlhyVC8vQWRHMHIra3c0ajhTV2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNG95Q2R1cjEzbkk5aGwrbUt0MmtDTXhWdTNxbXNpRS84Tm5HbFl4MU5NLzl5NjI1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hkdnVDVnU0YzFDc1JidUR2Q09MdWlkVW1YQUZzbzFYM3lFY2V3czRwOFN0MUhYbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqU1pFWXF4ckVBL2ZpbmVUZ2lwaU5GTjR0VEtrMmF1VlV0czJRR0laUU5zZXJzdkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb0U3ZnAvczJEbFB5RUs2Q1crYmJ5OFJoMDJGSjhEZldWdGZnOUhUNGNHcmRTQytFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F3eXBmMHE2ODRHUFhKYVdWWEFsdmdYSkZnREtDdGNjSEhaV1VhYmpVWml3WGFzOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUmdGdlVGMHRCeEVSZmpYS0VDdmt0Z3g0Y29ydWlzTEJkYmRBckJGSS9hNXg1RWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWHVjWHo3WlEvQ0ZPNzgwK2g2ci8vemdzNDhWanRwMGYzSkZsb24rVURqTnU5Wk52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dldW53VnhNYWw2dlV4bGg1UFcxS3hCYXU4MDFhOWRTbkhQZHQySzA1eVRwVzlRMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjMmN6dnlrWlZqZkptREp6bFV3dUkzdDd6TVRRczd3MHdoVTA2WStrR2JrL29RTysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna1I5QnFHTFA3SkJ4NllSN1JNWmZSRkxjVGJLdE9QYUpQWUQxcGZDSGZDTno0YjBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05TR1FMdjkrUWZQbW56VFE5UXQ5bGczMkdWVTdlaENYVi9Mc3ZYS1F6VVpFZ1VBaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFL3FpclU1K2dDTE4vbk4yY0F0bG9KZ3dNVSt1T0ZNa2RyVDRyTXdwT1lQQVF3cW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNXZrakQ2aUovLzJGM0FHMkszWEdObUkvNVA2K05ZOHdMbXR2VGNpelQzNERzcDhPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3FDOUFtN3NtNjR4Z2ExYkVFOGMrTzNIS2p0WHZqS0NMblNzSlp3Smk2ZmF1blpOSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPNXRyNTU2M21OMmdSYmgxRFdMeUt0Nkl6MXF5ZkNFakFMMUFYTjdkdVZJQmlwaTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUpIbDk2RmFZVCtpYXlQSTFMQmxkbXI0WUZTUzA0Z1BzejA2UkVzeWhRL2YvekdMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29xUnV2eHNWWWZ2R1hsY2N0Sy9kQmFnZjIzcDJyRG1hM0Y2MFRJa09QME5ocDN1SicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsRG1wT1BIVzlNVzZrWVhzS1dueDRES0pvZ1dWZk1TNlBxZnorRWR4TnlSbk9jMmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTm9vL09mRENJQ1paREhRUDZKQkVZUjd4VU5ydGc2aUtvZmtGYzhxeFlMdVJta1hNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JUNnkyYkR1L3lUSXNoMkRoaXRHdTRaR2h4OFI3djdLbC9ISjAvako2eDJzaTRSMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2RTR6a1A1ZXd2ZGlIelRQU2dNcWxkaCtyZWtDaEwrVStPK2VwT01sRk1XNGMva0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblp6UE5GLzRQUlNuZkZNRkdWT01zZHYxQVp1NG9ERGpOYTlINGJzV3FZV1lYU0JRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BjZ3hseWJnVjMvakIxbVNCMUljYUs5dzJkYnN6ZVlvZjZwdHFESmRXazJyZ0lFSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6di81WC8vYkFWeDlUYTZUc0hDZGZMSzV2bkdrR01XTXgycjlLRlpSRFBmZEpmUWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMzdwQzMvRzlqTlFlR2l5V0JGdjdMeDA4R0ZGbHIyaWpldzNvcnloTVNTRElmQkZGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1kvL0hIblJqSTduOXZxeGQ2VVRYd1Zxdk5hblBGV2R2NUVwakFVb0xONlQvVS9TRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyUHNhelN1Vmw1RHlEWjh0RlJnWGd1K01samZ4cUhzVGZZdWhlZlc4NzMrU3JiNXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOVR6NmRSMUpOZzYrcWJhOGRNUkpOTjI0VjRRaDBzUG1KVnkrRThxV1JXRXRXZzB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VKVEVhckhVc21XQUE3SVR1bURUa1FsZlZkU1RGdVA0aHVuNG9UYVQ0NE1WVmpkYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjTXBmUGI3Y1l1ZnFDNXJkdVpaV3IvWHBsa0NUQkh3Z0FPV2JxQnFId2hqaWRKbTMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN0lweGN3NkZNeFFsSmxiQitTVnQ2YlRGbWVJSnh6ZllCNVF1eWcyb0tKNXdya1dYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1R4dlFZWXNwWTBySkUrcGM4bTJCaFlmZXNZNVJoeW04Vmx4Y1hvRlZzeW43dVpMaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6T3lpUWY1dGhmYjcxSkVablcrczd1THluZS95VmpxaFRteGw0K29qTEFHVGFzOWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV1hwcGMyVllndldqYjJzUlVTOTFrd3NWTHRtNnA1WWs0bjVCYTcycWUwOUFmQklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ294d2ZZVVJieC9tT2I5bDVrbFZZQmtoWTROZHJ1alJJN3Q3WGFzNTUxRC9LbmhoOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOUVZGeC9xK1JSZE84Q1IwbkhuT09iTmRDT25URlYvV01RVlZwK0p0YnpUZEdsWUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMG9ab1lwOVMyRlJZeVVablhVdzYySlg2U1hBaHZtQWk2OTF5bXpjekpJTDAvTHh5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hqMDlFVXUzdkhlcWFpOGlwM1Z6L28xTEtPQUFYTHBVTitaRGgyeSsyVHQ1Um5HZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxSDJyeXQ0RU9Lbjd0dmhLM01mV25DSVNtQW1MRktObGFWT3ZZckZMUGQ3Y09XVUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV01HaE4zb21SRE03Q3FCNjRsK2tPYkRFTFVNemJTSXk2MGlSbW9QK1VmQlJ4TjJNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlZQWdIVVlleU5nc3hUQ3ZQQVBrUEtmN0FrUlNJMGtRUVdxSklTcUpZVkx6SmNVOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBYU9BWHB4NGRDQ0JUZTRjLzJESkpkNXVHMy9BcXJhczVsVEJMTTdORmRDUTRuaVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RWdGxYVGxFQmN4N0Fqb2NpeWJONmlXTGlMaXZDcHJhb3BhdEJjakxGUjFld25kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tERGd2MEZBeDd2akhMd1pjaVFlMDlGdkNpTi80RXRsL0crQ1d5SExNb1dDSy83NycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJcks2Y01ZbksrT2ZwbmdMOFVjM3M1Zy9BNUhUUFkxMDJ4ajl2U1dpdjE4dno5K1onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndnpBaDZLVUp5ZG55VHlpaEo1aHg1NjNwUkl2cVlvZmJzZGg3d3N3dDJvTC9vb3UyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z3NkJ0UDN5TDJpVkllem1HcEZnSDhYeTN4RExnbW9XQ1NVMVo3bG9obTVwWWc5bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYLzRiVXQ1NWthQUQ0L3VXMWJNT0hKZVZZRjJ1UWh5a0pwSFJmZk1tUldaV2ZtYjgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3krMS8wYTd4ZElvVzB2TE5VVjZZbHdmdFgwbUg2b0liTjgwdFhVZlhheWxtRlpqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Q1UXRVdjZETnE3SE1ONyszWlBsZ2pXWE5RQkxjN3Z6R0tpU3ZYQmxhL3ZFaXRKTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpaWN0MTEzUzViZDA1WHlNcGFFcjJJdGgvMUIveCtHNWNVelJscFE0S0pMN25JbDEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJVYXJzblI1VjZsOHJmemlGZXQwQk9OKzZWYVFacmJIOWkzeWhQdGtRcnJXVjJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8raEkvYnJYeHJPcXQ5UDB5YjdHRFVDZjhwYTJiNlZxaDhicTc1VVh1Zk5meUNsZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtVXllL0pKOVl6S3BmNE5tOXpFRHRUUktCeFRMTjEydVc5N3pmcVdlL0t0d1plUGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVB3M0l5ak9TMU8xNWlqTXRTVi9NMlgyUlZPdlBwdzRmL0l0RTViR3dRejhDYjVFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NNNHNHM05sVHZTVzdWcVlYbFduSFY4RUcycldGT2xNdEEzWkx1ZE14alZXVUo3SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNdmNPRHYvREZNVkl3cEszb1RyN0xTdFkrWThTa3M2enRnUzRzOVZzYmRwc2hUV0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOEFPSkNtdVlDTjNHemFUbzdiR29ieE1LK2FNTjkrOXk1WDdWMlBoWEQ3Y1JrSmk5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ210bmhhMzJlbUMyMWZYeUx2Rm1vVXRWbjhjMDI2cTAwRFJ2cjQ5KzJHOWRpSnMwQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNVkZ2d2Q2dS9yY05OTFZsSSs3UndqWDlXYTdxMkdyNTUvaU1EUFF1UDd6NGNISVonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWkZKdlpmRW5CY3MvdnhIZExkSk01KzMyUGsveVBCMHZrMmhvZmp4Yk5RQXo4UGY4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lRL3pkcnR0ZnIxd1BoNmFKQVZjQ1JYcys0RHhvbjdBNklaVjBnZXJCekNmdUo3NScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLNW4wd2NFL0RnLy9SeXRQbDlrb09zT3VCWjc0ZUhFYTJEdXE1N0h5dnZJdDF2LzQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndndOVGY4bHJkQUFBJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5taW4uanMuZ3onLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDAsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAzMzogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvciknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgeyB3cml0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLyohXG4gKiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLmpzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICA6IE1JVFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xudmFyIE1FRElBX1BSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VGRVJTX1JFRFVDRURfTU9USU9OID0gIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWNlKSI7XG52YXIgQ1JFQVRFRCA9IDE7XG52YXIgTU9VTlRFRCA9IDI7XG52YXIgSURMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UgPSAzO1xudmFyIE1PVklORyA9IDQ7XG52YXIgU0NST0xMSU5HID0gNTtcbnZhciBEUicKICAgICAgICAgICAgICAgICAgICAgICAgYidBR0dJTkcgPSA2O1xudmFyIERFU1RST1lFRCA9IDc7XG52YXIgU1RBVEVTID0ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1JFQVRFRDogQ1JFQVRFRCxcbiAgTU9VTlRFRDogTU9VTlRFRCxcbiAgSURMRTogSUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEUsXG4gIE1PVklORzogTU9WSU5HLFxuICBTQ1JPTExJTkc6IFNDUk9MTElORyxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RSQUdHSU5HOiBEUkFHR0lORyxcbiAgREVTVFJPWUVEOiBERVNUUk9ZRURcbn07XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBlbXB0eShhcnJheSkge1xuICBhcnJheS5sZW5ndGggPSAwO1xufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gc2xpY2UoYXJyYXlMaWtlLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiBBcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMaWtlLCBzdGFydCwgZW5kKTtcbn1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMuYmluZC5hcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuYywgW251bGxdLmNvbmNhdChzbGljZShhcmd1bWVudHMsIDEpKSk7XG59XG5cbnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgbmV4dFRpY2sgPSBzZXRUaW1lb3V0O1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb29wKCkge307XG5cbmZ1bmN0aW9uIHJhZihmdW5jKSB7XG4gIHJldHVybiByZXF1ZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FuaW1hdGlvbkZyYW1lKGZ1bmMpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2YodHlwZSwgcycKICAgICAgICAgICAgICAgICAgICAgICAgYid1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSB0eXBlO1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaXNPYmplY3Qoc3ViamVjdCkge1xuICByZXR1cm4gIWlzTnVsbChzdWJqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJykgJiYgdHlwZU9mKCJvYmplY3QiLCBzdWJqZWN0KTtcbn1cblxudmFyIGlzQXJyYXkgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQXJyYXkuaXNBcnJheTtcbnZhciBpc0Z1bmN0aW9uID0gYXBwbHkodHlwZU9mLCAiZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIik7XG52YXIgaXNTdHJpbmcgPSBhcHBseSh0eXBlT2YsICJzdHJpbmciKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsICJ1bmRlZmluZWQiKTtcblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGlzTnVsbChzdWJqZWN0KSB7XG4gIHJldHVybiBzdWJqZWN0ID09PSBudWxsOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChzdWJqZWN0KSB7XG4gIHRyeSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBzdWJqZWN0IGluc3RhbmNlb2YgKHN1YmplY3Qub3duZXJEb2N1bWVudC5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdFZpZXcgfHwgd2luZG93KS5IVE1MRWxlbWVudDtcbiAgfSBjYXRjaCAoZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9BcnJheSh2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gIHRvQXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5KHZhbHVlcykuZm9yRWFjaChpdGVyYXRlZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhhcnJheSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpID4gLScKICAgICAgICAgICAgICAgICAgICAgICAgYicxO1xufVxuXG5mdW5jdGlvbiBwdXNoKGFycmF5LCBpdGVtcykge1xuICBhcnJheS5wdXNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5hcHBseShhcnJheSwgdG9BcnJheShpdGVtcykpO1xuICByZXR1cm4gYXJyYXk7XG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGFkZCkge1xuICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKGVsbSkge1xuICAgIGZvckVhY2goY2xhc3NlcywgZnVuY3Rpb24gKG5hbWUpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAobmFtZSkge1xuICAgICAgICBlbG0uY2xhc3NMaXN0W2FkZCA/ICJhZGQiICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYWRkQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4gIHRvZ2dsZUNsYXNzKGVsbSwgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzU3RyaW5nKGNsYXNzZXMpID8gY2xhc3Nlcy5zcGxpdCgiICIpIDogY2xhc3NlcywgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmQocGFyZW50LCBjaGlsZHJlbikge1xuICBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaChjaGlsZHJlbiwgcGFyZW50LmFwcGVuZENoaWxkLmJpbmQocGFyZW50KSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBiZWZvcmUobm9kZXMsIHJlZikge1xuICBmb3JFYWNoKG5vZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCBub2RlKS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyZW50Tm9kZTtcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5pbnNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0QmVmb3JlKG5vZGUsIHJlZik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXMoZWxtLCBzZWxlY3Rvcikge1xuICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoZWxtWyJtc01hdGNoZXNTZWxlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCBzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgdmFyIGNoaWxkcmVuMiA9IHBhcmVudCA/IHNsaWNlKHBhcmVudC5jaGlsZHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pIDogW107XG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuMi5maWx0ZXIoZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChjaGlsZCkge1xuICAgIHJldHVybiBtYXRjaGVzKGNoaWxkLCBzZWxlY3RvciknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9KSA6IGNoaWxkcmVuMjtcbn1cblxuZnVuY3Rpb24gY2hpbGQocGFyZW50LCBzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4ocGFyZW50LCBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IpWzBdIDogcGFyZW50LmZpcnN0RWxlbWVudENoaWxkO1xufVxuXG52YXIgb3duS2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXMgPSBPYmplY3Qua2V5cztcblxuZnVuY3Rpb24gZm9yT3duKG9iamVjdCwgaXRlcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVlLCByaWdodCkge1xuICBpZiAob2JqZWN0KSB7XG4gICAgKHJpZ2h0ID8gb3duS2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvd25LZXlzKG9iamVjdCkpLmZvckVhY2goZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIChrZXkpIHtcbiAgICAgIGtleSAhPT0gIl9fcHJvdG9fXyIgJiYgaXRlcmF0ZWUobycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdFtrZXldLCBrZXkpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIGFzc2lnbihvYmplY3QpIHtcbiAgc2xpY2UoYXJndW1lbnRzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSkuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgZm9yT3duKHNvdXJjZSwgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInXTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtZXJnZShvYmplY3QpIHtcbiAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoc291cmNlKSB7XG4gICAgZm9yT3duKHNvdXJjZSwgZnVuY3Rpb24gKHZhbHVlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5KSB7XG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFtrZXldID0gdmFsdWUuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IG1lcmdlKHt9LCBpc09iamVjdChvYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0W2tleV0pID8gb2JqZWN0W2tleV0gOiB7fSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzKSB7XG4gIGZvckVhY2goa2V5cyB8fCBvd25LZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V5KSB7XG4gICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZUF0dHJpYnV0ZShlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsbXMsIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAoZWxtKSB7XG4gICAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbG0gJiYgZWxtLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSkge1xuICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gKHZhbHVlMiwgbmFtZSkge1xuICAgICAgc2V0QXR0cmlidXRlKGVsbXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1lLCB2YWx1ZTIpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvckVhY2goZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXMsIGZ1bmN0aW9uIChlbG0pIHtcbiAgICAgIGlzTnVsbCh2YWx1ZSkgfHwgdmFsdWUgPT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sIGF0dHJzKSA6IGVsbS5zZXRBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY3JlYXRlKHRhZywgYXR0cnMsIHBhcmVudCkge1xuICB2YXIgZWxtID0gZG9jdW1lbnQuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZUVsZW1lbnQodGFnKTtcblxuICBpZiAoYXR0cnMpIHtcbiAgICBpc1N0cmluZygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMpID8gYWRkQ2xhc3MoZWxtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cnMpO1xuICB9XG5cbiAgcGFyZW50ICYmIGFwcGVuZChwYXJlbnQsIGVsbSk7XG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gZWxtO1xufVxuXG5mdW5jdGlvbiBzdHlsZShlbG0sIHByb3AsIHZhbHVlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKGVsbSlbcHJvcF07XG4gIH1cblxuICBpZiAoIWlzTnVsbCh2YWx1ZSkpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtLnN0eWxlW3Byb3BdID0gIiIgKyB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gIHN0eWxlKGVsbSwgImRpc3BsYXkiLCBkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTIpO1xufVxuXG5mdW5jdGlvbiBmb2N1cyhlbG0pIHtcbiAgZWxtWyJzZXRBY3RpdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIl0gJiYgZWxtWyJzZXRBY3RpdmUiXSgpIHx8IGVsbS5mb2N1cyh7XG4gICAgcHJldmVudFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGw6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbG0sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyKSB7XG4gIHJldHVybiBlbG0uZ2V0QXR0cmlidXRlKGF0dHIpO1xufVxuXG5mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gaGFzQ2xhc3MoZWxtLCBjbGFzc05hbWUpIHtcbiAgcmV0dXJuIGVsbSAmJiBlbG0uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xufVxuXG5mdW5jdGlvbiByZWN0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2Rlcykge1xuICBmb3JFYWNoKG5vZGVzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSHRtbChodG1sKSB7XG4gIHJldHVybiBjaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGQobmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAidGV4dC9odG1sIicKICAgICAgICAgICAgICAgICAgICAgICAgYicpLmJvZHkpO1xufVxuXG5mdW5jdGlvbiBwcmV2ZW50KGUsIHN0b3BQcm9wYWdhdGlvbiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gIGlmIChzdG9wUHJvcGFnYXRpb24pJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBxdWVyeShwYXJlbnQsIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvcikge1xuICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5QWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBzZWxlY3RvciA/IHNsaWNlKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3RvcikpIDogW107XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBmYWxzZSk7XG59XG5cbmZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB0aW1lT2YoZSkge1xuICByZXR1cm4gZS50aW1lU3RhbXA7XG59XG5cbmZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiB1bml0KHZhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiB2YWx1ZSA/IHZhbHVlICsgInB4IiA6ICIiO1xufVxuXG52YXIgUFJPSkVDVF9DT0RFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJzcGxpZGUiO1xudmFyIERBVEFfQVRUUklCVVRFID0gImRhdGEtIiArIFBST0pFQ1RfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NPREU7XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCJbIiArIFBST0pFQ1RfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidPREUgKyAiXSAiICsgKG1lc3NhZ2UgfHwgIiIpKTtcbiAgfVxufVxuXG52YXIgbWluID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4LFxuICAgIGZsb29yID0gTWF0aC5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvb3IsXG4gICAgY2VpbCA9IE1hdGguY2VpbCxcbiAgICBhYnMgPSBNYXRoLmFicztcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmZ1bmN0aW9uIGFwcHJveGltYXRlbHlFcXVhbCh4LCB5LCBlcHNpbG9uKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gYWJzKHggLSB5KSA8IGVwc2lsb247XG59XG5cbmZ1bmN0aW9uIGJldHdlZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG51bWJlciwgeCwgeSwgZXhjbHVzaXZlKSB7XG4gIHZhciBtaW5pbXVtID0gbWluKHgsIHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgdmFyIG1heGltdW0gPSBtYXgoeCwgeSk7XG4gIHJldHVybiBleGNsdXNpdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gbWluaW11bSA8IG51bWJlciAmJiBudW1iZXIgPCBtYXhpbXVtIDogbWluaW11bSA8PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyICYmIG51bWJlciA8PSBtYXhpbXVtO1xufVxuXG5mdW5jdGlvbiBjbGFtcCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyLCB4LCB5KSB7XG4gIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heGltdW0gPSBtYXgoeCwgeSk7XG4gIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIpLCBtYXhpbXVtKTtcbn1cblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiArKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid4ID4gMCkgLSArKHggPCAwKTtcbn1cblxuZnVuY3Rpb24gY2FtZWxUb0tlYmFiKHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiQxLSQyIikudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0KHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csIHJlcGxhY2VtZW50cykge1xuICBmb3JFYWNoKHJlcGxhY2VtZW50cywgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyZXBsYWNlbWVudCkge1xuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCIlcyIsICIiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyArIHJlcGxhY2VtZW50KTtcbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBwYWQobnVtYmVyKSB7XG4gIHJldHVybiBudW1iZXIgPCAxMCA/ICIwIiArIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgOiAiIiArIG51bWJlcjtcbn1cblxudmFyIGlkcyA9IHt9O1xuXG5mdW5jdGlvbiB1bmlxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VlSWQocHJlZml4KSB7XG4gIHJldHVybiAiIiArIHByZWZpeCArIHBhZChpZHNbcHJlZml4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ10gPSAoaWRzW3ByZWZpeF0gfHwgMCkgKyAxKTtcbn1cblxuZnVuY3Rpb24gRXZlbnRCaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyKCkge1xuICB2YXIgbGlzdGVuZXJzID0gW107XG5cbiAgZnVuY3Rpb24gYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFyZ2V0cywgZXZlbnRzLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICAgIGZvckVhY2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQodGFyZ2V0cywgZXZlbnRzLCBmdW5jdGlvbiAodGFyZ2V0LCBldmVudCwgbmFtZXNwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSkge1xuICAgICAgdmFyIGlzRXZlbnRUYXJnZXQgPSAoImFkZEV2ZW50TGlzdGVuZXIiICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbiB0YXJnZXQpO1xuICAgICAgdmFyIHJlbW92ZXIgPSBpc0V2ZW50VGFyZ2V0ID8gdGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zKSA6IHRhcmdldFsicmVtb3ZlTGlzdGVuZXIiXS5iaW5kKHRhcmdldCwgY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxiYWNrKTtcbiAgICAgIGlzRXZlbnRUYXJnZXQgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIoZXZlbnQsIGNhbGxiYWNrLCBvcHRpb25zKSA6IHRhcmdldFsiYWRkTGlzdGVuZXIiXScKICAgICAgICAgICAgICAgICAgICAgICAgYicoY2FsbGJhY2spO1xuICAgICAgbGlzdGVuZXJzLnB1c2goW3RhcmdldCwgZXZlbnQsIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UsIGNhbGxiYWNrLCByZW1vdmVyXSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gdW5iaW5kKHRhcmdldHMsIGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICBmb3JFYWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50KHRhcmdldHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BhY2UpIHtcbiAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIChsaXN0ZW5lcikge1xuICAgICAgICBpZiAobGlzdGVuZXJbMF0gPT09IHRhcmdldCAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJbMV0gPT09IGV2ZW50ICYmIGxpc3RlbmVyWzJdID09PSBuYW1lc3BhY2UgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmICghY2FsbGJhY2sgfHwgbGlzdGVuZXJbM10gPT09IGNhbGxiYWNrKSkge1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBsaXN0ZW5lcls0XSgpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKHRhcmdldCwgdHlwZSwgZGV0YWlsKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBlO1xuICAgIHZhciBidWJibGVzID0gdHJ1ZTtcblxuICAgIGlmICh0eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW9mIEN1c3RvbUV2ZW50ID09PSAiZnVuY3Rpb24iKSB7XG4gICAgICBlID0gbmV3IEN1c3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21FdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmJsZXM6IGJ1YmJsZXMsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBkZXRhaWw6IGRldGFpbFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50Iik7XG4gICAgICBlLmluaXRDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgZmFsc2UsIGRldGFpbCk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGUpO1xuICAgIHJldHVybiBlO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGZvckVhY2hFdmVudCh0YXJnZXRzLCBldmVudHMsIGl0ZXJhdGVlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIGZvckVhY2godGFyZ2V0cywgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRhcmdldCAmJiBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2ZW50czIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGV2ZW50czIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5TKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIHZhciBmcmFnbWVudCA9IGV2ZW50TlMuc3BsaXQoIi4iKTtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaXRlcmF0ZWUodGFyZ2V0LCBmcmFnbWVudFswXSwgZnJhZ21lbnRbMV0pO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3knCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGF0YVs0XSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KGxpc3RlbmVycyk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgcmV0dXJuIHtcbiAgICBiaW5kOiBiaW5kLFxuICAgIHVuYmluZDogdW5iaW5kLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxudmFyIEVWRU5UX01PVU5URUQgPSAibW91bnRlZCI7XG52YXIgRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQURZID0gInJlYWR5IjtcbnZhciBFVkVOVF9NT1ZFID0gIm1vdmUiO1xudmFyIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9NT1ZFRCA9ICJtb3ZlZCI7XG52YXIgRVZFTlRfQ0xJQ0sgPSAiY2xpY2siO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9BQ1RJVkUgPSAiYWN0aXZlIjtcbnZhciBFVkVOVF9JTkFDVElWRSA9ICJpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RpdmUiO1xudmFyIEVWRU5UX1ZJU0lCTEUgPSAidmlzaWJsZSI7XG52YXIgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0hJRERFTiA9ICJoaWRkZW4iO1xudmFyIEVWRU5UX1JFRlJFU0ggPSAicmVmcmVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX1VQREFURUQgPSAidXBkYXRlZCI7XG52YXIgRVZFTlRfUkVTSScKICAgICAgICAgICAgICAgICAgICAgICAgYidaRSA9ICJyZXNpemUiO1xudmFyIEVWRU5UX1JFU0laRUQgPSAicmVzaXplZCI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIEVWRU5UX0RSQUcgPSAiZHJhZyI7XG52YXIgRVZFTlRfRFJBR0dJTkcgPSAiZHJhZ2dpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnIjtcbnZhciBFVkVOVF9EUkFHR0VEID0gImRyYWdnZWQiO1xudmFyIEVWRU5UX1NDUicKICAgICAgICAgICAgICAgICAgICAgICAgYidPTEwgPSAic2Nyb2xsIjtcbnZhciBFVkVOVF9TQ1JPTExFRCA9ICJzY3JvbGxlZCI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEVWRU5UX09WRVJGTE9XID0gIm92ZXJmbG93IjtcbnZhciBFVkVOVF9ERVNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPWSA9ICJkZXN0cm95IjtcbnZhciBFVkVOVF9BUlJPV1NfTU9VTlRFRCA9ICJhcnJvd3M6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50ZWQiO1xudmFyIEVWRU5UX0FSUk9XU19VUERBVEVEID0gImFycm93czp1cGRhdGVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEID0gInBhZ2luYXRpb246bW91bnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QiO1xudmFyIEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCA9ICJwYWdpbmF0aW9uOnVwZGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIjtcbnZhciBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAibmF2aWdhdGlvbjptb3VuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZCI7XG52YXIgRVZFTlRfQVVUT1BMQVlfUExBWSA9ICJhdXRvcGxheTpwbGF5IjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgRVZFTlRfQVVUT1BMQVlfUExBWUlORyA9ICJhdXRvcGxheTpwbGF5aW5nIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgRVZFTlRfQVVUT1BMQVlfUEFVU0UgPSAiYXV0b3BsYXk6cGF1c2UiO1xudicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBFVkVOVF9MQVpZTE9BRF9MT0FERUQgPSAibGF6eWxvYWQ6bG9hZGVkIjtcbnZhciBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfU0xJREVfS0VZRE9XTiA9ICJzayI7XG52YXIgRVZFTlRfU0hJRlRFRCA9ICJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2giO1xudmFyIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0gImVpIjtcblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpIHtcbiAgdmFyIGJ1cyA9IFNwbGlkZTIgPyBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMi5ldmVudC5idXMgOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcblxuICBmdW5jdGlvbiBvbihldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLCBjYWxsYmFjaykge1xuICAgIGJpbmRlci5iaW5kKGJ1cywgdG9BcnJheShldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzKS5qb2luKCIgIiksIGZ1bmN0aW9uIChlKSB7XG4gICAgICBjYWxsYmFjay5hcHBseShjYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2ssIGlzQXJyYXkoZS5kZXRhaWwpID8gZS5kZXRhaWwgOiBbXSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgIGJpbmRlci5kaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGF0Y2goYnVzLCBldmVudCwgc2xpY2UoYXJndW1lbnRzLCAxKSk7XG4gIH1cblxuICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKFNwbGlkZTIpIHtcbiAgICBTcGxpZGUyLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXIuZGVzdHJveSk7XG4gIH1cblxuICByZXR1cm4gYXNzaWduKGJpbmRlciwge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBidXM6IGJ1cyxcbiAgICBvbjogb24sXG4gICAgb2ZmOiBhcHBseShiaW5kZXIudW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmluZCwgYnVzKSxcbiAgICBlbWl0OiBlbWl0XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBSZXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzdEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZSwgbGltaXQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIHZhciBub3cgPSBEYXRlLm5vdztcbiAgdmFyIHN0YXJ0VGltZTtcbiAgdmFyIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlID0gMDtcbiAgdmFyIGlkO1xuICB2YXIgcGF1c2VkID0gdHJ1ZTtcbiAgdmFyIGNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCA9IDA7XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmICghcGF1c2VkKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgcmF0ZSA9IGludGVydmFsID8gbWluKChub3coKSAtIHN0YXJ0VGltZSkgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW50ZXJ2YWwsIDEpIDogMTtcbiAgICAgIG9uVXBkYXRlICYmIG9uVXBkYXRlKHJhdGUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKHJhdGUgPj0gMSkge1xuICAgICAgICBvbkludGVydmFsKCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBzdGFydFRpbWUgPSBub3coKTtcblxuICAgICAgICBpZiAobGltaXQgJiYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJysrY291bnQgPj0gbGltaXQpIHtcbiAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWQgPSByYWYodXBkYXRlKTtcbiAgICB9XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gc3RhcnQocmVzdW1lKSB7XG4gICAgcmVzdW1lIHx8IGNhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWwoKTtcbiAgICBzdGFydFRpbWUgPSBub3coKSAtIChyZXN1bWUgPyByYXRlICogaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidydmFsIDogMCk7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgaWQgPSByYWYodXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBwYXVzZWQgPSB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJld2luZCgpIHtcbiAgICBzdGFydFRpbWUgPSBub3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgcmF0ZSA9IDA7XG5cbiAgICBpZiAob25VcGRhdGUpIHtcbiAgICAgIG9uVScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZShyYXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlkICYmIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgICByYXRlID0gMDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWQgPSAwO1xuICAgIHBhdXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0KHRpbWUpIHtcbiAgICBpbnRlcnZhbCA9IHRpbWU7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNQYXVzZWQoKSB7XG4gICAgcmV0dXJuIHBhdXNlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHN0YXJ0OiBzdGFydCxcbiAgICByZXdpbmQ6IHJld2luZCxcbiAgICBwYXVzZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhdXNlLFxuICAgIGNhbmNlbDogY2FuY2VsLFxuICAgIHNldDogc2V0LFxuICAgIGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BhdXNlZDogaXNQYXVzZWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gU3RhdGUoaW5pdGlhbFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZSkge1xuICB2YXIgc3RhdGUgPSBpbml0aWFsU3RhdGU7XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldCh2YWx1ZSkge1xuICAgIHN0YXRlID0gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoc3RhdGVzKSB7XG4gICAgcmV0dXJuIGluY2x1ZGVzKHRvQXJyYXkoc3RhdGVzKSwgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2V0OiBzZXQsXG4gICAgaXM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc1xuICB9O1xufVxuXG5mdW5jdGlvbiBUaHJvdHRsZShmdW5jLCBkdXJhdGlvbikge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKGR1cmF0aW9uIHx8IDAsIGZ1bmMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudWxsLCAxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpbnRlcnZhbC5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NQYXVzZWQoKSAmJiBpbnRlcnZhbC5zdGFydCgpO1xuICB9O1xufVxuXG5mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTWVkaWEoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIHN0YXRlID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTIuc3RhdGU7XG4gIHZhciBicmVha3BvaW50cyA9IG9wdGlvbnMuYnJlYWtwb2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzIHx8IHt9O1xuICB2YXIgcmVkdWNlZE1vdGlvbiA9IG9wdGlvbnMucmVkdWNlZE1vdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gfHwge307XG4gIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcigpO1xuICB2YXIgcXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICB2YXIgaXNNaW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAibWluIjtcbiAgICBvd25LZXlzKGJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cykuc29ydChmdW5jdGlvbiAobiwgbSkge1xuICAgICAgcmV0dXJuIGlzTWluID8gK24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0gK20gOiArbSAtICtuO1xuICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJlZ2lzdGVyKGJyZWFrcG9pbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiA6ICJtYXgiKSArICItd2lkdGg6IiArIGtleSArICJweCkiKTtcbiAgICB9KTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmVnaXN0ZXIocmVkdWNlZE1vdGlvbiwgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT04pO1xuICAgIHVwZGF0ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveShjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xldGVseSkge1xuICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICBiaW5kZXIuZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihvcHRpb25zMiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5TGlzdCA9IG1hdGNoTWVkaWEocXVlcnkpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaGFuZ2UiLCB1cGRhdGUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBxdWVyaWVzLnB1c2goW29wdGlvbnMyLCBxdWVyeUxpc3RdKTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdmFyIGRlc3Ryb3llZCA9IHN0YXRlLmlzKERFU1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUk9ZRUQpO1xuICAgIHZhciBkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmVjdGlvbjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIG1lcmdlZCA9IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQyLCBlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cnkpIHtcbiAgICAgIHJldHVybiBtZXJnZShtZXJnZWQyLCBlbnRyeVsxXS5tYXRjaGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IGVudHJ5WzBdIDoge30pO1xuICAgIH0sIHt9KTtcbiAgICBvbWl0KG9wdGlvbnMpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzZXQobWVyZ2VkKTtcblxuICAgIGlmIChvcHRpb25zLmRlc3Ryb3kpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTcGxpZGUyLmRlc3Ryb3kob3B0aW9ucy5kZXN0cm95ID09PSAiY29tcGxldGVseSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB9IGVsc2UgaWYgKGRlc3Ryb3llZCkge1xuICAgICAgZGVzdHJveSh0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgICBTcGxpZGUyLm1vdW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlY3Rpb24gIT09IG9wdGlvbnMuZGlyZWN0aW9uICYmIFNwbGlkZTIucmVmcmVzaCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2UoZW5hYmxlKSB7XG4gICAgaWYgKG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRjaE1lZGlhKE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pLm1hdGNoZXMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbmFibGUgPyBtZXJnZShvcHRpb25zLCByZWR1Y2VkTW90aW9uKSA6IG9taXQobycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMsIG93bktleXMocmVkdWNlZE1vdGlvbikpO1xuICAgIH1cbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBzZXQob3B0cywgYmFzZSwgbm90aWZ5KSB7XG4gICAgbWVyZ2Uob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdHMpO1xuICAgIGJhc2UgJiYgbWVyZ2UoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zKSwgb3B0cyk7XG5cbiAgICBpZiAobm90aWZ5IHx8ICFzdGF0ZS5pcyhDUkVBVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJykpIHtcbiAgICAgIFNwbGlkZTIuZW1pdChFVkVOVF9VUERBVEVELCBvcHRpb25zKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogc2V0dXAsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgcmVkdWNlOiByZWR1Y2UsXG4gICAgc2V0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0XG4gIH07XG59XG5cbnZhciBBUlJPVyA9ICJBcnJvdyI7XG52YXIgQVJST1dfTEVGVCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBBUlJPVyArICJMZWZ0IjtcbnZhciBBUlJPV19SSUdIVCA9IEFSUk9XICsgIlJpZ2h0IjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgQVJST1dfVVAgPSBBUlJPVyArICJVcCI7XG52YXIgQVJST1dfRE9XTiA9IEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyArICJEb3duIjtcbnZhciBMVFIgPSAibHRyIjtcbnZhciBSVEwgPSAicnRsIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgVFRCID0gInR0YiI7XG52YXIgT1JJRU5UQVRJT05fTUFQID0ge1xuICB3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g6IFsiaGVpZ2h0Il0sXG4gIGxlZnQ6IFsidG9wIiwgInJpZ2h0Il0sXG4gIHJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogWyJib3R0b20iLCAibGVmdCJdLFxuICB4OiBbInkiXSxcbiAgWDogWyJZIl0sXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidZOiBbIlgiXSxcbiAgQXJyb3dMZWZ0OiBbQVJST1dfVVAsIEFSUk9XX1JJR0hUXSxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIEFycm93UmlnaHQ6IFtBUlJPV19ET1dOLCBBUlJPV19MRUZUXVxufTtcblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIERpcmVjdGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gcmVzb2x2ZShwcm9wLCBheGlzT25seSwgZGlyZWN0aW9uKSB7XG4gICAgZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiA9IGRpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcbiAgICB2YXIgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZGlyZWN0aW9uID09PSBSVEwgJiYgIWF4aXNPbmx5ID8gMSA6IGRpcmVjdGlvbiA9PScKICAgICAgICAgICAgICAgICAgICAgICAgYic9IFRUQiA/IDAgOiAtMTtcbiAgICByZXR1cm4gT1JJRU5UQVRJT05fTUFQW3Byb3BdICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgYidPUklFTlRBVElPTl9NQVBbcHJvcF1baW5kZXhdIHx8IHByb3AucmVwbGFjZSgvd2lkdGh8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZnR8cmlnaHQvaSwgZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQpIHtcbiAgICAgIHZhciByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VwbGFjZW1lbnQgPSBPUklFTlRBVElPTl9NQVBbbWF0Y2gudG9Mb3dlckNhc2UoKV1baW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4XSB8fCBtYXRjaDtcbiAgICAgIHJldHVybiBvZmZzZXQgPiAwID8gcmVwbGFjZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoMSkgOiByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGFjZW1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvcmllbnQodmFsdWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuIHZhbHVlICogKG9wdGlvbnMuZGlyZWN0aW9uID09PSBSVEwgPyAxJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA6IC0xKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb3JpZW50OiBvcmllbnRcbiAgfTtcbn1cblxudmFyIFJPTEUgPSAicm9sZSI7XG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBQl9JTkRFWCA9ICJ0YWJpbmRleCI7XG52YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBBUklBX1BSRUZJWCA9ICJhcmlhLSI7XG52YXIgQVJJQV9DT05UUk9MUyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBBUklBX1BSRUZJWCArICJjb250cm9scyI7XG52YXIgQVJJQV9DVVJSRU5UID0gQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgImN1cnJlbnQiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBBUklBX1BSRUZJWCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAic2VsZWN0ZWQiO1xudmFyIEFSSUFfTEFCRUwgPSBBUklBX1BSRUZJWCArICJsYWJlbCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUFJFRklYICsgImxhYmVsbGVkYicKICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcbnZhciBBUklBX0hJRERFTiA9IEFSSUFfUFJFRklYICsgImhpZGRlbiI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIEFSSUFfT1JJRU5UQVRJT04gPSBBUklBX1BSRUZJWCArICJvcmllbnRhdGlvbiI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIEFSSUFfUk9MRURFU0NSSVBUSU9OID0gQVJJQV9QUkVGSVggKyAicm9sZWRlc2NyaXB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiI7XG52YXIgQVJJQV9MSVZFID0gQVJJQV9QUkVGSVggKyAibGl2ZSI7XG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfQlVTWSA9IEFSSUFfUFJFRklYICsgImJ1c3kiO1xudmFyIEFSSUFfQVRPTUlDID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfUFJFRklYICsgImF0b21pYyI7XG52YXIgQUxMX0FUVFJJQlVURVMgPSBbUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBQl9JTkRFWCwgRElTQUJMRUQsIEFSSUFfQ09OVFJPTFMsIEFSSUFfQ1VSUkVOVCwgQVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwgQVJJQV9ISURERU4sIEFSSUFfT1JJRU5UQScKICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OLCBBUklBX1JPTEVERVNDUklQVElPTl07XG52YXIgQ0xBU1NfUFJFRklYID0gUFJPSicKICAgICAgICAgICAgICAgICAgICAgICAgYidFQ1RfQ09ERSArICJfXyI7XG52YXIgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICJpcy0iJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBDTEFTU19ST09UID0gUFJPSkVDVF9DT0RFO1xudmFyIENMQVNTX1RSQUNLJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENMQVNTX1BSRUZJWCArICJ0cmFjayI7XG52YXIgQ0xBU1NfTElTVCA9IENMQVNTX1BSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VGSVggKyAibGlzdCI7XG52YXIgQ0xBU1NfU0xJREUgPSBDTEFTU19QUkVGSVggKyAic2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIjtcbnZhciBDTEFTU19DTE9ORSA9IENMQVNTX1NMSURFICsgIi0tY2xvbmUiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBDTEFTU19DT05UQUlORVIgPSBDTEFTU19TTElERSArICJfX2NvbnRhaW5lciI7XG52JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIENMQVNTX0FSUk9XUyA9IENMQVNTX1BSRUZJWCArICJhcnJvd3MiO1xudmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPVyA9IENMQVNTX1BSRUZJWCArICJhcnJvdyI7XG52YXIgQ0xBU1NfQVJST1dfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YgPSBDTEFTU19BUlJPVyArICItLXByZXYiO1xudmFyIENMQVNTX0FSUk9XX05FWFQgPSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQVJST1cgKyAiLS1uZXh0IjtcbnZhciBDTEFTU19QQUdJTkFUSU9OID0gQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRUZJWCArICJwYWdpbmF0aW9uIjtcbnZhciBDTEFTU19QQUdJTkFUSU9OX1BBR0UgPSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUEFHSU5BVElPTiArICJfX3BhZ2UiO1xudmFyIENMQVNTX1BST0dSRVNTID0gQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1BSRUZJWCArICJwcm9ncmVzcyI7XG52YXIgQ0xBU1NfUFJPR1JFU1NfQkFSID0gQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1BST0dSRVNTICsgIl9fYmFyIjtcbnZhciBDTEFTU19UT0dHTEUgPSBDTEFTU19QUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lYICsgInRvZ2dsZSI7XG52YXIgQ0xBU1NfVE9HR0xFX1BMQVkgPSBDTEFTU19UT0dHTEUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJysgIl9fcGxheSI7XG52YXIgQ0xBU1NfVE9HR0xFX1BBVVNFID0gQ0xBU1NfVE9HR0xFICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJfX3BhdXNlIjtcbnZhciBDTEFTU19TUElOTkVSID0gQ0xBU1NfUFJFRklYICsgInNwaW5uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIjtcbnZhciBDTEFTU19TUiA9IENMQVNTX1BSRUZJWCArICJzciI7XG52YXIgQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX0lOSVRJQUxJWkVEID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJpbml0aWFsaXplZCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIENMQVNTX0FDVElWRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiYWN0aXZlIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgQ0xBU1NfUFJFViA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAicHJldiI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIENMQVNTX05FWFQgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgIm5leHQiO1xudmFyIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19WSVNJQkxFID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJ2aXNpYmxlIjtcbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfTE9BRElORyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibG9hZGluZyI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0ZPQ1VTX0lOID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJmb2N1cy1pbiI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIENMQVNTX09WRVJGTE9XID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJvdmVyZmxvdycKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIFNUQVRVU19DTEFTU0VTID0gW0NMQVNTX0FDVElWRSwgQ0xBU1NfVklTSUJMRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX1BSRVYsIENMQVNTX05FWFQsIENMQVNTX0xPQURJTkcsIENMQVNTX0ZPQ1VTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19JTiwgQ0xBU1NfT1ZFUkZMT1ddO1xudmFyIENMQVNTRVMgPSB7XG4gIHNsaWRlOiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfU0xJREUsXG4gIGNsb25lOiBDTEFTU19DTE9ORSxcbiAgYXJyb3dzOiBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfQVJST1dTLFxuICBhcnJvdzogQ0xBU1NfQVJST1csXG4gIHByZXY6IENMQVNTX0FSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPV19QUkVWLFxuICBuZXh0OiBDTEFTU19BUlJPV19ORVhULFxuICBwYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogQ0xBU1NfUEFHSU5BVElPTixcbiAgcGFnZTogQ0xBU1NfUEFHSU5BVElPTl9QQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxcbiAgc3Bpbm5lcjogQ0xBU1NfU1BJTk5FUlxufTtcblxuZnVuY3Rpb24gY2xvc2VzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnJvbSwgc2VsZWN0b3IpIHtcbiAgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gZnJvbS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgfVxuXG4gIHZhciBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xtID0gZnJvbTtcblxuICB3aGlsZSAoZWxtICYmIGVsbS5ub2RlVHlwZSA9PT0gMSkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBpZiAobWF0Y2hlcyhlbG0sIHNlbGVjdG9yKSkge1xuICAgICAgYnJlYWs7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cblxuICAgIGVsbSA9IGVsbS5wYXJlbnRFbGVtZW50O1xuICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBlbG07XG59XG5cbnZhciBGUklDVElPTiA9IDU7XG52YXIgTE9HX0lOVEVSVkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTCA9IDIwMDtcbnZhciBQT0lOVEVSX0RPV05fRVZFTlRTID0gInRvdWNoc3RhcnQgbW91c2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZG93biI7XG52YXIgUE9JTlRFUl9NT1ZFX0VWRU5UUyA9ICJ0b3VjaG1vdmUgbW91c2Vtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSI7XG52YXIgUE9JTlRFUl9VUF9FVkVOVFMgPSAidG91Y2hlbmQgdG91Y2hjYW5jZWwgbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNldXAgY2xpY2siO1xuXG5mdW5jdGlvbiBFbGVtZW50cyhTcGxpZGUyLCBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZSA9IEV2ZW50SW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlLm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UuYmluZDtcblxuICB2YXIgcm9vdCA9IFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLnJvb3Q7XG4gIHZhciBpMThuID0gb3B0aW9ucy5pMThuO1xuICB2YXIgZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnRzID0ge307XG4gIHZhciBzbGlkZXMgPSBbXTtcbiAgdmFyIHJvb3RDbGFzc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IFtdO1xuICB2YXIgdHJhY2tDbGFzc2VzID0gW107XG4gIHZhciB0cmFjaztcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBsaXN0O1xuICB2YXIgaXNVc2luZ0tleTtcblxuICBmdW5jdGlvbiBzZXR1cCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgY29sbGVjdCgpO1xuICAgIGluaXQoKTtcbiAgICB1cGRhdGUoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOVF9SRUZSRVNILCBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSk7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgc2V0dXApO1xuICAgIG9uKEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9VUERBVEVELCB1cGRhdGUpO1xuICAgIGJpbmQoZG9jdW1lbnQsIFBPSU5URVJfRE9XJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05fRVZFTlRTICsgIiBrZXlkb3duIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlzVXNpbmdLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V5ID0gZS50eXBlID09PSAia2V5ZG93biI7XG4gICAgfSwge1xuICAgICAgY2FwdHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IHRydWVcbiAgICB9KTtcbiAgICBiaW5kKHJvb3QsICJmb2N1c2luIiwgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uICgpIHtcbiAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAhIWlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VzaW5nS2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRlbHkpIHtcbiAgICB2YXIgYXR0cnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoInN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSIpO1xuICAgIGVtcHR5KHNsaWRlcyk7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCwgcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3RDbGFzc2VzKTtcbiAgICByZW1vdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcmVtb3ZlQXR0cmlidXRlKFt0cmFjaywgbGlzdF0sIGF0dHJzKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVtb3ZlQXR0cmlidXRlKHJvb3QsIGNvbXBsZXRlbHkgPyBhdHRycyA6IFsic3R5bGUiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQVJJQV9ST0xFREVTQ1JJUFRJT05dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCwgcm9vdENsYXNzZXMpO1xuICAgIHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICByb290Q2xhc3NlcyA9IGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzc2VzKENMQVNTX1JPT1QpO1xuICAgIHRyYWNrQ2xhc3NlcyA9IGdldENsYXNzZXMoQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1RSQUNLKTtcbiAgICBhZGRDbGFzcyhyb290LCByb290Q2xhc3Nlcyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGFkZENsYXNzKHRyYWNrLCB0cmFja0NsYXNzZXMpO1xuICAgIHNldEF0dHJpYnV0ZShybycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCwgQVJJQV9MQUJFTCwgb3B0aW9ucy5sYWJlbCk7XG4gICAgc2V0QXR0cmlidXRlKHJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBBUklBX0xBQkVMTEVEQlksIG9wdGlvbnMubGFiZWxsZWRieSk7XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY29sbGVjdCgpIHtcbiAgICB0cmFjayA9IGZpbmQoIi4iICsgQ0xBU1NfVFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNLKTtcbiAgICBsaXN0ID0gY2hpbGQodHJhY2ssICIuIiArIENMQVNTX0xJU1QpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBhc3NlcnQodHJhY2sgJiYgbGlzdCwgIkEgdHJhY2svbGlzdCBlbGVtZW50IGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXNzaW5nLiIpO1xuICAgIHB1c2goc2xpZGVzLCBjaGlsZHJlbihsaXN0LCAiLiIgKyBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfU0xJREUgKyAiOm5vdCguIiArIENMQVNTX0NMT05FICsgIikiKSk7XG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3bih7XG4gICAgICBhcnJvd3M6IENMQVNTX0FSUk9XUyxcbiAgICAgIHBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduOiBDTEFTU19QQUdJTkFUSU9OLFxuICAgICAgcHJldjogQ0xBU1NfQVJST1dfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsXG4gICAgICBuZXh0OiBDTEFTU19BUlJPV19ORVhULFxuICAgICAgYmFyOiBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJPR1JFU1NfQkFSLFxuICAgICAgdG9nZ2xlOiBDTEFTU19UT0dHTEVcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgZnVuY3Rpb24gKGNsYXNzTmFtZSwga2V5KSB7XG4gICAgICBlbGVtZW50c1trZXldID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmQoIi4iICsgY2xhc3NOYW1lKTtcbiAgICB9KTtcbiAgICBhc3NpZ24oZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLCB7XG4gICAgICByb290OiByb290LFxuICAgICAgdHJhY2s6IHRyYWNrLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxpc3Q6IGxpc3QsXG4gICAgICBzbGlkZXM6IHNsaWRlc1xuICAgIH0pO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmFyIGlkID0gcm9vdC5pZCB8fCB1bmlxdWVJZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoUFJPSkVDVF9DT0RFKTtcbiAgICB2YXIgcm9sZSA9IG9wdGlvbnMucm9sZTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdC5pZCA9IGlkO1xuICAgIHRyYWNrLmlkID0gdHJhY2suaWQgfHwgaWQgKyAiLXRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjayI7XG4gICAgbGlzdC5pZCA9IGxpc3QuaWQgfHwgaWQgKyAiLWxpc3QiO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghZ2V0QXR0cmlidXRlKHJvb3QsIFJPTEUpICYmIHJvb3QudGFnTmFtZSAhPT0gIicKICAgICAgICAgICAgICAgICAgICAgICAgYidTRUNUSU9OIiAmJiByb2xlKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUocm9vdCwgUk9MRSwgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbGUpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX1JPTEVERVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1JJUFRJT04sIGkxOG4uY2Fyb3VzZWwpO1xuICAgIHNldEF0dHJpYnV0ZShsaXN0LCBST0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSwgInByZXNlbnRhdGlvbiIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZChzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgICB2YXIgZWxtID0gcXVlcnkocm9vdCwgc2VsZWN0b3IpO1xuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gZWxtICYmIGNsb3Nlc3QoZWxtLCAiLiIgKyBDTEFTU19ST09UKSA9PT0gcm9vdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyBlbG0gOiB2b2lkIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDbGFzc2VzKGJhc2UpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuIFtiYXNlICsgIi0tIiArIG9wdGlvbnMudHlwZSwgYmFzZSArICItJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJiBiYXNlICsgIi0tZHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmIGJhc2UgKyAiLS1uYXYiLCBiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSA9PT0gQ0xBU1NfUk9PVCAmJiBDTEFTU19BQ1RJVkVdO1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICBzZXR1cDogc2V0dXAsXG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH0pO1xufVxuXG52YXIgU0xJREUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gInNsaWRlIjtcbnZhciBMT09QID0gImxvb3AiO1xudmFyIEZBREUgPSAiZmFkZSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG5mdW5jdGlvbiBTbGlkZSQxKFNwbGlkZTIsIGluZGV4LCBzbGlkZUluZGV4LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUpIHtcbiAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgb24gPSBldmVudC5vbixcbiAgICAgIGVtaXQgPSBldmVudC5lbWl0LFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBldmVudC5iaW5kO1xuICB2YXIgQ29tcG9uZW50cyA9IFNwbGlkZTIuQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMsXG4gICAgICByb290ID0gU3BsaWRlMi5yb290LFxuICAgICAgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgPSBTcGxpZGUyLm9wdGlvbnM7XG4gIHZhciBpc05hdmlnYXRpb24gPSBvcHRpb25zLmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc05hdmlnYXRpb24sXG4gICAgICB1cGRhdGVPbk1vdmUgPSBvcHRpb25zLnVwZGF0ZU9uTW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUsXG4gICAgICBpMThuID0gb3B0aW9ucy5pMThuLFxuICAgICAgcGFnaW5hdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBvcHRpb25zLnBhZ2luYXRpb24sXG4gICAgICBzbGlkZUZvY3VzID0gb3B0aW9ucy5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVGb2N1cztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzLkRpcmVjdGlvbi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eWxlIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbGFiZWwgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTEFCRUwpO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzQ2xvbmUgPSBzbGlkZUluZGV4ID4gLTE7XG4gIHZhciBjb250YWluZXIgPSBjaGlsZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gIHZhciBkZXN0cm95ZWQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmICghaXNDbG9uZSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLmlkID0gcm9vdC5pZCArICItc2xpZGUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2V0QXR0cmlidXRlKHNsaWRlLCBST0xFLCBwYWdpbmF0aW9uID8gInRhYnBhbmVsIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAiZ3JvdXAiKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ST0xFREVTQ1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVBUSU9OLCBpMThuLnNsaWRlKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFCRUwsIGxhYmVsIHx8IGZvcm1hdChpMThuLnNsaWRlTGFiZWwsIFtpbmRleCArIDEsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUyLmxlbmd0aF0pKTtcbiAgICB9XG5cbiAgICBsaXN0ZW4oKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgYmluZChzbGlkZSwgImNsaWNrIiwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KGVtaXQsIEVWRU5UX0NMSUNLLCBzZWxmKSk7XG4gICAgYmluZChzbGlkZSwgImtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lkb3duIiwgYXBwbHkoZW1pdCwgRVZFTlRfU0xJREVfS0VZRE9XTiwgc2VsZikpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbihbRVZFTlRfTU9WRUQsIEVWRU5UX1NISUZURUQsIEVWRU5UX1NDUk9MTEVEXSwgdXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGF0ZSk7XG4gICAgb24oRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVELCBpbml0TmF2aWdhdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24pO1xuXG4gICAgaWYgKHVwZGF0ZU9uTW92ZSkge1xuICAgICAgb24oRVZFTlRfTU9WJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIG9uTW92ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBldmVudC5kZXN0cm95KCk7XG4gICAgcmVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZUNsYXNzKHNsaWRlLCBTVEFUVVNfQ0xBU1NFUyk7XG4gICAgcmVtb3ZlQXR0cmlidXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZSwgQUxMX0FUVFJJQlVURVMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgInN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSIsIHN0eWxlcyk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMLCBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FiZWwgfHwgIiIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdE5hdmlnYXRpb24oKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBjb250cm9scyA9IFNwbGlkZTIuc3BsaWRlcy5tYXAoZnVuY3Rpb24gKHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQpIHtcbiAgICAgIHZhciBTbGlkZTIgPSB0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcy5nZXRBdChpbmRleCk7XG4gICAgICByZXR1cm4gU2xpZGUyID8gU2xpZGUyLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5pZCA6ICIiO1xuICAgIH0pLmpvaW4oIiAiKTtcbiAgICBzZXRBdHRyaWJ1dGUocycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLCBBUklBX0xBQkVMLCBmb3JtYXQoaTE4bi5zbGlkZVgsIChpc0Nsb25lID8gc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlSW5kZXggOiBpbmRleCkgKyAxKSk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UUk9MUywgY29udHJvbHMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlRm9jdXMgPyAiYnV0dG9uIiA6ICIiKTtcbiAgICBzbGlkZUZvY3VzICYmIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OKTtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgaWYgKCFkZXN0cm95ZWQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmICghZGVzdHJveWVkKSB7XG4gICAgICB2YXIgY3VyciA9IFNwbGlkZTIuaW5kZXg7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdXBkYXRlQWN0aXZpdHkoKTtcbiAgICAgIHVwZGF0ZVZpc2liaWxpdHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfUFJFViwgaW5kZXggPT09IGN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JyIC0gMSk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfTkVYVCwgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PSBjdXJyICsgMSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXR5KCkge1xuICAgIHZhciBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xuXG4gICAgaWYgKGFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUgIT09IGhhc0NsYXNzKHNsaWRlLCBDTEFTU19BQ1RJVkUpKSB7XG4gICAgICB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlQ2xhc3Moc2xpZGUsIENMQVNTX0FDVElWRSwgYWN0aXZlKTtcbiAgICAgIHNldEF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUoc2xpZGUsIEFSSUFfQ1VSUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpO1xuICAgICAgZW1pdChhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkUsIHNlbGYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KCkge1xuICAgIHZhciB2aXNpYmxlID0gaXNWaXNpYmxlKCk7XG4gICAgdmFyIGhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWN0aXZlKCkgfHwgaXNDbG9uZSk7XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFTcGxpZGUyLnN0YXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0hJRERFTiwgaGlkZGVuIHx8ICIiKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgc2V0QXR0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCBvcHRpb25zLmZvYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1c2FibGVOb2RlcyB8fCAiIiksIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAiIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKHNsaWRlRm9jdXMpIHtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAwKTtcbiAgICB9XG5cbiAgICBpZiAodicKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2libGUgIT09IGhhc0NsYXNzKHNsaWRlLCBDTEFTU19WSVNJQkxFKSkge1xuICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19WSVNJQkxFLCB2aXNpYmxlKTtcbiAgICAgIGVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KHZpc2libGUgPyBFVkVOVF9WSVNJQkxFIDogRVZFTlRfSElEREVOLCBzZWxmKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgaWYgKCF2aXNpYmxlICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PSBzbGlkZSkge1xuICAgICAgdmFyIFNsaWRlMiA9IENvbXBvbmVudHMuU2xpZGVzLmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdChTcGxpZGUyLmluZGV4KTtcbiAgICAgIFNsaWRlMiAmJiBmb2N1cyhTbGlkZTIuc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZSQxKHByb3AsIHZhbHVlLCB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ29udGFpbmVyKSB7XG4gICAgc3R5bGUodXNlQ29udGFpbmVyICYmIGNvbnRhaW5lciB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc2xpZGUsIHByb3AsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQWN0aXZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgY3VyciA9IFNwbGlkZTIuaW5kZXg7XG4gICAgcmV0dXJuIGN1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidyID09PSBpbmRleCB8fCBvcHRpb25zLmNsb25lU3RhdHVzICYmIGN1cnIgPT09IHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNWaXNpYmxlKCkge1xuICAgIGlmIChTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMi5pcyhGQURFKSkge1xuICAgICAgcmV0dXJuIGlzQWN0aXZlKCk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciB0cmFja1JlY3QgPSByZWN0KENvbXBvbmVudHMuRWxlbWVudHMudHJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB2YXIgc2xpZGVSZWN0ID0gcmVjdChzbGlkZSk7XG4gICAgdmFyIGxlZnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gcmVzb2x2ZSgibGVmdCIsIHRydWUpO1xuICAgIHZhciByaWdodCA9IHJlc29sdmUoInJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCIsIHRydWUpO1xuICAgIHJldHVybiBmbG9vcih0cmFja1JlY3RbbGVmdF0pIDw9IGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsKHNsaWRlUmVjdFtsZWZ0XSkgJiYgZmxvb3Ioc2xpZGVSZWN0W3JpZ2h0XSkgPD0gY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWwodHJhY2tSZWN0W3JpZ2h0XSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1dpdGhpbihmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbSwgZGlzdGFuY2UpIHtcbiAgICB2YXIgZGlmZiA9IGFicyhmcm9tIC0gaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcblxuICAgIGlmICghaXNDbG9uZSAmJiAob3B0aW9ucy5yZXdpbmQgfHwgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaXMoTE9PUCkpKSB7XG4gICAgICBkaWZmID0gbWluKGRpZmYsIFNwbGlkZTIubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCAtIGRpZmYpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWZmIDw9IGRpc3RhbmNlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIHZhciBzZWxmID0ge1xuICAgIGluZGV4OiBpbmRleCxcbiAgICBzbGlkZUluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDogc2xpZGVJbmRleCxcbiAgICBzbGlkZTogc2xpZGUsXG4gICAgY29udGFpbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogY29udGFpbmVyLFxuICAgIGlzQ2xvbmU6IGlzQ2xvbmUsXG4gICAgbW91bnQ6IG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzdHlsZTogc3R5bGUkMSxcbiAgICBpc1dpdGhpbjogaXNXaXRoaW5cbiAgfTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBzZWxmO1xufVxuXG5mdW5jdGlvbiBTbGlkZXMoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UyID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UyLm9uLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UyLmVtaXQsXG4gICAgICBiaW5kID0gX0V2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZTIuYmluZDtcblxuICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgc2xpZGVzID0gX0NvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyRFbGVtZW50cy5zbGlkZXMsXG4gICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0O1xuICB2YXIgU2xpZGVzMiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpbml0KCk7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKEVWRU5UX1JFRlJFU0gsIGluaXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlLCBpbmRleCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJlZ2lzdGVyKHNsaWRlLCBpbmRleCwgLTEpO1xuICAgIH0pO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBTbGlkZTIuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KFNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXMyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBmb3JFYWNoJDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIFNsaWRlMi51cGRhdGUoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgaW5kZXgsIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4KSB7XG4gICAgdmFyIG9iamVjdCA9IFNsaWRlJDEoU3BsaWRlMiwgaW5kZXgsIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUluZGV4LCBzbGlkZSk7XG4gICAgb2JqZWN0Lm1vdW50KCk7XG4gICAgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIucHVzaChvYmplY3QpO1xuICAgIFNsaWRlczIuc29ydChmdW5jdGlvbiAoU2xpZGUxLCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyKSB7XG4gICAgICByZXR1cm4gU2xpZGUxLmluZGV4IC0gU2xpZGUyLmluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldChleGNsdWRlQ2xvbmVzKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBleGNsdWRlQ2xvbmVzID8gZmlsdGVyKGZ1bmN0aW9uIChTbGlkZTIpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICByZXR1cm4gIVNsaWRlMi5pc0Nsb25lO1xuICAgIH0pIDogU2xpZGVzMicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbihwYWdlKSB7XG4gICAgdmFyIENvbnRyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcjtcbiAgICB2YXIgaW5kZXggPSBDb250cm9sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlci50b0luZGV4KHBhZ2UpO1xuICAgIHZhciBtYXggPSBDb250cm9sbGVyLmhhc0ZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpID8gMSA6IG9wdGlvbnMucGVyUGFnZTtcbiAgICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoU2xpZGUyKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihTbGlkZTIuaW5kZXgsIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgaW5kZXggKyBtYXggLSAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChpbmRleCkge1xuICAgIHJldHVybiBmaWx0ZXIoaW5kZXgpWzBdO1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGFkZChpdGVtcywgaW5kZXgpIHtcbiAgICBmb3JFYWNoKGl0ZW1zLCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKHNsaWRlKSB7XG4gICAgICBpZiAoaXNTdHJpbmcoc2xpZGUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzbGlkZSA9IHBhcnNlSHRtbChzbGlkZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNIVE1MRWxlbWVudChzbGlkZSkpIHtcbiAgICAgICAgdmFyIHJlZiA9IHNsaWRlc1tpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhdO1xuICAgICAgICByZWYgPyBiZWZvcmUoc2xpZGUsIHJlZikgOiBhcHBlbmQobGlzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlKTtcbiAgICAgICAgYWRkQ2xhc3Moc2xpZGUsIG9wdGlvbnMuY2xhc3Nlcy5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUpO1xuICAgICAgICBvYnNlcnZlSW1hZ2VzKHNsaWRlLCBhcHBseShlbWl0LCBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVTSVpFKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZW1pdChFVkVOVF9SRUZSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUkMShtYXRjaGVyKSB7XG4gICAgcmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShmaWx0ZXIobWF0Y2hlcikubWFwKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gU2xpZGUyLnNsaWRlO1xuICAgIH0pKTtcbiAgICBlbWl0KEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvckVhY2gkMShpdGVyYXRlZSwgZXhjbHVkZUNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXMpIHtcbiAgICBnZXQoZXhjbHVkZUNsb25lcykuZm9yRWFjaChpdGVyYXRlZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyKG1hdGNoZXIpIHtcbiAgICByZXR1cm4gUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlczIuZmlsdGVyKGlzRnVuY3Rpb24obWF0Y2hlcikgPyBtYXRjaGVyIDogZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChTbGlkZTIpIHtcbiAgICAgIHJldHVybiBpc1N0cmluZyhtYXRjaGVyKSA/IG1hdGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKFNsaWRlMi5zbGlkZSwgbWF0Y2hlcikgOiBpbmNsdWRlcyh0b0FycmF5KG1hdGNoZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSwgU2xpZGUyLmluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmVyKSB7XG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIuc3R5bGUocHJvcCwgdmFsdWUsIHVzZUNvbnRhaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb2JzZXJ2ZUltYWdlcyhlbG0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjYWxsYmFjaykge1xuICAgIHZhciBpbWFnZXMgPSBxdWVyeUFsbChlbG0sICJpbWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgdmFyIGxlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2d0aCkge1xuICAgICAgaW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoISAtLWxlbmd0aCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMZW5ndGgoZXhjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZGVDbG9uZXMpIHtcbiAgICByZXR1cm4gZXhjbHVkZUNsb25lcyA/IHNsaWRlcy5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIDogU2xpZGVzMi5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Vub3VnaCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIFNsaWRlczIubGVuZ3RoID4gb3B0aW9ucy5wZXJQYWdlO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIHJlZ2lzdGVyOiByZWdpc3RlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgZ2V0OiBnZXQsXG4gICAgZ2V0SW46IGdldEluLFxuICAgIGdldEF0OiBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXQsXG4gICAgYWRkOiBhZGQsXG4gICAgcmVtb3ZlOiByZW1vdmUkMSxcbiAgICBmb3JFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaDogZm9yRWFjaCQxLFxuICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIHN0eWxlOiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGUsXG4gICAgZ2V0TGVuZ3RoOiBnZXRMZW5ndGgsXG4gICAgaXNFbm91Z2g6IGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Vub3VnaFxuICB9O1xufVxuXG5mdW5jdGlvbiBMYXlvdXQoU3BsaWRlMiwgQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UzID0gRXZlbnRJbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UzLm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UzLmJpbmQsXG4gICAgICBlbWl0ID0gX0V2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZTMuZW1pdDtcblxuICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24ucmVzb2x2ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBfQ29tcG9uZW50czIkRWxlbWVudHMyID0gQ29tcG9uZW50czIuRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgcm9vdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czIucm9vdCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0cmFjayA9IF9Db21wb25lbnRzMiRFbGVtZW50czIudHJhY2ssXG4gICAgICBsaXN0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF9Db21wb25lbnRzMiRFbGVtZW50czIubGlzdDtcbiAgdmFyIGdldEF0ID0gU2xpZGVzLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdCxcbiAgICAgIHN0eWxlU2xpZGVzID0gU2xpZGVzLnN0eWxlO1xuICB2YXIgdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpY2FsO1xuICB2YXIgcm9vdFJlY3Q7XG4gIHZhciBvdmVyZmxvdztcblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbW91bnQoKSB7XG4gICAgaW5pdCgpO1xuICAgIGJpbmQod2luZG93LCAicmVzaScKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSBsb2FkIiwgVGhyb3R0bGUoYXBwbHkoZW1pdCwgRVZFTlRfUkVTSVpFKSkpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sIGluaXQpO1xuICAgIG9uKEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRVNJWkUsIHJlc2l6ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2ZXJ0aWNhbCA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XG4gICAgc3R5bGUocm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsICJtYXhXaWR0aCIsIHVuaXQob3B0aW9ucy53aWR0aCkpO1xuICAgIHN0eWxlKHRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcmVzb2x2ZSgicGFkZGluZ0xlZnQiKSwgY3NzUGFkZGluZyhmYWxzZSkpO1xuICAgIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSh0cmFjaywgcmVzb2x2ZSgicGFkZGluZ1JpZ2h0IiksIGNzc1BhZGRpbmcodHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICByZXNpemUodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemUoZm9yYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgdmFyIG5ld1JlY3QgPSByZWN0KHJvb3QpO1xuXG4gICAgaWYgKGZvcmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCByb290UmVjdC53aWR0aCAhPT0gbmV3UmVjdC53aWR0aCB8fCByb290UmVjdC5oZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0ICE9PSBuZXdSZWN0LmhlaWdodCkge1xuICAgICAgc3R5bGUodHJhY2ssICJoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwgY3NzVHJhY2tIZWlnaHQoKSk7XG4gICAgICBzdHlsZVNsaWRlcyhyZXNvbHZlKCJtYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2luUmlnaHQiKSwgdW5pdChvcHRpb25zLmdhcCkpO1xuICAgICAgc3R5bGVTbGlkZXMoIicKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCIsIGNzc1NsaWRlV2lkdGgoKSk7XG4gICAgICBzdHlsZVNsaWRlcygiaGVpZ2h0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGNzc1NsaWRlSGVpZ2h0KCksIHRydWUpO1xuICAgICAgcm9vdFJlY3QgPSBuZXdSZWN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQoRVZFTlRfUkVTSVpFRCk7XG5cbiAgICAgIGlmIChvdmVyZmxvdyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IChvdmVyZmxvdyA9IGlzT3ZlcmZsb3coKSkpIHtcbiAgICAgICAgdG9nZ2xlQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHJvb3QsIENMQVNTX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICAgIGVtaXQoRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNzc1BhZGRpbmcocmlnaHQpIHtcbiAgICB2YXIgcGFkZGluZyA9IG9wdGlvbnMucGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRpbmc7XG4gICAgdmFyIHByb3AgPSByZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCIpO1xuICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQocGFkZGluZ1twcm9wXSB8fCAoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0KHBhZGRpbmcpID8gMCA6IHBhZGRpbmcpKSB8fCAiMHB4IjtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjc3NUcmFja0hlaWdodCgpIHtcbiAgICB2YXIgaGVpZ2h0ID0gIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICBoZWlnaHQgPSBjc3NIZWlnaHQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICBhc3NlcnQoaGVpZ2h0LCAiaGVpZ2h0IG9yIGhlaWdodFJhdGlvIGlzIG1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzaW5nLiIpO1xuICAgICAgaGVpZ2h0ID0gImNhbGMoIiArIGhlaWdodCArICIgLSAiICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1BhZGRpbmcoZmFsc2UpICsgIiAtICIgKyBjc3NQYWRkaW5nKHRydWUpICsgIikiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3NzSGVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCgpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWdodCB8fCByZWN0KGxpc3QpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy53aWR0aCAqIG9wdGlvbnMuaGVpZ2h0UmF0aW8pO1xuICB9XG5cbiAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1NsaWRlV2lkdGgoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b1dpZHRoID8gbnVsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiB1bml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKHZlcnRpY2FsID8gIiIgOiBjc3NTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3NzU2xpZGVIZWlnaHQoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB1bml0KG9wdGlvbnMuZml4ZWRIZWlnaHQpIHx8ICh2ZXJ0aWNhbCA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLmF1dG9IZWlnaHQgPyBudWxsIDogY3NzU2xpZGVTaXplKCkgOiBjc3NIZWlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3NzU2xpZGVTaXplKCkge1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwID0gdW5pdChvcHRpb25zLmdhcCk7XG4gICAgcmV0dXJuICJjYWxjKCgxMDAlIiArICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwICYmICIgKyAiICsgZ2FwKSArICIpLyIgKyAob3B0aW9ucy5wZXJQYWdlIHx8IDEpICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrIChnYXAgJiYgIiAtICIgKyBnYXApICsgIikiO1xuICB9XG5cbiAgZnVuY3Rpb24gbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RTaXplKCkge1xuICAgIHJldHVybiByZWN0KGxpc3QpW3Jlc29sdmUoIndpZHRoIicKICAgICAgICAgICAgICAgICAgICAgICAgYicpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWRlU2l6ZShpbmRleCwgd2l0aG91dEdhcCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdChpbmRleCB8fCAwKTtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlID8gcmVjdChTbGlkZS5zbGlkZSlbcmVzb2x2ZSgid2lkdGgiKV0gKyAod2l0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRHYXAgPyAwIDogZ2V0R2FwKCkpIDogMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbFNpemUoaW5kZXgsIHdpdGhvdXRHYXApIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdChpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgpO1xuXG4gICAgaWYgKFNsaWRlKSB7XG4gICAgICB2YXIgcmlnaHQgPSByZWN0KFNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSlbcmVzb2x2ZSgicmlnaHQiKV07XG4gICAgICB2YXIgbGVmdCA9IHJlY3QoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3QpW3Jlc29sdmUoImxlZnQiKV07XG4gICAgICByZXR1cm4gYWJzKHJpZ2h0IC0gbGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpICsgKHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkpO1xuICAgIH1cblxuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWRlclNpemUod2l0aG91dEdhcCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gdG90YWxTaXplKFNwbGlkZTIubGVuZ3RoIC0gMSkgLSB0b3RhbFNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKDApICsgc2xpZGVTaXplKDAsIHdpdGhvdXRHYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEdhcCgpIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdCgwKTtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2xpZGUuc2xpZGUsIHJlc29sdmUoIm1hcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5SaWdodCIpKSkgfHwgMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcocmlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGUodHJhY2ssIHJlc29sdmUoInBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RkaW5nIiArIChyaWdodCA/ICJSaWdodCIgOiAiTGVmdCIpKSkpIHx8IDA7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gaXNPdmVyZmxvdygpIHtcbiAgICByZXR1cm4gU3BsaWRlMi5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoRkFERSkgfHwgc2xpZGVyU2l6ZSh0cnVlKSA+IGxpc3RTaXplKCk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gICAgcmVzaXplOiByZXNpemUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGxpc3RTaXplOiBsaXN0U2l6ZSxcbiAgICBzbGlkZVNpemU6IHNsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgc2xpZGVyU2l6ZTogc2xpZGVyU2l6ZSxcbiAgICB0b3RhbFNpemU6IHRvdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbFNpemUsXG4gICAgZ2V0UGFkZGluZzogZ2V0UGFkZGluZyxcbiAgICBpc092ZXJmbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdzogaXNPdmVyZmxvd1xuICB9O1xufVxuXG52YXIgTVVMVElQTElFUiA9IDI7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBDbG9uZXMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicub247XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbiAgdmFyIHJlc29sdmUgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gIHZhciBjbG9uZXMgPSBbXTtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBjbG9uZUNvdW50O1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIG9uKEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9SRUZSRVNILCByZW1vdW50KTtcbiAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0laRV0sIG9ic2VydmUpO1xuXG4gICAgaWYgKGNsb25lQ291bnQgPSBjb21wdXRlQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lQ291bnQoKSkge1xuICAgICAgZ2VuZXJhdGUoY2xvbmVDb3VudCk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuTGF5b3V0LnJlc2l6ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVtb3VudCgpIHtcbiAgICBkZXN0cm95KCk7XG4gICAgbW91bnQoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHJlbW92ZShjbG9uZXMpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbXB0eShjbG9uZXMpO1xuICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvYnNlcnZlKCkge1xuICAgIHZhciBjb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuXG4gICAgaWYgKGNsb25lQ291bnQgIT09IGNvdW50KSB7XG4gICAgICBpZiAoYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lQ291bnQgPCBjb3VudCB8fCAhY291bnQpIHtcbiAgICAgICAgZXZlbnQuZW1pdChFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVGUkVTSCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlKGNvdW50KSB7XG4gICAgdmFyIHNsaWRlcyA9IFNsaWRlcy5nZXQoKS5zbGljZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgbGVuZ3RoID0gc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICB3aGlsZSAoc2xpZGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBwdXNoKHNsaWRlcywgc2xpZGVzKTtcbiAgICAgIH1cblxuICAgICAgcHVzaChzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLnNsaWNlKC1jb3VudCksIHNsaWRlcy5zbGljZSgwLCBjb3VudCkpLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChTbGlkZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGlzSGVhZCA9IGluZGV4IDwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvdW50O1xuICAgICAgICB2YXIgY2xvbmUgPSBjbG9uZURlZXAoU2xpZGUuc2xpZGUsIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCk7XG4gICAgICAgIGlzSGVhZCA/IGJlZm9yZShjbG9uZSwgc2xpZGVzWzBdLnNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgOiBhcHBlbmQoRWxlbWVudHMubGlzdCwgY2xvbmUpO1xuICAgICAgICBwdXNoKGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMsIGNsb25lKTtcbiAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKGNsb25lLCBpbmRleCAtIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCArIChpc0hlYWQgPyAwIDogbGVuZ3RoKSwgU2xpZGUuaW5kZXgpO1xuICAgICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lRGVlcChlbG0sIGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBjbG9uZSA9IGVsbS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgYWRkQ2xhc3MoY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lLCBvcHRpb25zLmNsYXNzZXMuY2xvbmUpO1xuICAgIGNsb25lLmlkID0gU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdC5pZCArICItY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCkge1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmVzMiA9IG9wdGlvbnMuY2xvbmVzO1xuXG4gICAgaWYgKCFTcGxpZGUyLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMT09QKSkge1xuICAgICAgY2xvbmVzMiA9IDA7XG4gICAgfSBlbHNlIGlmIChpc1VuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZmluZWQoY2xvbmVzMikpIHtcbiAgICAgIHZhciBmaXhlZFNpemUgPSBvcHRpb25zW3JlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbHZlKCJmaXhlZFdpZHRoIildICYmIENvbXBvbmVudHMyLkxheW91dC5zbGlkZVNpemUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJzApO1xuICAgICAgdmFyIGZpeGVkQ291bnQgPSBmaXhlZFNpemUgJiYgY2VpbChyZWN0KEVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50cy50cmFjaylbcmVzb2x2ZSgid2lkdGgiKV0gLyBmaXhlZFNpemUpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lczIgPSBmaXhlZENvdW50IHx8IG9wdGlvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSAmJiBTcGxpZGUyLmxlbmd0aCB8fCBvcHRpb25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVzMjtcbiAgfVxuXG4gIHJldHVybiB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBNb3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0V2ZW50SW50ZXJmYWNlNCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0V2ZW50SW50ZXJmYWNlNC5vbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNC5lbWl0O1xuXG4gIHZhciBzZXQgPSBTcGxpZGUyLnN0YXRlLnNldDtcbiAgdmFyIF9DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIkTGF5b3V0ID0gQ29tcG9uZW50czIuTGF5b3V0LFxuICAgICAgc2xpZGVTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVTaXplLFxuICAgICAgZ2V0UGFkZGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgPSBfQ29tcG9uZW50czIkTGF5b3V0LmdldFBhZGRpbmcsXG4gICAgICB0b3RhbFNpemUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0NvbXBvbmVudHMyJExheW91dC50b3RhbFNpemUsXG4gICAgICBsaXN0U2l6ZSA9IF9DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIkTGF5b3V0Lmxpc3RTaXplLFxuICAgICAgc2xpZGVyU2l6ZSA9IF9Db21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIkTGF5b3V0LnNsaWRlclNpemU7XG4gIHZhciBfQ29tcG9uZW50czIkRGlyZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgcmVzb2x2ZSA9IF9Db21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czIkRGlyZWN0aW8ucmVzb2x2ZSxcbiAgICAgIG9yaWVudCA9IF9Db21wb25lbnRzMiREJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW8ub3JpZW50O1xuICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzMyA9IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5FbGVtZW50cyxcbiAgICAgIGxpc3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0LFxuICAgICAgdHJhY2sgPSBfQ29tcG9uZW50czIkRWxlbWVudHMzLnRyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaztcbiAgdmFyIFRyYW5zaXRpb247XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zaXRpb24gPSBDb21wb25lbnRzMi5UcmFuc2l0aW9uO1xuICAgIG9uKFtFVkVOVF9NTycKICAgICAgICAgICAgICAgICAgICAgICAgYidVTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXBvc2l0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcG9zaXRpb24oKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghQ29tcG9uZW50czIuQ29udHJvbGxlci5pc0J1c3koKSkge1xuICAgICAgQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNjcm9sbC5jYW5jZWwoKTtcbiAgICAgIGp1bXAoU3BsaWRlMi5pbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgQ29tcG9uZW50czIuU2xpZGVzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBtb3ZlKGRlc3QsIGluZGV4LCBwcmV2LCBjYWxsYmFjaykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoZGVzdCAhPT0gaW5kZXggJiYgY2FuU2hpZnQoZGVzdCA+IHByZXYpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgY2FuY2VsKCk7XG4gICAgICB0cmFuc2xhdGUoc2hpZnQoZ2V0UG9zaXRpb24oKSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QgPiBwcmV2KSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgc2V0KE1PVklORyk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQoRVZFTlRfTU9WRSwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgIFRyYW5zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0YXJ0KGluZGV4LCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXQoSURMRSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdChFVkVOVF9NT1ZFRCwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgICAgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1wKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCkge1xuICAgIHRyYW5zbGF0ZSh0b1Bvc2l0aW9uKGluZGV4LCB0cnVlKSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHBvc2l0aW9uLCBwcmV2ZW50TG9vcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICBpZiAoIVNwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIHZhciBkZXN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gPSBwcmV2ZW50TG9vcCA/IHBvc2l0aW9uIDogbG9vcChwb3NpdGlvbik7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc3R5bGUobGlzdCwgInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUiICsgcmVzb2x2ZSgiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1giKSArICIoIiArIGRlc3RpbmF0aW9uICsgInB4KSIpO1xuICAgICAgcG9zaXRpb24gIT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0aW5hdGlvbiAmJiBlbWl0KEVWRU5UX1NISUZURUQpO1xuICAgIH1cbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBsb29wKHBvc2l0aW9uKSB7XG4gICAgaWYgKFNwbGlkZTIuaXMoTE9PUCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICB2YXIgaW5kZXggPSB0b0luZGV4KHBvc2l0aW9uKTtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZXhjZWVkZWRNYXggPSBpbmRleCA+IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZCgpO1xuICAgICAgdmFyIGV4Y2VlZGVkTWluID0gaW5kZXggPCAwO1xuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGV4Y2VlZGVkTWluIHx8IGV4Y2VlZGVkTWF4KSB7XG4gICAgICAgIHBvc2l0aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNoaWZ0KHBvc2l0aW9uLCBleGNlZWRlZE1heCk7XG4gICAgICB9XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoaWZ0KHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgYmFja3dhcmRzKSB7XG4gICAgdmFyIGV4Y2VzcyA9IHBvc2l0aW9uIC0gZ2V0TGltaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGJhY2t3YXJkcyk7XG4gICAgdmFyIHNpemUgPSBzbGlkZXJTaXplKCk7XG4gICAgcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uIC09IG9yaWVudChzaXplICogKGNlaWwoYWJzKGV4Y2VzcykgLyBzaXplKSB8fCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgMSkpICogKGJhY2t3YXJkcyA/IDEgOiAtMSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB0cmFuc2xhdGUoZ2V0UG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uKCksIHRydWUpO1xuICAgIFRyYW5zaXRpb24uY2FuY2VsKCk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gdG9JbmRleChwb3NpdGlvbikge1xuICAgIHZhciBTbGlkZXMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuU2xpZGVzLmdldCgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgU2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2xpZGVJbmRleCA9IFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidbaV0uaW5kZXg7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBhYnModG9Qb3NpdGlvbihzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCwgdHJ1ZSkgLSBwb3NpdGlvbik7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGluZGV4ID0gc2xpZGVJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gdG9Qb3NpdGlvbihpbmRleCwgdHJpbW1pbmcpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHBvc2l0aW9uID0gb3JpZW50KHRvdGFsU2l6ZShpbmRleCAtIDEpIC0gb2Zmc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhpbmRleCkpO1xuICAgIHJldHVybiB0cmltbWluZyA/IHRyaW0ocG9zaXRpb24pIDogcG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UG9zaXRpb24oKSB7XG4gICAgdmFyIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZ0ID0gcmVzb2x2ZSgibGVmdCIpO1xuICAgIHJldHVybiByZWN0KGxpc3QpW2xlZnRdIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlY3QodHJhY2spW2xlZnRdICsgb3JpZW50KGdldFBhZGRpbmcoZmFsc2UpKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiB0cmltKHBvc2l0aW9uKSB7XG4gICAgaWYgKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyaW1TcGFjZSAmJiBTcGxpZGUyLmlzKFNMSURFKSkge1xuICAgICAgcG9zaXRpb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhbXAocG9zaXRpb24sIDAsIG9yaWVudChzbGlkZXJTaXplKHRydWUpIC0gbGlzdFNpeicKICAgICAgICAgICAgICAgICAgICAgICAgYidlKCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gb2Zmc2V0KGluZGV4KSB7XG4gICAgdmFyIGZvY3VzID0gb3B0aW9ucy5mb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcmV0dXJuIGZvY3VzID09PSAiY2VudGVyIiA/IChsaXN0U2l6ZSgpIC0gc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlU2l6ZShpbmRleCwgdHJ1ZSkpIC8gMiA6ICtmb2N1cyAqIHNsaWRlU2l6ZShpbmRleCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMaW1pdChtYXgpIHtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvUG9zaXRpb24obWF4ID8gQ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRFbmQoKSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLCAhIW9wdGlvbnMudHJpbVNwYWNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhblNoaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChiYWNrd2FyZHMpIHtcbiAgICB2YXIgc2hpZnRlZCA9IG9yaWVudChzaGlmdChnZXRQb3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oKSwgYmFja3dhcmRzKSk7XG4gICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaWZ0ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID49IDAgOiBzaGlmdGVkIDw9IGxpc3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgiKV0gLSByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdCh0cmFjaylbcmVzb2x2ZSgid2lkdGgiKV07XG4gIH1cblxuICBmdW5jdGlvbiBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWRMaW1pdChtYXgsIHBvc2l0aW9uKSB7XG4gICAgcG9zaXRpb24gPSBpc1VuZGVmaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQocG9zaXRpb24pID8gZ2V0UG9zaXRpb24oKSA6IHBvc2l0aW9uO1xuICAgIHZhciBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWRNaW4gPSBtYXggIT09IHRydWUgJiYgb3JpZW50KHBvc2l0aW9uKSA8IG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZ2V0TGltaXQoZmFsc2UpKTtcbiAgICB2YXIgZXhjZWVkZWRNYXggPSBtYXggIT09IGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSAmJiBvcmllbnQocG9zaXRpb24pID4gb3JpZW50KGdldExpbWl0KHRydWUpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGV4Y2VlZGVkTWluIHx8IGV4Y2VlZGVkTWF4O1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIG1vdmU6IG1vdmUsXG4gICAganVtcDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2p1bXAsXG4gICAgdHJhbnNsYXRlOiB0cmFuc2xhdGUsXG4gICAgc2hpZnQ6IHNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBjYW5jZWw6IGNhbmNlbCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b1Bvc2l0aW9uOiB0b1Bvc2l0aW9uLFxuICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgZ2V0TGltaXQ6IGdldExpbWl0LFxuICAgIGV4Y2VlZGVkTGltaXQ6IGV4YycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZWRlZExpbWl0LFxuICAgIHJlcG9zaXRpb246IHJlcG9zaXRpb25cbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIENvbnRyb2xsZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBfRXZlbnRJbnRlcmZhY2U1ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U1Lm9uLFxuICAgICAgZW1pdCA9IF9FdmVudEludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2U1LmVtaXQ7XG5cbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGdldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgIGdldExpbWl0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUuZ2V0TGltaXQsXG4gICAgICB0b1Bvc2l0aW9uID0gTW92ZS50b1Bvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbjtcbiAgdmFyIF9Db21wb25lbnRzMiRTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLFxuICAgICAgaXNFbm91Z2ggPSBfQ29tcG9uZW50czIkU2xpZGVzLmlzRW5vdWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCxcbiAgICAgIGdldExlbmd0aCA9IF9Db21wb25lbnRzMiRTbGlkZXMuZ2V0TGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcbiAgdmFyIG9taXRFbmQgPSBvcHRpb25zLm9taXRFbmQ7XG4gIHZhciBpc0xvbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwID0gU3BsaWRlMi5pcyhMT09QKTtcbiAgdmFyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSScKICAgICAgICAgICAgICAgICAgICAgICAgYidERSk7XG4gIHZhciBnZXROZXh0ID0gYXBwbHkoZ2V0QWRqYWNlbnQsIGZhbHNlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBnZXRQcmV2ID0gYXBwbHkoZ2V0QWRqYWNlbnQsIHRydWUpO1xuICB2YXIgY3VycicKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCA9IG9wdGlvbnMuc3RhcnQgfHwgMDtcbiAgdmFyIGVuZEluZGV4O1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHByZXZJbmRleCA9IGN1cnJJbmRleDtcbiAgdmFyIHNsaWRlQ291bnQ7XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGVyTW92ZTtcbiAgdmFyIHBlclBhZ2U7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluaXQoKTtcbiAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0VORF9JTkRFWF9DSEFOR0VEXSwgaW5pdCk7XG4gICAgb24oRVZFTlRfUkVTSVpFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uUmVzaXplZCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHNsaWRlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW50ID0gZ2V0TGVuZ3RoKHRydWUpO1xuICAgIHBlck1vdmUgPSBvcHRpb25zLnBlck1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2U7XG4gICAgZW5kSW5kZXggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0RW5kKCk7XG4gICAgdmFyIGluZGV4ID0gY2xhbXAoY3VyckluZGV4LCAwLCBvbWl0RW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA/IGVuZEluZGV4IDogc2xpZGVDb3VudCAtIDEpO1xuXG4gICAgaWYgKGluZGV4ICEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gY3VyckluZGV4KSB7XG4gICAgICBjdXJySW5kZXggPSBpbmRleDtcbiAgICAgIE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlLnJlcG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkKCkge1xuICAgIGlmIChlbmRJbmRleCAhPT0gZ2V0RW5kKCkpIHtcbiAgICAgIGVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ28oY29udHJvbCwgYWxsb3dTYW1lSW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NCdXN5KCkpIHtcbiAgICAgIHZhciBkZXN0ID0gcGFyc2UoY29udHJvbCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGluZGV4ID0gbG9vcChkZXN0KTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYmIChhbGxvd1NhbWVJbmRleCB8fCBpbmRleCAhPT0gY3VyckluZGV4KSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2V0SW5kZXgoaW5kZXgpO1xuICAgICAgICBNb3ZlLm1vdmUoZGVzdCwgaW5kZXgsIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2SW5kZXgsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gc2Nyb2xsKGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgY2FsbGJhY2spIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQ29tcG9uZW50czIuU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmFwLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUudG9JbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgoZ2V0UG9zaXRpb24oKSkpO1xuICAgICAgc2V0SW5kZXgob21pdEVuZCA/IG1pbihpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgsIGVuZEluZGV4KSA6IGluZGV4KTtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2UoY29udHJvbCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgaW5kZXggPSBjdXJySW5kZXg7XG5cbiAgICBpZiAoaXNTdHJpbmcoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICB2YXIgX3JlZiA9IGNvbnRyb2wubWF0Y2goLyhbK1xcLTw+XSkoXFxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyspPy8pIHx8IFtdLFxuICAgICAgICAgIGluZGljYXRvciA9IF9yZWZbMV0sXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG51bWJlciA9IF9yZWZbMl07XG5cbiAgICAgIGlmIChpbmRpY2F0b3IgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAiKyIgfHwgaW5kaWNhdG9yID09PSAiLSIpIHtcbiAgICAgICAgaW5kZXggPSBjb21wdXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Rlc3RJbmRleChjdXJySW5kZXggKyArKCIiICsgaW5kaWNhdG9yICsgKCtudW1iZXIgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEpKSwgY3VyckluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIGluZGV4ID0gbnVtYmVyID8gdG9JbmRleCgrbnVtYmVyKSA6IGdldE4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0KHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChpbmRpY2F0b3IgPT09ICI8IikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgaW5kZXggPSBnZXRQcmV2KHRydWUpO1xuICAgICAgfVxuICAgIH0gZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Uge1xuICAgICAgaW5kZXggPSBpc0xvb3AgPyBjb250cm9sIDogY2xhbXAoY29udHJvbCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAsIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gZ2V0QWRqYWNlbnQocHJldiwgZGVzdGluYXRpb24pIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIG51bWJlciA9IHBlck1vdmUgfHwgKGhhc0ZvY3VzKCkgPyAxIDogcGVyUGFnZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBkZXN0ID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogKHByZXYgPyAtMSA6IDEpLCBjdXJySW5kZXgsICEocGVyTW92ZSB8fCBoYXNGb2N1cygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSkpO1xuXG4gICAgaWYgKGRlc3QgPT09IC0xICYmIGlzU2xpZGUpIHtcbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoIWFwcHJveGltYXRlbHlFcXVhbChnZXRQb3NpdGlvbigpLCBnZXRMaW1pdCghcHJldiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKSkge1xuICAgICAgICByZXR1cm4gcHJldiA/IDAgOiBlbmRJbmRleDtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uID8gZGVzdCA6IGxvb3AoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZURlc3RJbmRleChkZXN0LCBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbSwgc25hcFBhZ2UpIHtcbiAgICBpZiAoaXNFbm91Z2goKSB8fCBoYXNGb2N1cygpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIGluZGV4ID0gY29tcHV0ZU1vdmFibGVEZXN0SW5kZXgoZGVzdCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICBpZiAoaW5kZXggIT09IGRlc3QpIHtcbiAgICAgICAgZnJvbSA9IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgICAgICBkZXN0ID0gaW5kZXg7XG4gICAgICAgIHNuYXBQYWdlID0gZmFscycKICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzdCA8IDAgfHwgZGVzdCA+IGVuZEluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCkge1xuICAgICAgICBpZiAoIXBlck1vdmUgJiYgKGJldHdlZW4oMCwgZGVzdCwgZnJvbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUpIHx8IGJldHdlZW4oZW5kSW5kZXgsIGZyb20sIGRlc3QsIHRydWUpKSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBkZXN0ID0gdG9JbmRleCh0b1BhZ2UoZGVzdCkpO1xuICAgICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgICBpZiAoaXNMb29wKSB7XG4gICAgICAgICAgICBkZXN0ID0gc24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBQYWdlID8gZGVzdCA8IDAgPyAtKHNsaWRlQ291bnQgJSBwZXJQYWdlIHx8IHBlclBhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSA6IHNsaWRlQ291bnQgOiBkZXN0O1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicucmV3aW5kKSB7XG4gICAgICAgICAgICBkZXN0ID0gZGVzdCA8IDAgPyBlbmRJbmRleCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXN0ID0gLTE7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwUGFnZSAmJiBkZXN0ICE9PSBmcm9tKSB7XG4gICAgICAgICAgZGVzdCA9IHRvSW5kZXgoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvUGFnZShmcm9tKSArIChkZXN0IDwgZnJvbSA/IC0xIDogMSkpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXN0ID0gLTE7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiBkZXN0O1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU1vdmFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlRGVzdEluZGV4KGRlc3QpIHtcbiAgICBpZiAoaXNTbGlkZSAmJiBvcHRpb25zLnRyaW1TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhY2UgPT09ICJtb3ZlIiAmJiBkZXN0ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgIHZhciBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gPSBnZXRQb3NpdGlvbigpO1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PSB0b1Bvc2l0aW9uKGRlc3QsIHRydWUpICYmIGJldHdlZW4oZGVzdCwgMCwgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTIubGVuZ3RoIC0gMSwgIW9wdGlvbnMucmV3aW5kKSkge1xuICAgICAgICBkZXN0IDwgY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJJbmRleCA/IC0tZGVzdCA6ICsrZGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGRlc3Q7XG4gIH1cblxuICBmdW5jdGlvbiBsb29wKGluZGV4KSB7XG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBpc0xvb3AgPyAoaW5kZXggKyBzbGlkZUNvdW50KSAlIHNsaWRlQ291bnQgfHwgMCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVuZCgpIHtcbiAgICB2YXIgZW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHNsaWRlQ291bnQgLSAoaGFzRm9jdXMoKSB8fCBpc0xvb3AgJiYgcGVyTW92ZSA/IDEgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogcGVyUGFnZSk7XG5cbiAgICB3aGlsZSAob21pdEVuZCAmJiBlbmQtLSA+IDApIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAodG9Qb3NpdGlvbihzbGlkZUNvdW50IC0gMSwgdHJ1ZSkgIT09IHRvUG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKGVuZCwgdHJ1ZSkpIHtcbiAgICAgICAgZW5kKys7XG4gICAgICAgIGJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhbXAoZW5kLCAwLCBzbGlkZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9JbmRleChwYWdlKSB7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBjbGFtcChoYXNGb2N1cygpID8gcGFnZSA6IHBlclBhZ2UgKiBwYWdlLCAwLCBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kSW5kZXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9QYWdlKGluZGV4KSB7XG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBoYXNGb2N1cygpID8gbWluKGluZGV4LCBlbmRJbmRleCkgOiBmbG9vcigoaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4ID49IGVuZEluZGV4ID8gc2xpZGVDb3VudCAtIDEgOiBpbmRleCkgLyBwZXJQYWdlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiB0b0Rlc3QoZGVzdGluYXRpb24pIHtcbiAgICB2YXIgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Nlc3QgPSBNb3ZlLnRvSW5kZXgoZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA/IGNsYW1wKGNsb3Nlc3QsIDAsIGVuZEluZGV4KSA6IGNsb3Nlc3Q7XG4gIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gc2V0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggIT09IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpIHtcbiAgICAgIHByZXZJbmRleCA9IGN1cnJJbmRleDtcbiAgICAgIGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbmRleChwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndikge1xuICAgIHJldHVybiBwcmV2ID8gcHJldkluZGV4IDogY3VyckluZGV4O1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICAgIHJldHVybiAhaXNVbmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKG9wdGlvbnMuZm9jdXMpIHx8IG9wdGlvbnMuaXNOYXZpZ2F0aW9uO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGlzQnVzeSgpIHtcbiAgICByZXR1cm4gU3BsaWRlMi5zdGF0ZS5pcyhbTScKICAgICAgICAgICAgICAgICAgICAgICAgYidPVklORywgU0NST0xMSU5HXSkgJiYgISFvcHRpb25zLndhaXRGb3JUcmFuc2l0aW9uO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGdvOiBnbyxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2Nyb2xsOiBzY3JvbGwsXG4gICAgZ2V0TmV4dDogZ2V0TmV4dCxcbiAgICBnZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldjogZ2V0UHJldixcbiAgICBnZXRBZGphY2VudDogZ2V0QWRqYWNlbnQsXG4gICAgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldEVuZDogZ2V0RW5kLFxuICAgIHNldEluZGV4OiBzZXRJbmRleCxcbiAgICBnZXRJbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXg6IGdldEluZGV4LFxuICAgIHRvSW5kZXg6IHRvSW5kZXgsXG4gICAgdG9QYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdG9QYWdlLFxuICAgIHRvRGVzdDogdG9EZXN0LFxuICAgIGhhc0ZvY3VzOiBoYXNGbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXMsXG4gICAgaXNCdXN5OiBpc0J1c3lcbiAgfTtcbn1cblxudmFyIFhNTF9OQU1FX1NQQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDRSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7XG52YXIgUEFUSCA9ICJtMTUuNScKICAgICAgICAgICAgICAgICAgICAgICAgYicgMC45MzItNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzYgNC40LTQuMy00LjQtNC40LTE0LjYtMTQuNnoiO1xudmFyIFNJWkUgPSA0MDtcblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIEFycm93cyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gIHZhciBvbiA9IGV2ZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbixcbiAgICAgIGJpbmQgPSBldmVudC5iaW5kLFxuICAgICAgZW1pdCA9IGV2ZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0O1xuICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgIGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gb3B0aW9ucy5pMThuO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLmFycm93cyxcbiAgICAgIHRyYWNrID0gRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnRzLnRyYWNrO1xuICB2YXIgd3JhcHBlciA9IHBsYWNlaG9sZGVyO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHByZXYgPSBFbGVtZW50cy5wcmV2O1xuICB2YXIgbmV4dCA9IEVsZW1lbnRzLm5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h0O1xuICB2YXIgY3JlYXRlZDtcbiAgdmFyIHdyYXBwZXJDbGFzc2VzO1xuICB2YXIgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycm93cyA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb24oRVZFTlRfVVBEQVRFRCwgcmVtb3VudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudCgpIHtcbiAgICBkZXN0cm95KCk7XG4gICAgbW91bnQoKTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBpbml0KCkge1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5hcnJvd3M7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgaWYgKGVuYWJsZWQgJiYgIShwcmV2ICYmIG5leHQpKSB7XG4gICAgICBjcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlQXJyb3dzKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGFzc2lnbihhcnJvd3MsIHtcbiAgICAgICAgcHJldjogcHJldixcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHQ6IG5leHRcbiAgICAgIH0pO1xuICAgICAgZGlzcGxheSh3cmFwcGVyLCBlbmFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZCA/ICIiIDogIm5vbmUiKTtcbiAgICAgIGFkZENsYXNzKHdyYXBwZXIsIHdyYXBwZXJDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NlcyA9IENMQVNTX0FSUk9XUyArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBsaXN0ZW4oKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHVwZGF0ZSgpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoW3ByZXYsIG5leHRdLCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UUk9MUywgdHJhY2suaWQpO1xuICAgICAgICBlbWl0KEVWRU5UX0FSUk9XU19NT1VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCwgcHJldiwgbmV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3koKSB7XG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICAgIHJlbW92ZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh3cmFwcGVyLCB3cmFwcGVyQ2xhc3Nlcyk7XG5cbiAgICBpZiAoY3JlYXRlZCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlbW92ZShwbGFjZWhvbGRlciA/IFtwcmV2LCBuZXh0XSA6IHdyYXBwZXIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHByZXYgPSBuZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZUF0dHJpYnV0ZShbcHJldiwgbmV4dF0sIEFMTF9BVFRSSUJVVEVTKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKCkge1xuICAgIG9uKFtFVkVOVF9NT1VOVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCwgRVZFTlRfTU9WRUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfRU5EX0lOREVYX0NIQU5HRURdLCB1cGRhdGUpO1xuICAgIGJpbmQobmV4dCwgImNsaWNrIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGFwcGx5KGdvLCAiPiIpKTtcbiAgICBiaW5kKHByZXYsICJjbGljayIsIGFwcGx5KGdvLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIjwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgQ29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZXIuZ28oY29udHJvbCwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3dzKCkge1xuICAgIHdyYXBwZXIgPSBwbGFjZWhvbGRlciB8fCBjcmVhdGUoImRpdiIsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc2VzLmFycm93cyk7XG4gICAgcHJldiA9IGNyZWF0ZUFycm93KHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBuZXh0ID0gY3JlYXRlQXJyb3coZmFsc2UpO1xuICAgIGNyZWF0ZWQgPSB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBhcHBlbmQod3JhcHBlciwgW3ByZXYsIG5leHRdKTtcbiAgICAhcGxhY2VoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sZGVyICYmIGJlZm9yZSh3cmFwcGVyLCB0cmFjayk7XG4gIH1cblxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY3JlYXRlQXJyb3cocHJldjIpIHtcbiAgICB2YXIgYXJyb3cgPSAiPGJ1dHRvbiBjbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiIiArIGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldjIgPyBjbGFzc2VzLnByZXYgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwZT1cXCJidXR0b25cXCI+PHN2ZyB4bWxucz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFwiIiArIFhNTF9OQU1FX1NQQUNFICsgIlxcIiB2aWV3Qm94PVxcIjAgMCAiICsgU0laJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UgKyAiICIgKyBTSVpFICsgIlxcIiB3aWR0aD1cXCIiICsgU0laRSArICJcXCIgaGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodD1cXCIiICsgU0laRSArICJcXCIgZm9jdXNhYmxlPVxcImZhbHNlXFwiPjxwYXRoIGQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIiIgKyAob3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgKyAiXFwiIC8+IjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHBhcnNlSHRtbChhcnJvdyk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIGlmIChwcmV2ICYmIG5leHQpIHtcbiAgICAgIHZhciBpbmRleCA9IFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLmluZGV4O1xuICAgICAgdmFyIHByZXZJbmRleCA9IENvbnRyb2xsZXIuZ2V0UHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXYoKTtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBDb250cm9sbGVyLmdldE5leHQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB2YXIgcHJldkxhYmVsID0gcHJldkluZGV4ID4gLTEgJiYgaW5kZXggPCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldkluZGV4ID8gaTE4bi5sYXN0IDogaTE4bi5wcmV2O1xuICAgICAgdmFyIG5leHRMYWJlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBuZXh0SW5kZXggPiAtMSAmJiBpbmRleCA+IG5leHRJbmRleCA/IGkxOG4uZmlyc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogaTE4bi5uZXh0O1xuICAgICAgcHJldi5kaXNhYmxlZCA9IHByZXZJbmRleCA8IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgbmV4dC5kaXNhYmxlZCA9IG5leHRJbmRleCA8IDA7XG4gICAgICBzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cmlidXRlKHByZXYsIEFSSUFfTEFCRUwsIHByZXZMYWJlbCk7XG4gICAgICBzZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKG5leHQsIEFSSUFfTEFCRUwsIG5leHRMYWJlbCk7XG4gICAgICBlbWl0KEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9BUlJPV1NfVVBEQVRFRCwgcHJldiwgbmV4dCwgcHJldkluZGV4LCBuZXh0SW5kZXgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFycm93czogYXJyb3dzLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlOiB1cGRhdGVcbiAgfTtcbn1cblxudmFyIElOVEVSVkFMX0RBVEFfQVRUUklCVVRFID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEFfQVRUUklCVVRFICsgIi1pbnRlcnZhbCI7XG5cbmZ1bmN0aW9uIEF1dG9wbGF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZTYgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZTYub24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlNi5iaW5kLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U2LmVtaXQ7XG5cbiAgdmFyIGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbCA9IFJlcXVlc3RJbnRlcnZhbChvcHRpb25zLmludGVydmFsLCBTcGxpZGUyLmdvLmInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKFNwbGlkZTIsICI+IiksIG9uQW5pbWF0aW9uRnJhbWUpO1xuICB2YXIgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaW50ZXJ2YWwuaXNQYXVzZWQ7XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50cyxcbiAgICAgIF9Db21wb25lbnRzMiRFbGVtZW50czQgPSBDb21wb25lbnRzMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWxlbWVudHMsXG4gICAgICByb290ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzNC5ybycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCxcbiAgICAgIHRvZ2dsZSA9IF9Db21wb25lbnRzMiRFbGVtZW50czQudG9nZ2xlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIGF1dG9wbGF5ID0gb3B0aW9ucy5hdXRvcGxheTtcbiAgdmFyIGhvdmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkO1xuICB2YXIgZm9jdXNlZDtcbiAgdmFyIHN0b3BwZWQgPSBhdXRvcGxheSA9PT0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJwYXVzZSI7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKGF1dG9wbGF5KScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgbGlzdGVuKCk7XG4gICAgICB0b2dnbGUgJiYgc2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b2dnbGUsIEFSSUFfQ09OVFJPTFMsIEVsZW1lbnRzLnRyYWNrLmlkKTtcbiAgICAgIHN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVkIHx8IHBsYXkoKTtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBsaXN0ZW4oKSB7XG4gICAgaWYgKG9wdGlvbnMucGF1c2VPbkhvdmVyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgYmluZChyb290LCAibW91c2VlbnRlciBtb3VzZWxlYXZlIiwgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSB7XG4gICAgICAgIGhvdmVyZWQgPSBlLnR5cGUgPT09ICJtb3VzZWVudGVyIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5wYXVzZU9uRm9jdXMpIHtcbiAgICAgIGJpbmQocm9vdCwgImZvY3VzaW4gZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Vzb3V0IiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZm9jdXNlZCA9IGUudHlwZSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICJmb2N1c2luIjtcbiAgICAgICAgYXV0b1RvZ2dsZSgpO1xuICAgICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGlmICh0b2dnbGUpIHtcbiAgICAgIGJpbmQodG9nZ2xlLCAiY2xpY2siLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gKCkge1xuICAgICAgICBzdG9wcGVkID8gcGxheSgpIDogcGF1c2UodHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb24oW0VWRU5UX01PVkUsIEVWRU5UX1NDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPTEwsIEVWRU5UX1JFRlJFU0hdLCBpbnRlcnZhbC5yZXdpbmQpO1xuICAgIG9uKEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19NT1ZFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGlzUGF1c2VkKCkgJiYgQ29tcG9uZW50czIuU2xpZGVzLmlzRW5vdWdoKCkpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpbnRlcnZhbC5zdGFydCghb3B0aW9ucy5yZXNldFByb2dyZXNzKTtcbiAgICAgIGZvY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUExBWSk7XG4gICAgfVxuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhdXNlKHN0b3ApIHtcbiAgICBpZiAoc3RvcCA9PT0gdm9pZCAwKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc3RvcCA9IHRydWU7XG4gICAgfVxuXG4gICAgc3RvcHBlZCA9ICEhc3RvcDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdXBkYXRlKCk7XG5cbiAgICBpZiAoIWlzUGF1c2VkKCkpIHtcbiAgICAgIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbC5wYXVzZSgpO1xuICAgICAgZW1pdChFVkVOVF9BVVRPUExBWV9QQVVTRSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGF1dG9Ub2dnbGUoKSB7XG4gICAgaWYgKCFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcHBlZCkge1xuICAgICAgaG92ZXJlZCB8fCBmb2N1c2VkID8gcGF1c2UoZmFsc2UpIDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXkoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0b2dnbGUpIHtcbiAgICAgIHRvZ2dsZUNsYXNzKHRvZ2dsZSwgQ0xBU1NfQUNUSVZFLCAhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0b3BwZWQpO1xuICAgICAgc2V0QXR0cmlidXRlKHRvZ2dsZSwgQVJJQV9MQUJFTCwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuaTE4bltzdG9wcGVkID8gInBsYXkiIDogInBhdXNlIl0pO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKHJhdGUpIHtcbiAgICB2YXIgYicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciA9IEVsZW1lbnRzLmJhcjtcbiAgICBiYXIgJiYgc3R5bGUoYmFyLCAid2lkdGgiLCByYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSAqIDEwMCArICIlIik7XG4gICAgZW1pdChFVkVOVF9BVVRPUExBWV9QTEFZSU5HLCByYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdmUoaW5kZXgpIHtcbiAgICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlID0gQ29tcG9uZW50czIuU2xpZGVzLmdldEF0KGluZGV4KTtcbiAgICBpbnRlcnZhbC5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0KFNsaWRlICYmICtnZXRBdHRyaWJ1dGUoU2xpZGUuc2xpZGUsIElOVEVSVkFMX0RBVEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0FUVFJJQlVURSkgfHwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gIH1cblxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogaW50ZXJ2YWwuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBwbGF5OiBwbGF5LFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBpc1BhdXNlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGlzUGF1c2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIENvdmVyKFNwbGlkZTIsIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNyA9IEV2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNy5vbjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wdGlvbnMuY292ZXIpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBvbihFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VTSF0sIGFwcGx5KGNvdmVyLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvdmVyKGNvdmVyMikge1xuICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoU2xpZGUpIHtcbiAgICAgIHZhciBpbWcgPSBjaGlsZChTbGlkZS5jb250YWluZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IFNsaWRlLnNsaWRlLCAiaW1nIik7XG5cbiAgICAgIGlmIChpbWcgJiYgaW1nLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmMpIHtcbiAgICAgICAgdG9nZ2xlKGNvdmVyMiwgaW1nLCBTbGlkZSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlKGNvdmVyMiwgaW1nLCBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUpIHtcbiAgICBTbGlkZS5zdHlsZSgiYmFja2dyb3VuZCIsIGNvdmVyMiA/ICJjZW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXFwiIiArIGltZy5zcmMgKyAiXFwiKSIgOiAiIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHRydWUpO1xuICAgIGRpc3BsYXkoaW1nLCBjb3ZlcjIgPyAibm9uZSIgOiAiIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KGNvdmVyLCBmYWxzZSlcbiAgfTtcbn1cblxudmFyIEJPVU5DRV9ESUZGX1RIUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0hPTEQgPSAxMDtcbnZhciBCT1VOQ0VfRFVSQVRJT04gPSA2MDA7XG52YXIgRlJJQ1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OX0ZBQ1RPUiA9IDAuNjtcbnZhciBCQVNFX1ZFTE9DSVRZID0gMS41O1xudmFyIE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5fRFVSQVRJT04gPSA4MDA7XG5cbmZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTggPSBFdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTgubycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLFxuICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICB2YXIgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IFNwbGlkZTIuc3RhdGUuc2V0O1xuICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndExpbWl0ID0gTW92ZS5nZXRMaW1pdCxcbiAgICAgIGV4Y2VlZGVkTGltaXQgPSBNb3ZlLmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNlZWRlZExpbWl0LFxuICAgICAgdHJhbnNsYXRlID0gTW92ZS50cmFuc2xhdGU7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgaXNTbGlkZSA9IFNwbGlkZTIuaXMoU0xJREUpO1xuICB2YXIgaW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsO1xuICB2YXIgY2FsbGJhY2s7XG4gIHZhciBmcmljdGlvbiA9IDE7XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG1vdW50KCkge1xuICAgIG9uKEVWRU5UX01PVkUsIGNsZWFyKTtcbiAgICBvbihbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBjYW5jZWwpO1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsIG9uU2Nyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLCBub0NvbnN0cmFpbikge1xuICAgIHZhciBmcm9tID0gZ2V0UG9zaXRpb24oKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgY2xlYXIoKTtcblxuICAgIGlmIChzbmFwICYmICghaXNTbGlkZSB8fCAhZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkTGltaXQoKSkpIHtcbiAgICAgIHZhciBzaXplID0gQ29tcG9uZW50czIuTGF5b3V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zbGlkZXJTaXplKCk7XG4gICAgICB2YXIgb2Zmc2V0ID0gc2lnbihkZXN0aW5hdGlvbikgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogc2l6ZSAqIGZsb29yKGFicyhkZXN0aW5hdGlvbikgLyBzaXplKSB8fCAwO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3RpbmF0aW9uID0gTW92ZS50b1Bvc2l0aW9uKENvbXBvbmVudHMyLkNvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRvRGVzdChkZXN0aW5hdGlvbiAlIHNpemUpKSArIG9mZnNldDtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIG5vRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoZnJvbSwgZGVzdGluYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLCAxKTtcbiAgICBmcmljdGlvbiA9IDE7XG4gICAgZHVyYXRpb24gPSBub0Rpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZSA/IDAgOiBkdXJhdGlvbiB8fCBtYXgoYWJzKGRlc3RpbmF0aW9uIC0gZnJvbSkgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicgQkFTRV9WRUxPQ0lUWSwgTUlOX0RVUkFUSU9OKTtcbiAgICBjYWxsYmFjayA9IG9uU2NybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGVkO1xuICAgIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKGR1cmF0aW9uLCBvbkVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGFwcGx5KHVwZGF0ZSwgZnJvbSwgZGVzdGluYXRpb24sIG5vQ29uc3RyYWluKSwgMSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHNldChTQ1JPTExJTkcpO1xuICAgIGVtaXQoRVZFTlRfU0NST0xMKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRW5kKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQoSURMRSk7XG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICBlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9TQ1JPTExFRCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoZnJvbSwgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvLCBub0NvbnN0cmFpbiwgcmF0ZSkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFBvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpO1xuICAgIHZhciB0YXJnZXQgPSBmcm9tICsgKHRvIC0gZnJvbSkgKiBlYXNpbmcocicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUpO1xuICAgIHZhciBkaWZmID0gKHRhcmdldCAtIHBvc2l0aW9uKSAqIGZyaWN0aW9uOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0cmFuc2xhdGUocG9zaXRpb24gKyBkaWZmKTtcblxuICAgIGlmIChpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAmJiAhbm9Db25zdHJhaW4gJiYgZXhjZWVkZWRMaW1pdCgpKSB7XG4gICAgICBmcmljdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKj0gRlJJQ1RJT05fRkFDVE9SO1xuXG4gICAgICBpZiAoYWJzKGRpZmYpIDwgQk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVU5DRV9ESUZGX1RIUkVTSE9MRCkge1xuICAgICAgICBzY3JvbGwoZ2V0TGltaXQoZXhjZWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVkTGltaXQodHJ1ZSkpLCBCT1VOQ0VfRFVSQVRJT04sIGZhbHNlLCBjYWxsYmFjaywgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyKCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgIGludGVydmFsLmNhbmNlbCgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAhaW50ZXJ2YWwuaXNQYXVzZWQoKSkge1xuICAgICAgY2xlYXIoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbkVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVhc2luZyh0KSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBlYXNpbmdGdW5jID0gb3B0aW9ucy5lYXNpbmdGdW5jO1xuICAgIHJldHVybiBlYXNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nRnVuYyA/IGVhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coMSAtIHQsIDQpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGNsZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncixcbiAgICBzY3JvbGw6IHNjcm9sbCxcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxudmFyIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TID0ge1xuICBwYXNzaXZlOiBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UsXG4gIGNhcHR1cmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIERyYWcoU3BsaWRlMiwgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U5ID0gRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U5Lm9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICBiaW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IF9FdmVudEludGVyZmFjZTkuYmluZCxcbiAgICAgIHVuYmluZCA9IF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2U5LnVuYmluZDtcblxuICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgU2Nyb2xsID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlNjcm9sbCxcbiAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcixcbiAgICAgIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMudHJhY2ssXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVkdWNlID0gQ29tcG9uZW50czIuTWVkaWEucmVkdWNlO1xuICB2YXIgX0NvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiREaXJlY3RpbzIgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24sXG4gICAgICByZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSA9IF9Db21wb25lbnRzMiREaXJlY3RpbzIucmVzb2x2ZSxcbiAgICAgIG9yaWVudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ29tcG9uZW50czIkRGlyZWN0aW8yLm9yaWVudDtcbiAgdmFyIGdldFBvc2l0aW9uID0gTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUuZ2V0UG9zaXRpb24sXG4gICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5leGNlZWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMaW1pdDtcbiAgdmFyIGJhc2VQb3NpdGlvbjtcbiAgdmFyIGJhc2VFdmVudDtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2QmFzZUV2ZW50O1xuICB2YXIgaXNGcmVlO1xuICB2YXIgZHJhZ2dpbmc7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgZXhjZWVkZWQgPSBmYWxzZTtcbiAgdmFyIGNsaWNrUHJldmVudGVkO1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGRpc2FibGVkO1xuICB2YXIgdGFyZ2V0O1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX01PVkVfRVZFTlRTLCBub29wLCBTQ1JPTExfTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJU1RFTkVSX09QVElPTlMpO1xuICAgIGJpbmQodHJhY2ssIFBPSU5URVJfVVBfRVZFTlRTLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgIGJpbmQodHJhY2ssIFBPSScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVEVSX0RPV05fRVZFTlRTLCBvblBvaW50ZXJEb3duLCBTQ1JPTExfTElTVEVORVJfT1BUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTlMpO1xuICAgIGJpbmQodHJhY2ssICJjbGljayIsIG9uQ2xpY2ssIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjYXB0dXJlOiB0cnVlXG4gICAgfSk7XG4gICAgYmluZCh0cmFjaywgImRyYWdzdGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCBwcmV2ZW50KTtcbiAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRF0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmFyIGRyYWcgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5kcmFnO1xuICAgIGRpc2FibGUoIWRyYWcpO1xuICAgIGlzRnJlZSA9IGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnID09PSAiZnJlZSI7XG4gIH1cblxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgY2xpY2tQcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgIGlmICghZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkKSB7XG4gICAgICB2YXIgaXNUb3VjaCA9IGlzVG91Y2hFdmVudChlKTtcblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChpc0RyYWdnYWJsZShlLnRhcmdldCkgJiYgKGlzVG91Y2ggfHwgIWUuYnV0dG9uKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgaWYgKCFDb250cm9sbGVyLmlzQnVzeSgpKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRhcmdldCA9IGlzVG91Y2ggPyB0cmFjayA6IHdpbmRvdztcbiAgICAgICAgICBkcmFnZycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcgPSBzdGF0ZS5pcyhbTU9WSU5HLCBTQ1JPTExJTkddKTtcbiAgICAgICAgICBwcmV2QicKICAgICAgICAgICAgICAgICAgICAgICAgYidhc2VFdmVudCA9IG51bGw7XG4gICAgICAgICAgYmluZCh0YXJnZXQsIFBPSU5URVJfTU9WRScKICAgICAgICAgICAgICAgICAgICAgICAgYidfRVZFTlRTLCBvblBvaW50ZXJNb3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGJpbmQodGFyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICAgICAgTW92ZS5jYW5jZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgICAgICAgU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgIHNhdmUoZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01vdmUoZSkge1xuICAgIGlmICghc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUuc2V0KERSQUdHSU5HKTtcbiAgICAgIGVtaXQoRVZFTlRfRFJBRyk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcbiAgICAgIGlmIChkcmFnZ2luZykgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoYmFzZVBvc2l0aW9uICsgY29uc3RyYWluKGRpZicKICAgICAgICAgICAgICAgICAgICAgICAgYidmQ29vcmQoZSkpKTtcbiAgICAgICAgdmFyIGV4cGlyZWQgPSBkaWZmVGltZShlKSA+IExPRycKICAgICAgICAgICAgICAgICAgICAgICAgYidfSU5URVJWQUw7XG4gICAgICAgIHZhciBoYXNFeGNlZWRlZCA9IGV4Y2VlZGVkICE9PSAoZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4Y2VlZGVkID0gZXhjZWVkZWRMaW1pdCgpKTtcblxuICAgICAgICBpZiAoZXhwaXJlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgaGFzRXhjZWVkZWQpIHtcbiAgICAgICAgICBzYXZlKGUpO1xuICAgICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGNsaWNrUHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgZW1pdChFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfRFJBR0dJTkcpO1xuICAgICAgICBwcmV2ZW50KGUpO1xuICAgICAgfSBlbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNTbGlkZXJEaXJlY3Rpb24oZSkpIHtcbiAgICAgICAgZHJhZ2dpbmcgPSBzaG91bGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3RhcnQoZSk7XG4gICAgICAgIHByZXZlbnQoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIG9uUG9pbnRlclVwKGUpIHtcbiAgICBpZiAoc3RhdGUuaXMoRFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUdHSU5HKSkge1xuICAgICAgc3RhdGUuc2V0KElETEUpO1xuICAgICAgZW1pdChFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfRFJBR0dFRCk7XG4gICAgfVxuXG4gICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZShlKTtcbiAgICAgIHByZXZlbnQoZSk7XG4gICAgfVxuXG4gICAgdW5iaW5kKHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUpO1xuICAgIHVuYmluZCh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXApO1xuICAgIGRyYWdnaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgaWYgKCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzYWJsZWQgJiYgY2xpY2tQcmV2ZW50ZWQpIHtcbiAgICAgIHByZXZlbnQoZSwgdHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmUoZSkge1xuICAgIHByZXZCYXNlRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gYmFzZUV2ZW50O1xuICAgIGJhc2VFdmVudCA9IGU7XG4gICAgYmFzZVBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiA9IGdldFBvc2l0aW9uKCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlKGUpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIHZlbG9jaXR5ID0gY29tcHV0ZVZlbG9jaXR5KGUpO1xuICAgIHZhciBkZXN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gPSBjb21wdXRlRGVzdGluYXRpb24odmVsb2NpdHkpO1xuICAgIHZhciByZXdpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkID0gb3B0aW9ucy5yZXdpbmQgJiYgb3B0aW9ucy5yZXdpbmRCeURyYWc7XG4gICAgcmVkdScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZShmYWxzZSk7XG5cbiAgICBpZiAoaXNGcmVlKSB7XG4gICAgICBDb250cm9sbGVyLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGwoZGVzdGluYXRpb24sIDAsIG9wdGlvbnMuc25hcCk7XG4gICAgfSBlbHNlIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5pcyhGQURFKSkge1xuICAgICAgQ29udHJvbGxlci5nbyhvcmllbnQoc2lnbignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVsb2NpdHkpKSA8IDAgPyByZXdpbmQgPyAiPCIgOiAiLSIgOiByZXdpbmQgPyAiPiIgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIisiKTtcbiAgICB9IGVsc2UgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIGV4Y2VlZGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJiByZXdpbmQpIHtcbiAgICAgIENvbnRyb2xsZXIuZ28oZXhjZWVkZWRMaW1pdCh0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPyAiPiIgOiAiPCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBDb250cm9sbGVyLmdvKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250cm9sbGVyLnRvRGVzdChkZXN0aW5hdGlvbiksIHRydWUpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZWR1Y2UodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRTdGFydChlKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciB0aHJlc2hvbGRzID0gb3B0aW9ucy5kcmFnTWluVGhyZXNob2xkO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgaXNPYmogPSBpc09iamVjdCh0aHJlc2hvbGRzKTtcbiAgICB2YXIgbW91c2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gaXNPYmogJiYgdGhyZXNob2xkcy5tb3VzZSB8fCAwO1xuICAgIHZhciB0b3VjaCA9IChpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NPYmogPyB0aHJlc2hvbGRzLnRvdWNoIDogK3RocmVzaG9sZHMpIHx8IDEwO1xuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gYWJzKGRpZmZDb29yZChlKSkgPiAoaXNUb3VjaEV2ZW50KGUpID8gdG91Y2ggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW91c2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTbGlkZXJEaXJlY3Rpb24oZSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gYWJzKGRpZmZDb29yZChlKSkgPiBhYnMoZGlmZkNvb3JkKGUsIHRydWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlVmVsb2NpdHkoZSkge1xuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5pcyhMT09QKSB8fCAhZXhjZWVkZWQpIHtcbiAgICAgIHZhciB0aW1lID0gZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZUaW1lKGUpO1xuXG4gICAgICBpZiAodGltZSAmJiB0aW1lIDwgTE9HX0lOVEVSVkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTCkge1xuICAgICAgICByZXR1cm4gZGlmZkNvb3JkKGUpIC8gdGltZTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZURlc3RpbmF0aW9uKHZlbG9jaXR5KSB7XG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCkgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2lnbih2ZWxvY2l0eSkgKiBtaW4oYWJzKHZlbG9jaXR5KSAqIChvcHRpb25zLmZsaWNrUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd2VyIHx8IDYwMCksIGlzRnJlZSA/IEluZmluaXR5IDogQ29tcG9uZW50czIuTGF5b3V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0U2l6ZSgpICogKG9wdGlvbnMuZmxpY2tNYXhQYWdlcyB8fCAxKSk7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gZGlmZkNvb3JkKGUsIG9ydGhvZ29uYWwpIHtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGNvb3JkT2YoZSwgb3J0aG9nb25hbCkgLSBjb29yZE9mKGdldEJhc2VFdmVudChlKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9ydGhvZ29uYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGltZU9mKGUpIC0gdGltZU9mKGdldEJhc2VFdmVudChlKSk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gZ2V0QmFzZUV2ZW50KGUpIHtcbiAgICByZXR1cm4gYmFzZUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9PT0gZSAmJiBwcmV2QmFzZUV2ZW50IHx8IGJhc2VFdmVudDtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpIHtcbiAgICByZXR1cm4gKGlzVG91Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnQoZSkgPyBlLmNoYW5nZWRUb3VjaGVzWzBdIDogZSlbInBhZ2UiICsgcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicob3J0aG9nb25hbCA/ICJZIiA6ICJYIildO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFpbihkaWZmKSB7XG4gICAgcmV0dXJuIGRpZmYgLyAoZXhjZWVkZWQgJiYgU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoU0xJREUpID8gRlJJQ1RJT04gOiAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dnYWJsZSh0YXJnZXQyKSB7XG4gICAgdmFyIG5vRHJhZyA9IG9wdGlvbnMubm9EcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZztcbiAgICByZXR1cm4gIW1hdGNoZXModGFyZ2V0MiwgIi4iICsgQ0xBU1NfUEFHSU5BVEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInT05fUEFHRSArICIsIC4iICsgQ0xBU1NfQVJST1cpICYmICghbm9EcmFnIHx8ICFtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyh0YXJnZXQyLCBub0RyYWcpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoZSkge1xuICAgIHJldHVybiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gInVuZGVmaW5lZCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIGRyYWdnaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpc2FibGUodmFsdWUpIHtcbiAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRpc2FibGU6IGRpc2FibGUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlzRHJhZ2dpbmc6IGlzRHJhZ2dpbmdcbiAgfTtcbn1cblxudmFyIE5PUk1BTElaQScKICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OX01BUCA9IHtcbiAgU3BhY2ViYXI6ICIgIixcbiAgUmlnaHQ6IEFSUk9XX1JJRycKICAgICAgICAgICAgICAgICAgICAgICAgYidIVCxcbiAgTGVmdDogQVJST1dfTEVGVCxcbiAgVXA6IEFSUk9XX1VQLFxuICBEb3duOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dfRE9XTlxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplS2V5KGtleSkge1xuICBrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5ID0gaXNTdHJpbmcoa2V5KSA/IGtleSA6IGtleS5rZXk7XG4gIHJldHVybiBOT1JNQUxJWicKICAgICAgICAgICAgICAgICAgICAgICAgYidBVElPTl9NQVBba2V5XSB8fCBrZXk7XG59XG5cbnZhciBLRVlCT0FSRF9FVkVOVCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5ZG93biI7XG5cbmZ1bmN0aW9uIEtleWJvYXJkKFNwbGlkZTIsIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMTAgPSBFdmVudEludGVyZmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTEwLm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMC5iaW5kLFxuICAgICAgdW5iaW5kID0gX0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTEwLnVuYmluZDtcblxuICB2YXIgcm9vdCA9IFNwbGlkZTIucm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Q7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgZGlzYWJsZWQ7XG5cbiAgZnVuY3Rpb24gbW91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KCkge1xuICAgIGluaXQoKTtcbiAgICBvbihFVkVOVF9VUERBVEVELCBkZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgb24oRVZFTlRfVVBEQVRFRCwgaW5pdCk7XG4gICAgb24oRVZFTlRfTU9WJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIG9uTW92ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYm9hcmQgPSBvcHRpb25zLmtleWJvYXJkO1xuXG4gICAgaWYgKGtleWJvYXJkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgdGFyZ2V0ID0ga2V5Ym9hcmQgPT09ICJnbG9iYWwiID8gd2luZG93IDogcm9vdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBiaW5kKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93bik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdW5iaW5kKHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQsIEtFWUJPQVJEX0VWRU5UKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUodmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSB7XG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUoKSB7XG4gICAgdmFyIF9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIGRpc2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCA9IHRydWU7XG4gICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgZGlzYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGVkID0gX2Rpc2FibGVkO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25LZXlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293bihlKSB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgdmFyIGtleSA9IG5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JtYWxpemVLZXkoZSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQpKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oIjwiKTtcbiAgICAgIH0gZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19SSUdIVCkpIHtcbiAgICAgICAgU3BsaWRlMi5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28oIj4iKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkaXNhYmxlOiBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzYWJsZVxuICB9O1xufVxuXG52YXIgU1JDX0RBVEFfQVRUUklCVVRFID0gREFUQV9BVFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklCVVRFICsgIi1sYXp5IjtcbnZhciBTUkNTRVRfREFUQV9BVFRSSUJVVEUgPSBTUkNfREEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEFfQVRUUklCVVRFICsgIi1zcmNzZXQiO1xudmFyIElNQUdFX1NFTEVDVE9SID0gIlsiICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNSQ19EQVRBX0FUVFJJQlVURSArICJdLCBbIiArIFNSQ1NFVF9EQVRBX0FUVFJJQlVURScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAiXSI7XG5cbmZ1bmN0aW9uIExhenlMb2FkKFNwbGlkZTIsIENvbXBvbmVudHMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMTEgPSBFdmVudEludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTExLm9uLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9mZiA9IF9FdmVudEludGVyZmFjZTExLm9mZixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJmYWNlMTEuYmluZCxcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UxMS5lbWl0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICB2YXIgaXNTZXF1ZW50aWFsID0gb3B0aW9ucy5sYXp5TG9hZCA9PT0gInNlcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZW50aWFsIjtcbiAgdmFyIGV2ZW50cyA9IFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRScKICAgICAgICAgICAgICAgICAgICAgICAgYidEXTtcbiAgdmFyIGVudHJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKG9wdGlvbnMubGF6eUxvYWQpIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9SRUZSRVNILCBpbml0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpIHtcbiAgICBlbXB0eShlbnRyaWVzKTtcbiAgICByZWdpc3RlcigpO1xuXG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChpc1NlcXVlbnRpYWwpIHtcbiAgICAgIGxvYWROZXh0KCk7XG4gICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBvZmYoZXZlbnRzKTtcbiAgICAgIG9uKGV2ZW50cywgY2hlY2spO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChTbGlkZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHF1ZXJ5QWxsKFNsaWRlLnNsaWRlLCBJTUFHRV9TRUxFQ1RPUikuZm9yRWFjaChmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gKGltZykge1xuICAgICAgICB2YXIgc3JjID0gZ2V0QXR0cmlidXRlKGltZywgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICAgIHZhciBzcmNzZXQgPSBnZXRBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKGltZywgU1JDU0VUX0RBVEFfQVRUUklCVVRFKTtcblxuICAgICAgICBpZiAoc3JjICcKICAgICAgICAgICAgICAgICAgICAgICAgYichPT0gaW1nLnNyYyB8fCBzcmNzZXQgIT09IGltZy5zcmNzZXQpIHtcbiAgICAgICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3Nlcy5zcGlubmVyO1xuICAgICAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50ID0gaW1nLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgdmFyIHNwaW5uZXIgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hpbGQocGFyZW50LCAiLiIgKyBjbGFzc05hbWUpIHx8IGNyZWF0ZSgic3BhbiIsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc05hbWUsIHBhcmVudCk7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtpbWcsIFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgc3Bpbm5lcl0pO1xuICAgICAgICAgIGltZy5zcmMgfHwgZGlzcGxheShpbWcsICJub25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGVjaygpIHtcbiAgICBlbnRyaWVzID0gZW50cmllcy5maWx0ZXIoZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhkYXRhKSB7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgKiAoKG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnByZWxvYWRQYWdlcyB8fCAxKSArIDEpIC0gMTtcbiAgICAgIHJldHVybiBkYXRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1sxXS5pc1dpdGhpbihTcGxpZGUyLmluZGV4LCBkaXN0YW5jZSkgPyBsb2FkKGRhdGEpIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWU7XG4gICAgfSk7XG4gICAgZW50cmllcy5sZW5ndGggfHwgb2ZmKGV2ZW50cyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZChkYXRhKSB7XG4gICAgdmFyIGltZyA9IGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhWzBdO1xuICAgIGFkZENsYXNzKGRhdGFbMV0uc2xpZGUsIENMQVNTX0xPQURJTkcpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBiaW5kKGltZywgImxvYWQgZXJyb3IiLCBhcHBseShvbkxvYWQsIGRhdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSk7XG4gICAgc2V0QXR0cmlidXRlKGltZywgInNyYyIsIGdldEF0dHJpYnV0ZShpbWcsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkNfREFUQV9BVFRSSUJVVEUpKTtcbiAgICBzZXRBdHRyaWJ1dGUoaW1nLCAic3Jjc2V0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0dHJpYnV0ZShpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSkpO1xuICAgIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgIHJlbW92ZUF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9uTG9hZChkYXRhLCBlKSB7XG4gICAgdmFyIGltZyA9IGRhdGFbMF0sXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTbGlkZSA9IGRhdGFbMV07XG4gICAgcmVtb3ZlQ2xhc3MoU2xpZGUuc2xpZGUsIENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19MT0FESU5HKTtcblxuICAgIGlmIChlLnR5cGUgIT09ICJlcnJvciIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmUoZGF0YVsyXSk7XG4gICAgICBkaXNwbGF5KGltZywgIiIpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVtaXQoRVZFTlRfTEFaWUxPQURfTE9BREVELCBpbWcsIFNsaWRlKTtcbiAgICAgIGVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KEVWRU5UX1JFU0laRSk7XG4gICAgfVxuXG4gICAgaXNTZXF1ZW50aWFsICYmIGxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTmV4dCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZE5leHQoKSB7XG4gICAgZW50cmllcycKICAgICAgICAgICAgICAgICAgICAgICAgYicubGVuZ3RoICYmIGxvYWQoZW50cmllcy5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBhcHBseShlbXB0eSwgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpZXMpLFxuICAgIGNoZWNrOiBjaGVja1xuICB9O1xufVxuXG5mdW5jdGlvbiBQYWdpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgZXZlbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gIHZhciBvbiA9IGV2ZW50Lm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVtaXQgPSBldmVudC5lbWl0LFxuICAgICAgYmluZCA9IGV2ZW50LmJpbmQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzLFxuICAgICAgRWxlbWVudHMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLkNvbnRyb2xsZXI7XG4gIHZhciBoYXNGb2N1cyA9IENvbnRyb2xsZXIuaGFzRm9jdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLFxuICAgICAgZ2V0SW5kZXggPSBDb250cm9sbGVyLmdldEluZGV4LFxuICAgICAgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidvID0gQ29udHJvbGxlci5nbztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLnJlc29sdmU7XG4gIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLnBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduO1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxpc3Q7XG4gIHZhciBwYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkNsYXNzZXM7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0lOREVYJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DSEFOR0VEXSwgbW91bnQpO1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbjtcbiAgICBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KHBsYWNlaG9sZGVyLCBlbmFibGVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA/ICIiIDogIm5vbmUiKTtcblxuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBvbihbRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfU0NST0xMRURdLCB1cGRhdGUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGNyZWF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIHVwZGF0ZSgpO1xuICAgICAgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXQoRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVELCB7XG4gICAgICAgIGxpc3Q6IGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0LFxuICAgICAgICBpdGVtczogaXRlbXNcbiAgICAgIH0sIGdldEF0KFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4KSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGxpc3QpIHtcbiAgICAgIHJlbW92ZShwbGFjZWhvbGRlciA/IHNsaWNlKGxpc3QuY2hpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkcmVuKSA6IGxpc3QpO1xuICAgICAgcmVtb3ZlQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzKTtcbiAgICAgIGVtcHR5KGl0ZW1zKTtcbiAgICAgIGxpc3QgPSBudWxsO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICBldmVudC5kZXN0cm95KCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlUGFnaW5hdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gU3BsaWRlMi5sZW5ndGg7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbGFzc2VzLFxuICAgICAgICBpMThuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG9wdGlvbnMuaTE4bixcbiAgICAgICAgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2U7XG4gICAgdmFyIG1heCA9IGhhc0ZvY3VzKCkgPyBDb250cm9sbGVyLmdldEVuZCgpICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEgOiBjZWlsKGxlbmd0aCAvIHBlclBhZ2UpO1xuICAgIGxpc3QgPSBwbGFjZWhvbGRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHwgY3JlYXRlKCJ1bCIsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbWVudHMudHJhY2sucCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudEVsZW1lbnQpO1xuICAgIGFkZENsYXNzKGxpc3QsIHBhZ2luYXRpb25DbGFzc2VzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IENMQVNTX1BBR0lOQVRJT04gKyAiLS0iICsgZ2V0RGlyZWN0aW9uKCkpO1xuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUobGlzdCwgUk9MRSwgInRhYmxpc3QiKTtcbiAgICBzZXRBdHRyaWJ1dGUobCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0KTtcbiAgICBzZXRBdHRyaWJ1dGUobGlzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIEFSSUFfT1JJRU5UQVRJT04sIGdldERpcmVjdGlvbigpID09PSBUVEIgPyAidmVydGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsIiA6ICIiKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgbGkgPSBjcmVhdGUoImxpIiwgbnVsbCwgbGlzdCk7XG4gICAgICB2YXIgYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbiA9IGNyZWF0ZSgiYnV0dG9uIiwge1xuICAgICAgICBjbGFzczogY2xhc3Nlcy5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZSxcbiAgICAgICAgdHlwZTogImJ1dHRvbiJcbiAgICAgIH0sIGxpKTtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgY29udHJvbHMgPSBTbGlkZXMuZ2V0SW4oaSkubWFwKGZ1bmN0aW9uIChTbGlkZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgcmV0dXJuIFNsaWRlLnNsaWRlLmlkO1xuICAgICAgfSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHRleHQgPSAhaGFzRm9jdXMoKSAmJiBwZXJQYWdlID4gMSA/IGkxOG4ucGFnZVggOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaTE4bi5zbGlkZVg7XG4gICAgICBiaW5kKGJ1dHRvbiwgImNsaWNrIiwgYXBwbHkob25DbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2ssIGkpKTtcblxuICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBiaW5kKGJ1dHRvbiwgImtleWRvd24iLCBhcHBseShvbktleWRvd24sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpKSk7XG4gICAgICB9XG5cbiAgICAgIHNldEF0dHJpYnV0ZShsaSwgUk9MRSwgInByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50YXRpb24iKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFJPTEUsICJ0YWIiKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0NPTlRST0xTLCBjb250cm9scy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInam9pbigiICIpKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIEFSSUFfTEFCRUwsIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JtYXQodGV4dCwgaSArIDEpKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFRBQl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5ERVgsIC0xKTtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBsaTogbGksXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBidXR0b246IGJ1dHRvbixcbiAgICAgICAgcGFnZTogaVxuICAgICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2socGFnZSkge1xuICAgIGdvKCI+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyIgKyBwYWdlLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihwYWdlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZSkge1xuICAgIHZhciBsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIGtleScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBub3JtYWxpemVLZXkoZSk7XG4gICAgdmFyIGRpciA9IGdldERpcmVjdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB2YXIgbmV4dFBhZ2UgPSAtMTtcblxuICAgIGlmIChrZXkgPT09IHJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlKEFSUk9XX1JJR0hULCBmYWxzZSwgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSArK3BhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlICUgbGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX0xFRicKICAgICAgICAgICAgICAgICAgICAgICAgYidULCBmYWxzZSwgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSAoLS1wYWdlICsgbGVuZ3RoKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgJSBsZW5ndGg7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJIb21lIikge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG5leHRQYWdlID0gMDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gIkVuZCIpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBuZXh0UGFnZSA9IGxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgdmFyIGl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXRlbXNbbmV4dFBhZ2VdO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhpdGVtLmJ1dHRvbik7XG4gICAgICBnbygiPiIgKyBuZXh0UGFnZSk7XG4gICAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmVudChlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKCkge1xuICAgIHJldHVybiBvcHRpb25zLnBhZ2luYXRpb25EaXJlY3Rpb24gfHwgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuZGlyZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXQoaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGl0ZW1zW0NvbnRyb2xsZXIudG9QYWdlKGluZGV4KV07XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHZhciBwcmV2ID0gZ2V0QXQoZ2V0SScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KHRydWUpKTtcbiAgICB2YXIgY3VyciA9IGdldEF0KGdldEluZGV4KCkpO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChwcmV2KSB7XG4gICAgICB2YXIgYnV0dG9uID0gcHJldi5idXR0b247XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmVtb3ZlQ2xhc3MoYnV0dG9uLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgcmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUF0dHJpYnV0ZShidXR0b24sIEFSSUFfU0VMRUNURUQpO1xuICAgICAgc2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShidXR0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgIH1cblxuICAgIGlmIChjdXJyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIF9idXR0b24gPSBjdXJyLmJ1dHRvbjtcbiAgICAgIGFkZENsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhfYnV0dG9uLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgc2V0QXR0cmlidXRlKF9idXR0b24sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBUklBX1NFTEVDVEVELCB0cnVlKTtcbiAgICAgIHNldEF0dHJpYnV0ZShfYnV0dG9uLCBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FCX0lOREVYLCAiIik7XG4gICAgfVxuXG4gICAgZW1pdChFVkVOVF9QQUdJTkFUSU9OXycKICAgICAgICAgICAgICAgICAgICAgICAgYidVUERBVEVELCB7XG4gICAgICBsaXN0OiBsaXN0LFxuICAgICAgaXRlbXM6IGl0ZW1zXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0sIHByZXYsIGN1cnIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW1zLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBnZXRBdDogZ2V0QXQsXG4gICAgdXBkYXRlOiB1cGRhdGVcbiAgfTtcbn1cblxudmFyIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklHR0VSX0tFWVMgPSBbIiAiLCAiRW50ZXIiXTtcblxuZnVuY3Rpb24gU3luYyhTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIGlzTmF2aWdhdGlvbiA9IG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLmlzTmF2aWdhdGlvbixcbiAgICAgIHNsaWRlRm9jdXMgPSBvcHRpb25zLnNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUZvY3VzO1xuICB2YXIgZXZlbnRzID0gW107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIFNwbGlkZTIuc3BsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAoIXRhcmdldC5pc1BhcmVudCkge1xuICAgICAgICBzeW5jKFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyLCB0YXJnZXQuc3BsaWRlKTtcbiAgICAgICAgc3luYyh0YXJnZXQuc3BsaWRlLCBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgbmF2aWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudC5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgZW1wdHkoZXZlbnRzKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiByZW1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAgICBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN5bmMoc3BsaWRlLCB0YXJnZXQpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2Uoc3BsaWRlKTtcbiAgICBldmVudC5vbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfTU9WRSwgZnVuY3Rpb24gKGluZGV4LCBwcmV2LCBkZXN0KSB7XG4gICAgICB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dvKHRhcmdldC5pcyhMT09QKSA/IGRlc3QgOiBpbmRleCk7XG4gICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50cy5wdXNoKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG9uID0gZXZlbnQub247XG4gICAgb24oRVZFTlRfQ0xJQ0ssIG9uQ2xpY2spO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihFVkVOVF9TTElERV9LRVlET1dOLCBvbktleWRvd24pO1xuICAgIG9uKFtFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRF0sIHVwZGF0ZSk7XG4gICAgZXZlbnRzLnB1c2goZScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50KTtcbiAgICBldmVudC5lbWl0KEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIuc3BsaWRlcyk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShDb21wb25lbnRzMi5FbGVtZW50cy5saXN0LCBBUklBX09SSUVOVEFUSU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTiwgb3B0aW9ucy5kaXJlY3Rpb24gPT09IFRUQiA/ICJ2ZXJ0aWNhbCIgOiAiIik7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gb25DbGljayhTbGlkZSkge1xuICAgIFNwbGlkZTIuZ28oU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLmluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihTbGlkZSwgZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAoaW5jbHVkZXMoVFJJR0dFUl9LRVlTLCBub3JtYWxpemVLZXkoZSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgb25DbGljayhTbGlkZSk7XG4gICAgICBwcmV2ZW50KGUpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldHVwOiBhcHBseShDb21wb25lbnRzMi5NJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkaWEuc2V0LCB7XG4gICAgICBzbGlkZUZvY3VzOiBpc1VuZGVmaW5lZChzbGlkZUZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgPyBpc05hdmlnYXRpb24gOiBzbGlkZUZvY3VzXG4gICAgfSwgdHJ1ZSksXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHJlbW91bnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZW1vdW50XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdoZWVsKFNwbGlkZTIsIENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMTIgPSBFdmVudEludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UoU3BsaWRlMiksXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTIuYmluZDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIGxhc3RUaW1lID0gMDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKG9wdGlvbnMud2hlZWwpIHtcbiAgICAgIGJpbmQoQ29tcG9uZW50czIuRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyYWNrLCAid2hlZWwiLCBvbldoZWVsLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uV2hlZWwoZSkge1xuICAgIGlmIChlLmNhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWxhYmxlKSB7XG4gICAgICB2YXIgZGVsdGFZID0gZS5kZWx0YVk7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGJhY2t3YXJkcyA9IGRlbHRhWSA8IDA7XG4gICAgICB2YXIgdGltZVN0YW1wID0gdGltZScKICAgICAgICAgICAgICAgICAgICAgICAgYidPZihlKTtcblxuICAgICAgdmFyIF9taW4gPSBvcHRpb25zLndoZWVsTWluVGhyZXNobycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZCB8fCAwO1xuXG4gICAgICB2YXIgc2xlZXAgPSBvcHRpb25zLndoZWVsU2xlZXAgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IDA7XG5cbiAgICAgIGlmIChhYnMoZGVsdGFZKSA+IF9taW4gJiYgdGltZVN0YW1wICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIGxhc3RUaW1lID4gc2xlZXApIHtcbiAgICAgICAgU3BsaWRlMi5nbyhiYWNrd2FyZHMgPycKICAgICAgICAgICAgICAgICAgICAgICAgYicgIjwiIDogIj4iKTtcbiAgICAgICAgbGFzdFRpbWUgPSB0aW1lU3RhbXA7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgICBzaG91bGRQcmV2ZW50KGJhY2t3YXJkcykgJiYgcHJldmVudChlKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkUHJldmVudChiYWNrd2FyZHMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuICFvcHRpb25zLnJlbGVhc2VXaGVlbCB8fCBTcGxpZGUyLnN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhNT1ZJTkcpIHx8IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0QWRqYWNlbnQoYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcykgIT09IC0xO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bicKICAgICAgICAgICAgICAgICAgICAgICAgYid0XG4gIH07XG59XG5cbnZhciBTUl9SRU1PVkFMX0RFTEFZID0gOTA7XG5cbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBMaXZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlMTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudEludGVyZmFjZTEzLm9uO1xuXG4gIHZhciB0cmFjayA9IENvbXBvbmVudHMyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50cy50cmFjaztcbiAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJiYgIW9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmlzTmF2aWdhdGlvbjtcbiAgdmFyIHNyID0gY3JlYXRlKCJzcGFuIiwgQ0xBU1NfUycKICAgICAgICAgICAgICAgICAgICAgICAgYidSKTtcbiAgdmFyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKFNSX1JFTU9WQUxfREVMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZLCBhcHBseSh0b2dnbGUsIGZhbHNlKSk7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBkaXNhYmxlKCFDb21wb25lbnRzMi5BdXRvcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkuaXNQYXVzZWQoKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSSUFfQVRPTUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQywgdHJ1ZSk7XG4gICAgICBzci50ZXh0Q29udGVudCA9ICJcXHUyMDI2IjtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbihFVkVOVF9BVVRPUExBWV9QTEFZLCBhcHBseShkaXNhYmxlLCB0cnVlKSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb24oRVZFTlRfQVVUT1BMQVlfUEFVU0UsIGFwcGx5KGRpc2FibGUsIGZhbHNlKSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb24oW0VWRU5UX01PVkVELCBFVkVOVF9TQ1JPTExFRF0sIGFwcGx5KHRvZ2dsZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGUoYWN0aXZlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9CVVNZLCBhY3RpdmUpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChhY3RpdmUpIHtcbiAgICAgIGFwcGVuZCh0cmFjaywgc3IpO1xuICAgICAgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVydmFsLnN0YXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZShzcik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3koKSB7XG4gICAgcmVtb3ZlQXR0cmlidXRlKHRyYWNrLCBbQVJJQV9MSVZFLCBBUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQV9BVE9NSUMsIEFSSUFfQlVTWV0pO1xuICAgIHJlbW92ZShzcik7XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gZGlzYWJsZShkaXNhYmxlZCkge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc2V0QXR0cmlidXRlKHRyYWNrLCBBUklBX0xJVkUsIGRpc2FibGVkID8gIm9mZiIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogInBvbGl0ZSIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH07XG59XG5cbnZhciBDb21wb25lbnRDb25zdHJ1Y3RvcnMgPSAvKiNfX1BVUkVfXyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIE1lZGlhOiBNZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWEsXG4gIERpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBFbGVtZW50czogRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBTbGlkZXM6IFNsaWRlcyxcbiAgTGF5b3V0OiBMYXlvdXQsXG4gIENsb25lczogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Nsb25lcyxcbiAgTW92ZTogTW92ZSxcbiAgQ29udHJvbGxlcjogQ29udHJvbGxlcixcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIEFycm93czogQXJyb3dzLFxuICBBdXRvcGxheTogQXV0b3BsYXksXG4gIENvdmVyOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ292ZXIsXG4gIFNjcm9sbDogU2Nyb2xsLFxuICBEcmFnOiBEcmFnLFxuICBLZXlib2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmQ6IEtleWJvYXJkLFxuICBMYXp5TG9hZDogTGF6eUxvYWQsXG4gIFBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBQYWdpbmF0aW9uLFxuICBTeW5jOiBTeW5jLFxuICBXaGVlbDogV2hlZWwsXG4gIExpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlOiBMaXZlXG59KTtcbnZhciBJMThOID0ge1xuICBwcmV2OiAiUHJldmlvdXMgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIixcbiAgbmV4dDogIk5leHQgc2xpZGUiLFxuICBmaXJzdDogIkdvIHRvIGZpcnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSIsXG4gIGxhc3Q6ICJHbyB0byBsYXN0IHNsaWRlIixcbiAgc2xpZGVYOiAiRycKICAgICAgICAgICAgICAgICAgICAgICAgYidvIHRvIHNsaWRlICVzIixcbiAgcGFnZVg6ICJHbyB0byBwYWdlICVzIixcbiAgcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYic6ICJTdGFydCBhdXRvcGxheSIsXG4gIHBhdXNlOiAiUGF1c2UgYXV0b3BsYXkiLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWw6ICJjYXJvdXNlbCIsXG4gIHNsaWRlOiAic2xpZGUiLFxuICBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0OiAiU2VsZWN0IGEgc2xpZGUgdG8gc2hvdyIsXG4gIHNsaWRlTGFiZWw6ICIlcyBvZiAlcycKICAgICAgICAgICAgICAgICAgICAgICAgYiciXG59O1xudmFyIERFRkFVTFRTID0ge1xuICB0eXBlOiAic2xpZGUiLFxuICByb2xlOiAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZ2lvbiIsXG4gIHNwZWVkOiA0MDAsXG4gIHBlclBhZ2U6IDEsXG4gIGNsb25lU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1czogdHJ1ZSxcbiAgYXJyb3dzOiB0cnVlLFxuICBwYWdpbmF0aW9uOiB0cnVlLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbktleWJvYXJkOiB0cnVlLFxuICBpbnRlcnZhbDogNWUzLFxuICBwYXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VPbkhvdmVyOiB0cnVlLFxuICBwYXVzZU9uRm9jdXM6IHRydWUsXG4gIHJlc2V0UHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2dyZXNzOiB0cnVlLFxuICBlYXNpbmc6ICJjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSkiLFxuICBkcmFnOiB0cnVlLFxuICBkaXJlY3Rpb246ICJsdHIiLFxuICB0cmltU3BhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlOiB0cnVlLFxuICBmb2N1c2FibGVOb2RlczogImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B1dCwgc2VsZWN0LCBpZnJhbWUiLFxuICBsaXZlOiB0cnVlLFxuICBjbGFzc2VzOiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NFUyxcbiAgaTE4bjogSTE4TixcbiAgcmVkdWNlZE1vdGlvbjoge1xuICAgIHNwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZDogMCxcbiAgICByZXdpbmRTcGVlZDogMCxcbiAgICBhdXRvcGxheTogInBhdXNlIicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxufTtcblxuZnVuY3Rpb24gRmFkZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMpIHtcbiAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gbW91bnQoKSB7XG4gICAgRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikub24oW0VWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1VOVEVELCBFVkVOVF9SRUZSRVNIXSwgaW5pdCk7XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gaW5pdCgpIHtcbiAgICBTbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBTbGlkZS5zdHlsZSgidHJhbnNmb3JtIiwgInRyYW5zbGF0ZVgoLSIgKyAxMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwICogU2xpZGUuaW5kZXggKyAiJSkiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdGFydChpbmRleCwgZG9uZSkge1xuICAgIFNsaWRlcy5zdHlsZSgidHJhbnNpdGlvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAib3BhY2l0eSAiICsgb3B0aW9ucy5zcGVlZCArICJtcyAiICsgb3B0aW9ucy5lYXNpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBuZXh0VGljayhkb25lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtb3VudCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBub29wXG4gIH07JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBTbGlkZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgQ29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuICAgICAgU2Nyb2xsID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLlNjcm9sbDtcbiAgdmFyIGxpc3QgPSBDb21wb25lbnRzMi5FbGVtZW50cy5saXN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIHRyYW5zaXRpb24gPSBhcHBseShzdHlsZSwgbGlzdCwgInRyYW5zaXRpb24iKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBlbmRDYWxsYmFjaztcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UoU3BsaWRlMikuYmluZChsaXN0LCAidHJhbnNpdGlvbmVuZCIsIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBsaXN0ICYmIGVuZENhbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmFjaykge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgZW5kQ2FsbGJhY2soKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChpbmRleCwgZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmUpIHtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBNb3ZlLnRvUG9zaXRpb24oaW5kZXgsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICB2YXIgcG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzcGVlZCA9IGdldFNwZWVkKGluZGV4KTtcblxuICAgIGlmIChhYnMoZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uIC0gcG9zaXRpb24pID49IDEgJiYgc3BlZWQgPj0gMSkge1xuICAgICAgaWYgKG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLnVzZVNjcm9sbCkge1xuICAgICAgICBTY3JvbGwuc2Nyb2xsKGRlc3RpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgc3BlZWQsIGZhbHNlLCBkb25lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uKCJ0cmFuc2Zvcm0gIiArIHNwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcpO1xuICAgICAgICBNb3ZlLnRyYW5zbGF0ZShkZXN0aW5hdGlvbiwgdHJ1ZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XG4gICAgICB9XG4gICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBNb3ZlLmp1bXAoaW5kZXgpO1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdHJhbnNpdGlvbigiIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNjcm9sbC5jYW5jZWwoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNwZWVkKGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHZhciByZXdpbmRTcGVlZCA9IG9wdGlvbnMucmV3aW5kU3BlZWQ7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIHJld2luZFNwZWVkKSB7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHByZXYgPSBDb250cm9sbGVyLmdldEluZGV4KHRydWUpO1xuICAgICAgdmFyIGVuZCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250cm9sbGVyLmdldEVuZCgpO1xuXG4gICAgICBpZiAocHJldiA9PT0gMCAmJiBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggPj0gZW5kIHx8IHByZXYgPj0gZW5kICYmIGluZGV4ID09PSAwKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gcmV3aW5kU3BlZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnNwZWVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0YXJ0OiBzdGFydCxcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufVxuXG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19TcGxpZGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBfU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmV2ZW50ID0gRXZlbnRJbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKCk7XG4gICAgdGhpcy5Db21wb25lbnRzID0ge307XG4gICAgdGhpcy5zdGF0ZSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTdGF0ZShDUkVBVEVEKTtcbiAgICB0aGlzLnNwbGlkZXMgPSBbXTtcbiAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5fbyA9IHt9O1xuICAgIHRoaXMuX0UgPSB7fTtcbiAgICB2YXIgcm9vdCA9IGlzU3RyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyh0YXJnZXQpID8gcXVlcnkoZG9jdW1lbnQsIHRhcmdldCkgOiB0YXJnZXQ7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VydChyb290LCByb290ICsgIiBpcyBpbnZhbGlkLiIpO1xuICAgIHRoaXMucm9vdCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyByb290O1xuICAgIG9wdGlvbnMgPSBtZXJnZSh7XG4gICAgICBsYWJlbDogZ2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZShyb290LCBBUklBX0xBQkVMKSB8fCAiIixcbiAgICAgIGxhYmVsbGVkYnk6IGdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTExFREJZKSB8fCAiIlxuICAgIH0sIERFRkFVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xUUywgX1NwbGlkZS5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB0cnkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIG1lcmdlKG9wdGlvbnMsIEpTT04ucGFyc2UoZ2V0QXR0cmlidXRlKHJvb3QsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBEQVRBX0FUVFJJQlVURSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0KGZhbHNlLCAiSW52YWxpZCBKU09OIik7XG4gICAgfVxuXG4gICAgdGhpcy5fbyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidPYmplY3QuY3JlYXRlKG1lcmdlKHt9LCBvcHRpb25zKSk7XG4gIH1cblxuICB2YXIgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm90byA9IF9TcGxpZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBtb3VudChFeHRlbnNpb25zLCBUcmFuc2l0aW9uKSB7XG4gICAgdmFyIF90aGlzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXM7XG5cbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIgPSB0aGlzLkNvbXBvbmVudHM7XG4gICAgYXNzZXJ0KHN0YXRlLmlzKFtDUkVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCwgREVTVFJPWUVEXSksICJBbHJlYWR5IG1vdW50ZWQhIik7XG4gICAgc3RhdGUuc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhDUkVBVEVEKTtcbiAgICB0aGlzLl9DID0gQ29tcG9uZW50czI7XG4gICAgdGhpcy5fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMuX1QgfHwgKHRoaXMuaXMoRkFERSkgPyBGYWRlIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlKTtcbiAgICB0aGlzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgQ29uc3RydWN0b3JzID0gYXNzaWduKHt9LCBDb21wb25lbnRDb25zdHJ1Y3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzLCB0aGlzLl9FLCB7XG4gICAgICBUcmFuc2l0aW9uOiB0aGlzLl9UXG4gICAgfSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZvck93bihDb25zdHJ1Y3RvcnMsIGZ1bmN0aW9uIChDb21wb25lbnQsIGtleSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBjb21wb25lbnQgPSBDb21wb25lbnQoX3RoaXMsIENvbXBvbmVudHMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgX3RoaXMuX28pO1xuICAgICAgQ29tcG9uZW50czJba2V5XSA9IGNvbXBvbmVudDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBjb21wb25lbnQuc2V0dXAgJiYgY29tcG9uZW50LnNldHVwKCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgIGZvck93bihDb21wb25lbnRzMiwgZnVuY3Rpb24gKGNvbXBvbmVudCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGNvbXBvbmVudC5tb3VudCAmJiBjb21wb25lbnQubW91bnQoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgdGhpcy5lbWl0KEVWRU5UX01PVU5URUQpO1xuICAgIGFkZENsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyh0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEKTtcbiAgICBzdGF0ZS5zZXQoSURMRSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHRoaXMuZW1pdChFVkVOVF9SRUFEWSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90by5zeW5jID0gZnVuY3Rpb24gc3luYyhzcGxpZGUpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5zcGxpZGVzLnB1c2goe1xuICAgICAgc3BsaWRlOiBzcGxpZGVcbiAgICB9KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgc3BsaWRlLnNwbGlkZXMucHVzaCh7XG4gICAgICBzcGxpZGU6IHRoaXMsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaXNQYXJlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhJRExFKSkge1xuICAgICAgdGhpcy5fQy5TeW5jLnJlbW91bnQoKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNwbGlkZS5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpO1xuICAgIH1cblxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZ28gPSBmdW5jdGlvbiBnbyhjb250JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbCkge1xuICAgIHRoaXMuX0MuQ29udHJvbGxlci5nbyhjb250cm9sKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZXZlbnQub24oZXZlbnRzLCBjYWxsYmFjayknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2ZmKGV2ZW50cykge1xuICAgIHRoaXMuZXZlbnQub2ZmKGV2ZW50cyk7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMkZXZlbnQ7XG5cbiAgICAoX3RoaXMkZXZlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gdGhpcy5ldmVudCkuZW1pdC5hcHBseShfdGhpcyRldmVudCwgW2V2ZW50XS5jb25jYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNsaWNlKGFyZ3VtZW50cywgMSkpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHNsaWRlcywgaW5kZXgpIHtcbiAgICB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5fQy5TbGlkZXMuYWRkKHNsaWRlcywgaW5kZXgpO1xuXG4gICAgcmV0dXJuIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobWF0Y2hlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgICB0aGlzLl9DLlNsaWRlcy5yZW1vdmUobWF0Y2hlcik7XG5cbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmlzID0gZnVuY3Rpb24gaXModHlwZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICByZXR1cm4gdGhpcy5fby50eXBlID09PSB0eXBlO1xuICB9O1xuXG4gIF9wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG8ucmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgdGhpcy5lbWl0KEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRUZSRVNIKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICBpZiAoY29tcGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbHkgPT09IHZvaWQgMCkge1xuICAgICAgY29tcGxldGVseSA9IHRydWU7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHZhciBldmVudCA9IHRoaXMuZXZlbnQsXG4gICAgICAgIHN0YXRlID0gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuc3RhdGU7XG5cbiAgICBpZiAoc3RhdGUuaXMoQ1JFQVRFRCkpIHtcbiAgICAgIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZSh0aGlzKS5vbihFVkVOVF9SRUFEWSwgdGhpcy5kZXN0cm95LmJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkKHRoaXMsIGNvbXBsZXRlbHkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT3duKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLl9DLCBmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveSAmJiBjb21wb25lbnQuZGVzdHJveShjb21wbGV0ZWx5KTtcbiAgICAgIH0sIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICAgIGV2ZW50LmVtaXQoRVZFTlRfREVTVFJPWSk7XG4gICAgICBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVzdHJveSgpO1xuICAgICAgY29tcGxldGVseSAmJiBlbXB0eSh0aGlzLnNwbGlkZXMpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHN0YXRlLnNldChERVNUUk9ZRUQpO1xuICAgIH1cblxuICAgIHJldHVybiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcztcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoX1NwbGlkZSwgW3tcbiAgICBrZXk6ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuX287XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgdGhpcy5fQy5NZWRpYS5zZXQob3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgfSwge1xuICAgIGtleTogImxlbmd0aCIsXG4gICAgZ2V0OiBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX0MuU2xpZGVzLmdldExlbmd0aCh0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAiaW5kZXgiLFxuICAgIGdldDogZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9DLkNvbnRyb2xsZXIuZ2V0SW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIF9TcGxpZGU7XG59KCk7XG5cbnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgU3BsaWRlID0gX1NwbGlkZTtcblNwbGlkZS5kZWZhdWx0cyA9IHt9O1xuU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TVEFURVMgPSBTVEFURVM7XG52YXIgQ0xBU1NfUkVOREVSRUQgPSAiaXMtcmVuZGVyZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgbGlzdFRhZzogInVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsXG4gIHNsaWRlVGFnOiAibGkiXG59O1xuXG52YXIgU3R5bGUgPSAvKiNfX1BVUkVfXyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoaWQsIG9wdGlvbnMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdGhpcy5zdHlsZXMgPSB7fTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IFN0eWxlLnByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290b3R5cGU7XG5cbiAgX3Byb3RvMi5ydWxlID0gZnVuY3Rpb24gcnVsZShzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIHByb3AsIHZhbHVlLCBicmVha3BvaW50KSB7XG4gICAgYnJlYWtwb2ludCA9IGJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50IHx8ICJkZWZhdWx0IjtcbiAgICB2YXIgc2VsZWN0b3JzID0gdGhpcy5zdHlsZXNbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JyZWFrcG9pbnRdID0gdGhpcy5zdHlsZXNbYnJlYWtwb2ludF0gfHwge307XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHlsZXMgPSBzZWxlY3RvcnNbc2VsZWN0b3JdID0gc2VsZWN0b3JzW3NlbGVjdG9yXSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHwge307XG4gICAgc3R5bGVzW3Byb3BdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMicKICAgICAgICAgICAgICAgICAgICAgICAgYicuYnVpbGQgPSBmdW5jdGlvbiBidWlsZCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M7XG5cbiAgICB2YXIgY3NzID0gIiI7XG5cbiAgICBpZiAodGhpcy5zdHlsZXMuZGVmYXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHQpIHtcbiAgICAgIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKHRoaXMuc3R5bGVzLmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZhdWx0KTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0eWxlcykuc29yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZnVuY3Rpb24gKG4sIG0pIHtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5tZWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FRdWVyeSA9PT0gIm1pbiIgPyArbiAtICttIDogK20gLSArbjtcbiAgICB9KS5mb3JFYWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoYnJlYWtwb2ludCkge1xuICAgICAgaWYgKGJyZWFrcG9pbnQgIT09ICJkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdCIpIHtcbiAgICAgICAgY3NzICs9ICJAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aDogIiArIGJyZWFrcG9pbnQgKyAicHgpIHsiO1xuICAgICAgICBjc3MgKz0gX3RoaXMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5idWlsZFNlbGVjdG9ycyhfdGhpczIuc3R5bGVzW2JyZWFrcG9pbnRdKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NzcyArPSAifSI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzcztcbiAgfTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgX3Byb3RvMi5idWlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIGJ1aWxkU2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9ycyhzZWxlY3RvcnMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgY3NzID0gIiI7XG4gICAgZm9yT3duKHNlbGVjdG9ycywgZnVuY3Rpb24gKHN0eWxlcywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGVjdG9yKSB7XG4gICAgICBzZWxlY3RvciA9ICgiIyIgKyBfdGhpczMuaWQgKyAiICIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJysgc2VsZWN0b3IpLnRyaW0oKTtcbiAgICAgIGNzcyArPSBzZWxlY3RvciArICIgeyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgZm9yT3duKHN0eWxlcywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICBjc3MgKz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3AgKyAiOiAiICsgdmFsdWUgKyAiOyI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGNzcyArPSAifSI7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzcztcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIFN0eWxlO1xufSgpO1xuXG52YXIgU3BsaWRlUmVuZGVyZXIgPSAvKiNfXycKICAgICAgICAgICAgICAgICAgICAgICAgYidQVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3BsaWRlUmVuZGVyZXIoY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLCBvcHRpb25zLCBjb25maWcsIGRlZmF1bHRzKSB7XG4gICAgdGhpcy5zbGlkZXMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgW107XG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5icmVha3BvaW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBbXTtcbiAgICBtZXJnZShERUZBVUxUUywgZGVmYXVsdHMgfHwge30pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtZXJnZShtZXJnZSh0aGlzLm9wdGlvbnMsIERFRkFVTFRTKSwgb3B0aW9ucyB8fCB7fSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHRoaXMuY29udGVudHMgPSBjb250ZW50cztcbiAgICB0aGlzLmNvbmZpZyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhc3NpZ24oe30sIFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLmlkID0gdGhpcy5jb25maWcuaWQgfHwgdW5pcXVlSWQoInNwbGlkZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLlN0eWxlID0gbmV3IFN0eWxlKHRoaXMuaWQsIHRoaXMub3B0aW9ucyk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHRoaXMuRGlyZWN0aW9uID0gRGlyZWN0aW9uKG51bGwsIG51bGwsIHRoaXMub3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpO1xuICAgIGFzc2VydCh0aGlzLmNvbnRlbnRzLmxlbmd0aCwgIlByb3ZpZGUgYXQgbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXN0IDEgY29udGVudC4iKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidSZW5kZXJlci5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKHNwbGlkZSkge1xuICAgIHZhciBfRScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlMTQgPSBFdmVudEludGVyZmFjZShzcGxpZGUpLFxuICAgICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfRXZlbnRJbnRlcmZhY2UxNC5vbjtcblxuICAgIHZhciByb290ID0gc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb290O1xuICAgIHZhciBjbG9uZXMgPSBxdWVyeUFsbChyb290LCAiLiIgKyBDTEFTU19DTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPTkUpO1xuICAgIG9uKEVWRU5UX01PVU5URUQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdmUoY2hpbGQocm9vdCwgInN0eWxlIikpO1xuICAgIH0pO1xuICAgIHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoY2xvbmVzKTtcbiAgfTtcblxuICB2YXIgX3Byb3RvMyA9IFNwbGlkZVJlbmRlcmVyLnAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm90b3R5cGU7XG5cbiAgX3Byb3RvMy5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdGhpcy5wYXJzZUJyZWFrcG9pbnRzKCk7XG4gICAgdGhpcy5pbml0U2xpZGVzKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHRoaXMucmVnaXN0ZXJSb290U3R5bGVzKCk7XG4gICAgdGhpcy5yZWdpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJUcmFja1N0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJTbGlkZVN0eWxlcygpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0aGlzLnJlZ2lzdGVyTGlzdFN0eWxlcygpO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRTbGlkZXMgPSBmdW5jdGlvbiBpbml0U2xpZGVzKCkge1xuICAgIHZhciBfdGhpczQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gdGhpcztcblxuICAgIHB1c2godGhpcy5zbGlkZXMsIHRoaXMuY29udGVudHMubWFwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoY29udGVudCwgaW5kZXgpIHtcbiAgICAgIGNvbnRlbnQgPSBpc1N0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2coY29udGVudCkgPyB7XG4gICAgICAgIGh0bWw6IGNvbnRlbnRcbiAgICAgIH0gOiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udGVudDtcbiAgICAgIGNvbnRlbnQuc3R5bGVzID0gY29udGVudC5zdHlsZXMgfHwge307JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgY29udGVudC5hdHRycyA9IGNvbnRlbnQuYXR0cnMgfHwge307XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBfdGhpczQuY292ZXIoY29udGVudCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzNC5vcHRpb25zLmNsYXNzZXMuc2xpZGUgKyAiICIgKyAoaW5kZXggPT09IDAgPyBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQUNUSVZFIDogIiIpO1xuICAgICAgYXNzaWduKGNvbnRlbnQuYXR0cnMsIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGNsYXNzOiAoY2xhc3NlcyArICIgIiArIChjb250ZW50LmF0dHJzLmNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyB8fCAiIikpLnRyaW0oKSxcbiAgICAgICAgc3R5bGU6IF90aGlzNC5idWlsZFN0eWxlcygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29udGVudC5zdHlsZXMpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5pc0xvb3AoKSkge1xuICAgICAgdGhpcy5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJhdGVDbG9uZXModGhpcy5zbGlkZXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5yZWdpc3RlclJvb3RTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclJvb3RTdHlsZXMoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdGhpcy5icmVha3BvaW50cy5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWYyWzBdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjJbMV07XG5cbiAgICAgIF90aGlzNS5TdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUucnVsZSgiICIsICJtYXgtd2lkdGgiLCB1bml0KG9wdGlvbnMud2lkdGgpLCB3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJUcmFja1N0eWxlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBmdW5jdGlvbiByZWdpc3RlclRyYWNrU3R5bGVzKCkge1xuICAgIHZhciBfdGhpczYgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcztcblxuICAgIHZhciBTdHlsZTIgPSB0aGlzLlN0eWxlO1xuICAgIHZhciBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgPSAiLiIgKyBDTEFTU19UUkFDSztcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjNbMF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICAgIG9wdGlvbnMgPSBfcmVmM1sxXTtcbiAgICAgIFN0eWxlMi5ydWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShzZWxlY3RvciwgX3RoaXM2LnJlc29sdmUoInBhZGRpbmdMZWZ0IiksIF90aGlzNi5jcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzUGFkZGluZyhvcHRpb25zLCBmYWxzZSksIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciwgX3RoaXM2LnJlc29sdmUoInBhZGRpbmdSaWdodCIpLCBfdGhpczYuY3NzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BhZGRpbmcob3B0aW9ucywgdHJ1ZSksIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3RvciwgImhlaWdodCIsIF90aGlzNi5jc3NUcmFja0hlaWdodChvcHRpb25zKSwgd2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyTGlzdFN0eWxlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBmdW5jdGlvbiByZWdpc3Rlckxpc3RTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzNyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RvciA9ICIuIiArIENMQVNTX0xJU1Q7XG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWY0WzBdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjRbMV07XG4gICAgICBTdHlsZTIucnVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoc2VsZWN0b3IsICJ0cmFuc2Zvcm0iLCBfdGhpczcuYnVpbGRUcmFuc2xhdGUob3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpLCB3aWR0aCk7XG5cbiAgICAgIGlmICghX3RoaXM3LmNzc1NsaWRlSGVpZ2h0KG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zKSkge1xuICAgICAgICBTdHlsZTIucnVsZShzZWxlY3RvciwgImFzcGVjdC1yYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28iLCBfdGhpczcuY3NzQXNwZWN0UmF0aW8ob3B0aW9ucyksIHdpZHRoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclNsaWRlU3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGZ1bmN0aW9uIHJlZ2lzdGVyU2xpZGVTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzOCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RvciA9ICIuIiArIENMQVNTX1NMSURFO1xuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2goZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmNVswXScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWY1WzFdO1xuICAgICAgU3R5bGUyLnJ1bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKHNlbGVjdG9yLCAid2lkdGgiLCBfdGhpczguY3NzU2xpZGVXaWR0aChvcHRpb25zKSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAiaGVpZ2h0IiwgX3RoaXM4JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5jc3NTbGlkZUhlaWdodChvcHRpb25zKSB8fCAiMTAwJSIsIHdpZHRoKTtcbiAgICAgIFN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZTIucnVsZShzZWxlY3RvciwgX3RoaXM4LnJlc29sdmUoIm1hcmdpblJpZ2h0IiksIHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbml0KG9wdGlvbnMuZ2FwKSB8fCAiMHB4Iiwgd2lkdGgpO1xuICAgICAgU3R5bGUyLnJ1bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNlbGVjdG9yICsgIiA+IGltZyIsICJkaXNwbGF5Iiwgb3B0aW9ucy5jb3ZlciA/ICJubycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZSIgOiAiaW5saW5lIiwgd2lkdGgpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkVHJhbnNsYXRlID0gZnVuY3Rpb24gYnVpbGRUcmFuc2xhdGUob3B0aW9ucykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgX3RoaXMkRGlyZWN0aW9uID0gdGhpcy5EaXJlY3Rpb24sXG4gICAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NvbHZlID0gX3RoaXMkRGlyZWN0aW9uLnJlc29sdmUsXG4gICAgICAgIG9yaWVudCA9IF90JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcyREaXJlY3Rpb24ub3JpZW50O1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWVzLnB1c2godGhpcy5jc3NPZmZzZXRDbG9uZXMob3B0aW9ucykpO1xuICAgIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MucHVzaCh0aGlzLmNzc09mZnNldEdhcHMob3B0aW9ucykpO1xuXG4gICAgaWYgKHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmlzQ2VudGVyKG9wdGlvbnMpKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLmJ1aWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Nzc1ZhbHVlKG9yaWVudCgtNTApLCAiJSIpKTtcbiAgICAgIHZhbHVlcy5wdXNoLmFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh2YWx1ZXMsIHRoaXMuY3NzT2Zmc2V0Q2VudGVyKG9wdGlvbnMpKTtcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uICh2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIHJldHVybiAidHJhbnNsYXRlIiArIHJlc29sdmUoIlgiKSArICIoIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YWx1ZSArICIpIjtcbiAgICB9KS5qb2luKCIgIik7XG4gIH07XG5cbiAgX3Byb3RvMy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzT2Zmc2V0Q2xvbmVzID0gZnVuY3Rpb24gY3NzT2Zmc2V0Q2xvbmVzKG9wdGlvbnMpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbjIgPSB0aGlzLkRpcmVjdGlvbixcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlc29sdmUgPSBfdGhpcyREaXJlY3Rpb24yLnJlc29sdmUsXG4gICAgICAgIG9yaScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgPSBfdGhpcyREaXJlY3Rpb24yLm9yaWVudDtcbiAgICB2YXIgY2xvbmVDb3VudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmdldENsb25lQ291bnQoKTtcblxuICAgIGlmICh0aGlzLmlzRml4ZWRXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYicob3B0aW9ucykpIHtcbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlID0gdGhpcy5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyc2VDc3NWYWx1ZShvcHRpb25zW3Jlc29sdmUoImZpeGVkV2lkdGgiKV0pLFxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YWx1ZSA9IF90aGlzJHBhcnNlQ3NzVmFsdWUudmFsdWUsXG4gICAgICAgICAgdW5pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicyID0gX3RoaXMkcGFyc2VDc3NWYWx1ZS51bml0O1xuXG4gICAgICByZXR1cm4gdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuYnVpbGRDc3NWYWx1ZShvcmllbnQodmFsdWUpICogY2xvbmVDb3VudCwgdW5pdDIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICB2YXIgcGVyY2VudCA9IDEwMCAqIGNsb25lQ291bnQgLyBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5wZXJQYWdlO1xuICAgIHJldHVybiBvcmllbnQocGVyY2VudCkgKyAiJSI7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMuY3NzT2Zmc2V0Q2VudGVyID0gZnVuY3Rpb24gY3NzT2ZmcycKICAgICAgICAgICAgICAgICAgICAgICAgYidldENlbnRlcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbjMgPSB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24sXG4gICAgICAgIHJlc29sdmUgPSBfdGhpcyREaXJlY3Rpb24zLnJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxuICAgICAgICBvcmllbnQgPSBfdGhpcyREaXJlY3Rpb24zLm9yaWVudDtcblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAodGhpcy5pc0ZpeGVkV2lkdGgob3B0aW9ucykpIHtcbiAgICAgIHZhciBfdGhpcyQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VDc3NWYWx1ZTIgPSB0aGlzLnBhcnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciZml4ZWRXaWR0aCIpXSksXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTIudmFsdWUsXG4gICAgICAgICAgdW5pdDIgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlMi51bicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdDtcblxuICAgICAgcmV0dXJuIFt0aGlzLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSAvIDIpLCB1bml0MildO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2UsXG4gICAgICAgIGdhcCA9IG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmdhcDtcbiAgICB2YWx1ZXMucHVzaChvcmllbnQoNTAgLyBwZXJQYWdlKSArICIlIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgaWYgKGdhcCkge1xuICAgICAgdmFyIF90aGlzJHBhcnNlQ3NzVmFsdWUzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRoaXMucGFyc2VDc3NWYWx1ZShnYXApLFxuICAgICAgICAgIF92YWx1ZSA9IF90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJzZUNzc1ZhbHVlMy52YWx1ZSxcbiAgICAgICAgICBfdW5pdCA9IF90aGlzJHBhcnNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlMy51bml0O1xuXG4gICAgICB2YXIgZ2FwT2Zmc2V0ID0gKF92YWx1ZSAvICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwZXJQYWdlIC0gX3ZhbHVlKSAvIDI7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLmJ1aWxkQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlKG9yaWVudChnYXBPZmZzZXQpLCBfdW5pdCkpO1xuICAgIH1cblxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzT2Zmc2V0R2FwcyA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjc3NPZmZzZXRHYXBzKG9wdGlvbnMpIHtcbiAgICB2YXIgY2xvbmVDb3VudCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmdldENsb25lQ291bnQoKTtcblxuICAgIGlmIChjbG9uZUNvdW50ICYmIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmdhcCkge1xuICAgICAgdmFyIG9yaWVudCA9IHRoaXMuRGlyZWN0aW9uLm9yaWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XG5cbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlNCA9IHRoaXMucGFyc2VDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVmFsdWUob3B0aW9ucy5nYXApLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcGFyc2VDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVmFsdWU0LnZhbHVlLFxuICAgICAgICAgIHVuaXQyID0gX3RoaXMkcGFyc2VDc3NWYWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U0LnVuaXQ7XG5cbiAgICAgIGlmICh0aGlzLmlzRml4ZWRXaWR0aChvcHRpb25zKSkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZShvcmllbnQodmFsdWUgKiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVDb3VudCksIHVuaXQyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBlclBhZ2UgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5wZXJQYWdlO1xuICAgICAgdmFyIGdhcHMgPSBjbG9uZUNvdW50IC8gcGVyUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2U7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudChnYXBzICogdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSwgdW5pdDIpO1xuICAgIH1cblxuICAgIHJldHVybiAiIjtcbiAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgX3Byb3RvMy5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShwcm9wKSB7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBjYW1lbFRvS2ViYWIodGhpcy5EaXJlY3Rpb24ucmVzb2x2ZShwcm9wKSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuY3NzUGFkZGluZyA9IGZ1bmN0aW9uIGNzc1BhZGRpbmcoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMsIHJpZ2h0KSB7XG4gICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBwcm9wID0gdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZShyaWdodCA/ICJyaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiIDogImxlZnQiLCB0cnVlKTtcbiAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KHBhZGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nW3Byb3BdIHx8IChpc09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkaW5nKSkgfHwgIjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHgiO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzVHJhY2tIZWlnaHQgPSBmdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVHJhY2tIZWlnaHQob3B0aW9ucykge1xuICAgIHZhciBoZWlnaHQgPSAiIjtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAodGhpcy5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIGhlaWdodCA9IHRoaXMuY3NzSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlaWdodChvcHRpb25zKTtcbiAgICAgIGFzc2VydChoZWlnaHQsIFwnImhlaWdodCIgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIG1pc3NpbmcuXCcpO1xuICAgICAgaGVpZ2h0ID0gImNhbGMoIiArIGhlaWdodCArICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciIC0gIiArIHRoaXMuY3NzUGFkZGluZyhvcHRpb25zLCBmYWxzZSkgKyAiIC0gIiArIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNzc1BhZGRpbmcob3B0aW9ucywgdHJ1ZSkgKyAiKSI7XG4gICAgfVxuXG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBoZWlnaHQ7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NIZWlnaHQgPSBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gY3NzSGVpZ2h0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHQpO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzU2xpZGVXaWR0aCA9IGZ1bmN0aW9uIGNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NTbGlkZVdpZHRoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gIiIgOiB1bml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKHRoaXMuaXNWZXJ0aWNhbCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA/ICIiIDogdGhpcy5jc3NTbGlkZVNpemUob3B0aW9ucykpO1xuICB9O1xuXG4gIF9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8zLmNzc1NsaWRlSGVpZ2h0ID0gZnVuY3Rpb24gY3NzU2xpZGVIZWlnaHQob3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8fCAodGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNWZXJ0aWNhbCgpID8gb3B0aW9ucy5hdXRvSGVpZ2h0ID8gIiIgOiB0aGlzLmNzc1NsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZVNpemUob3B0aW9ucykgOiB0aGlzLmNzc0hlaWdodChvcHRpb25zKSk7XG4gIH07JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIF9wcm90bzMuY3NzU2xpZGVTaXplID0gZnVuY3Rpb24gY3NzU2xpZGVTaXplJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhvcHRpb25zKSB7XG4gICAgdmFyIGdhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArICIpIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NBc3BlY3RSYXRpbyA9IGZ1bmN0aW9uIGNzc0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BlY3RSYXRpbyhvcHRpb25zKSB7XG4gICAgdmFyIGhlaWdodFJhdGlvID0gb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVpZ2h0UmF0aW87XG4gICAgcmV0dXJuIGhlaWdodFJhdGlvID8gIiIgKyAxIC8gaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFJhdGlvIDogIiI7XG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZENzc1ZhbHVlID0gZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGJ1aWxkQ3NzVmFsdWUodmFsdWUsIHVuaXQyKSB7XG4gICAgcmV0dXJuICIiICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlICsgdW5pdDI7XG4gIH07XG5cbiAgX3Byb3RvMy5wYXJzZUNzc1ZhbHVlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhcnNlQ3NzVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNTdHJpbmcodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSkge1xuICAgICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIHVuaXQyID0gdmFsdWUucmVwbGFjZSgvXFxkKihcXC5cXGQqKT8vLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpIHx8ICJweCI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncixcbiAgICAgICAgdW5pdDogdW5pdDJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICB1bml0OiAicHgiXG4gICAgfTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH07XG5cbiAgX3Byb3RvMy5wYXJzZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24gcGFycycKICAgICAgICAgICAgICAgICAgICAgICAgYidlQnJlYWtwb2ludHMoKSB7XG4gICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGJyZWFrcG9pbnRzID0gdGhpcy5vcHRpb25zLmJyZWFrcG9pbnRzO1xuICAgIHRoaXMuYnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzLnB1c2goWyJkZWZhdWx0IiwgdGhpcy5vcHRpb25zXSk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGJyZWFrcG9pbnRzKSB7XG4gICAgICBmb3JPd24oYnJlYWtwb2ludHMsIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAob3B0aW9ucywgd2lkdGgpIHtcbiAgICAgICAgX3RoaXM5LmJyZWFrcG9pbnRzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFt3aWR0aCwgbWVyZ2UobWVyZ2Uoe30sIF90aGlzOS5vcHRpb25zKSwgb3B0aW9ucyldKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMy5pc0ZpeGVkV2lkdGggPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gaXNGaXhlZFdpZHRoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gISFvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc1t0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKCJmaXhlZFdpZHRoIildO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8zLmlzTG9vcCA9IGZ1bmN0aW9uIGlzTG9vcCgpIHtcbiAgICByZXR1cm4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucy50eXBlID09PSBMT09QO1xuICB9O1xuXG4gIF9wcm90bzMuaXNDZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyID0gZnVuY3Rpb24gaXNDZW50ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cyA9PT0gImNlbnRlciIpIHtcbiAgICAgIGlmICh0aGlzLmlzTG9vcCgpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMudHlwZSA9PT0gU0xJREUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm9wdGlvbnMudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaW1TcGFjZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuaXNWZXJ0aWNhbCA9IGZ1bmN0aW9uIGlzVmVydGljYWwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuYnVpbGRDbGFzc2VzID0gZnVuY3Rpb24gYnVpbGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcygpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIFtDTEFTU19ST09ULCBDTEFTU19ST09UICsgIi0tIiArIG9wdGlvbnMudHlwZSwgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1JPT1QgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfUk9PVCArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19ST09UICsgIi0tbmF2IiwgQ0xBU1NfQUNUSVZFLCAhdGhpcy5jb25maWcuaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRlbiAmJiBDTEFTU19SRU5ERVJFRF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG5cbiAgX3Byb3RvMy5idWlsZEF0dHJzID0gZnVuY3Rpb24gYnVpbGRBdHRycygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMpIHtcbiAgICB2YXIgYXR0ciA9ICIiO1xuICAgIGZvck93bihhdHRycywgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBhdHRyICs9IHZhbHVlID8gIiAiICsgY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVsVG9LZWJhYihrZXkpICsgIj1cXCIiICsgdmFsdWUgKyAiXFwiIiA6ICIiO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9KTtcbiAgICByZXR1cm4gYXR0ci50cmltKCk7XG4gIH07XG5cbiAgX3Byb3RvMy5idWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGRTdHlsZXMgPSBmdW5jdGlvbiBidWlsZFN0eWxlcyhzdHlsZXMpIHtcbiAgICB2YXIgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlID0gIiI7XG4gICAgZm9yT3duKHN0eWxlcywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBzdHlsZSArPSAiICIgKyBjYW1lbFRvS2ViYWIoa2V5KSArICI6IiArIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSArICI7IjtcbiAgICB9KTtcbiAgICByZXR1cm4gc3R5bGUudHJpbSgpO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8zLnJlbmRlclNsaWRlcyA9IGZ1bmN0aW9uIHJlbmRlclNsaWRlcygpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhZyA9IHRoaXMuY29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZy5zbGlkZVRhZztcbiAgICByZXR1cm4gdGhpcy5zbGlkZXMubWFwKGZ1bmN0aW9uIChjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVudCkge1xuICAgICAgcmV0dXJuICI8IiArIHRhZyArICIgIiArIF90aGlzMTAuYnVpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cnMoY29udGVudC5hdHRycykgKyAiPiIgKyAoY29udGVudC5odG1sIHx8ICIiKSArICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciPC8iICsgdGFnICsgIj4iO1xuICAgIH0pLmpvaW4oIiIpO1xuICB9O1xuXG4gIF9wcm90JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28zLmNvdmVyID0gZnVuY3Rpb24gY292ZXIoY29udGVudCkge1xuICAgIHZhciBzdHlsZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gY29udGVudC5zdHlsZXMsXG4gICAgICAgIF9jb250ZW50JGh0bWwgPSBjb250ZW50Lmh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21sLFxuICAgICAgICBodG1sID0gX2NvbnRlbnQkaHRtbCA9PT0gdm9pZCAwID8gIiIgOiBfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRlbnQkaHRtbDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY292ZXIgJiYgIXRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLm9wdGlvbnMubGF6eUxvYWQpIHtcbiAgICAgIHZhciBzcmMgPSBodG1sLm1hdGNoKC88JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZy4qP3NyY1xccyo9XFxzKihbXCciXSkoLis/KVxcMS4qPz4vKTtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChzcmMgJiYgc3JjWzJdKSB7XG4gICAgICAgIHN0eWxlcy5iYWNrZ3JvdW5kID0gImNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXIvY292ZXIgbm8tcmVwZWF0IHVybChcJyIgKyBzcmNbMl0gKyAiXCcpIjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMuZ2VuZXJhdGVDbG9uZXMgPSBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZ2VuZXJhdGVDbG9uZXMoY29udGVudHMpIHtcbiAgICB2YXIgY2xhc3NlcyA9IHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLm9wdGlvbnMuY2xhc3NlcztcbiAgICB2YXIgY291bnQgPSB0aGlzLmdldENsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KCk7XG4gICAgdmFyIHNsaWRlcyA9IGNvbnRlbnRzLnNsaWNlKCk7XG5cbiAgICB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgcHVzaChzbGlkZXMsIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMpO1xuICAgIH1cblxuICAgIHB1c2goc2xpZGVzLnNsaWNlKC1jb3VudCkucmV2ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UoKSwgc2xpZGVzLnNsaWNlKDAsIGNvdW50KSkuZm9yRWFjaChmdW5jdGlvbiAoY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIGluZGV4KSB7XG4gICAgICB2YXIgYXR0cnMgPSBhc3NpZ24oe30sIGNvbnRlbnQuYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJzLCB7XG4gICAgICAgIGNsYXNzOiBjb250ZW50LmF0dHJzLmNsYXNzICsgIiAiICsgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMuY2xvbmVcbiAgICAgIH0pO1xuICAgICAgdmFyIGNsb25lID0gYXNzaWduKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid7fSwgY29udGVudCwge1xuICAgICAgICBhdHRyczogYXR0cnNcbiAgICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGluZGV4IDwgY291bnQgPyBjb250ZW50cy51bnNoaWZ0KGNsb25lKSA6IGNvbnRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5wdXNoKGNsb25lKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLmdldENsb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50ID0gZnVuY3Rpb24gZ2V0Q2xvbmVDb3VudCgpIHtcbiAgICBpZiAodGhpcy5pc0xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wKCkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKG9wdGlvbnMuY2xvbmVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNsb25lcycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG5cbiAgICAgIHZhciBwZXJQYWdlID0gbWF4LmFwcGx5KHZvaWQgMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuYnJlYWtwb2ludHMubWFwKGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMyID0gX3JlZjZbMV07XG4gICAgICAgIHJldHVybiBvcHRpb25zMi5wZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBwZXJQYWdlICogKChvcHRpb25zLmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlja01heFBhZ2VzIHx8IDEpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMucmVuZGVyQXJyb3dzID0gZnVuY3Rpb24gcmVuZGVyQXJybycKICAgICAgICAgICAgICAgICAgICAgICAgYid3cygpIHtcbiAgICB2YXIgaHRtbCA9ICIiO1xuICAgIGh0bWwgKz0gIjxkaXYgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzPVxcIiIgKyB0aGlzLm9wdGlvbnMuY2xhc3Nlcy5hcnJvd3MgKyAiXFwiPiI7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGh0bWwgKz0gdGhpcy5yZW5kZXJBcnJvdyh0cnVlKTtcbiAgICBodG1sICs9IHRoaXMucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlckFycm93KGZhbHNlKTtcbiAgICBodG1sICs9ICI8L2Rpdj4iO1xuICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gaHRtbDtcbiAgfTtcblxuICBfcHJvdG8zLnJlbmRlckFycm93ID0gZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbmRlckFycm93KHByZXYpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMsXG4gICAgICAgIGNsYXNzZXMgPSBfdGhpcyRvcHRpb25zLmNsYXNzZXMsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBpMThuID0gX3RoaXMkb3B0aW9ucy5pMThuO1xuICAgIHZhciBhdHRycyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSB7XG4gICAgICBjbGFzczogY2xhc3Nlcy5hcnJvdyArICIgIiArIChwcmV2ID8gY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMucHJldiA6IGNsYXNzZXMubmV4dCksXG4gICAgICB0eXBlOiAiYnV0dG9uIixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBhcmlhTGFiZWw6IHByZXYgPyBpMThuLnByZXYgOiBpMThuLm5leHRcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcbiAgICByZXR1cm4gIjxidXR0b24gIiArIHRoaXMuYnVpbGRBdHRycyhhdHRycykgKycKICAgICAgICAgICAgICAgICAgICAgICAgYicgIj48c3ZnIHhtbG5zPVxcIiIgKyBYTUxfTkFNRV9TUEFDRSArICJcXCIgdmlld0JveCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiMCAwICIgKyBTSVpFICsgIiAiICsgU0laRSArICJcXCIgd2lkdGg9XFwiIiArIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVpFICsgIlxcIiBoZWlnaHQ9XFwiIiArIFNJWkUgKyAiXFwiPjxwYXRoIGQ9XFwiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYicodGhpcy5vcHRpb25zLmFycm93UGF0aCB8fCBQQVRIKSArICJcXCIgLz48L3N2Zz48L2J1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b24+IjtcbiAgfTtcblxuICBfcHJvdG8zLmh0bWwgPSBmdW5jdGlvbiBodG1sKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgX3RoaXMkY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgIHJvb3RDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgPSBfdGhpcyRjb25maWcucm9vdENsYXNzLFxuICAgICAgICBsaXN0VGFnID0gX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmZpZy5saXN0VGFnLFxuICAgICAgICBhcnJvd3MgPSBfdGhpcyRjb25maWcuYXJyb3dzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgYmVmb3JlVHJhY2sgPSBfdGhpcyRjb25maWcuYmVmb3JlVHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBhZnRlclRyYWNrID0gX3RoaXMkY29uZmlnLmFmdGVyVHJhY2ssXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBzbGlkZXIgPSBfdGhpcyRjb25maWcuc2xpZGVyLFxuICAgICAgICBiZWZvcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVyID0gX3RoaXMkY29uZmlnLmJlZm9yZVNsaWRlcixcbiAgICAgICAgYWZ0ZXJTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyID0gX3RoaXMkY29uZmlnLmFmdGVyU2xpZGVyO1xuICAgIHZhciBodG1sID0gIicKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICAgIGh0bWwgKz0gIjxkaXYgaWQ9XFwiIiArIHRoaXMuaWQgKyAiXFwiIGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz1cXCIiICsgdGhpcy5idWlsZENsYXNzZXMoKSArICIgIiArIChyb290Q2xhc3MgfHwgIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSArICJcXCI+IjtcbiAgICBodG1sICs9ICI8c3R5bGU+IiArIHRoaXMuU3R5bGUuYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkKCkgKyAiPC9zdHlsZT4iO1xuXG4gICAgaWYgKHNsaWRlcikge1xuICAgICAgaHRtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKz0gYmVmb3JlU2xpZGVyIHx8ICIiO1xuICAgICAgaHRtbCArPSAiPGRpdiBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3M9XFwic3BsaWRlX19zbGlkZXJcXCI+IjtcbiAgICB9XG5cbiAgICBodG1sICs9IGJlZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVUcmFjayB8fCAiIjtcblxuICAgIGlmIChhcnJvd3MpIHtcbiAgICAgIGh0bWwgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMucmVuZGVyQXJyb3dzKCk7XG4gICAgfVxuXG4gICAgaHRtbCArPSAiPGRpdiBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3M9XFwic3BsaWRlX190cmFja1xcIj4iO1xuICAgIGh0bWwgKz0gIjwiICsgbGlzdFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWcgKyAiIGNsYXNzPVxcInNwbGlkZV9fbGlzdFxcIj4iO1xuICAgIGh0bWwgKz0gdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVuZGVyU2xpZGVzKCk7XG4gICAgaHRtbCArPSAiPC8iICsgbGlzdFRhZyArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiI7XG4gICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICBodG1sICs9IGFmdGVyVHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8ICIiO1xuXG4gICAgaWYgKHNsaWRlcikge1xuICAgICAgaHRtbCArPSAiPC9kaXY+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gICAgICBodG1sICs9IGFmdGVyU2xpZGVyIHx8ICIiO1xuICAgIH1cblxuICAgIGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG1sICs9ICI8L2Rpdj4iO1xuICAgIHJldHVybiBodG1sO1xuICB9O1xuXG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlUmVuZGVyZXI7XG59KCk7XG5cbmV4cG9ydCB7IENMQVNTRVMsIENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1RJVkUsIENMQVNTX0FSUk9XLCBDTEFTU19BUlJPV1MsIENMQVNTX0FSUk9XX05FWFQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19BUlJPV19QUkVWLCBDTEFTU19DTE9ORSwgQ0xBU1NfQ09OVEFJTkVSLCBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfRk9DVVNfSU4sIENMQVNTX0lOSVRJQUxJWkVELCBDTEFTU19MSVNULCBDTEFTU19MT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRElORywgQ0xBU1NfTkVYVCwgQ0xBU1NfT1ZFUkZMT1csIENMQVNTX1BBR0lOQVRJT04sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19QQUdJTkFUSU9OX1BBR0UsIENMQVNTX1BSRVYsIENMQVNTX1BST0dSRVNTLCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUFJPR1JFU1NfQkFSLCBDTEFTU19ST09ULCBDTEFTU19TTElERSwgQ0xBU1NfU1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5ORVIsIENMQVNTX1NSLCBDTEFTU19UT0dHTEUsIENMQVNTX1RPR0dMRV9QQVVTRSwgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1RPR0dMRV9QTEFZLCBDTEFTU19UUkFDSywgQ0xBU1NfVklTSUJMRSwgREVGQVVMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RTLCBFVkVOVF9BQ1RJVkUsIEVWRU5UX0FSUk9XU19NT1VOVEVELCBFVkVOVF9BUlJPV1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1VQREFURUQsIEVWRU5UX0FVVE9QTEFZX1BBVVNFLCBFVkVOVF9BVVRPUExBWV9QTEFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfQVVUT1BMQVlfUExBWUlORywgRVZFTlRfQ0xJQ0ssIEVWRU5UX0RFU1RST1ksJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9EUkFHLCBFVkVOVF9EUkFHR0VELCBFVkVOVF9EUkFHR0lORywgRVZFTlRfRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRF9JTkRFWF9DSEFOR0VELCBFVkVOVF9ISURERU4sIEVWRU5UX0lOQUNUSVZFLCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTEFaWUxPQURfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFLCBFVkVOVF9NJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09WRUQsIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgRVZFTlRfT1ZFUkZMT1csIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9QQUdJTkFUSU9OX01PVU5URUQsIEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCwgRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX1JFQURZLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UX1JFU0laRUQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9TSElGVEVELCBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0xJREVfS0VZRE9XTiwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfVklTSUJMRSwgRXZlbnRCaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyLCBFdmVudEludGVyZmFjZSwgRkFERSwgTE9PUCwgTFRSLCBSVEwsIFJlcXVlc3RJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJ2YWwsIFNMSURFLCBTVEFUVVNfQ0xBU1NFUywgU3BsaWRlLCBTcGxpZGVSZW5kZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsIFN0YXRlLCBUVEIsIFRocm90dGxlLCBTcGxpZGUgYXMgZGVmYXVsdCB9O1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5lc20uanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYidmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmplY3QuZGVmaW5lUHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgeyB3cml0YWJsZTogZmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLyohXG4gKiBTcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICA6IE1JVFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xudmFyIE1FRElBX1BSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VGRVJTX1JFRFVDRURfTU9USU9OID0gIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVkdWNlKSI7XG52YXIgQ1JFQVRFRCA9IDE7XG52YXIgTU9VTlRFRCA9IDI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIElETEUgPSAzO1xudmFyIE1PVklORyA9IDQ7XG52YXIgU0NST0xMSU5HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IDU7XG52YXIgRFJBR0dJTkcgPSA2O1xudmFyIERFU1RST1lFRCA9IDc7XG52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIFNUQVRFUyA9IHtcbiAgQ1JFQVRFRDogQ1JFQVRFRCxcbiAgTU9VTlRFRDogTU9VJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05URUQsXG4gIElETEU6IElETEUsXG4gIE1PVklORzogTU9WSU5HLFxuICBTQ1JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xMSU5HOiBTQ1JPTExJTkcsXG4gIERSQUdHSU5HOiBEUkFHR0lORyxcbiAgREVTVFJPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1lFRDogREVTVFJPWUVEXG59O1xuXG5mdW5jdGlvbiBlbXB0eShhcnJheSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyYXlMaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIGFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BseShmdW5jKSB7XG4gIHJldHVybiBmdW5jLmJpbmQuYXBwbHkoZnVuYywgW251bGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXS5jb25jYXQoc2xpY2UoYXJndW1lbnRzLCAxKSkpO1xufVxuXG52YXIgbmV4dFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWNrID0gc2V0VGltZW91dDtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG5mdW5jdGlvbiByYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdEFuaW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb25GcmFtZShmdW5jKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUsIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICFpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOdWxsKHN1YmplY3QpICYmIHR5cGVPZigib2JqZWN0Iiwgc3ViamVjdCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgaXNGdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gPSBhcHBseSh0eXBlT2YsICJmdW5jdGlvbiIpO1xudmFyIGlzU3RyaW5nID0gYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KHR5cGVPZiwgInN0cmluZyIpO1xudmFyIGlzVW5kZWZpbmVkID0gYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5cGVPZiwgInVuZGVmaW5lZCIpO1xuXG5mdW5jdGlvbiBpc051bGwoc3ViamVjdCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgcmV0dXJuIHN1YmplY3QgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTUxFbGVtZW50KHN1YmplY3QpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5zdGFuY2VvZiAoc3ViamVjdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCB3aW5kb3cpLkhUTUxFbGVtZW50O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgdG9BcnJheSh2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWVzKS5mb3JFYWNoKGl0ZXJhdGVlKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID4gLTE7XG59XG5cbmZ1bmN0aW9uIHB1c2goYXJyYXksIGl0ZW1zKSB7XG4gIGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JheS5wdXNoLmFwcGx5KGFycmF5LCB0b0FycmF5KGl0ZW1zKSk7XG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFkZCkge1xuICBpZiAoZWxtKSB7XG4gICAgZm9yRWFjaChjbGFzc2VzLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKG5hbWUpIHtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGVsbS5jbGFzc0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0W2FkZCA/ICJhZGQiIDogInJlbW92ZSJdKG5hbWUpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRvZ2dsZUNsYXNzKGVsbSwgaXNTdHJpbmcoY2xhc3NlcykgPyBjbGFzc2VzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpdCgiICIpIDogY2xhc3NlcywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQocGFyZW50LCBjaGlsZHJlbikge1xuICBmb3JFYWNoKGNoaWxkcmVuLCBwYXJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmFwcGVuZENoaWxkLmJpbmQocGFyZW50KSk7XG59XG5cbmZ1bmN0aW9uIGJlZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmUobm9kZXMsIHJlZikge1xuICBmb3JFYWNoKG5vZGVzLCBmdW5jdGlvbiAobm9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCBub2RlKS5wYXJlbnROb2RlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHJlZik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhlbG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzZWxlY3Rvcikge1xuICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmIChlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtWyJtc01hdGNoZXNTZWxlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCBzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0b3IpIHtcbiAgdmFyIGNoaWxkcmVuMiA9IHBhcmVudCA/IHNsaWNlKHBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2hpbGRyZW4pIDogW107XG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuMi5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBtYXRjaGVzKGNoaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCwgc2VsZWN0b3IpO1xuICB9KSA6IGNoaWxkcmVuMjtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpWzBdIDogcGFyZW50LmZpcnN0RWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RDaGlsZDtcbn1cblxudmFyIG93bktleXMgPSBPYmplY3Qua2V5cztcblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkge1xuICBpZiAob2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCkge1xuICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3duS2V5cyhvYmplY3QpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGVlKG9iamVjdFtrZXldLCBrZXkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBhc3NpZ24ob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAodmFsdWUsIGtleSkge1xuICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ107XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWVyZ2Uob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWUsIGtleSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBtZXJnZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iamVjdFtrZXldIDoge30sIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5cykge1xuICBmb3JFYWNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrZXlzIHx8IG93bktleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xldGUgb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlKGVsbXMsIGF0dHJzKSB7XG4gIGZvckVhY2goZWxtcywgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlbG0pIHtcbiAgICBmb3JFYWNoKGF0dHJzLCBmdW5jdGlvbiAoYXR0cikge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVsbSAmJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgIH0pO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShlbG1zLCBhdHRycywgdmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlKSB7XG4gIGlmIChpc09iamVjdChhdHRycykpIHtcbiAgICBmb3JPd24oYXR0cnMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiAodmFsdWUyLCBuYW1lKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUoZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXMsIG5hbWUsIHZhbHVlMik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2goZWxtcywgZnVuY3Rpb24gKGVsbSkge1xuICAgICAgaXNOdWxsKHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgdmFsdWUgPT09ICIiID8gcmVtb3ZlQXR0cmlidXRlKGVsbSwgYXR0cnMpIDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbS5zZXRBdHRyaWJ1dGUoYXR0cnMsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGUodGFnLCBhdHRycywgcGFyZW50KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoYXR0cnMpIHtcbiAgICBpc1N0cmluZyhhdHRycykgPyBhZGRDbGFzcyhlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycyk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50ICYmIGFwcGVuZChwYXJlbnQsIGVsbSk7XG4gIHJldHVybiBlbG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBzdHlsZShlbG0sIHByb3AsIHZhbHVlKSB7XG4gIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKGVsbSlbcHJvcF07XG4gIH1cblxuICBpZiAoIWlzTnVsbCh2YWx1ZSkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZWxtLnN0eWxlW3Byb3BdID0gIiIgKyB2YWx1ZTtcbiAgfVxufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gZGlzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gIHN0eWxlKGVsbSwgImRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5IiwgZGlzcGxheTIpO1xufVxuXG5mdW5jdGlvbiBmb2N1cyhlbG0pIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVsbVsic2V0QWN0aXZlIl0gJiYgZWxtWyJzZXRBY3RpdmUiXSgpIHx8IGVsbS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9jdXMoe1xuICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgfSk7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gIHJldHVybiBlbG0uZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShhdHRyKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChub2RlKSB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwoaHRtbCkge1xuICByZXR1cm4gY2hpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3Rpb24gcHJldmVudChlLCBzdG9wUHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcblxuICBpZiAoc3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQcm9wYWdhdGlvbikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ5KHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xufVxuXG5mdW5jdGlvbiBxdWVyeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbGwocGFyZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPyBzbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4gIHRvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWVPZihlKSB7XG4gIHJldHVybiBlLnRpbWVTdGFtcDtcbn1cblxuZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHVuaXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZhbHVlID8gdmFsdWUgKyAicHgiIDogIiI7XG59XG5cbnZhciBQUk9KRUNUXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDT0RFID0gInNwbGlkZSI7XG52YXIgREFUQV9BVFRSSUJVVEUgPSAiZGF0YS0iICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BST0pFQ1RfQ09ERTtcblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIlsiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArIFBST0pFQ1RfQ09ERSArICJdICIgKyAobWVzc2FnZSB8fCAiIikpO1xuICB9XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG52YXIgbWluID0gTWF0aC5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZsb29yID0gTWF0aC5mbG9vcixcbiAgICBjZWlsID0gTWF0aC5jZWlsLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYnMgPSBNYXRoLmFicztcblxuZnVuY3Rpb24gYXBwcm94aW1hdGVseUVxdWFsKHgsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5LCBlcHNpbG9uKSB7XG4gIHJldHVybiBhYnMoeCAtIHkpIDwgZXBzaWxvbjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIGJldHdlZW4obnVtYmVyLCB4LCB5LCBleGNsdXNpdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICB2YXIgbWF4aW11bSA9IG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXgoeCwgeSk7XG4gIHJldHVybiBleGNsdXNpdmUgPyBtaW5pbXVtIDwgbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBudW1iZXIgPCBtYXhpbXVtIDogbWluaW11bSA8PSBudW1iZXIgJiYgbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciA8PSBtYXhpbXVtO1xufVxuXG5mdW5jdGlvbiBjbGFtcChudW1iZXIsIHgsIHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICB2YXIgbWF4aW11bSA9IG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXgoeCwgeSk7XG4gIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWJlciksIG1heCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbXVtKTtcbn1cblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiArKHggPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCkgLSArKHggPCAwKTtcbn1cblxuZnVuY3Rpb24gY2FtZWxUb0tlYmFiKHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvZywgIiQxLSQyIikudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdChzdHJpbmcsIHJlcGxhY2VtZW50cykge1xuICBmb3JFYWNoKHJlcGxhY2VtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGZ1bmN0aW9uIChyZXBsYWNlbWVudCkge1xuICAgIHN0cmluZyA9IHN0cmluZy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZSgiJXMiLCAiIiArIHJlcGxhY2VtZW50KTtcbiAgfSk7XG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBwYWQobnVtYmVyKSB7XG4gIHJldHVybiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyIDwgMTAgPyAiMCIgKyBudW1iZXIgOiAiIiArIG51bWJlcjtcbn1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBpZHMgPSB7fTtcblxuZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gIiIgKyBwcmVmaXggKyBwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaXhdIHx8IDApICsgMSk7XG59XG5cbmZ1bmN0aW9uIEV2ZW50QmluZGVyKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGJpbmQodGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHMsIGV2ZW50cywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBmb3JFYWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KHRhcmdldHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UpIHtcbiAgICAgIHZhciBpc0V2ZW50VGFyZ2V0ID0gKCJhZGRFdmVudExpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZW5lciIgaW4gdGFyZ2V0KTtcbiAgICAgIHZhciByZW1vdmVyID0gaXNFdmVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQgPyB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRhcmdldCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50LCBjYWxsYmFjaywgb3B0aW9ucykgOiB0YXJnZXRbInJlbW92ZUxpc3RlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlciJdLmJpbmQodGFyZ2V0LCBjYWxsYmFjayk7XG4gICAgICBpc0V2ZW50VGFyZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMpIDogdGFyZ2V0WyJhZGRMaXN0ZW5lciJdKGNhbGxiYWNrKTtcbiAgICAgIGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZW5lcnMucHVzaChbdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlbW92ZXJdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFyZ2V0cywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgIGZvckVhY2hFdmVudCh0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0cywgZXZlbnRzLCBmdW5jdGlvbiAodGFyZ2V0LCBldmVudCwgbmFtZXNwYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGxpc3RlbmVyKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0gdGFyZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBsaXN0ZW5lclsxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09IG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkge1xuICAgICAgICAgIGxpc3RlbmVyWzRdKCk7XG4gICAgICAgICAgcmV0dXJuIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2godGFyZ2V0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSwgZGV0YWlsKSB7XG4gICAgdmFyIGU7XG4gICAgdmFyIGJ1YmJsZXMgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcblxuICAgIGlmICh0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICJmdW5jdGlvbiIpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KHR5cGUsIHtcbiAgICAgICAgYnViYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXM6IGJ1YmJsZXMsXG4gICAgICAgIGRldGFpbDogZGV0YWlsXG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0N1c3RvbUV2ZW50Iik7XG4gICAgICBlLmluaXRDdXN0b21FdmVudCh0eXBlLCBidWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlcywgZmFsc2UsIGRldGFpbCk7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmRpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRjaEV2ZW50KGUpO1xuICAgIHJldHVybiBlO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2hFdmVudCh0YXJnZXRzLCBldmVudHMsIGl0ZXJhdGVlKSB7XG4gICAgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2godGFyZ2V0cywgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdGFyZ2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2ZW50czIpIHtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50czIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5TKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIHZhciBmcmFnbWVudCA9IGV2ZW50TlMuc3BsaXQoIi4iKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgaXRlcmF0ZWUodGFyZ2V0LCBmcmFnbWVudFswXSwgZnJhZ21lbnRbMV0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBkZXN0cm95KCkge1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZGF0YSkge1xuICAgICAgZGF0YVs0XSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0ZW5lcnMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiaW5kOiBiaW5kLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB1bmJpbmQ6IHVuYmluZCxcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3k6IGRlc3Ryb3lcbiAgfTtcbn1cblxudmFyIEVWRU5UX01PVU5URUQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIm1vdW50ZWQiO1xudmFyIEVWRU5UX1JFQURZID0gInJlYWR5IjtcbnZhciBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9WRSA9ICJtb3ZlIjtcbnZhciBFVkVOVF9NT1ZFRCA9ICJtb3ZlZCI7XG52YXIgRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX0NMSUNLID0gImNsaWNrIjtcbnZhciBFVkVOVF9BQ1RJVkUgPSAiYWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfSU5BQ1RJVkUgPSAiaW5hY3RpdmUiO1xudmFyIEVWRU5UX1ZJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NJQkxFID0gInZpc2libGUiO1xudmFyIEVWRU5UX0hJRERFTiA9ICJoaWRkZW4iO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xudmFyIEVWRU5UX1VQREFURUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gInVwZGF0ZWQiO1xudmFyIEVWRU5UX1JFU0laRSA9ICJyZXNpemUiO1xudmFyIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9SRVNJWkVEID0gInJlc2l6ZWQiO1xudmFyIEVWRU5UX0RSQUcgPSAiZHJhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX0RSQUdHSU5HID0gImRyYWdnaW5nIjtcbnZhciBFVkVOVF9EUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0dFRCA9ICJkcmFnZ2VkIjtcbnZhciBFVkVOVF9TQ1JPTEwgPSAic2Nyb2xsIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfU0NST0xMRUQgPSAic2Nyb2xsZWQiO1xudmFyIEVWRU5UX09WRVJGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xPVyA9ICJvdmVyZmxvdyI7XG52YXIgRVZFTlRfREVTVFJPWSA9ICJkZXN0cm95IjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgRVZFTlRfQVJST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XG52YXIgRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICJwYWdpbmF0aW9uOm1vdW50ZWQiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQgPSAicGFnaW5hdGlvbjp1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCI7XG52YXIgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gIm5hdmlnYXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50ZWQiO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BMQVkgPSAiYXV0b3BsYXk6cGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXkiO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgPSAiYXV0b3BsYXk6cGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmciO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfTEFaWUxPQURfTE9BREVEID0gImxhenlsb2FkOmxvYWRlZCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEVWRU5UX1NMSURFX0tFWURPV04gPSAic2siO1xudmFyIEVWRU5UX1NISUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEVEID0gInNoIjtcbnZhciBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9ICJlaSI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBFdmVudEludGVyZmFjZShTcGxpZGUyKSB7XG4gIHZhciBidXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMiA/IFNwbGlkZTIuZXZlbnQuYnVzIDogZG9jdW1lbnQuY3JlYXRlRG9jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50RnJhZ21lbnQoKTtcbiAgdmFyIGJpbmRlciA9IEV2ZW50QmluZGVyKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gIGZ1bmN0aW9uIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICBiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyLmJpbmQoYnVzLCB0b0FycmF5KGV2ZW50cykuam9pbigiICIpLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKGUpIHtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGNhbGxiYWNrLCBpc0FycmF5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLmRldGFpbCkgPyBlLmRldGFpbCA6IFtdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgYmluZGVyLmRpc3BhdGNoKGJ1cywgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50LCBzbGljZShhcmd1bWVudHMsIDEpKTtcbiAgfVxuXG4gIGlmIChTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMikge1xuICAgIFNwbGlkZTIuZXZlbnQub24oRVZFTlRfREVTVFJPWSwgYmluZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5kZXN0cm95KTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oYmluZGVyLCB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGJ1czogYnVzLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IGFwcGx5KGJpbmRlci51bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiaW5kLCBidXMpLFxuICAgIGVtaXQ6IGVtaXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBSZXF1ZXN0SW50ZXJ2YWwoaW50ZXJ2YWwsIG9uSW50ZXJ2YWwsIG9uVXBkYXRlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbGltaXQpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93O1xuICB2YXIgc3RhcnRUaW1lOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIHJhdGUgPSAwO1xuICB2YXIgaWQ7XG4gIHZhciBwYXVzZWQgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbiAgdmFyIGNvdW50ID0gMDtcblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICghcGF1c2VkKSB7XG4gICAgICByYXRlID0gaW50ZXJ2YWwgPyBtaW4oKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub3coKSAtIHN0YXJ0VGltZSkgLyBpbnRlcnZhbCwgMSkgOiAxO1xuICAgICAgb25VJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BkYXRlICYmIG9uVXBkYXRlKHJhdGUpO1xuXG4gICAgICBpZiAocmF0ZSA+PSAxKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBvbkludGVydmFsKCk7XG4gICAgICAgIHN0YXJ0VGltZSA9IG5vdygpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgICBpZiAobGltaXQgJiYgKytjb3VudCA+PSBsaW1pdCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWQgPSByYWYodXBkYXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gc3RhcnQocmVzdW1lKSB7XG4gICAgcmVzdW1lIHx8IGNhbmNlbCgpO1xuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydFRpbWUgPSBub3coKSAtIChyZXN1bWUgPyByYXRlICogaW50ZXJ2YWwgOiAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgaWQgPSByYWYodXBkYXRlKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBwYXVzZWQgPSB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJld2luZCgpIHtcbiAgICBzdGFydFRpbWUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbm93KCk7XG4gICAgcmF0ZSA9IDA7XG5cbiAgICBpZiAob25VcGRhdGUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBvblVwZGF0ZShyYXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2VsKCkge1xuICAgIGlkICYmIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmF0ZSA9IDA7XG4gICAgaWQgPSAwO1xuICAgIHBhdXNlZCA9IHRydWU7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gc2V0KHRpbWUpIHtcbiAgICBpbnRlcnZhbCA9IHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNQYXVzZWQoKSB7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV3aW5kOiByZXdpbmQsXG4gICAgcGF1c2U6IHBhdXNlLFxuICAgIGNhbmNlbDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbmNlbCxcbiAgICBzZXQ6IHNldCxcbiAgICBpc1BhdXNlZDogaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG59XG5cbmZ1bmN0aW9uIFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIHN0YXRlID0gaW5pdGlhbFN0YXRlO1xuXG4gIGZ1bmN0aW9uIHNldCh2YWx1ZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzdGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXMoc3RhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncykge1xuICAgIHJldHVybiBpbmNsdWRlcyh0b0FycmF5KHN0YXRlcyksIHN0YXRlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldDogc2V0LFxuICAgIGlzOiBpc1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcbn1cblxuZnVuY3Rpb24gVGhyb3R0bGUoZnVuYywgZHVyYXRpb24pIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiB8fCAwLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuYywgbnVsbCwgMSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJ2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLmlzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIE1lZGlhKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuICB2YXIgYnJlYWtwb2ludHMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5icmVha3BvaW50cyB8fCB7fTtcbiAgdmFyIHJlZHVjZWRNb3Rpb24gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5yZWR1Y2VkTW90aW9uIHx8IHt9O1xuICB2YXIgYmluZGVyID0gRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250QmluZGVyKCk7XG4gIHZhciBxdWVyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NldHVwKCkge1xuICAgIHZhciBpc01pbiA9IG9wdGlvbnMubWVkaWFRdWVyeSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJtaW4iO1xuICAgIG93bktleXMoYnJlYWtwb2ludHMpLnNvcnQoZnVuY3Rpb24gKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBtKSB7XG4gICAgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZWdpc3RlcihiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYWtwb2ludHNba2V5XSwgIigiICsgKGlzTWluID8gIm1pbiIgOiAibWF4IikgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIi13aWR0aDoiICsga2V5ICsgInB4KSIpO1xuICAgIH0pO1xuICAgIHJlZ2lzdGVyKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWR1Y2VkTW90aW9uLCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdXBkYXRlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x5KSB7XG4gICAgaWYgKGNvbXBsZXRlbHkpIHtcbiAgICAgIGJpbmRlci5kZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKG9wdGlvbnMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcXVlcnkpIHtcbiAgICB2YXIgcXVlcnlMaXN0ID0gbWF0Y2hNZWRpYShxdWVyeSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGJpbmRlci5iaW5kKHF1ZXJ5TGlzdCwgImNoYW5nZSIsIHVwZGF0ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHF1ZXJpZXMucHVzaChbb3B0aW9uczIsIHF1ZXJ5TGlzdF0pO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB2YXIgZGVzdHJveWVkID0gc3RhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzKERFU1RST1lFRCk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbjtcbiAgICB2YXIgbWVyZ2VkID0gcXVlcmllcy5yZWR1Y2UoZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhtZXJnZWQyLCBlbnRyeSkge1xuICAgICAgcmV0dXJuIG1lcmdlKG1lcmdlZDIsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRyeVsxXS5tYXRjaGVzID8gZW50cnlbMF0gOiB7fSk7XG4gICAgfSwge30pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBvbWl0KG9wdGlvbnMpO1xuICAgIHNldChtZXJnZWQpO1xuXG4gICAgaWYgKG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLmRlc3Ryb3kpIHtcbiAgICAgIFNwbGlkZTIuZGVzdHJveShvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95ID09PSAiY29tcGxldGVseSIpO1xuICAgIH0gZWxzZSBpZiAoZGVzdHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3llZCkge1xuICAgICAgZGVzdHJveSh0cnVlKTtcbiAgICAgIFNwbGlkZTIubW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdGlvbiAhPT0gb3B0aW9ucy5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uICYmIFNwbGlkZTIucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiByZWR1Y2UoZW5hYmxlKSB7XG4gICAgaWYgKG1hdGNoTWVkaWEoTUVESUFfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pLm1hdGNoZXMpIHtcbiAgICAgIGVuYWJsZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBtZXJnZShvcHRpb25zLCByZWR1Y2VkTW90aW9uKSA6IG9taXQob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293bktleXMocmVkdWNlZE1vdGlvbikpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBzZXQob3B0cywgYmFzZSwgbm90aWZ5KSB7XG4gICAgbWVyZ2Uob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdHMpO1xuICAgIGJhc2UgJiYgbWVyZ2UoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKSwgb3B0cyk7XG5cbiAgICBpZiAobm90aWZ5IHx8ICFzdGF0ZS5pcyhDUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCkpIHtcbiAgICAgIFNwbGlkZTIuZW1pdChFVkVOVF9VUERBVEVELCBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogc2V0dXAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgcmVkdWNlOiByZWR1Y2UsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHNldDogc2V0XG4gIH07XG59XG5cbnZhciBBUlJPVyA9ICJBcnJvdyI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSUk9XX0xFRlQgPSBBUlJPVyArICJMZWZ0IjtcbnZhciBBUlJPV19SSUdIVCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPVyArICJSaWdodCI7XG52YXIgQVJST1dfVVAgPSBBUlJPVyArICJVcCI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIEFSUk9XX0RPV04gPSBBUlJPVyArICJEb3duIjtcbnZhciBMVFIgPSAibHRyIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgUlRMID0gInJ0bCI7XG52YXIgVFRCID0gInR0YiI7XG52YXIgT1JJRU5UQVRJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOX01BUCA9IHtcbiAgd2lkdGg6IFsiaGVpZ2h0Il0sXG4gIGxlZnQ6IFsidG9wIiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodCJdLFxuICByaWdodDogWyJib3R0b20iLCAibGVmdCJdLFxuICB4OiBbInkiXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gIFg6IFsiWSJdLFxuICBZOiBbIlgiXSxcbiAgQXJyb3dMZWZ0OiBbQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXX1VQLCBBUlJPV19SSUdIVF0sXG4gIEFycm93UmlnaHQ6IFtBUlJPV19ET1dOLCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1dfTEVGVF1cbn07XG5cbmZ1bmN0aW9uIERpcmVjdGlvbihTcGxpZGUyLCBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgZnVuY3Rpb24gcmVzb2x2ZShwcm9wLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXhpc09ubHksIGRpcmVjdGlvbikge1xuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGluZGV4ID0gZGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gUlRMICYmICFheGlzT25seSA/IDEgOiBkaXJlY3Rpb24gPT09IFRUQiA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwIDogLTE7XG4gICAgcmV0dXJuIE9SSUVOVEFUSU9OX01BUFtwcm9wXSAmJiBPUklFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UQVRJT05fTUFQW3Byb3BdW2luZGV4XSB8fCBwcm9wLnJlcGxhY2UoL3dpZHRofCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0fHJpZ2h0L2ksIGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0KSB7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHJlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSgpXVtpbmRleF0gfHwgbWF0Y2g7XG4gICAgICByZXR1cm4gb2Zmc2V0ID4gMCA/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXBsYWNlbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcGxhY2VtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudC5zbGljZSgxKSA6IHJlcGxhY2VtZW50O1xuICAgIH0pO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG9yaWVudCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAqIChvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5kaXJlY3Rpb24gPT09IFJUTCA/IDEgOiAtMSk7XG4gIH1cblxuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcbiAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgIG9yaWVudDogb3JpZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xufVxuXG52YXIgUk9MRSA9ICJyb2xlIjtcbnZhciBUQUJfSU5ERVggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInRhYmluZGV4IjtcbnZhciBESVNBQkxFRCA9ICJkaXNhYmxlZCI7XG52YXIgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYID0gImFyaWEtIjtcbnZhciBBUklBX0NPTlRST0xTID0gQVJJQV9QUkVGSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYICsgImNvbnRyb2xzIjtcbnZhciBBUklBX0NVUlJFTlQgPSBBUklBX1BSRUZJWCArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiY3VycmVudCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IEFSSUFfUFJFRklYICsgInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlY3RlZCI7XG52YXIgQVJJQV9MQUJFTCA9IEFSSUFfUFJFRklYICsgImxhYmVsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgQVJJQV9MQUJFTExFREJZID0gQVJJQV9QUkVGSVggKyAibGFiZWxsZWRiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kiO1xudmFyIEFSSUFfSElEREVOID0gQVJJQV9QUkVGSVggKyAiaGlkZGVuIjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQVJJQV9PUklFTlRBVElPTiA9IEFSSUFfUFJFRklYICsgIm9yaWVudGF0aW9uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgQVJJQV9ST0xFREVTQ1JJUFRJT04gPSBBUklBX1BSRUZJWCArICJyb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc2NyaXB0aW9uIjtcbnZhciBBUklBX0xJVkUgPSBBUklBX1BSRUZJWCArICJsaXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSI7XG52YXIgQVJJQV9CVVNZID0gQVJJQV9QUkVGSVggKyAiYnVzeSI7XG52YXIgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQVRPTUlDID0gQVJJQV9QUkVGSVggKyAiYXRvbWljIjtcbnZhciBBTExfQVRUUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQlVURVMgPSBbUk9MRSwgVEFCX0lOREVYLCBESVNBQkxFRCwgQVJJQV9DT05UUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTFMsIEFSSUFfQ1VSUkVOVCwgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZLCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQV9ISURERU4sIEFSSUFfT1JJRU5UQVRJT04sIEFSSUFfUk9MRURFU0NSSVBUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTl07XG52YXIgQ0xBU1NfUFJFRklYID0gUFJPSkVDVF9DT0RFICsgIl9fIjtcbnZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICJpcy0iO1xudmFyIENMQVNTX1JPT1QgPSBQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPSkVDVF9DT0RFO1xudmFyIENMQVNTX1RSQUNLID0gQ0xBU1NfUFJFRklYICsgInQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFjayI7XG52YXIgQ0xBU1NfTElTVCA9IENMQVNTX1BSRUZJWCArICJsaXN0IjtcbnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgQ0xBU1NfU0xJREUgPSBDTEFTU19QUkVGSVggKyAic2xpZGUiO1xudmFyIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19DTE9ORSA9IENMQVNTX1NMSURFICsgIi0tY2xvbmUiO1xudmFyIENMQVNTX0NPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UQUlORVIgPSBDTEFTU19TTElERSArICJfX2NvbnRhaW5lciI7XG52YXIgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0FSUk9XUyA9IENMQVNTX1BSRUZJWCArICJhcnJvd3MiO1xudmFyIENMQVNTX0FSUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVyA9IENMQVNTX1BSRUZJWCArICJhcnJvdyI7XG52YXIgQ0xBU1NfQVJST1dfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YgPSBDTEFTU19BUlJPVyArICItLXByZXYiO1xudmFyIENMQVNTX0FSUk9XX05FWFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQ0xBU1NfQVJST1cgKyAiLS1uZXh0IjtcbnZhciBDTEFTU19QQUdJTkFUSU9OICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IENMQVNTX1BSRUZJWCArICJwYWdpbmF0aW9uIjtcbnZhciBDTEFTU19QQUdJTkFUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTl9QQUdFID0gQ0xBU1NfUEFHSU5BVElPTiArICJfX3BhZ2UiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTUyA9IENMQVNTX1BSRUZJWCArICJwcm9ncmVzcyI7XG52YXIgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUiA9IENMQVNTX1BST0dSRVNTICsgIl9fYmFyIjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVE9HR0xFID0gQ0xBU1NfUFJFRklYICsgInRvZ2dsZSI7XG52YXIgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1RPR0dMRV9QTEFZID0gQ0xBU1NfVE9HR0xFICsgIl9fcGxheSI7XG52YXIgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1RPR0dMRV9QQVVTRSA9IENMQVNTX1RPR0dMRSArICJfX3BhdXNlIjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfU1BJTk5FUiA9IENMQVNTX1BSRUZJWCArICJzcGlubmVyIjtcbnZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfU1IgPSBDTEFTU19QUkVGSVggKyAic3IiO1xudmFyIENMQVNTX0lOSVRJQUxJWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiaW5pdGlhbGl6ZWQiO1xudmFyIENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19BQ1RJVkUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImFjdGl2ZSI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1BSRVYgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgInByZXYiO1xudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19ORVhUID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJuZXh0IjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVklTSUJMRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAidmlzaWJsZSI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIENMQVNTX0xPQURJTkcgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImxvYWRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nIjtcbnZhciBDTEFTU19GT0NVU19JTiA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImZvY3VzLWluIjtcbnZhciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRklYICsgIm92ZXJmbG93IjtcbnZhciBTVEFUVVNfQ0xBU1NFUyA9IFtDTEFTU19BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NUSVZFLCBDTEFTU19WSVNJQkxFLCBDTEFTU19QUkVWLCBDTEFTU19ORVhULCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfTE9BRElORywgQ0xBU1NfRk9DVVNfSU4sIENMQVNTX09WRVJGTE9XXTtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQ0xBU1NFUyA9IHtcbiAgc2xpZGU6IENMQVNTX1NMSURFLFxuICBjbG9uZTogQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX0NMT05FLFxuICBhcnJvd3M6IENMQVNTX0FSUk9XUyxcbiAgYXJyb3c6IENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPVyxcbiAgcHJldjogQ0xBU1NfQVJST1dfUFJFVixcbiAgbmV4dDogQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSUk9XX05FWFQsXG4gIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4gIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlOiBDTEFTU19QQUdJTkFUSU9OX1BBR0UsXG4gIHNwaW5uZXI6IENMQVNTX1NQSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkVSXG59O1xuXG5mdW5jdGlvbiBjbG9zZXN0KGZyb20sIHNlbGVjdG9yKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoaXNGdW5jdGlvbihmcm9tLmNsb3Nlc3QpKSB7XG4gICAgcmV0dXJuIGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICB9XG5cbiAgdmFyIGVsbSA9IGZyb207XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHdoaWxlIChlbG0gJiYgZWxtLm5vZGVUeXBlID09PSAxKSB7XG4gICAgaWYgKG1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVzKGVsbSwgc2VsZWN0b3IpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZWxtID0gZWxtLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbTtcbn1cblxudmFyIEZSSUNUSU9OID0gNTtcbnZhciBMT0dfSU5URVJWQUwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjAwO1xudmFyIFBPSU5URVJfRE9XTl9FVkVOVFMgPSAidG91Y2hzdGFydCBtb3VzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb3duIjtcbnZhciBQT0lOVEVSX01PVkVfRVZFTlRTID0gInRvdWNobW92ZSBtb3VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vtb3ZlIjtcbnZhciBQT0lOVEVSX1VQX0VWRU5UUyA9ICJ0b3VjaGVuZCB0b3VjaGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZWwgbW91c2V1cCBjbGljayI7XG5cbmZ1bmN0aW9uIEVsZW1lbnRzKFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlLm9uLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZS5iaW5kOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICB2YXIgcm9vdCA9IFNwbGlkZTIucm9vdDtcbiAgdmFyIGkxOG4gPSBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5pMThuO1xuICB2YXIgZWxlbWVudHMgPSB7fTtcbiAgdmFyIHNsaWRlcyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXTtcbiAgdmFyIHJvb3RDbGFzc2VzID0gW107XG4gIHZhciB0cmFja0NsYXNzZXMgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgW107XG4gIHZhciB0cmFjaztcbiAgdmFyIGxpc3Q7XG4gIHZhciBpc1VzaW5nSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleTtcblxuICBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICBjb2xsZWN0KCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluaXQoKTtcbiAgICB1cGRhdGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBvbihFVkVOVF9SRUZSRVNILCBkZXN0cm95KTtcbiAgICBvbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVGUkVTSCwgc2V0dXApO1xuICAgIG9uKEVWRU5UX1VQREFURUQsIHVwZGF0ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIGJpbmQoZG9jdW1lbnQsIFBPSU5URVJfRE9XTl9FVkVOVFMgKyAiIGtleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb3duIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlzVXNpbmdLZXkgPSBlLnR5cGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09PSAia2V5ZG93biI7XG4gICAgfSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KTtcbiAgICBiaW5kKHJvb3QsICJmb2N1c2luIiwgZnVuY3Rpb24gKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAhIWlzVXNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnS2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRlbHkpIHtcbiAgICB2YXIgYXR0cnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZSIpO1xuICAgIGVtcHR5KHNsaWRlcyk7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJvb3RDbGFzc2VzKTtcbiAgICByZW1vdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlcyk7XG4gICAgcmVtb3ZlQXR0cmlidXRlKFt0cmFjaywgbGlzdF0sIGF0dHJzKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmVtb3ZlQXR0cmlidXRlKHJvb3QsIGNvbXBsZXRlbHkgPyBhdHRycyA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbInN0eWxlIiwgQVJJQV9ST0xFREVTQ1JJUFRJT05dKTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiB1cGRhdGUoKSB7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCwgcm9vdENsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKTtcbiAgICByZW1vdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29vdENsYXNzZXMgPSBnZXRDbGFzc2VzKENMQVNTX1JPT1QpO1xuICAgIHRyYWNrQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzZXMgPSBnZXRDbGFzc2VzKENMQVNTX1RSQUNLKTtcbiAgICBhZGRDbGFzcyhybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdCwgcm9vdENsYXNzZXMpO1xuICAgIGFkZENsYXNzKHRyYWNrLCB0cmFja0NsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKTtcbiAgICBzZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCwgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFiZWwpO1xuICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX0xBQkVMTEVEQlksICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLmxhYmVsbGVkYnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29sbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVNTX1RSQUNLKTtcbiAgICBsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCA9IGNoaWxkKHRyYWNrLCAiLiIgKyBDTEFTU19MSVNUKTtcbiAgICBhc3NlcnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrICYmIGxpc3QsICJBIHRyYWNrL2xpc3QgZWxlbWVudCBpcyBtaXNzaW5nLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4iICsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpO1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd24oe1xuICAgICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgICBwYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgIHByZXY6IENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWLFxuICAgICAgbmV4dDogQ0xBU1NfQVJST1dfTkVYVCxcbiAgICAgIGJhcjogQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUixcbiAgICAgIHRvZ2dsZTogQ0xBU1NfVE9HR0xFXG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGZ1bmN0aW9uIChjbGFzc05hbWUsIGtleSkge1xuICAgICAgZWxlbWVudHNba2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10gPSBmaW5kKCIuIiArIGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gICAgYXNzaWduKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50cywge1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHRyYWNrOiB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ssXG4gICAgICBsaXN0OiBsaXN0LFxuICAgICAgc2xpZGVzOiBzbGlkZXNcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBpZCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByb290LmlkIHx8IHVuaXF1ZUlkKFBST0pFQ1RfQ09ERSk7XG4gICAgdmFyIHJvbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gb3B0aW9ucy5yb2xlO1xuICAgIHJvb3QuaWQgPSBpZDtcbiAgICB0cmFjay5pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0cmFjay5pZCB8fCBpZCArICItdHJhY2siO1xuICAgIGxpc3QuaWQgPSBsaXN0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZCB8fCBpZCArICItbGlzdCI7XG5cbiAgICBpZiAoIWdldEF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUk9MRSkgJiYgcm9vdC50YWdOYW1lICE9PSAiU0VDVElPTiIgJiYgcm9sZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHNldEF0dHJpYnV0ZShyb290LCBST0xFLCByb2xlKTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4bi5jYXJvdXNlbCk7XG4gICAgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJwcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudGF0aW9uIik7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kKHNlbGVjdG9yKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBlbG0gPSBxdWVyeShyb290LCBzZWxlY3Rvcik7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbG0gJiYgY2xvc2VzdChlbG0sICIuIiArIENMQVNTX1JPT1QpID09PSByb290ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/IGVsbSA6IHZvaWQgMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENsYXNzZXMoYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2UpIHtcbiAgICByZXR1cm4gW2Jhc2UgKyAiLS0iICsgb3B0aW9ucy50eXBlLCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzZSArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbiwgb3B0aW9ucy5kcmFnICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiYXNlICsgIi0tZHJhZ2dhYmxlIiwgb3B0aW9ucy5pc05hdmlnYXRpb24gJiYgYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgKyAiLS1uYXYiLCBiYXNlID09PSBDTEFTU19ST09UICYmIENMQVNTX0FDVElWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VdO1xuICB9XG5cbiAgcmV0dXJuIGFzc2lnbihlbGVtZW50cywge1xuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cDogc2V0dXAsXG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5XG4gIH0pO1xufVxuXG52YXIgU0xJREUgPSAic2xpZGUiO1xudmFyIExPT1AgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvb3AiO1xudmFyIEZBREUgPSAiZmFkZSI7XG5cbmZ1bmN0aW9uIFNsaWRlJDEoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIsIGluZGV4LCBzbGlkZUluZGV4LCBzbGlkZSkge1xuICB2YXIgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gIHZhciBvbiA9IGV2ZW50Lm9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQgPSBldmVudC5lbWl0LFxuICAgICAgYmluZCA9IGV2ZW50LmJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xuICB2YXIgQ29tcG9uZW50cyA9IFNwbGlkZTIuQ29tcG9uZW50cyxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb290ID0gU3BsaWRlMi5yb290LFxuICAgICAgb3B0aW9ucyA9IFNwbGlkZTIub3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnM7XG4gIHZhciBpc05hdmlnYXRpb24gPSBvcHRpb25zLmlzTmF2aWdhdGlvbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB1cGRhdGVPbk1vdmUgPSBvcHRpb25zLnVwZGF0ZU9uTW92ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpMThuID0gb3B0aW9ucy5pMThuLFxuICAgICAgcGFnaW5hdGlvbiA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnBhZ2luYXRpb24sXG4gICAgICBzbGlkZUZvY3VzID0gb3B0aW9ucy5zbGlkZUZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzLkRpcmVjdGlvbi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eWxlIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbGFiZWwgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTEFCRUwpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGlzQ2xvbmUgPSBzbGlkZUluZGV4ID4gLTE7XG4gIHZhciBjb250YWluZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY2hpbGQoc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gIHZhciBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveWVkO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmICghaXNDbG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmUpIHtcbiAgICAgIHNsaWRlLmlkID0gcm9vdC5pZCArICItc2xpZGUiICsgcGFkKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCArIDEpO1xuICAgICAgc2V0QXR0cmlidXRlKHNsaWRlLCBST0xFLCBwYWdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiA/ICJ0YWJwYW5lbCIgOiAiZ3JvdXAiKTtcbiAgICAgIHNldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuLnNsaWRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTEFCRUwsIGxhYmVsIHx8IGZvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXQoaTE4bi5zbGlkZUxhYmVsLCBbaW5kZXggKyAxLCBTcGxpZGUyLmxlbmd0aF0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuXG4gICAgbGlzdGVuKCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuKCkge1xuICAgIGJpbmQoc2xpZGUsICJjbGljayIsIGFwcGx5KGVtaXQsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9DTElDSywgc2VsZikpO1xuICAgIGJpbmQoc2xpZGUsICJrZXlkb3duIiwgYXBwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KGVtaXQsIEVWRU5UX1NMSURFX0tFWURPV04sIHNlbGYpKTtcbiAgICBvbihbRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX01PVkVELCBFVkVOVF9TSElGVEVELCBFVkVOVF9TQ1JPTExFRF0sIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIG9uKEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgaW5pdE5hdmlnYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKTtcblxuICAgIGlmICh1cGRhdGVPbk1vdmUpIHtcbiAgICAgIG9uKEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19NT1ZFLCBvbk1vdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KCkge1xuICAgIGRlc3Ryb3llZCA9IHRydWU7XG4gICAgZXZlbnQuZGVzdHJveSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZW1vdmVDbGFzcyhzbGlkZSwgU1RBVFVTX0NMQVNTRVMpO1xuICAgIHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVBdHRyaWJ1dGUoc2xpZGUsIEFMTF9BVFRSSUJVVEVTKTtcbiAgICBzZXRBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKHNsaWRlLCAic3R5bGUiLCBzdHlsZXMpO1xuICAgIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUsIEFSSUFfTEFCRUwsIGxhYmVsIHx8ICIiKTtcbiAgfVxuXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpbml0TmF2aWdhdGlvbigpIHtcbiAgICB2YXIgY29udHJvbHMgPSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5zcGxpZGVzLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMiA9IHRhcmdldC5zcGxpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4KTtcbiAgICAgIHJldHVybiBTbGlkZTIgPyBTbGlkZTIuc2xpZGUuaWQgOiAiIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkuam9pbigiICIpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FCRUwsIGZvcm1hdChpMThuLnNsaWRlWCwgKGlzQ2xvbmUgPyBzbGlkZUluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGluZGV4KSArIDEpKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfQ09OJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RST0xTLCBjb250cm9scyk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBST0xFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVGb2N1cyA/ICJidXR0b24iIDogIiIpO1xuICAgIHNsaWRlRm9jdXMgJiYgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW92ZUF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ST0xFREVTQ1JJUFRJT04pO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uTW92ZSgpIHtcbiAgICBpZiAoIWRlc3Ryb3llZCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoKSB7XG4gICAgaWYgKCFkZXN0cm95ZWQpIHtcbiAgICAgIHZhciBjdXJyID0gU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuaW5kZXg7XG4gICAgICB1cGRhdGVBY3Rpdml0eSgpO1xuICAgICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVZpc2liaWxpdHkoKTtcbiAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFViwgaW5kZXggPT09IGN1cnIgLSAxKTtcbiAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgQ0xBU1NfTkVYVCwgaW5kZXggPT09IGN1cnIgKyAxKTtcbiAgICB9XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdHkoKSB7XG4gICAgdmFyIGFjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUgPSBpc0FjdGl2ZSgpO1xuXG4gICAgaWYgKGFjdGl2ZSAhPT0gaGFzQ2xhc3Moc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLCBDTEFTU19BQ1RJVkUpKSB7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FDVElWRSwgYWN0aXZlKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfQ1VSUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAiIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdChhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KCkge1xuICAgIHZhciB2aXNpYmxlID0gaXNWaXNpYmxlKCk7XG4gICAgdmFyIGhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWN0aXZlKCkgfHwgaXNDbG9uZSk7XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFTcGxpZGUyLnN0YXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0hJRERFTiwgaGlkZGVuIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIik7XG4gICAgfVxuXG4gICAgc2V0QXR0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5mb2N1c2FibGVOb2RlcyB8fCAiIiksIFRBQl9JTkRFWCwgaGlkZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA/IC0xIDogIiIpO1xuXG4gICAgaWYgKHNsaWRlRm9jdXMpIHtcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUoc2xpZGUsIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAwKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgaWYgKHZpc2libGUgIT09IGhhc0NsYXNzKHNsaWRlLCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfVklTSUJMRSkpIHtcbiAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19WSVNJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JMRSwgdmlzaWJsZSk7XG4gICAgICBlbWl0KHZpc2libGUgPyBFVkVOVF9WSVNJQkwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSA6IEVWRU5UX0hJRERFTiwgc2VsZik7XG4gICAgfVxuXG4gICAgaWYgKCF2aXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBzbGlkZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBTbGlkZTIgPSBDb21wb25lbnRzLlNsaWRlcy5nZXRBdChTcGxpZGUyLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCk7XG4gICAgICBTbGlkZTIgJiYgZm9jdXMoU2xpZGUyLnNsaWRlKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGUkMShwcm9wLCB2YWx1ZSwgdXNlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRhaW5lcikge1xuICAgIHN0eWxlKHVzZUNvbnRhaW5lciAmJiBjb250YWluZXIgfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IHNsaWRlLCBwcm9wLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUoKSB7XG4gICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZGV4O1xuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY3VyciA9PT0gaW5kZXggfHwgb3B0aW9ucy5jbG9uZVN0YXR1cyAmJiBjdXJyID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gc2xpZGVJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmlzaWJsZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKFNwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIHJldHVybiBpc0FjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhY2tSZWN0ID0gcmVjdChDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5FbGVtZW50cy50cmFjayk7XG4gICAgdmFyIHNsaWRlUmVjdCA9IHJlY3QocycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKTtcbiAgICB2YXIgbGVmdCA9IHJlc29sdmUoImxlZnQiLCB0cnVlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHJpZ2h0ID0gcmVzb2x2ZSgicmlnaHQiLCB0cnVlKTtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zsb29yKHRyYWNrUmVjdFtsZWZ0XSkgPD0gY2VpbChzbGlkZVJlY3RbbGVmdF0pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBmbG9vcihzbGlkZVJlY3RbcmlnaHRdKSA8PSBjZWlsKHRyYWNrUmVjdFtyaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHRdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzV2l0aGluKGZyb20sIGRpc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgIHZhciBkaWZmID0gYWJzKGZyb20gLSBpbmRleCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCFpc0Nsb25lICYmIChvcHRpb25zLnJld2luZCB8fCBTcGxpZGUyLmlzKExPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09QKSkpIHtcbiAgICAgIGRpZmYgPSBtaW4oZGlmZiwgU3BsaWRlMi5sZW5ndGggLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlmZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZmYgPD0gZGlzdGFuY2U7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgdmFyIHNlbGYgPSB7XG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZUluZGV4OiBzbGlkZUluZGV4LFxuICAgIHNsaWRlOiBzbGlkZSxcbiAgICBjb250YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyOiBjb250YWluZXIsXG4gICAgaXNDbG9uZTogaXNDbG9uZSxcbiAgICBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgdXBkYXRlOiB1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxuICAgIHN0eWxlOiBzdHlsZSQxLFxuICAgIGlzV2l0aGluOiBpc1dpdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cbiAgfTtcbiAgcmV0dXJuIHNlbGY7XG59XG5cbmZ1bmN0aW9uIFNsaWRlcyhTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UyID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UyLm9uLFxuICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTIuZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMi5iaW5kO1xuXG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWVudHMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc2xpZGVzID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzLnNsaWRlcyxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzLmxpc3Q7XG4gIHZhciBTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzMiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAgb24oRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRlJFU0gsIGluaXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlLCBpbmRleCkge1xuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2lzdGVyKHNsaWRlLCBpbmRleCwgLTEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGRlc3Ryb3koKSB7XG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBTbGlkZTIuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIGVtcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneShTbGlkZXMyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIFNsaWRlMi51cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4LCBzbGlkZUluZGV4KSB7XG4gICAgdmFyIG9iamVjdCA9IFNsaWRlJDEoU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIsIGluZGV4LCBzbGlkZUluZGV4LCBzbGlkZSk7XG4gICAgb2JqZWN0Lm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpO1xuICAgIFNsaWRlczIucHVzaChvYmplY3QpO1xuICAgIFNsaWRlczIuc29ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKFNsaWRlMSwgU2xpZGUyKSB7XG4gICAgICByZXR1cm4gU2xpZGUxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pbmRleCAtIFNsaWRlMi5pbmRleDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBnZXQoZXhjbHVkZUNsb25lcykge1xuICAgIHJldHVybiBleGNsdWRlQ2xvbmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IGZpbHRlcihmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICByZXR1cm4gIVNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaXNDbG9uZTtcbiAgICB9KSA6IFNsaWRlczI7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ2V0SW4ocGFnZSkge1xuICAgIHZhciBDb250cm9sbGVyID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLkNvbnRyb2xsZXI7XG4gICAgdmFyIGluZGV4ID0gQ29udHJvbGxlci50b0luZGV4KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdlKTtcbiAgICB2YXIgbWF4ID0gQ29udHJvbGxlci5oYXNGb2N1cygpID8gMSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLnBlclBhZ2U7XG4gICAgcmV0dXJuIGZpbHRlcihmdW5jdGlvbiAoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMikge1xuICAgICAgcmV0dXJuIGJldHdlZW4oU2xpZGUyLmluZGV4LCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGluZGV4ICsgbWF4IC0gMSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0QXQoaW5kZXgpIHtcbiAgICByZXR1cm4gZmlsdGVyKGluZGV4KVswXTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiBhZGQoaXRlbXMsIGluZGV4KSB7XG4gICAgZm9yRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2goaXRlbXMsIGZ1bmN0aW9uIChzbGlkZSkge1xuICAgICAgaWYgKGlzU3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZSkpIHtcbiAgICAgICAgc2xpZGUgPSBwYXJzZUh0bWwoc2xpZGUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cblxuICAgICAgaWYgKGlzSFRNTEVsZW1lbnQoc2xpZGUpKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgcmVmID0gc2xpZGVzW2luZGV4XTtcbiAgICAgICAgcmVmID8gYmVmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShzbGlkZSwgcmVmKSA6IGFwcGVuZChsaXN0LCBzbGlkZSk7XG4gICAgICAgIGFkZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyhzbGlkZSwgb3B0aW9ucy5jbGFzc2VzLnNsaWRlKTtcbiAgICAgICAgb2JzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VydmVJbWFnZXMoc2xpZGUsIGFwcGx5KGVtaXQsIEVWRU5UX1JFU0laRSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgICB9KTtcbiAgICBlbWl0KEVWRU5UX1JFRlJFU0gpO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHJlbW92ZSQxKG1hdGNoZXIpIHtcbiAgICByZW1vdmUoZmlsdGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhtYXRjaGVyKS5tYXAoZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgcmV0dXJuIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuc2xpZGU7XG4gICAgfSkpO1xuICAgIGVtaXQoRVZFTlRfUkVGUkVTSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9yRWFjaCQxKGl0ZXJhdGVlLCBleGNsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZUNsb25lcykge1xuICAgIGdldChleGNsdWRlQ2xvbmVzKS5mb3JFYWNoKGl0ZXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmaWx0ZXIobWF0Y2hlcikge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gU2xpZGVzMi5maWx0ZXIoaXNGdW5jdGlvbihtYXRjaGVyKSA/IG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVyIDogZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYXRjaGVyKSA/IG1hdGNoZXMoU2xpZGUyLnNsaWRlLCBtYXRjaGVyKSA6IGluY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWRlcyh0b0FycmF5KG1hdGNoZXIpLCBTbGlkZTIuaW5kZXgpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIHN0eWxlKHByb3AsIHZhbHVlLCB1c2VDb250YWluZXIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIFNsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUocHJvcCwgdmFsdWUsIHVzZUNvbnRhaW5lcik7XG4gICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb2JzZXJ2ZUltYWdlcyhlbG0sIGNhbGxiYWNrKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBpbWFnZXMgPSBxdWVyeUFsbChlbG0sICJpbWciKTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgICAgICBiaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZChpbWcsICJsb2FkIGVycm9yIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoISAtLWxlbmd0aCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMZW5ndGgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4Y2x1ZGVDbG9uZXMpIHtcbiAgICByZXR1cm4gZXhjbHVkZUNsb25lcyA/IHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMubGVuZ3RoIDogU2xpZGVzMi5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNFbm91Z2goKSB7XG4gICAgcmV0dXJuIFNsaWRlczIubGVuZ3RoID4gb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucGVyUGFnZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpc3RlcjogcmVnaXN0ZXIsXG4gICAgZ2V0OiBnZXQsXG4gICAgZ2V0SW46IGdldEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBnZXRBdDogZ2V0QXQsXG4gICAgYWRkOiBhZGQsXG4gICAgcmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogcmVtb3ZlJDEsXG4gICAgZm9yRWFjaDogZm9yRWFjaCQxLFxuICAgIGZpbHRlcjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbHRlcixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgZ2V0TGVuZ3RoOiBnZXRMZW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoLFxuICAgIGlzRW5vdWdoOiBpc0Vub3VnaFxuICB9O1xufVxuXG5mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGF5b3V0KFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlMyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uID0gX0V2ZW50SW50ZXJmYWNlMy5vbixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlMy5iaW5kLFxuICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTMuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gIHZhciBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyJEVsZW1lbnRzMiA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnJvb3QsXG4gICAgICB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2sgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnRyYWNrLFxuICAgICAgbGlzdCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfQ29tcG9uZW50czIkRWxlbWVudHMyLmxpc3Q7XG4gIHZhciBnZXRBdCA9IFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuZ2V0QXQsXG4gICAgICBzdHlsZVNsaWRlcyA9IFNsaWRlcy5zdHlsZTtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB2ZXJ0aWNhbDtcbiAgdmFyIHJvb3RSZWN0O1xuICB2YXIgb3ZlcmZsb3c7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBiaW5kKHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kb3csICJyZXNpemUgbG9hZCIsIFRocm90dGxlKGFwcGx5KGVtaXQsIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19SRVNJWkUpKSk7XG4gICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSwgaW5pdCk7XG4gICAgb24oRVZFTlRfUkVTSVpFLCByZXNpemUpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmVydGljYWwgPSBvcHRpb25zLmRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gPT09IFRUQjtcbiAgICBzdHlsZShyb290LCAibWF4V2lkdGgiLCB1bml0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLndpZHRoKSk7XG4gICAgc3R5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nTGVmdCIpLCBjc3NQYWRkaW5nKGZhbHNlKSk7XG4gICAgc3R5bGUodHJhY2ssIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlKCJwYWRkaW5nUmlnaHQiKSwgY3NzUGFkZGluZyh0cnVlKSk7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc2l6ZSh0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2l6ZShmb3JjZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgbmV3UmVjdCA9IHJlY3Qocm9vdCk7XG5cbiAgICBpZiAoZm9yYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHx8IHJvb3RSZWN0LndpZHRoICE9PSBuZXdSZWN0LndpZHRoIHx8IHJvb3RSZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5oZWlnaHQgIT09IG5ld1JlY3QuaGVpZ2h0KSB7XG4gICAgICBzdHlsZSh0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsICJoZWlnaHQiLCBjc3NUcmFja0hlaWdodCgpKTtcbiAgICAgIHN0eWxlU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhyZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1bml0KG9wdGlvbnMuZ2FwKSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3R5bGVTbGlkZXMoIndpZHRoIiwgY3NzU2xpZGVXaWR0aCgpKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZVNsaWRlcygiaGVpZ2h0IiwgY3NzU2xpZGVIZWlnaHQoKSwgdHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcm9vdFJlY3QgPSBuZXdSZWN0O1xuICAgICAgZW1pdChFVkVOVF9SRVNJWkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCk7XG5cbiAgICAgIGlmIChvdmVyZmxvdyAhPT0gKG92ZXJmbG93ID0gaXNPdmVyZmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3coKSkpIHtcbiAgICAgICAgdG9nZ2xlQ2xhc3Mocm9vdCwgQ0xBU1NfT1ZFUkZMTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLCBvdmVyZmxvdyk7XG4gICAgICAgIGVtaXQoRVZFTlRfT1ZFUkZMT1csIG92ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3NzUGFkZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcocmlnaHQpIHtcbiAgICB2YXIgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZztcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIHByb3AgPSByZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQocGFkZGluZ1twcm9wXSB8fCAoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0KHBhZGRpbmcpID8gMCA6IHBhZGRpbmcpKSB8fCAiMHB4IjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBjc3NUcmFja0hlaWdodCgpIHtcbiAgICB2YXIgaGVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCA9ICIiO1xuXG4gICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICBoZWlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY3NzSGVpZ2h0KCk7XG4gICAgICBhc3NlcnQoaGVpZ2h0LCAiaGVpZ2h0IG9yIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHRSYXRpbyBpcyBtaXNzaW5nLiIpO1xuICAgICAgaGVpZ2h0ID0gImNhbGMoIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyBoZWlnaHQgKyAiIC0gIiArIGNzc1BhZGRpbmcoZmFsc2UpICsgIiAtICIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzUGFkZGluZyh0cnVlKSArICIpIjtcbiAgICB9XG5cbiAgICByZXR1cm4gaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc0hlaWdodCgpIHtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHVuaXQob3B0aW9ucy5oZWlnaHQgfHwgcmVjdChsaXN0KS53aWR0aCAqIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmhlaWdodFJhdGlvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZHRoKCkge1xuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaWR0aCA/IG51bGwgOiB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pdChvcHRpb25zLmZpeGVkV2lkdGgpIHx8ICh2ZXJ0aWNhbCA/ICIiIDogY3NzUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlU2l6ZSgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8fCAodmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpY2FsID8gb3B0aW9ucy5hdXRvSGVpZ2h0ID8gbnVsbCA6IGNzc1NsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA6IGNzc0hlaWdodCgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUoKSB7XG4gICAgdmFyIGdhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiKSI7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0U2l6ZSgpIHtcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHJlY3QobGlzdClbcmVzb2x2ZSgid2lkdGgiKV07XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc2xpZGVTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgdmFyIFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGdldEF0KGluZGV4IHx8IDApO1xuICAgIHJldHVybiBTbGlkZSA/IHJlY3QoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnNsaWRlKVtyZXNvbHZlKCJ3aWR0aCIpXSArICh3aXRob3V0R2FwID8gMCA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRHYXAoKSkgOiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gdG90YWxTaXplKGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCwgd2l0aG91dEdhcCkge1xuICAgIHZhciBTbGlkZSA9IGdldEF0KGluZGV4KTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBpZiAoU2xpZGUpIHtcbiAgICAgIHZhciByaWdodCA9IHJlY3QoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnNsaWRlKVtyZXNvbHZlKCJyaWdodCIpXTtcbiAgICAgIHZhciBsZWZ0ID0gcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QobGlzdClbcmVzb2x2ZSgibGVmdCIpXTtcbiAgICAgIHJldHVybiBhYnMocmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0IC0gbGVmdCkgKyAod2l0aG91dEdhcCA/IDAgOiBnZXRHYXAoKSk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVyU2l6ZSh3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aG91dEdhcCkge1xuICAgIHJldHVybiB0b3RhbFNpemUoU3BsaWRlMi5sZW5ndGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gMSkgLSB0b3RhbFNpemUoMCkgKyBzbGlkZVNpemUoMCwgd2l0aG91dEdhcCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gZ2V0R2FwKCkge1xuICAgIHZhciBTbGlkZSA9IGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdCgwKTtcbiAgICByZXR1cm4gU2xpZGUgJiYgcGFyc2VGbG9hdChzdHlsZShTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuc2xpZGUsIHJlc29sdmUoIm1hcmdpblJpZ2h0IikpKSB8fCAwO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcocmlnaHQpIHtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcnNlRmxvYXQoc3R5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpbmciICsgKHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCA/ICJSaWdodCIgOiAiTGVmdCIpKSkpIHx8IDA7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gaXNPdmVyZmxvdygpIHtcbiAgICByZXR1cm4gU3BsaWRlMi5pcyhGQURFKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwgc2xpZGVyU2l6ZSh0cnVlKSA+IGxpc3RTaXplKCk7XG4gIH1cblxuICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gICAgcmVzaXplOiByZXNpemUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGxpc3RTaXplOiBsaXN0U2l6ZSxcbiAgICBzbGlkZVNpemU6IHNsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgc2xpZGVyU2l6ZTogc2xpZGVyU2l6ZSxcbiAgICB0b3RhbFNpemU6IHRvdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbFNpemUsXG4gICAgZ2V0UGFkZGluZzogZ2V0UGFkZGluZyxcbiAgICBpc092ZXJmbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdzogaXNPdmVyZmxvd1xuICB9O1xufVxuXG52YXIgTVVMVElQTElFUiA9IDI7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBDbG9uZXMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZXZlbnQub247XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyxcbiAgICAgIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbiAgdmFyIHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gIHZhciBjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzID0gW107XG4gIHZhciBjbG9uZUNvdW50O1xuXG4gIGZ1bmN0aW9uIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBvbihFVkVOVF9SRUZSRVNILCByZW1vdW50KTtcbiAgICBvbihbRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX1VQREFURUQsIEVWRU5UX1JFU0laRV0sIG9ic2VydmUpO1xuXG4gICAgaWYgKGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZUNvdW50ID0gY29tcHV0ZUNsb25lQ291bnQoKSkge1xuICAgICAgZ2VuZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNsb25lQ291bnQpO1xuICAgICAgQ29tcG9uZW50czIuTGF5b3V0LnJlc2l6ZSh0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3VudCgpIHtcbiAgICBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSgpO1xuICAgIG1vdW50KCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveSgpIHtcbiAgICByZW1vdmUoY2xvbmVzKTtcbiAgICBlbXB0eShjbG9uZXMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBldmVudC5kZXN0cm95KCk7XG4gIH1cblxuICBmdW5jdGlvbiBvYnNlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSgpIHtcbiAgICB2YXIgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlmIChjbG9uZUNvdW50ICE9PSBjb3VudCkge1xuICAgICAgaWYgKGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50IDwgY291bnQgfHwgIWNvdW50KSB7XG4gICAgICAgIGV2ZW50LmVtaXQoRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFRlJFU0gpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZW5lcmF0ZShjb3VudCkge1xuICAgIHZhciBzbGlkZXMgPSBTbGlkZXMuZ2V0KCkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWNlKCk7XG4gICAgdmFyIGxlbmd0aCA9IHNsaWRlcy5sZW5ndGg7XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGxlbmd0aCkge1xuICAgICAgd2hpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQpIHtcbiAgICAgICAgcHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBwdXNoKHNsaWRlcy5zbGljZSgtY291bnQpLCBzbGlkZXMuc2xpY2UoMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGNvdW50KSkuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUsIGluZGV4KSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgaXNIZWFkID0gaW5kZXggPCBjb3VudDtcbiAgICAgICAgdmFyIGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IGNsb25lRGVlcChTbGlkZS5zbGlkZSwgaW5kZXgpO1xuICAgICAgICBpc0hlYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkID8gYmVmb3JlKGNsb25lLCBzbGlkZXNbMF0uc2xpZGUpIDogYXBwZW5kKEVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5saXN0LCBjbG9uZSk7XG4gICAgICAgIHB1c2goY2xvbmVzLCBjbG9uZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBTbGlkZXMucmVnaXN0ZXIoY2xvbmUsIGluZGV4IC0gY291bnQgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzSGVhZCA/IDAgOiBsZW5ndGgpLCBTbGlkZS5pbmRleCk7XG4gICAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVEZWVwKGVsbSwgaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGNsb25lID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoY2xvbmUsIG9wdGlvbnMuY2xhc3Nlcy5jbG9uZSk7XG4gICAgY2xvbmUuaWQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5yb290LmlkICsgIi1jbG9uZSIgKyBwYWQoaW5kZXggKyAxKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZUNsb25lQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCkge1xuICAgIHZhciBjbG9uZXMyID0gb3B0aW9ucy5jbG9uZXM7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKCFTcGxpZGUyLmlzKExPT1ApKSB7XG4gICAgICBjbG9uZXMyID0gMDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSBlbHNlIGlmIChpc1VuZGVmaW5lZChjbG9uZXMyKSkge1xuICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmaXhlZFNpemUgPSBvcHRpb25zW3Jlc29sdmUoImZpeGVkV2lkdGgiKV0gJiYgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLkxheW91dC5zbGlkZVNpemUoMCk7XG4gICAgICB2YXIgZml4ZWRDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgPSBmaXhlZFNpemUgJiYgY2VpbChyZWN0KEVsZW1lbnRzLnRyYWNrKVtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZSgid2lkdGgiKV0gLyBmaXhlZFNpemUpO1xuICAgICAgY2xvbmVzMiA9IGZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hlZENvdW50IHx8IG9wdGlvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIildICYmIFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUyLmxlbmd0aCB8fCBvcHRpb25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICByZXR1cm4gY2xvbmVzMjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBNb3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgX0V2ZW50SW50ZXJmYWNlNCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNC5vbixcbiAgICAgIGVtaXQgPSBfRXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50SW50ZXJmYWNlNC5lbWl0O1xuXG4gIHZhciBzZXQgPSBTcGxpZGUyLnN0YXRlLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQ7XG4gIHZhciBfQ29tcG9uZW50czIkTGF5b3V0ID0gQ29tcG9uZW50czIuTGF5bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dCxcbiAgICAgIHNsaWRlU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSxcbiAgICAgIGdldFBhZGRpbmcgPSBfQ29tcG9uZW50czIkTGF5b3V0LmdldFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkaW5nLFxuICAgICAgdG90YWxTaXplID0gX0NvbXBvbmVudHMyJExheW91dC50bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YWxTaXplLFxuICAgICAgbGlzdFNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LmxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0U2l6ZSxcbiAgICAgIHNsaWRlclNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXJTaXplO1xuICB2YXIgX0NvbXBvbmVudHMyJERpcmVjdGlvID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLkRpcmVjdGlvbixcbiAgICAgIHJlc29sdmUgPSBfQ29tcG9uZW50czIkRGlyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvLnJlc29sdmUsXG4gICAgICBvcmllbnQgPSBfQ29tcG9uZW50czIkRGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvLm9yaWVudDtcbiAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50czMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRWxlbWVudHMsXG4gICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250czMubGlzdCxcbiAgICAgIHRyYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJhY2s7XG4gIHZhciBUcmFuc2l0aW9uO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50czIuVHJhbnNpdGlvbjtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFU0laRUQsIEVWRU5UX1VQREFURUQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNIXSwgcmVwb3NpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gcmVwb3NpdGlvbigpIHtcbiAgICBpZiAoIUNvbXBvbmVudHMyLkNvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzQnVzeSgpKSB7XG4gICAgICBDb21wb25lbnRzMi5TY3JvbGwuY2FuY2VsKCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAganVtcChTcGxpZGUyLmluZGV4KTtcbiAgICAgIENvbXBvbmVudHMyLlNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZShkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgaW5kZXgsIHByZXYsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGRlc3QgIT09IGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCAmJiBjYW5TaGlmdChkZXN0ID4gcHJldikpIHtcbiAgICAgIGNhbmNlbCgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHRyYW5zbGF0ZShzaGlmdChnZXRQb3NpdGlvbigpLCBkZXN0ID4gcHJldiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlKTtcbiAgICB9XG5cbiAgICBzZXQoTU9WSU5HKTtcbiAgICBlbWl0KEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9NT1ZFLCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgVHJhbnNpdGlvbi5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnQoaW5kZXgsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldChJRExFKTtcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICBjYWxsYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2sgJiYgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1wKGluZGV4KSB7XG4gICAgdHJhbnNsYXRlKHRvUG9zaXRpb24oaW5kZXgsIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUocG9zaXRpb24sIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50TG9vcCkge1xuICAgIGlmICghU3BsaWRlMi5pcyhGQURFKSkge1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkZXN0aW5hdGlvbiA9IHByZXZlbnRMb29wID8gcG9zaXRpb24gOiBsb29wKHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbik7XG4gICAgICBzdHlsZShsaXN0LCAidHJhbnNmb3JtIiwgInRyYW5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUiICsgcmVzb2x2ZSgiWCIpICsgIigiICsgZGVzdGluYXRpb24gKyAicHgpIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgcG9zaXRpb24gIT09IGRlc3RpbmF0aW9uICYmIGVtaXQoRVZFTlRfUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidISUZURUQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb3AocG9zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgaWYgKFNwbGlkZTIuaXMoTE9PUCkpIHtcbiAgICAgIHZhciBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0b0luZGV4KHBvc2l0aW9uKTtcbiAgICAgIHZhciBleGNlZWRlZE1heCA9IGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCA+IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RW5kKCk7XG4gICAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4Y2VlZGVkTWluID0gaW5kZXggPCAwO1xuXG4gICAgICBpZiAoZXhjZWVkZWRNaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IGV4Y2VlZGVkTWF4KSB7XG4gICAgICAgIHBvc2l0aW9uID0gc2hpZnQocG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLCBleGNlZWRlZE1heCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwb3NpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoaWZ0KHBvc2l0aW9uLCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fja3dhcmRzKSB7XG4gICAgdmFyIGV4Y2VzcyA9IHBvc2l0aW9uIC0gZ2V0TGltaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGJhY2t3YXJkcyk7XG4gICAgdmFyIHNpemUgPSBzbGlkZXJTaXplKCk7XG4gICAgcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uIC09IG9yaWVudChzaXplICogKGNlaWwoYWJzKGV4Y2VzcykgLyBzaXplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgfHwgMSkpICogKGJhY2t3YXJkcyA/IDEgOiAtMSk7XG4gICAgcmV0dXJuIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB0cmFuc2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKGdldFBvc2l0aW9uKCksIHRydWUpO1xuICAgIFRyYW5zaXRpb24uY2FuY2VsKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9JbmRleChwb3NpdGlvbikge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzLmdldCgpO1xuICAgIHZhciBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggPSAwO1xuICAgIHZhciBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciAodmFyIGkgPSAwOyBpIDwgU2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHNsaWRlSW5kZXggPSBTbGlkZXNbaV0uaW5kZXg7XG4gICAgICB2YXIgZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbmNlID0gYWJzKHRvUG9zaXRpb24oc2xpZGVJbmRleCwgdHJ1ZSkgLSBwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24pO1xuXG4gICAgICBpZiAoZGlzdGFuY2UgPD0gbWluRGlzdGFuY2UpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIGluZGV4ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHRvUG9zaXRpb24oaW5kZXgsIHRyaW1taW5nKSB7XG4gICAgdmFyIHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9yaWVudCh0b3RhbFNpemUoaW5kZXggLSAxKSAtIG9mZnNldChpbmRleCkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKHBvc2l0aW9uKSA6IHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCkge1xuICAgIHZhciBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VmdCA9IHJlc29sdmUoImxlZnQiKTtcbiAgICByZXR1cm4gcmVjdChsaXN0KVtsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndF0gLSByZWN0KHRyYWNrKVtsZWZ0XSArIG9yaWVudChnZXRQYWRkaW5nKGZhbHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJpbShwb3NpdGlvbikge1xuICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicob3B0aW9ucy50cmltU3BhY2UgJiYgU3BsaWRlMi5pcyhTTElERSkpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwb3NpdGlvbiA9IGNsYW1wKHBvc2l0aW9uLCAwLCBvcmllbnQoc2xpZGVyU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodHJ1ZSkgLSBsaXN0U2l6ZSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9mZnNldChpbmRleCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZm9jdXMgPSBvcHRpb25zLmZvY3VzO1xuICAgIHJldHVybiBmb2N1cyA9PT0gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZW50ZXIiID8gKGxpc3RTaXplKCkgLSBzbGlkZVNpemUoaW5kZXgsIHRydWUpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyAyIDogK2ZvY3VzICogc2xpZGVTaXplKGluZGV4KSB8fCAwO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGdldExpbWl0KG1heCkge1xuICAgIHJldHVybiB0b1Bvc2l0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYXggPyBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEVuZCgpIDogMCwgISFvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy50cmltU3BhY2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuU2hpZnQoYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcykge1xuICAgIHZhciBzaGlmdGVkID0gb3JpZW50KHNoaWZ0KGdldFBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbigpLCBiYWNrd2FyZHMpKTtcbiAgICByZXR1cm4gYmFja3dhcmRzID8gc2hpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0ZWQgPj0gMCA6IHNoaWZ0ZWQgPD0gbGlzdFtyZXNvbHZlKCJzY3JvbGxXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKV0gLSByZWN0KHRyYWNrKVtyZXNvbHZlKCJ3aWR0aCIpXTtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBleGNlZWRlZExpbWl0KG1heCwgcG9zaXRpb24pIHtcbiAgICBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gPSBpc1VuZGVmaW5lZChwb3NpdGlvbikgPyBnZXRQb3NpdGlvbigpIDogcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uO1xuICAgIHZhciBleGNlZWRlZE1pbiA9IG1heCAhPT0gdHJ1ZSAmJiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpZW50KHBvc2l0aW9uKSA8IG9yaWVudChnZXRMaW1pdChmYWxzZSkpO1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZXhjZWVkZWRNYXggPSBtYXggIT09IGZhbHNlICYmIG9yaWVudChwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pID4gb3JpZW50KGdldExpbWl0KHRydWUpKTtcbiAgICByZXR1cm4gZXhjZWVkZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWluIHx8IGV4Y2VlZGVkTWF4O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IG1vdW50LFxuICAgIG1vdmU6IG1vdmUsXG4gICAganVtcDoganVtcCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdHJhbnNsYXRlOiB0cmFuc2xhdGUsXG4gICAgc2hpZnQ6IHNoaWZ0LFxuICAgIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWw6IGNhbmNlbCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgIHRvUG9zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uOiB0b1Bvc2l0aW9uLFxuICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ2V0TGltaXQ6IGdldExpbWl0LFxuICAgIGV4Y2VlZGVkTGltaXQ6IGV4Y2VlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZExpbWl0LFxuICAgIHJlcG9zaXRpb246IHJlcG9zaXRpb25cbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIENvbnRyb2xsZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U1ID0gRXZlbnRJbnRlcmZhY2UoU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U1Lm9uLFxuICAgICAgZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfRXZlbnRJbnRlcmZhY2U1LmVtaXQ7XG5cbiAgdmFyIE1vdmUgPSBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czIuTW92ZTtcbiAgdmFyIGdldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBnZXRMaW1pdCA9IE1vdmUuZ2V0TGltaXQsXG4gICAgICB0b1Bvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IE1vdmUudG9Qb3NpdGlvbjtcbiAgdmFyIF9Db21wb25lbnRzMiRTbGlkZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuU2xpZGVzLFxuICAgICAgaXNFbm91Z2ggPSBfQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyJFNsaWRlcy5pc0Vub3VnaCxcbiAgICAgIGdldExlbmd0aCA9IF9Db21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIkU2xpZGVzLmdldExlbmd0aDtcbiAgdmFyIG9taXRFbmQgPSBvcHRpb25zLm9taXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRW5kO1xuICB2YXIgaXNMb29wID0gU3BsaWRlMi5pcyhMT09QKTtcbiAgdmFyIGlzU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlID0gU3BsaWRlMi5pcyhTTElERSk7XG4gIHZhciBnZXROZXh0ID0gYXBwbHkoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEFkamFjZW50LCBmYWxzZSk7XG4gIHZhciBnZXRQcmV2ID0gYXBwbHkoZ2V0QWRqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZW50LCB0cnVlKTtcbiAgdmFyIGN1cnJJbmRleCA9IG9wdGlvbnMuc3RhcnQgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7XG4gIHZhciBlbmRJbmRleDtcbiAgdmFyIHByZXZJbmRleCA9IGN1cnJJbmRleDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBzbGlkZUNvdW50O1xuICB2YXIgcGVyTW92ZTtcbiAgdmFyIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JTkRFWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQ0hBTkdFRF0sIGluaXQpO1xuICAgIG9uKEVWRU5UX1JFU0laRUQsIG9uUmVzaXplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzbGlkZUNvdW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGdldExlbmd0aCh0cnVlKTtcbiAgICBwZXJNb3ZlID0gb3B0aW9ucy5wZXJNb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgIGVuZEluZGV4ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEVuZCgpO1xuICAgIHZhciBpbmRleCA9IGNsYW1wKGN1cnJJbmRleCwgMCwgb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRFbmQgPyBlbmRJbmRleCA6IHNsaWRlQ291bnQgLSAxKTtcblxuICAgIGlmIChpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggIT09IGN1cnJJbmRleCkge1xuICAgICAgY3VyckluZGV4ID0gaW5kZXg7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgTW92ZS5yZXBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uUmVzaXplZCgpIHtcbiAgICBpZiAoZW5kSW5kZXggIT09IGdldEVuZCgpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgZW1pdChFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCk7XG4gICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIGdvKGNvbnRyb2wsIGFsbG93U2FtZUluZGV4LCBjYWxsYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2spIHtcbiAgICBpZiAoIWlzQnVzeSgpKSB7XG4gICAgICB2YXIgZGVzdCA9IHBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShjb250cm9sKTtcbiAgICAgIHZhciBpbmRleCA9IGxvb3AoZGVzdCk7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoaW5kZXggPiAtMSAmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyE9PSBjdXJySW5kZXgpKSB7XG4gICAgICAgIHNldEluZGV4KGluZGV4KTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIE1vdmUubW92ZShkZXN0LCBpbmRleCwgcHJldkluZGV4LCBjYWxsYmFjayk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24sIGR1cmF0aW9uLCBzbmFwLCBjYWxsYmFjaykge1xuICAgIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMi5TY3JvbGwuc2Nyb2xsKGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uICgpIHtcbiAgICAgIHZhciBpbmRleCA9IGxvb3AoTW92ZS50b0luZGV4KGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRQb3NpdGlvbigpKSk7XG4gICAgICBzZXRJbmRleChvbWl0RW5kID8gbWluKGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCwgZW5kSW5kZXgpIDogaW5kZXgpO1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZShjb250cm9sKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHZhciBpbmRleCA9IGN1cnJJbmRleDtcblxuICAgIGlmIChpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcoY29udHJvbCkpIHtcbiAgICAgIHZhciBfcmVmID0gY29udHJvbC5tYXRjaCgvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhbK1xcLTw+XSkoXFxkKyk/LykgfHwgW10sXG4gICAgICAgICAgaW5kaWNhdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9yZWZbMV0sXG4gICAgICAgICAgbnVtYmVyID0gX3JlZlsyXTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmIChpbmRpY2F0b3IgPT09ICIrIiB8fCBpbmRpY2F0b3IgPT09ICItIikgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgaW5kZXggPSBjb21wdXRlRGVzdEluZGV4KGN1cnJJbmRleCArICsoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiICsgaW5kaWNhdG9yICsgKCtudW1iZXIgfHwgMSkpLCBjdXJySW5kZXgpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPiIpIHtcbiAgICAgICAgaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ID0gbnVtYmVyID8gdG9JbmRleCgrbnVtYmVyKSA6IGdldE5leHQodHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfSBlbHNlIGlmIChpbmRpY2F0b3IgPT09ICI8Iikge1xuICAgICAgICBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggPSBnZXRQcmV2KHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaW5kZXggPSBpc0xvb3AgPyBjb250cm9sIDogY2xhbXAoY29udHJvbCwgMCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZ2V0QWRqYWNlbnQocHJldiwgZGVzdGluYXRpb24pIHtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciA9IHBlck1vdmUgfHwgKGhhc0ZvY3VzKCkgPyAxIDogcGVyUGFnZSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBkZXN0ID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyICogKHByZXYgPyAtMSA6IDEpLCBjdXJySW5kZXgsICEocGVyTW92ZSB8fCBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzRm9jdXMoKSkpO1xuXG4gICAgaWYgKGRlc3QgPT09IC0xICYmIGlzU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBpZiAoIWFwcHJveGltYXRlbHlFcXVhbChnZXRQb3NpdGlvbigpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0TGltaXQoIXByZXYpLCAxKSkge1xuICAgICAgICByZXR1cm4gcHJldiA/IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogZW5kSW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3RpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbiA/IGRlc3QgOiBsb29wKGRlc3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXB1dGVEZXN0SW5kZXgoZGVzdCwgZnJvbSwgc25hcFBhZ2UpIHtcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRW5vdWdoKCkgfHwgaGFzRm9jdXMoKSkge1xuICAgICAgdmFyIGluZGV4ID0gY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXB1dGVNb3ZhYmxlRGVzdEluZGV4KGRlc3QpO1xuXG4gICAgICBpZiAoaW5kZXggIT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBkZXN0KSB7XG4gICAgICAgIGZyb20gPSBkZXN0O1xuICAgICAgICBkZXN0ID0gaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4O1xuICAgICAgICBzbmFwUGFnZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGRlc3QgPCAwIHx8IGRlc3QgPiBlbmRJbmRleCkge1xuICAgICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCFwZXJNb3ZlICYmIChiZXR3ZWVuKDAsIGRlc3QsIGZyb20sIHRydWUpIHx8IGJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R3ZWVuKGVuZEluZGV4LCBmcm9tLCBkZXN0LCB0cnVlKSkpIHtcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA9IHRvSW5kZXgodG9QYWdlKGRlc3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgICAgZGVzdCA9IHNuYXBQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSA/IGRlc3QgPCAwID8gLShzbGlkZUNvdW50ICUgcGVyUGFnZSB8fCBwZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgOiBzbGlkZUNvdW50IDogZGVzdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLnJld2luZCkge1xuICAgICAgICAgICAgZGVzdCA9IGRlc3QgPCAwID8gZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4IDogMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVzdCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAoc25hcFBhZ2UgJiYgZGVzdCAhPT0gZnJvbSkge1xuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0ID0gdG9JbmRleCh0b1BhZ2UoZnJvbSkgKyAoZGVzdCA8IGZyb20gPyAtMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiAxKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGRlc3QgPSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzdDtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBjb21wdXRlTW92YWJsZURlc3RJbmRleChkZXN0KSB7XG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1NsaWRlICYmIG9wdGlvbnMudHJpbVNwYWNlID09PSAibW92ZSIgJiYgZGVzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IGN1cnJJbmRleCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCk7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA9PT0gdG9Qb3NpdGlvbihkZXN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZSkgJiYgYmV0d2VlbihkZXN0LCAwLCBTcGxpZGUyLmxlbmd0aCAtIDEsICEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5yZXdpbmQpKSB7XG4gICAgICAgIGRlc3QgPCBjdXJySW5kZXggPyAtLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0IDogKytkZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb3AoaW5kZXgpIHtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzTG9vcCA/IChpbmRleCArIHNsaWRlQ291bnQpICUgc2xpZGVDb3VudCB8fCAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGluZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RW5kKCkge1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kID0gc2xpZGVDb3VudCAtIChoYXNGb2N1cygpIHx8IGlzTG9vcCAmJiBwZXJNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSA/IDEgOiBwZXJQYWdlKTtcblxuICAgIHdoaWxlIChvbWl0RW5kICYmIGVuZC0tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA+IDApIHtcbiAgICAgIGlmICh0b1Bvc2l0aW9uKHNsaWRlQ291bnQgLSAxLCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgIT09IHRvUG9zaXRpb24oZW5kLCB0cnVlKSkge1xuICAgICAgICBlbmQrKztcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AoZW5kLCAwLCBzbGlkZUNvdW50IC0gMSk7XG4gIH1cblxuICBmdW5jdGlvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29JbmRleChwYWdlKSB7XG4gICAgcmV0dXJuIGNsYW1wKGhhc0ZvY3VzKCkgPyBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA6IHBlclBhZ2UgKiBwYWdlLCAwLCBlbmRJbmRleCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gdG9QYWdlKGluZGV4KSB7XG4gICAgcmV0dXJuIGhhc0ZvY3VzKCkgPyBtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGluZGV4LCBlbmRJbmRleCkgOiBmbG9vcigoaW5kZXggPj0gZW5kSW5kZXggPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVDb3VudCAtIDEgOiBpbmRleCkgLyBwZXJQYWdlKTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB0b0Rlc3QoZGVzdGluYXRpb24pIHtcbiAgICB2YXIgY2xvc2VzdCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlLnRvSW5kZXgoZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBpc1NsaWRlID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYW1wKGNsb3Nlc3QsIDAsIGVuZEluZGV4KSA6IGNsb3Nlc3Q7XG4gIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gc2V0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggIT09IGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJySW5kZXgpIHtcbiAgICAgIHByZXZJbmRleCA9IGN1cnJJbmRleDtcbiAgICAgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJySW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgocHJldikge1xuICAgIHJldHVybiBwcmV2ID8gcHJldkluZGV4IDogY3VyckknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIWlzVW5kZWZpbmVkKG9wdGlvbnMuZm9jdXMpIHx8IG9wdGlvbnMuaXNOYXZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQnVzeSgpIHtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTIuc3RhdGUuaXMoW01PVklORywgU0NST0xMSU5HXSkgJiYgISFvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy53YWl0Rm9yVHJhbnNpdGlvbjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50OiBtb3VudCxcbiAgICBnbzogZ28sXG4gICAgc2Nyb2xsOiBzY3JvbGwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGdldE5leHQ6IGdldE5leHQsXG4gICAgZ2V0UHJldjogZ2V0UHJldiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZ2V0QWRqYWNlbnQ6IGdldEFkamFjZW50LFxuICAgIGdldEVuZDogZ2V0RW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCxcbiAgICBzZXRJbmRleDogc2V0SW5kZXgsXG4gICAgZ2V0SW5kZXg6IGdldEluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgIHRvUGFnZTogdG9QYWdlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0b0Rlc3Q6IHRvRGVzdCxcbiAgICBoYXNGb2N1czogaGFzRm9jdXMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlzQnVzeTogaXNCdXN5XG4gIH07XG59XG5cbnZhciBYTUxfTkFNRV9TUEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO1xudmFyIFBBVEggPSAibScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxNS41IDAuOTMyLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTQuNi0xNC42IDQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IjtcbnZhciBTSVpFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IDQwO1xuXG5mdW5jdGlvbiBBcnJvd3MoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKSB7XG4gIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIG9uID0gZXZlbnQub24sXG4gICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbWl0ID0gZXZlbnQuZW1pdDtcbiAgdmFyIGNsYXNzZXMgPSBvcHRpb25zLmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzLFxuICAgICAgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgdmFyIEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMi5Db250cm9sbGVyO1xuICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuYXJyb3dzLFxuICAgICAgdHJhY2sgPSBFbGVtZW50cy50cmFjaztcbiAgdmFyIHdyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVyID0gcGxhY2Vob2xkZXI7XG4gIHZhciBwcmV2ID0gRWxlbWVudHMucHJldjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBuZXh0ID0gRWxlbWVudHMubmV4dDtcbiAgdmFyIGNyZWF0ZWQ7XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd3JhcHBlckNsYXNzZXM7XG4gIHZhciBhcnJvd3MgPSB7fTtcblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbW91bnQoKSB7XG4gICAgaW5pdCgpO1xuICAgIG9uKEVWRU5UX1VQREFURUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3koKTtcbiAgICBtb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmFycm93cztcblxuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoZW5hYmxlZCAmJiAhKHByZXYgJiYgbmV4dCkpIHtcbiAgICAgIGNyZWF0ZUFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd3MoKTtcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzaWduKGFycm93cywge1xuICAgICAgICBwcmV2OiBwcmV2LFxuICAgICAgICBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbmV4dFxuICAgICAgfSk7XG4gICAgICBkaXNwbGF5KHdyYXBwZXIsIGVuYWJsZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gIiIgOiAibm9uZSIpO1xuICAgICAgYWRkQ2xhc3Mod3JhcHBlciwgd3JhcHBlckMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc2VzID0gQ0xBU1NfQVJST1dTICsgIi0tIiArIG9wdGlvbnMuZGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIGxpc3RlbigpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShbcHJldiwgbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RdLCBBUklBX0NPTlRST0xTLCB0cmFjay5pZCk7XG4gICAgICAgIGVtaXQoRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0FSUk9XU19NT1VOVEVELCBwcmV2LCBuZXh0KTtcbiAgICAgIH1cbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBldmVudC5kZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpO1xuICAgIHJlbW92ZUNsYXNzKHdyYXBwZXIsIHdyYXBwZXJDbGFzc2VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgcmVtb3ZlKHBsYWNlaG9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciA/IFtwcmV2LCBuZXh0XSA6IHdyYXBwZXIpO1xuICAgICAgcHJldiA9IG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKFtwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndiwgbmV4dF0sIEFMTF9BVFRSSUJVVEVTKTtcbiAgICB9XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbGlzdGVuKCkge1xuICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9FTkRfSU5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VYX0NIQU5HRURdLCB1cGRhdGUpO1xuICAgIGJpbmQobmV4dCwgImNsaWNrIiwgYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGx5KGdvLCAiPiIpKTtcbiAgICBiaW5kKHByZXYsICJjbGljayIsIGFwcGx5KGdvLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIjwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRyb2xsZXIuZ28oY29udHJvbCwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JlYXRlQXJyb3dzKCkge1xuICAgIHdyYXBwZXIgPSBwbGFjZWhvbGRlciB8fCBjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlKCJkaXYiLCBjbGFzc2VzLmFycm93cyk7XG4gICAgcHJldiA9IGNyZWF0ZUFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvdyh0cnVlKTtcbiAgICBuZXh0ID0gY3JlYXRlQXJyb3coZmFsc2UpO1xuICAgIGNyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhdGVkID0gdHJ1ZTtcbiAgICBhcHBlbmQod3JhcHBlciwgW3ByZXYsIG5leHRdKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgIXBsYWNlaG9sZGVyICYmIGJlZm9yZSh3cmFwcGVyLCB0cmFjayk7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyb3cocHJldjIpIHtcbiAgICB2YXIgYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm93ID0gIjxidXR0b24gY2xhc3M9XFwiIiArIGNsYXNzZXMuYXJyb3cgKyAiICIgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKHByZXYyID8gY2xhc3Nlcy5wcmV2IDogY2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U9XFwiYnV0dG9uXFwiPjxzdmcgeG1sbnM9XFwiIiArIFhNTF9OQU1FX1NQQUNFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArICJcXCIgdmlld0JveD1cXCIwIDAgIiArIFNJWkUgKyAiICIgKyBTSVpFICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJcXCIgd2lkdGg9XFwiIiArIFNJWkUgKyAiXFwiIGhlaWdodD1cXCIiICsgU0laJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UgKyAiXFwiIGZvY3VzYWJsZT1cXCJmYWxzZVxcIj48cGF0aCBkPVxcIiIgKyAobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuYXJyb3dQYXRoIHx8IFBBVEgpICsgIlxcIiAvPiI7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJzZUh0bWwoYXJyb3cpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICB2YXIgaW5kZXggPSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5pbmRleDtcbiAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2KCk7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gQ29udHJvbGxlci5nZXROZXh0KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgdmFyIHByZXZMYWJlbCA9IHByZXZJbmRleCA+IC0xICYmIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8IHByZXZJbmRleCA/IGkxOG4ubGFzdCA6IGkxOG4ucHJldjtcbiAgICAgIHZhciBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dExhYmVsID0gbmV4dEluZGV4ID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaTE4bi5maXJzdCA6IGkxOG4ubmV4dDtcbiAgICAgIHByZXYuZGlzYWJsZWQgPSBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldkluZGV4IDwgMDtcbiAgICAgIG5leHQuZGlzYWJsZWQgPSBuZXh0SW5kZXggPCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMDtcbiAgICAgIHNldEF0dHJpYnV0ZShwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKTtcbiAgICAgIHNldEF0dHJpYnV0ZShuZXh0LCBBUklBX0xBQkVMLCBuZXh0TGFiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKTtcbiAgICAgIGVtaXQoRVZFTlRfQVJST1dTX1VQREFURUQsIHByZXYsIG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgYXJyb3dzOiBhcnJvd3MsXG4gICAgbW91bnQ6IG1vdW50LFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gIH07XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG52YXIgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUgPSBEQVRBX0FUVFJJQlVURSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiLWludGVydmFsIjtcblxuZnVuY3Rpb24gQXV0b3BsYXkoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U2ID0gRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U2LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2U2LmJpbmQsXG4gICAgICBlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdCA9IF9FdmVudEludGVyZmFjZTYuZW1pdDtcblxuICB2YXIgaW50ZXJ2YWwgPSBSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVzdEludGVydmFsKG9wdGlvbnMuaW50ZXJ2YWwsIFNwbGlkZTIuZ28uYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMiwgIj4iKSwgb25BbmltYXRpb25GcmFtZSk7XG4gIHZhciBpc1BhdXNlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBpbnRlcnZhbC5pc1BhdXNlZDtcbiAgdmFyIEVsZW1lbnRzID0gQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLkVsZW1lbnRzLFxuICAgICAgX0NvbXBvbmVudHMyJEVsZW1lbnRzNCA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMi5FbGVtZW50cyxcbiAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzNC5yb290LFxuICAgICAgdG9nZ2xlID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzQudG9nZ2xlO1xuICB2YXIgYXV0b3BsYXkgPSBvcHRpb25zLmF1dG9wbGF5O1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGhvdmVyZWQ7XG4gIHZhciBmb2N1c2VkO1xuICB2YXIgc3RvcHBlZCA9IGF1dG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheSA9PT0gInBhdXNlIjtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGF1dG9wbGF5KSB7XG4gICAgICBsaXN0ZW4oKTtcbiAgICAgIHRvZ2dsZSAmJiBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKHRvZ2dsZSwgQVJJQV9DT05UUk9MUywgRWxlbWVudHMudHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrLmlkKTtcbiAgICAgIHN0b3BwZWQgfHwgcGxheSgpO1xuICAgICAgdXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG9wdGlvbnMucGF1c2VPbkhvdmVyKSB7XG4gICAgICBiaW5kKHJvb3QsICJtb3VzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRlciBtb3VzZWxlYXZlIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaG92ZXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgPSBlLnR5cGUgPT09ICJtb3VzZWVudGVyIjtcbiAgICAgICAgYXV0b1RvZ2dsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBhdXNlT25GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMpIHtcbiAgICAgIGJpbmQocm9vdCwgImZvY3VzaW4gZm9jdXNvdXQiLCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gKGUpIHtcbiAgICAgICAgZm9jdXNlZCA9IGUudHlwZSA9PT0gImZvY3VzaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIjtcbiAgICAgICAgYXV0b1RvZ2dsZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmICh0b2dnbGUpIHtcbiAgICAgIGJpbmQodG9nZ2xlLCAiY2xpY2siLCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gKCkge1xuICAgICAgICBzdG9wcGVkID8gcGxheSgpIDogcGF1c2UodHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb24oW0VWRU5UX01PVkUsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9TQ1JPTEwsIEVWRU5UX1JFRlJFU0hdLCBpbnRlcnZhbC5yZXdpbmQpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbihFVkVOVF9NT1ZFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgaWYgKGlzUGF1c2VkKCkgJiYgQ29tcG9uZW50czIuU2xpZGVzLmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Vub3VnaCgpKSB7XG4gICAgICBpbnRlcnZhbC5zdGFydCghb3B0aW9ucy5yZXNldFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9ncmVzcyk7XG4gICAgICBmb2N1c2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsc2U7XG4gICAgICB1cGRhdGUoKTtcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdXNlKHN0b3ApIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKHN0b3AgPT09IHZvaWQgMCkge1xuICAgICAgc3RvcCA9IHRydWU7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHN0b3BwZWQgPSAhIXN0b3A7XG4gICAgdXBkYXRlKCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCFpc1BhdXNlZCgpKSB7XG4gICAgICBpbnRlcnZhbC5wYXVzZSgpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQoRVZFTlRfQVVUT1BMQVlfUEFVU0UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBhdXRvVG9nZ2xlKCkge1xuICAgIGlmICghc3RvcHBlZCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hvdmVyZWQgfHwgZm9jdXNlZCA/IHBhdXNlKGZhbHNlKSA6IHBsYXkoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmICh0b2dnbGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB0b2dnbGVDbGFzcyh0b2dnbGUsIENMQVNTX0FDVElWRSwgIXN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGVkKTtcbiAgICAgIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfTEFCRUwsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmkxOG5bc3RvcHBlZCA/ICJwbGF5IiA6ICJwYXVzZSJdKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZShyYXRlKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBiYXIgPSBFbGVtZW50cy5iYXI7XG4gICAgYmFyICYmIHN0eWxlKGJhciwgIndpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCIsIHJhdGUgKiAxMDAgKyAiJSIpO1xuICAgIGVtaXQoRVZFTlRfQVVUT1BMQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BMQVlJTkcsIHJhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3ZlKGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCkge1xuICAgIHZhciBTbGlkZSA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXRBdChpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXgpO1xuICAgIGludGVydmFsLnNldChTbGlkZSAmJiArZ2V0QXR0cmlidXRlKFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSwgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUpIHx8IG9wdGlvbnMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkZXN0cm95OiBpbnRlcnZhbC5jYW5jZWwsXG4gICAgcGxheTogcGxheSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGF1c2U6IHBhdXNlLFxuICAgIGlzUGF1c2VkOiBpc1BhdXNlZFxuICB9O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZnVuY3Rpb24gQ292ZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U3ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U3Lm9uO1xuXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBtb3VudCgpIHtcbiAgICBpZiAob3B0aW9ucy5jb3Zlcikge1xuICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX0xBWllMT0FEX0xPQURFRCwgYXBwbHkodG9nZ2xlLCB0cnVlKSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVNIXSwgYXBwbHkoY292ZXIsIHRydWUpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY292ZXIoY292ZXIyKSB7XG4gICAgQ29tcG9uZW50czIuU2xpZGVzLmZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKGZ1bmN0aW9uIChTbGlkZSkge1xuICAgICAgdmFyIGltZyA9IGNoaWxkKFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5jb250YWluZXIgfHwgU2xpZGUuc2xpZGUsICJpbWciKTtcblxuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcgJiYgaW1nLnNyYykge1xuICAgICAgICB0b2dnbGUoY292ZXIyLCBpbWcsIFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNvdmVyMiwgaW1nLCBTbGlkZSkge1xuICAgIFNsaWRlLnN0eWxlKCJiYWNrZ3JvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCIsIGNvdmVyMiA/ICJjZW50ZXIvY292ZXIgbm8tcmVwZWF0IHVybChcXCIiICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZy5zcmMgKyAiXFwiKSIgOiAiIiwgdHJ1ZSk7XG4gICAgZGlzcGxheShpbWcsIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlcjIgPyAibm9uZSIgOiAiIik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDogbW91bnQsXG4gICAgZGVzdHJveTogYXBwbHkoY292ZXIsIGZhbHNlKVxuICB9OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxudmFyIEJPVU5DRV9ESUZGX1RIUkVTSE9MRCA9IDEwO1xudmFyIEJPVU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0VfRFVSQVRJT04gPSA2MDA7XG52YXIgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBCQVNFX1ZFTE9DSVRZID0gMS41O1xudmFyIE1JTl9EVVJBVElPTiA9IDgwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XG5cbmZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTggPSBFdmVudEludGVyZmFjZShTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTgub24sXG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICB2YXIgc2V0ID0gU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUuc2V0O1xuICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmU7XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZ2V0TGltaXQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTW92ZS5nZXRMaW1pdCxcbiAgICAgIGV4Y2VlZGVkTGltaXQgPSBNb3ZlLmV4Y2VlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZExpbWl0LFxuICAgICAgdHJhbnNsYXRlID0gTW92ZS50cmFuc2xhdGU7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaXNTbGlkZSA9IFNwbGlkZTIuaXMoU0xJREUpO1xuICB2YXIgaW50ZXJ2YWw7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgY2FsbGJhY2s7XG4gIHZhciBmcmljdGlvbiA9IDE7XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG1vdW50KCkge1xuICAgIG9uKEVWRU5UX01PVkUsIGNsZWFyKTtcbiAgICBvbihbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBjYW5jZWwpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvblNjcm9sbGVkLCBub0NvbnN0cmFpbikge1xuICAgIHZhciBmcm9tID0gZ2V0UG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKCk7XG4gICAgY2xlYXIoKTtcblxuICAgIGlmIChzbmFwICYmICghaXNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgfHwgIWV4Y2VlZGVkTGltaXQoKSkpIHtcbiAgICAgIHZhciBzaXplID0gQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkxheW91dC5zbGlkZXJTaXplKCk7XG4gICAgICB2YXIgb2Zmc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IHNpZ24oZGVzdGluYXRpb24pICogc2l6ZSAqIGZsb29yKGFicyhkZXN0aW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24pIC8gc2l6ZSkgfHwgMDtcbiAgICAgIGRlc3RpbmF0aW9uID0gTW92ZS50b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihDb21wb25lbnRzMi5Db250cm9sbGVyLnRvRGVzdChkZXN0aW5hdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJSBzaXplKSkgKyBvZmZzZXQ7XG4gICAgfVxuXG4gICAgdmFyIG5vRGlzdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYXBwcm94aW1hdGVseUVxdWFsKGZyb20sIGRlc3RpbmF0aW9uLCAxKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJpY3Rpb24gPSAxO1xuICAgIGR1cmF0aW9uID0gbm9EaXN0YW5jZSA/IDAgOiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyYXRpb24gfHwgbWF4KGFicyhkZXN0aW5hdGlvbiAtIGZyb20pIC8gQkFTRV9WRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT0NJVFksIE1JTl9EVVJBVElPTik7XG4gICAgY2FsbGJhY2sgPSBvblNjcm9sbGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiwgb25FbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseSh1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxKTtcbiAgICBzZXQoU0NST0xMSU5HKTtcbiAgICBlbWl0KEVWRU5UX1NDUk9MTCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGludGVydmFsLnN0YXJ0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgc2V0KElETEUpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIGVtaXQoRVZFTlRfU0NST0xMRUQpO1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHVwZGF0ZShmcm9tLCB0bywgbm9Db25zdHJhaW4sIHJhdGUpIHtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcbiAgICB2YXIgdGFyZ2V0ID0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyAodG8gLSBmcm9tKSAqIGVhc2luZyhyYXRlKTtcbiAgICB2YXIgZGlmZiA9ICh0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0IC0gcG9zaXRpb24pICogZnJpY3Rpb247XG4gICAgdHJhbnNsYXRlKHBvc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiArIGRpZmYpO1xuXG4gICAgaWYgKGlzU2xpZGUgJiYgIW5vQ29uc3RyYWluICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleGNlZWRlZExpbWl0KCkpIHtcbiAgICAgIGZyaWN0aW9uICo9IEZSSUNUSU9OX0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNUT1I7XG5cbiAgICAgIGlmIChhYnMoZGlmZikgPCBCT1VOQ0VfRElGRl9USFJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0xEKSB7XG4gICAgICAgIHNjcm9sbChnZXRMaW1pdChleGNlZWRlZExpbWl0KHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSksIEJPVU5DRV9EVVJBVElPTiwgZmFsc2UsIGNhbGxiYWNrLCB0cnVlKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChpbnRlcnZhbCkge1xuICAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAoaW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICYmICFpbnRlcnZhbC5pc1BhdXNlZCgpKSB7XG4gICAgICBjbGVhcigpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWFzaW5nKHQpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGVhc2luZ0Z1bmMgPSBvcHRpb25zLmVhc2luZ0Z1bmM7XG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBlYXNpbmdGdW5jID8gZWFzaW5nRnVuYyh0KSA6IDEgLSBNYXRoLnBvdygxICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIHQsIDQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3Ryb3k6IGNsZWFyLFxuICAgIHNjcm9sbDogc2Nyb2xsLFxuICAgIGNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w6IGNhbmNlbFxuICB9O1xufVxuXG52YXIgU0NST0xMX0xJU1RFTkVSX09QVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTID0ge1xuICBwYXNzaXZlOiBmYWxzZSxcbiAgY2FwdHVyZTogdHJ1ZVxufTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIERyYWcoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBfRXZlbnRJbnRlcmZhY2U5ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U5Lm9uLFxuICAgICAgZW1pdCA9IF9FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTkuYmluZCxcbiAgICAgIHVuYmluZCA9IF9FdmVudEludGVyZmFjZTkudW5iaW5kOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuICB2YXIgTW92ZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgU2Nyb2xsID0gQ29tcG9uZW50czIuU2NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sbCxcbiAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMudHJhY2ssXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVkdWNlID0gQ29tcG9uZW50czIuTWVkaWEucmVkdWNlO1xuICB2YXIgX0NvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiREaXJlY3RpbzIgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24sXG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZSA9IF9Db21wb25lbnRzMiREaXJlY3RpbzIucmVzb2x2ZSxcbiAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmllbnQgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8yLm9yaWVudDtcbiAgdmFyIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4gICAgICBleGNlZWRlZExpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IE1vdmUuZXhjZWVkZWRMaW1pdDtcbiAgdmFyIGJhc2VQb3NpdGlvbjtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBiYXNlRXZlbnQ7XG4gIHZhciBwcmV2QmFzZUV2ZW50O1xuICB2YXIgaXNGcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIGRyYWdnaW5nO1xuICB2YXIgZXhjZWVkZWQgPSBmYWxzZTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBjbGlja1ByZXZlbnRlZDtcbiAgdmFyIGRpc2FibGVkO1xuICB2YXIgdGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBiaW5kKHRyYWNrLCBQT0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFUl9NT1ZFX0VWRU5UUywgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX1VQX0VWRU5UUywgbm9vcCwgU0NST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX0RPVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOX0VWRU5UUywgb25Qb2ludGVyRG93biwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBiaW5kKHRyYWNrLCAiY2xpY2siLCBvbkNsaWNrLCB7XG4gICAgICBjYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVyZTogdHJ1ZVxuICAgIH0pO1xuICAgIGJpbmQodHJhY2ssICJkcmFnc3RhcnQiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldmVudCk7XG4gICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURURdLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5pdCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBkcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyA9IG9wdGlvbnMuZHJhZztcbiAgICBkaXNhYmxlKCFkcmFnKTtcbiAgICBpc0ZyZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZHJhZyA9PT0gImZyZWUiO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckRvd24oZSkge1xuICAgIGNsaWNrUHJldmVudGVkID0gZmFsc2U7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCFkaXNhYmxlZCkge1xuICAgICAgdmFyIGlzVG91Y2ggPSBpc1RvdWNoRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuXG4gICAgICBpZiAoaXNEcmFnZ2FibGUoZS50YXJnZXQpICYmIChpc1RvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaCB8fCAhZS5idXR0b24pKSB7XG4gICAgICAgIGlmICghQ29udHJvbGxlci5pc0J1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N5KCkpIHtcbiAgICAgICAgICB0YXJnZXQgPSBpc1RvdWNoID8gdHJhY2sgOiB3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG93O1xuICAgICAgICAgIGRyYWdnaW5nID0gc3RhdGUuaXMoW01PVklORywgU0NSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMTElOR10pO1xuICAgICAgICAgIHByZXZCYXNlRXZlbnQgPSBudWxsO1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9NT1ZFX0VWRU5UUywgb25Qb2ludGVyTW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgICAgICBiaW5kKHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQsIFBPSU5URVJfVVBfRVZFTlRTLCBvblBvaW50ZXJVcCwgU0NST0xMX0xJU1QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5FUl9PUFRJT05TKTtcbiAgICAgICAgICBNb3ZlLmNhbmNlbCgpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBTY3JvbGwuY2FuY2VsKCk7XG4gICAgICAgICAgc2F2ZShlKTtcbiAgICAgICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxzZSB7XG4gICAgICAgICAgcHJldmVudChlLCB0cnVlKTtcbiAgICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblBvaW50ZXJNb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSB7XG4gICAgaWYgKCFzdGF0ZS5pcyhEUkFHR0lORykpIHtcbiAgICAgIHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zZXQoRFJBR0dJTkcpO1xuICAgICAgZW1pdChFVkVOVF9EUkFHKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgaWYgKGUuY2FuY2VsYWJsZSkge1xuICAgICAgaWYgKGRyYWdnaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZykge1xuICAgICAgICBNb3ZlLnRyYW5zbGF0ZShiYXNlUG9zaXRpb24gKyBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWluKGRpZmZDb29yZChlKSkpO1xuICAgICAgICB2YXIgZXhwaXJlZCA9IGRpZmZUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZShlKSA+IExPR19JTlRFUlZBTDtcbiAgICAgICAgdmFyIGhhc0V4Y2VlZGVkID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2VlZGVkICE9PSAoZXhjZWVkZWQgPSBleGNlZWRlZExpbWl0KCkpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoZXhwaXJlZCB8fCBoYXNFeGNlZWRlZCkge1xuICAgICAgICAgIHNhdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xpY2tQcmV2ZW50ZWQgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbiAgICAgICAgZW1pdChFVkVOVF9EUkFHR0lORyk7XG4gICAgICAgIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuICAgICAgfSBlbHNlIGlmIChpc1NsaWRlckRpcmVjdGlvbihlKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgZHJhZ2dpbmcgPSBzaG91bGRTdGFydChlKTtcbiAgICAgICAgcHJldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclVwKGUpIHtcbiAgICBpZiAoc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUuc2V0KElETEUpO1xuICAgICAgZW1pdChFVkVOVF9EUkFHR0VEKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICBtb3ZlKGUpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXZlbnQoZSk7XG4gICAgfVxuXG4gICAgdW5iaW5kKHRhcmdldCwgUE9JTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUpO1xuICAgIHVuYmluZCh0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXApO1xuICAgIGRyYWdnaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmICghZGlzYWJsZWQgJiYgY2xpY2tQcmV2ZW50ZWQpIHtcbiAgICAgIHByZXZlbnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmUoZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwcmV2QmFzZUV2ZW50ID0gYmFzZUV2ZW50O1xuICAgIGJhc2VFdmVudCA9IGU7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJhc2VQb3NpdGlvbiA9IGdldFBvc2l0aW9uKCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbW92ZShlKSB7XG4gICAgdmFyIHZlbG9jaXR5ID0gY29tcHV0ZVZlbG9jaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eShlKTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBjb21wdXRlRGVzdGluYXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbG9jaXR5KTtcbiAgICB2YXIgcmV3aW5kID0gb3B0aW9ucy5yZXdpbmQgJiYgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMucmV3aW5kQnlEcmFnO1xuICAgIHJlZHVjZShmYWxzZSk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGlzRnJlZSkge1xuICAgICAgQ29udHJvbGxlci5zY3JvbGwoZGVzdGluYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCAwLCBvcHRpb25zLnNuYXApO1xuICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcyhGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FERSkpIHtcbiAgICAgIENvbnRyb2xsZXIuZ28ob3JpZW50KHNpZ24odmVsb2NpdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkgPCAwID8gcmV3aW5kID8gIjwiIDogIi0iIDogcmV3aW5kID8gIj4iIDogIisiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiBleGNlZWRlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcmV3aW5kKSB7XG4gICAgICBDb250cm9sbGVyLmdvKGV4Y2VlZGVkTGltaXQodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydWUpID8gIj4iIDogIjwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29udHJvbGxlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ28oQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXRpb24pLCB0cnVlKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmVkdWNlKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0KGUpIHtcbiAgICB2YXIgdGhyZXNob2xkcyA9IG9wdGlvbnMuZHJhZ01pblRocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc2hvbGQ7XG4gICAgdmFyIGlzT2JqID0gaXNPYmplY3QodGhyZXNob2xkcyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBtb3VzZSA9IGlzT2JqICYmIHRocmVzaG9sZHMubW91c2UgfHwgMDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIHRvdWNoID0gKGlzT2JqID8gdGhyZXNob2xkcy50b3VjaCA6ICt0aHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidob2xkcykgfHwgMTA7XG4gICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gKGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RvdWNoRXZlbnQoZSkgPyB0b3VjaCA6IG1vdXNlKTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBpc1NsaWRlckRpcmVjdGlvbihlKSB7XG4gICAgcmV0dXJuIGFicyhkaWZmQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JkKGUpKSA+IGFicyhkaWZmQ29vcmQoZSwgdHJ1ZSkpO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGNvbXB1dGVWZWxvY2l0eShlKSB7XG4gICAgaWYgKFNwbGlkZTIuaXMoTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPT1ApIHx8ICFleGNlZWRlZCkge1xuICAgICAgdmFyIHRpbWUgPSBkaWZmVGltZShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICAgIGlmICh0aW1lICYmIHRpbWUgPCBMT0dfSU5URVJWQUwpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJldHVybiBkaWZmQ29vcmQoZSkgLyB0aW1lO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlRGVzdGluYXRpb24odmVsb2NpdHkpIHtcbiAgICByZXR1cm4gZ2V0UG9zaXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgKyBzaWduKHZlbG9jaXR5KSAqIG1pbihhYnModmVsb2NpdHkpICogKG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmZsaWNrUG93ZXIgfHwgNjAwKSwgaXNGcmVlID8gSW5maW5pdHkgOiBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuTGF5b3V0Lmxpc3RTaXplKCkgKiAob3B0aW9ucy5mbGlja01heFBhZ2VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCAxKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkaWZmQ29vcmQoZSwgb3J0aG9nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwpIHtcbiAgICByZXR1cm4gY29vcmRPZihlLCBvcnRob2dvbmFsKSAtIGNvb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZE9mKGdldEJhc2VFdmVudChlKSwgb3J0aG9nb25hbCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgIHJldHVybiB0aW1lT2YoZSkgLSB0aW1lTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKGdldEJhc2VFdmVudChlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCYXNlRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50KGUpIHtcbiAgICByZXR1cm4gYmFzZUV2ZW50ID09PSBlICYmIHByZXZCYXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50IHx8IGJhc2VFdmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3JkT2YoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIG9ydGhvZ29uYWwpIHtcbiAgICByZXR1cm4gKGlzVG91Y2hFdmVudChlKSA/IGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNoYW5nZWRUb3VjaGVzWzBdIDogZSlbInBhZ2UiICsgcmVzb2x2ZShvcnRob2dvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hbCA/ICJZIiA6ICJYIildO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3RyYWluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhkaWZmKSB7XG4gICAgcmV0dXJuIGRpZmYgLyAoZXhjZWVkZWQgJiYgU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoU0xJREUpID8gRlJJQ1RJT04gOiAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc0RyYWdnYWJsZSh0YXJnZXQyKSB7XG4gICAgdmFyIG5vRHJhZyA9IG9wdGlvbnMubicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvRHJhZztcbiAgICByZXR1cm4gIW1hdGNoZXModGFyZ2V0MiwgIi4iICsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BBR0lOQVRJT05fUEFHRSArICIsIC4iICsgQ0xBU1NfQVJST1cpICYmICghbm9EcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZyB8fCAhbWF0Y2hlcyh0YXJnZXQyLCBub0RyYWcpKTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBpc1RvdWNoRXZlbnQoZSkge1xuICAgIHJldHVybiB0eXBlb2YgVG91Y2hFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnQgIT09ICJ1bmRlZmluZWQiICYmIGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnZ2luZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUodmFsdWUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBtb3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgIGlzRHJhZ2dpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0RyYWdnaW5nXG4gIH07XG59XG5cbnZhciBOT1JNQUxJWkFUSU9OX01BUCA9IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIFNwYWNlYmFyOiAiICIsXG4gIFJpZ2h0OiBBUlJPV19SSUdIVCxcbiAgTGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnQ6IEFSUk9XX0xFRlQsXG4gIFVwOiBBUlJPV19VUCxcbiAgRG93bjogQVJST1dfRE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV05cbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAga2V5ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkua2V5O1xuICByZXR1cm4gTk9STUFMSVonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRJT05fTUFQW2tleV0gfHwga2V5O1xufVxuXG52YXIgS0VZQk9BUkRfRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gImtleWRvd24iO1xuXG5mdW5jdGlvbiBLZXlib2FyZChTcGxpZGUyLCBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEwID0gRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAub24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAuYmluZCxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bmJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMC51bmJpbmQ7XG5cbiAgdmFyIHJvb3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gU3BsaWRlMi5yb290O1xuICB2YXIgcmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHRhcmdldDtcbiAgdmFyIGRpc2FibGVkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICAgb24oRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1VQREFURUQsIGRlc3Ryb3kpO1xuICAgIG9uKEVWRU5UX1VQREFURUQsIGluaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KTtcbiAgICBvbihFVkVOVF9NT1ZFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGluaXQoKSB7XG4gICAgdmFyIGtleWJvYXJkID0gb3B0aW9ucy5rZXlib2FyZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICBpZiAoa2V5Ym9hcmQpIHtcbiAgICAgIHRhcmdldCA9IGtleWJvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZCA9PT0gImdsb2JhbCIgPyB3aW5kb3cgOiByb290O1xuICAgICAgYmluZCh0YXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0LCBLRVlCT0FSRF9FVkVOVCwgb25LZXlkb3duKTtcbiAgICB9XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB1bmJpbmQodGFyZ2V0LCBLRVlCT0FSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RfRVZFTlQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzYWJsZSh2YWx1ZSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3ZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX2Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgZGlzYWJsZWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZTtcbiAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBkaXNhYmxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfZGlzYWJsZWQ7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3duKGUpIHtcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICB2YXIga2V5ID0gbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm1hbGl6ZUtleShlKTtcblxuICAgICAgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEVGVCkpIHtcbiAgICAgICAgU3BsaWRlMi5nbygiPCIpO1xuICAgICAgfSBlbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX1JJR0hUKSkge1xuICAgICAgICBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5nbygiPiIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRpc2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBkaXNhYmxlXG4gIH07XG59XG5cbnZhciBTUkNfREFUQV9BVFRSSUJVVEUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREFUQV9BVFRSSUJVVEUgKyAiLWxhenkiO1xudmFyIFNSQ1NFVF9EQVRBX0FUVFJJQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVVEUgPSBTUkNfREFUQV9BVFRSSUJVVEUgKyAiLXNyY3NldCI7XG52YXIgSU1BR0VfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NFTEVDVE9SID0gIlsiICsgU1JDX0RBVEFfQVRUUklCVVRFICsgIl0sIFsiICsgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSQ1NFVF9EQVRBX0FUVFJJQlVURSArICJdIjtcblxuZnVuY3Rpb24gTGF6eUxvYWQoUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlMTEgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTExLm9uLFxuICAgICAgb2ZmID0gX0V2ZW50SW50ZXJmYWNlMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxLm9mZixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMS5iaW5kLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UxMS5lbWl0O1xuXG4gIHZhciBpc1NlcXVlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aWFsID0gb3B0aW9ucy5sYXp5TG9hZCA9PT0gInNlcXVlbnRpYWwiO1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50cyA9IFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdO1xuICB2YXIgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpZiAob3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMubGF6eUxvYWQpIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIG9uKEVWRU5UX1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUZSRVNILCBpbml0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBlbXB0eShlbnRyaWVzKTtcbiAgICByZWdpc3RlcigpO1xuXG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIChpc1NlcXVlbnRpYWwpIHtcbiAgICAgIGxvYWROZXh0KCk7XG4gICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBvZmYoZXZlbnRzKTtcbiAgICAgIG9uKGV2ZW50cywgY2hlY2spJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyKCkge1xuICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoU2xpZGUpIHtcbiAgICAgIHF1ZXJ5QWxsKFNsaWRlLnNsaWRlLCBJTUFHRV9TRUxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NUT1IpLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgICAgICB2YXIgc3JjID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0dHJpYnV0ZShpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgc3Jjc2V0ID0gZ2V0QXR0cmlidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUUkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQlVURSk7XG5cbiAgICAgICAgaWYgKHNyYyAhPT0gaW1nLnNyYyB8fCBzcmNzZXQgIT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBpbWcuc3Jjc2V0KSB7XG4gICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmNsYXNzZXMuc3Bpbm5lcjtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gaW1nLnBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnRFbGVtZW50O1xuICAgICAgICAgIHZhciBzcGlubmVyID0gY2hpbGQocGFyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgIi4iICsgY2xhc3NOYW1lKSB8fCBjcmVhdGUoInNwYW4iLCBjbGFzc05hbWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQpO1xuICAgICAgICAgIGVudHJpZXMucHVzaChbaW1nLCBTbGlkZSwgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5uZXJdKTtcbiAgICAgICAgICBpbWcuc3JjIHx8IGRpc3BsYXkoaW1nLCAibm9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY2hlY2soKSB7XG4gICAgZW50cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAoZGF0YSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gb3B0aW9ucy5wZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAqICgob3B0aW9ucy5wcmVsb2FkUGFnZXMgfHwgMSkgKyAxKSAtIDE7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGRhdGFbMV0uaXNXaXRoaW4oU3BsaWRlMi5pbmRleCwgZGlzdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSA/IGxvYWQoZGF0YSkgOiB0cnVlO1xuICAgIH0pO1xuICAgIGVudHJpZXMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCB8fCBvZmYoZXZlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoZGF0YSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgaW1nID0gZGF0YVswXTtcbiAgICBhZGRDbGFzcyhkYXRhWzFdLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgQ0xBU1NfTE9BRElORyk7XG4gICAgYmluZChpbWcsICJsb2FkIGVycm9yIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGFwcGx5KG9uTG9hZCwgZGF0YSkpO1xuICAgIHNldEF0dHJpYnV0ZShpbWcsICJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JjIiwgZ2V0QXR0cmlidXRlKGltZywgU1JDX0RBVEFfQVRUUklCVVRFKSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNldEF0dHJpYnV0ZShpbWcsICJzcmNzZXQiLCBnZXRBdHRyaWJ1dGUoaW1nLCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JDU0VUX0RBVEFfQVRUUklCVVRFKSk7XG4gICAgcmVtb3ZlQXR0cmlidXRlKGltZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgcmVtb3ZlQXR0cmlidXRlKGltZywgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSQ1NFVF9EQVRBX0FUVFJJQlVURSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkxvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKGRhdGEsIGUpIHtcbiAgICB2YXIgaW1nID0gZGF0YVswXSxcbiAgICAgICAgU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlID0gZGF0YVsxXTtcbiAgICByZW1vdmVDbGFzcyhTbGlkZS5zbGlkZSwgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xPQURJTkcpO1xuXG4gICAgaWYgKGUudHlwZSAhPT0gImVycm9yIikge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlbW92ZShkYXRhWzJdKTtcbiAgICAgIGRpc3BsYXkoaW1nLCAiIik7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdChFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGltZywgU2xpZGUpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQoRVZFTlRfUkVTSVpFKTtcbiAgICB9XG5cbiAgICBpc1NlcXVlbnRpYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIGxvYWROZXh0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2FkTmV4dCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZW50cmllcy5sZW5ndGggJiYgbG9hZChlbnRyaWVzLnNoaWZ0KCkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHBseShlbXB0eSwgZW50cmllcyksXG4gICAgY2hlY2s6IGNoZWNrXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBQYWdpbmF0aW9uKFNwbGlkZTIsIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMiwgb3B0aW9ucykge1xuICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMik7XG4gIHZhciBvbiA9IGV2ZW50Lm9uLFxuICAgICAgZW1pdCA9IGV2ZW50LmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LFxuICAgICAgYmluZCA9IGV2ZW50LmJpbmQ7XG4gIHZhciBTbGlkZXMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuU2xpZGVzLFxuICAgICAgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBoYXNGb2N1cyA9IENvbnRyb2xsZXIuaGFzRm9jdXMsXG4gICAgICBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXggPSBDb250cm9sbGVyLmdldEluZGV4LFxuICAgICAgZ28gPSBDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlci5nbztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24ucmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sdmU7XG4gIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLnBhZ2luYXRpb247XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxpc3Q7XG4gIHZhciBwYWdpbmF0aW9uQ2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXM7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWF9DSEFOR0VEXSwgbW91bnQpO1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucGFnaW5hdGlvbjtcbiAgICBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KHBsYWNlaG9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciwgZW5hYmxlZCA/ICIiIDogIm5vbmUiKTtcblxuICAgIGlmIChlbmFibGVkKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgb24oW0VWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfU0NST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEVEXSwgdXBkYXRlKTtcbiAgICAgIGNyZWF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUoKTtcbiAgICAgIGVtaXQoRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVELCB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICBpdGVtczogaXRlbXNcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBnZXRBdChTcGxpZGUyLmluZGV4KSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGRlc3Ryb3koKSB7XG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJlbW92ZShwbGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vob2xkZXIgPyBzbGljZShsaXN0LmNoaWxkcmVuKSA6IGxpc3QpO1xuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZUNsYXNzKGxpc3QsIHBhZ2luYXRpb25DbGFzc2VzKTtcbiAgICAgIGVtcHR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtcyk7XG4gICAgICBsaXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBldmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFnaW5hdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIGxlbmd0aCA9IFNwbGlkZTIubGVuZ3RoO1xuICAgIHZhciBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgICAgaTE4biA9IG9wdGlvbnMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxOG4sXG4gICAgICAgIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2U7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYXggPSBoYXNGb2N1cygpID8gQ29udHJvbGxlci5nZXRFbmQoKSArIDEgOiBjZWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbChsZW5ndGggLyBwZXJQYWdlKTtcbiAgICBsaXN0ID0gcGxhY2Vob2xkZXIgfHwgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZSgidWwiLCBjbGFzc2VzLnBhZ2luYXRpb24sIEVsZW1lbnRzLnRyYWNrLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnRFbGVtZW50KTtcbiAgICBhZGRDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMgPSBDTEFTU19QQUdJTkFUSU9OICsgIi0tIiArIGdldERpcmVjdGlvbigpKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICAgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEF0dHJpYnV0ZShsaXN0LCBBUklBX0xBQkVMLCBpMThuLnNlbGVjdCk7XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZShsaXN0LCBBUklBX09SSUVOVEFUSU9OLCBnZXREaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgPT09IFRUQiA/ICJ2ZXJ0aWNhbCIgOiAiIik7XG5cbiAgICBmb3IgKHZhciBpID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7IGkgPCBtYXg7IGkrKykge1xuICAgICAgdmFyIGxpID0gY3JlYXRlKCJsaSIsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLCBsaXN0KTtcbiAgICAgIHZhciBidXR0b24gPSBjcmVhdGUoImJ1dHRvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIGNsYXNzOiBjbGFzc2VzLnBhZ2UsXG4gICAgICAgIHR5cGU6ICJiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0dG9uIlxuICAgICAgfSwgbGkpO1xuICAgICAgdmFyIGNvbnRyb2xzID0gU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXRJbihpKS5tYXAoZnVuY3Rpb24gKFNsaWRlKSB7XG4gICAgICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUuc2xpZGUuaWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciB0ZXh0ID0gIWhhc0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cygpICYmIHBlclBhZ2UgPiAxID8gaTE4bi5wYWdlWCA6IGkxOG4uc2xpZGVYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGJpbmQoYnV0dG9uLCAiY2xpY2siLCBhcHBseShvbkNsaWNrLCBpKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uS2V5Ym9hcmQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGJpbmQoYnV0dG9uLCAia2V5ZG93biIsIGFwcGx5KG9uS2V5ZG93biwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kpKTtcbiAgICAgIH1cblxuICAgICAgc2V0QXR0cmlidXRlKGxpLCBST0xFLCAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXNlbnRhdGlvbiIpO1xuICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgUk9MRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJ0YWIiKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIEFSSUFfQ09OVFJPTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLCBjb250cm9scy5qb2luKCIgIikpO1xuICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sIEFSSUFfTEFCRUwsIGZvcm1hdCh0ZXh0LCBpICsgMSkpO1xuICAgICAgc2V0QXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZShidXR0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgICAgaXRlbXMucHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoe1xuICAgICAgICBsaTogbGksXG4gICAgICAgIGJ1dHRvbjogYnV0dG9uLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcGFnZTogaVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9uQ2xpY2socGFnZSkge1xuICAgIGdvKCI+IiArIHBhZ2UsIHRydWUpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihwYWdlLCBlKSB7XG4gICAgdmFyIGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgdmFyIGRpciA9IGdldERpcmVjdGlvbigpO1xuICAgIHZhciBuZXh0UGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UgPSAtMTtcblxuICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfUklHSFQsIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzZSwgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSArK3BhZ2UgJSBsZW5ndGg7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0gZWxzZSBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX0xFRlQsIGZhbHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSAoLS1wYWdlICsgbGVuZ3RoKSAlIGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5ndGg7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJIb21lIikge1xuICAgICAgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHRQYWdlID0gMDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gIkVuZCIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBuZXh0UGFnZSA9IGxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgdmFyIGl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXRlbXNbbmV4dFBhZ2VdO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cyhpdGVtLmJ1dHRvbik7XG4gICAgICBnbygiPiIgKyBuZXh0UGFnZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcHJldmVudChlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0RGlyZWN0aW9uKCkge1xuICAgIHJldHVybiBvcHRpb25zLnBhZ2luYXRpb25EaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0aW9uIHx8IG9wdGlvbnMuZGlyZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0KGluZGV4KSB7XG4gICAgcmV0dXJuIGl0ZW1zW0NvbnRyb2xsZXIudG9QYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZShpbmRleCldO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgcHJldiA9IGdldEF0KGdldEluZGV4KHRydWUpKTtcbiAgICB2YXIgY3VyciA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRBdChnZXRJbmRleCgpKTtcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGJ1dHRvbiA9IHByZXYuYnV0dG9uO1xuICAgICAgcmVtb3ZlQ2xhc3MoYnV0dG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgQ0xBU1NfQUNUSVZFKTtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZShidXR0b24sIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUklBX1NFTEVDVEVEKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFRBQl9JTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidERVgsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoY3Vycikge1xuICAgICAgdmFyIF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnV0dG9uID0gY3Vyci5idXR0b247XG4gICAgICBhZGRDbGFzcyhfYnV0dG9uLCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfQUNUSVZFKTtcbiAgICAgIHNldEF0dHJpYnV0ZShfYnV0dG9uLCBBUklBX1NFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFQ1RFRCwgdHJ1ZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVEFCX0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWCwgIiIpO1xuICAgIH1cblxuICAgIGVtaXQoRVZFTlRfUEFHSU5BVElPTl8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVBEQVRFRCwge1xuICAgICAgbGlzdDogbGlzdCxcbiAgICAgIGl0ZW1zOiBpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbXNcbiAgICB9LCBwcmV2LCBjdXJyKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0ZW1zOiBpdGVtcyxcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3ksXG4gICAgZ2V0QXQ6IGdldEF0LFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xufVxuXG52YXIgVFJJR0dFUl9LRVlTID0gWyIgIiwgIkVudGVyIl07XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBTeW5jKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaXNOYXZpZ2F0aW9uID0gb3B0aW9ucy5pc05hdmlnYXRpb24sXG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGb2N1cztcbiAgdmFyIGV2ZW50cyA9IFsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBTcGxpZGUyLnNwbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgaWYgKCF0YXJnZXQuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzUGFyZW50KSB7XG4gICAgICAgIHN5bmMoU3BsaWRlMiwgdGFyZ2V0LnNwbGlkZSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBzeW5jKHRhcmdldC5zcGxpZGUsIFNwbGlkZTIpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgICB9KTtcblxuICAgIGlmIChpc05hdmlnYXRpb24pIHtcbiAgICAgIG5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZ2F0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBlbXB0eShldmVudHMpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICAgIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3luYyhzcGxpZGUsIHRhcmdldCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShzcGxpZGUpO1xuICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudC5vbihFVkVOVF9NT1ZFLCBmdW5jdGlvbiAoaW5kZXgsIHByZXYsIGRlc3QpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB0YXJnZXQuZ28odGFyZ2V0LmlzKExPT1ApID8gZGVzdCA6IGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCk7XG4gICAgfSk7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIG5hdmlnYXRlKCkge1xuICAgIHZhciBldmVudCA9IEV2ZW50SW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZShTcGxpZGUyKTtcbiAgICB2YXIgb24gPSBldmVudC5vbjtcbiAgICBvbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ0xJQ0ssIG9uQ2xpY2spO1xuICAgIG9uKEVWRU5UX1NMSURFX0tFWURPV04sIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbktleWRvd24pO1xuICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHVwZGF0ZSk7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpO1xuICAgIGV2ZW50LmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgU3BsaWRlMi5zcGxpZGVzKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgc2V0QXR0cmlidXRlKENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzMi5FbGVtZW50cy5saXN0LCBBUklBX09SSUVOVEFUSU9OLCBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5kaXJlY3Rpb24gPT09IFRUQiA/ICJ2ZXJ0aWNhbCIgOiAiIik7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gb25DbGljayhTbGlkZSkge1xuICAgIFNwbGlkZTIuZ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFNsaWRlLmluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIGUpIHtcbiAgICBpZiAoaW5jbHVkZXMoVFJJR0dFUl9LRVlTLCBub3JtYWxpeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlS2V5KGUpKSkge1xuICAgICAgb25DbGljayhTbGlkZSk7XG4gICAgICBwcmV2ZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldHVwOiBhcHBseShDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIuTWVkaWEuc2V0LCB7XG4gICAgICBzbGlkZUZvY3VzOiBpc1VuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmluZWQoc2xpZGVGb2N1cykgPyBpc05hdmlnYXRpb24gOiBzbGlkZUZvY3VzXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0sIHRydWUpLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveSxcbiAgICByZW1vdW50OiByZW1vdW50XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZTEyID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCA9IF9FdmVudEludGVyZmFjZTEyLmJpbmQ7XG5cbiAgdmFyIGxhc3RUaW1lID0gMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wdGlvbnMud2hlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKSB7XG4gICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLCAid2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIiwgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICBpZiAoZS5jYW5jZWxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZSkge1xuICAgICAgdmFyIGRlbHRhWSA9IGUuZGVsdGFZO1xuICAgICAgdmFyIGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgdmFyIHRpbWVTdGFtcCA9IHRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2YoZSk7XG5cbiAgICAgIHZhciBfbWluID0gb3B0aW9ucy53aGVlbE1pblRocmVzaG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGQgfHwgMDtcblxuICAgICAgdmFyIHNsZWVwID0gb3B0aW9ucy53aGVlbFNsZWVwIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAwO1xuXG4gICAgICBpZiAoYWJzKGRlbHRhWSkgPiBfbWluICYmIHRpbWVTdGFtcCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBsYXN0VGltZSA+IHNsZWVwKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oYmFja3dhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkcyA/ICI8IiA6ICI+Iik7XG4gICAgICAgIGxhc3RUaW1lID0gdGltZVN0YW1wO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH1cblxuICAgICAgc2hvdWxkUHJldmVudChiYWNrd2FyZHMpICYmIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZFByZXZlbnQoYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcykge1xuICAgIHJldHVybiAhb3B0aW9ucy5yZWxlYXNlV2hlZWwgfHwgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTIuc3RhdGUuaXMoTU9WSU5HKSB8fCBDb21wb25lbnRzMi5Db250cm9sbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInci5nZXRBZGphY2VudChiYWNrd2FyZHMpICE9PSAtMTtcbiAgfVxuXG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4ge1xuICAgIG1vdW50OiBtb3VudFxuICB9O1xufVxuXG52YXIgU1JfUkVNT1ZBTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfREVMQVkgPSA5MDtcblxuZnVuY3Rpb24gTGl2ZShTcGxpZGUyLCBDb21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEzID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxMy5vbjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMudHJhY2s7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMubGl2ZSAmJiAhb3B0aW9ucy5pc05hdmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uO1xuICB2YXIgc3IgPSBjcmVhdGUoInNwYW4iLCBDTEFTU19TUik7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoU1JfUkVNT1ZBTF9ERUxBWSwgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KHRvZ2dsZSwgZmFsc2UpKTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGRpc2FibGUoIUNvbXBvbmVudHMyLkF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcGxheS5pc1BhdXNlZCgpKTtcbiAgICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQVRPTUlDLCB0cnVlKTtcbiAgICAgIHNyLnRleHRDb250ZW50ID0gIlxcdTIwMjYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgICAgIG9uKEVWRU5UX0FVVE9QTEFZX1BMQVksIGFwcGx5KGRpc2FibGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKSk7XG4gICAgICBvbihFVkVOVF9BVVRPUExBWV9QQVVTRSwgYXBwbHkoZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGUsIGZhbHNlKSk7XG4gICAgICBvbihbRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTExFRF0sIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB0b2dnbGUoYWN0aXZlKSB7XG4gICAgc2V0QXR0cmlidXRlKHRyYWNrLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9CVVNZLCBhY3RpdmUpO1xuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGVuZCh0cmFjaywgc3IpO1xuICAgICAgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSBlbHNlIHtcbiAgICAgIHJlbW92ZShzcik7XG4gICAgICBpbnRlcnZhbC5jYW5jZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlQXR0cmlidXRlKHRyYWNrLCBbQVJJQV9MSVZFLCBBUklBX0FUT01JQywgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQlVTWV0pO1xuICAgIHJlbW92ZShzcik7XG4gIH1cblxuICBmdW5jdGlvbiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzYWJsZShkaXNhYmxlZCkge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHRyYWNrLCBBUklBX0xJVkUsIGRpc2FibGVkID8gIm9mZiIgOiAicCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGl0ZSIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgIGRlc3Ryb3k6IGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95XG4gIH07XG59XG5cbnZhciBDb21wb25lbnRDb25zdHJ1Y3RvcnMgPSAvKiNfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIE1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpYTogTWVkaWEsXG4gIERpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBFbGVtZW50czogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzLFxuICBTbGlkZXM6IFNsaWRlcyxcbiAgTGF5b3V0OiBMYXlvdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBDbG9uZXM6IENsb25lcyxcbiAgTW92ZTogTW92ZSxcbiAgQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXI6IENvbnRyb2xsZXIsXG4gIEFycm93czogQXJyb3dzLFxuICBBdXRvcGxheTogQXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9wbGF5LFxuICBDb3ZlcjogQ292ZXIsXG4gIFNjcm9sbDogU2Nyb2xsLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRHJhZzogRHJhZyxcbiAgS2V5Ym9hcmQ6IEtleWJvYXJkLFxuICBMYXp5TG9hZDogTGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInenlMb2FkLFxuICBQYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICBTeW5jOiBTeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYyxcbiAgV2hlZWw6IFdoZWVsLFxuICBMaXZlOiBMaXZlXG59KTtcbnZhciBJMTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTiA9IHtcbiAgcHJldjogIlByZXZpb3VzIHNsaWRlIixcbiAgbmV4dDogIk5leHQgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIixcbiAgZmlyc3Q6ICJHbyB0byBmaXJzdCBzbGlkZSIsXG4gIGxhc3Q6ICJHbyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gbGFzdCBzbGlkZSIsXG4gIHNsaWRlWDogIkdvIHRvIHNsaWRlICVzIixcbiAgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VYOiAiR28gdG8gcGFnZSAlcyIsXG4gIHBsYXk6ICJTdGFydCBhdXRvcGxheSIsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwYXVzZTogIlBhdXNlIGF1dG9wbGF5IixcbiAgY2Fyb3VzZWw6ICJjYXJvdXNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLFxuICBzbGlkZTogInNsaWRlIixcbiAgc2VsZWN0OiAiU2VsZWN0IGEgc2xpZGUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHNob3ciLFxuICBzbGlkZUxhYmVsOiAiJXMgb2YgJXMiXG59O1xudmFyIERFRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVUxUUyA9IHtcbiAgdHlwZTogInNsaWRlIixcbiAgcm9sZTogInJlZ2lvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBzcGVlZDogNDAwLFxuICBwZXJQYWdlOiAxLFxuICBjbG9uZVN0YXR1czogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUsXG4gIGFycm93czogdHJ1ZSxcbiAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25LZXlib2FyZDogdHJ1ZSxcbiAgaW50ZXJ2YWw6IDVlMyxcbiAgcGF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlT25Ib3ZlcjogdHJ1ZSxcbiAgcGF1c2VPbkZvY3VzOiB0cnVlLFxuICByZXNldFByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ncmVzczogdHJ1ZSxcbiAgZWFzaW5nOiAiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLjUsIDEpIixcbiAgZHJhZzogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAibHRyIixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyaW1TcGFjZTogdHJ1ZSxcbiAgZm9jdXNhYmxlTm9kZXM6ICJhLCBidXR0b24sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdCwgaWZyYW1lIixcbiAgbGl2ZTogdHJ1ZSxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNsYXNzZXM6IENMQVNTRVMsXG4gIGkxOG46IEkxOE4sXG4gIHJlZHVjZWRNb3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduOiB7XG4gICAgc3BlZWQ6IDAsXG4gICAgcmV3aW5kU3BlZWQ6IDAsXG4gICAgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dG9wbGF5OiAicGF1c2UiXG4gIH1cbn07XG5cbmZ1bmN0aW9uIEZhZGUoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBTbGlkZXMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuU2xpZGVzO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEludGVyZmFjZShTcGxpZGUyKS5vbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRlJFU0hdLCBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChTbGlkZSkge1xuICAgICAgU2xpZGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlWCgtIiArIDEwMCAqIFNsaWRlLmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCArICIlKSIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4LCBkb25lKSB7XG4gICAgU2xpZGVzLnN0eWxlKCJ0cmFuc2l0aW9uIiwgIm9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaXR5ICIgKyBvcHRpb25zLnNwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhc2luZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIG5leHRUaWNrKGRvbmUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQ6IG1vdW50LFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBjYW5jZWw6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb29wXG4gIH07XG59XG5cbmZ1bmN0aW9uIFNsaWRlKFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXIsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2Nyb2xsID0gQ29tcG9uZW50czIuU2Nyb2xsO1xuICB2YXIgbGlzdCA9IENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMi5FbGVtZW50cy5saXN0O1xuICB2YXIgdHJhbnNpdGlvbiA9IGFwcGx5KHN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSwgbGlzdCwgInRyYW5zaXRpb24iKTtcbiAgdmFyIGVuZENhbGxiYWNrOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBFdmVudEludGVyZmFjZShTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMikuYmluZChsaXN0LCAidHJhbnNpdGlvbmVuZCIsIGZ1bmN0aW9uIChlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBsaXN0ICYmIGVuZENhbGxiYWNrKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgZW5kQ2FsbGJhY2soKTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChpbmRleCwgZG9uZSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB2YXIgZGVzdGluYXRpb24gPSBNb3ZlLnRvUG9zaXRpb24oaW5kZXgsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICB2YXIgcG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzcGVlZCA9IGdldFNwZWVkKGluZGV4KTtcblxuICAgIGlmIChhYnMoZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uIC0gcG9zaXRpb24pID49IDEgJiYgc3BlZWQgPj0gMSkge1xuICAgICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIChvcHRpb25zLnVzZVNjcm9sbCkge1xuICAgICAgICBTY3JvbGwuc2Nyb2xsKGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0aW5hdGlvbiwgc3BlZWQsIGZhbHNlLCBkb25lKTtcbiAgICAgIH0gZWxzZSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB0cmFuc2l0aW9uKCJ0cmFuc2Zvcm0gIiArIHNwZWVkICsgIm1zICIgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5lYXNpbmcpO1xuICAgICAgICBNb3ZlLnRyYW5zbGF0ZShkZXN0aW5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24sIHRydWUpO1xuICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH0gZWxzZSB7XG4gICAgICBNb3ZlLmp1bXAoaW5kZXgpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RvbmUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zaXRpb24oIiIpO1xuICAgIFNjcm9sbC5jYW5jZWwoKTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBnZXRTcGVlZChpbmRleCkge1xuICAgIHZhciByZXdpbmRTcGVlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBvcHRpb25zLnJld2luZFNwZWVkO1xuXG4gICAgaWYgKFNwbGlkZTIuaXMoU0xJREUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSAmJiByZXdpbmRTcGVlZCkge1xuICAgICAgdmFyIHByZXYgPSBDb250cm9sbGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRJbmRleCh0cnVlKTtcbiAgICAgIHZhciBlbmQgPSBDb250cm9sbGVyLmdldEVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QoKTtcblxuICAgICAgaWYgKHByZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kIHx8IHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ID49IGVuZCAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmV3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFNwZWVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn1cblxudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfU3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19TcGxpZGUodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ldmVudCA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZSgpO1xuICAgIHRoaXMuQ29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0YXRlID0gU3RhdGUoQ1JFQVRFRCk7XG4gICAgdGhpcy5zcGxpZGVzID0gW107XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHRoaXMuX28gPSB7fTtcbiAgICB0aGlzLl9FID0ge307XG4gICAgdmFyIHJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXNTdHJpbmcodGFyZ2V0KSA/IHF1ZXJ5KGRvY3VtZW50LCB0YXJnZXQpIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldDtcbiAgICBhc3NlcnQocm9vdCwgcm9vdCArICIgaXMgaW52YWxpZC4iKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICBvcHRpb25zID0gbWVyZ2UoeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGxhYmVsOiBnZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCkgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiLFxuICAgICAgbGFiZWxsZWRieTogZ2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkVMTEVEQlkpIHx8ICIiXG4gICAgfSwgREVGQVVMVFMsIF9TcGxpZGUuZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBvcHRpb25zIHx8IHt9KTtcblxuICAgIHRyeSB7XG4gICAgICBtZXJnZShvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucywgSlNPTi5wYXJzZShnZXRBdHRyaWJ1dGUocm9vdCwgREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFKSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFzc2VydChmYWxzZSwgIkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnZhbGlkIEpTT04iKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vID0gT2JqZWN0LmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGUobWVyZ2Uoe30sIG9wdGlvbnMpKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX1NwbGlkZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm1vdW50ID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1vdW50KEV4dGVuc2lvbnMsIFRyYW5zaXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcztcblxuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiA9IHRoaXMuQ29tcG9uZW50cztcbiAgICBhc3NlcnQoc3RhdGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKFtDUkVBVEVELCBERVNUUk9ZRURdKSwgIkFscmVhZHkgbW91bnRlZCEiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3RhdGUuc2V0KENSRUFURUQpO1xuICAgIHRoaXMuX0MgPSBDb21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdGhpcy5fVCA9IFRyYW5zaXRpb24gfHwgdGhpcy5fVCB8fCAodGhpcy5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoRkFERSkgPyBGYWRlIDogU2xpZGUpO1xuICAgIHRoaXMuX0UgPSBFeHRlbnNpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB8fCB0aGlzLl9FO1xuICAgIHZhciBDb25zdHJ1Y3RvcnMgPSBhc3NpZ24oe30sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRDb25zdHJ1Y3RvcnMsIHRoaXMuX0UsIHtcbiAgICAgIFRyYW5zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uOiB0aGlzLl9UXG4gICAgfSk7XG4gICAgZm9yT3duKENvbnN0cnVjdG9ycywgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIChDb21wb25lbnQsIGtleSkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQoX3RoaXMsIENvbXBvbmVudHMyLCBfdGhpcy5fbyk7XG4gICAgICBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czJba2V5XSA9IGNvbXBvbmVudDtcbiAgICAgIGNvbXBvbmVudC5zZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AgJiYgY29tcG9uZW50LnNldHVwKCk7XG4gICAgfSk7XG4gICAgZm9yT3duKENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMiwgZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgY29tcG9uZW50Lm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCAmJiBjb21wb25lbnQubW91bnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX01PVU5URUQpO1xuICAgIGFkZENsYXNzKHRoaXMucm9vdCwgQ0xBU1NfSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOSVRJQUxJWkVEKTtcbiAgICBzdGF0ZS5zZXQoSURMRSk7XG4gICAgdGhpcy5lbWl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9SRUFEWSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby5zeW5jID0gZnVuY3Rpb24gc3luYyhzcGxpZGUpIHtcbiAgICB0aGlzLnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnB1c2goe1xuICAgICAgc3BsaWRlOiBzcGxpZGVcbiAgICB9KTtcbiAgICBzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLnNwbGlkZXMucHVzaCh7XG4gICAgICBzcGxpZGU6IHRoaXMsXG4gICAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQYXJlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJRExFKSkge1xuICAgICAgdGhpcy5fQy5TeW5jLnJlbW91bnQoKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNwbGlkZS5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZ28gPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ28oY29udHJvbCkge1xuICAgIHRoaXMuX0MuQ29udHJvbGxlci5nbyhjb250cm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8ub24gPSBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gb24oZXZlbnRzLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZXZlbnQub24oZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50cywgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cykge1xuICAgIHRoaXMuZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Lm9mZihldmVudHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50O1xuXG4gICAgKF90aGlzJGV2ZW50ID0gdGhpcy5ldmVudCkuZW1pdC5hcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoX3RoaXMkZXZlbnQsIFtldmVudF0uY29uY2F0KHNsaWNlKGFyZ3VtZW50cywgMSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGFkZChzbGlkZXMsIGluZGV4KSB7XG4gICAgdGhpcy5fQy5TbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZChzbGlkZXMsIGluZGV4KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG1hdGNoZXIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5fQy5TbGlkZXMucmVtb3ZlKG1hdGNoZXIpO1xuXG4gICAgcmV0dXJuIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xuICB9O1xuXG4gIF9wcm90by5pcyA9IGZ1bmN0aW9uIGlzKHR5cGUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHRoaXMuX28udHlwZSA9PT0gdHlwZTtcbiAgfTtcblxuICBfcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgIHRoaXMuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfUkVGUkVTSCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZWx5KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChjb21wbGV0ZWx5ID09PSB2b2lkIDApIHtcbiAgICAgIGNvbXBsZXRlbHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZXZlbnQgPSB0aGlzLmV2ZW50LFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKHN0YXRlLmlzKENSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVEKSkge1xuICAgICAgRXZlbnRJbnRlcmZhY2UodGhpcykub24oRVZFTlRfUkVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RZLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzLCBjb21wbGV0ZWx5KSk7XG4gICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxzZSB7XG4gICAgICBmb3JPd24odGhpcy5fQywgZnVuY3Rpb24gKGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgY29tcG9uZW50LmRlc3Ryb3kgJiYgY29tcG9uZW50LmRlc3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ295KGNvbXBsZXRlbHkpO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICBldmVudC5lbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9ERVNUUk9ZKTtcbiAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICAgIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wbGV0ZWx5ICYmIGVtcHR5KHRoaXMuc3BsaWRlcyk7XG4gICAgICBzdGF0ZS5zZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKERFU1RST1lFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIF9jcmVhdGVDbGFzcyhfU3BsaWRlLCBbe1xuICAgIGtleTogIm9wdGlvbnMiLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLl9DLk1lZGlhLnNldChvcHRpb25zLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gIH0sIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAga2V5OiAibGVuZ3RoIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICByZXR1cm4gdGhpcy5fQy5TbGlkZXMuZ2V0TGVuZ3RoKHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG4gIH0sIHtcbiAgICBrZXk6ICJpbmRleCIsXG4gICAgZ2V0OiBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX0MuQ29udHJvbGxlci5nZXRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgoKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gX1NwbGlkZTtcbn0oKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbnZhciBTcGxpZGUgPSBfU3BsaWRlO1xuU3BsaWRlLmRlZmF1bHRzID0ge30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuU3BsaWRlLlNUQVRFUyA9IFNUQVRFUztcbnZhciBDTEFTU19SRU5ERVJFRCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtcmVuZGVyZWQiO1xudmFyIFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHID0ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdFRhZzogInVsIixcbiAgc2xpZGVUYWc6ICJsaSJcbn07XG5cbnZhciBTdHlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHlsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnN0eWxlcyA9IHt9O1xuICAgIHRoaXMuaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaWQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgX3Byb3RvMiA9IFN0eWxlLnByb3RvdHlwZTtcblxuICBfcHJvdG8yLnJ1bGUgPSBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gcnVsZShzZWxlY3RvciwgcHJvcCwgdmFsdWUsIGJyZWFrcG9pbnQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnQgfHwgImRlZmF1bHQiO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgc2VsZWN0b3JzID0gdGhpcy5zdHlsZXNbYnJlYWtwb2ludF0gPSB0aGlzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZXNbYnJlYWtwb2ludF0gfHwge307XG4gICAgdmFyIHN0eWxlcyA9IHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnNbc2VsZWN0b3JdID0gc2VsZWN0b3JzW3NlbGVjdG9yXSB8fCB7fTtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGVzW3Byb3BdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMi5idWlsZCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBidWlsZCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgY3NzID0gIiI7XG5cbiAgICBpZiAodGhpcy5zdHlsZXMuZGVmYXVsdCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKHRoaXMuc3R5bGVzLmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWZhdWx0KTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0eWxlcyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNvcnQoZnVuY3Rpb24gKG4sIG0pIHtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMubWVkaWFRdWVyeSA9PT0gIm1pbiIgPyArbiAtICttIDogK20gLSArbjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSkuZm9yRWFjaChmdW5jdGlvbiAoYnJlYWtwb2ludCkge1xuICAgICAgaWYgKGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVha3BvaW50ICE9PSAiZGVmYXVsdCIpIHtcbiAgICAgICAgY3NzICs9ICJAbWVkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogIiArIGJyZWFrcG9pbnQgKyAicHgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgICAgICAgY3NzICs9IF90aGlzMi5idWlsZFNlbGVjdG9ycyhfdGhpczIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc1ticmVha3BvaW50XSk7XG4gICAgICAgIGNzcyArPSAifSI7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH07XG5cbiAgX3Byb3RvMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnVpbGRTZWxlY3RvcnMgPSBmdW5jdGlvbiBidWlsZFNlbGVjdG9ycyhzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgY3NzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiO1xuICAgIGZvck93bihzZWxlY3RvcnMsIGZ1bmN0aW9uIChzdHlsZXMsIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAoIiMiICsgX3RoaXMzLmlkICsgIiAiICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIHNlbGVjdG9yKS50cmltKCk7XG4gICAgICBjc3MgKz0gc2VsZWN0b3IgKyAiIHsiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGZvck93bihzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICAgICAgY3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyArPSBwcm9wICsgIjogIiArIHZhbHVlICsgIjsiO1xuICAgICAgICB9XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gICAgICBjc3MgKz0gIn0iO1xuICAgIH0pO1xuICAgIHJldHVybiBjc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZTtcbn0oKTtcblxudmFyIFNwbGlkZVJlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVSZW5kZXJlcihjb250ZW50cywgb3B0aW9ucywgY29uZmlnLCBkZWZhdWx0cyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB0aGlzLnNsaWRlcyA9IFtdO1xuICAgIHRoaXMub3B0aW9ucyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7fTtcbiAgICB0aGlzLmJyZWFrcG9pbnRzID0gW107XG4gICAgbWVyZ2UoREVGQVVMVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLCBkZWZhdWx0cyB8fCB7fSk7XG4gICAgbWVyZ2UobWVyZ2UodGhpcy5vcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgREVGQVVMVFMpLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmNvbnRlbnRzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRlbnRzO1xuICAgIHRoaXMuY29uZmlnID0gYXNzaWduKHt9LCBSRU5ERVJFUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfREVGQVVMVF9DT05GSUcsIGNvbmZpZyB8fCB7fSk7XG4gICAgdGhpcy5pZCA9IHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNvbmZpZy5pZCB8fCB1bmlxdWVJZCgic3BsaWRlIik7XG4gICAgdGhpcy5TdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgPSBuZXcgU3R5bGUodGhpcy5pZCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24gPSBEaXJlY3Rpb24obnVsbCwgbnVsbCwgdGhpcy5vcHRpb25zKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYXNzZXJ0KHRoaXMuY29udGVudHMubGVuZ3RoLCAiUHJvdmlkZSBhdCBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3QgMSBjb250ZW50LiIpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVJlbmRlcmVyLmNsZWFuID0gZnVuY3Rpb24gY2xlYW4oc3BsaWRlKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBfRXZlbnRJbnRlcmZhY2UxNCA9IEV2ZW50SW50ZXJmYWNlKHNwbGlkZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyZmFjZTE0Lm9uO1xuXG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciByb290ID0gc3BsaWRlLnJvb3Q7XG4gICAgdmFyIGNsb25lcyA9IHF1ZXJ5QWxsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb290LCAiLiIgKyBDTEFTU19DTE9ORSk7XG4gICAgb24oRVZFTlRfTU9VTlRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZShjaGlsZChyb290LCAic3R5bGUiKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH0pO1xuICAgIHJlbW92ZShjbG9uZXMpO1xuICB9O1xuXG4gIHZhciBfcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3RvMyA9IFNwbGlkZVJlbmRlcmVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLmluaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLnBhcnNlQnJlYWtwb2ludHMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgdGhpcy5pbml0U2xpZGVzKCk7XG4gICAgdGhpcy5yZWdpc3RlclJvb3RTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGVzKCk7XG4gICAgdGhpcy5yZWdpc3RlclRyYWNrU3R5bGVzKCk7XG4gICAgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVnaXN0ZXJTbGlkZVN0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJMaXN0U3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlcygpO1xuICB9O1xuXG4gIF9wcm90bzMuaW5pdFNsaWRlcyA9IGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBpbml0U2xpZGVzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHB1c2godGhpcy5zbGlkZXMsIHRoaXMuY29udGVudHMubWFwKGZ1bmN0aW9uIChjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29udGVudCwgaW5kZXgpIHtcbiAgICAgIGNvbnRlbnQgPSBpc1N0cmluZyhjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCkgPyB7XG4gICAgICAgIGh0bWw6IGNvbnRlbnRcbiAgICAgIH0gOiBjb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDtcbiAgICAgIGNvbnRlbnQuc3R5bGVzID0gY29udGVudC5zdHlsZXMgfHwge307JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgY29udGVudC5hdHRycyA9IGNvbnRlbnQuYXR0cnMgfHwge307XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBfdGhpczQuY292ZXIoY29udGVudCk7XG5cbiAgICAgIHZhciBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NlcyA9IF90aGlzNC5vcHRpb25zLmNsYXNzZXMuc2xpZGUgKyAiICIgKyAoaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID09PSAwID8gQ0xBU1NfQUNUSVZFIDogIiIpO1xuICAgICAgYXNzaWduKGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LmF0dHJzLCB7XG4gICAgICAgIGNsYXNzOiAoY2xhc3NlcyArICIgIiArIChjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudC5hdHRycy5jbGFzcyB8fCAiIikpLnRyaW0oKSxcbiAgICAgICAgc3R5bGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfdGhpczQuYnVpbGRTdHlsZXMoY29udGVudC5zdHlsZXMpXG4gICAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gY29udGVudDtcbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NMb29wKCkpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbG9uZXModGhpcy5zbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclJvb3RTdHlsZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gZnVuY3Rpb24gcmVnaXN0ZXJSb290U3R5bGVzKCkge1xuICAgIHZhciBfdGhpczUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gdGhpcztcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKF9yZWYyKSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmMlswXSxcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyA9IF9yZWYyWzFdO1xuXG4gICAgICBfdGhpczUuU3R5bGUucnVsZSgiICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAibWF4LXdpZHRoIiwgdW5pdChvcHRpb25zLndpZHRoKSwgd2lkdGgpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyVHJhY2tTdHlsZXMgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVnaXN0ZXJUcmFja1N0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM2ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXM7XG5cbiAgICB2YXIgU3R5bGUyID0gdGhpcy5TdHlsZTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGVjdG9yID0gIi4iICsgQ0xBU1NfVFJBQ0s7XG4gICAgdGhpcy5icmVha3BvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciB3aWR0aCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfcmVmM1swXSxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjNbMV07XG4gICAgICBTdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUyLnJ1bGUoc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW5nTGVmdCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSwgX3RoaXM2LmNzc1BhZGRpbmcob3B0aW9ucywgZmFsc2UpLCB3aWR0aCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ1JpZ2h0IiksIF90aGlzNi5jc3NQYWRkaW5nKG9wdGlvbnMsIHRydWUpLCB3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2gpO1xuICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsICJoZWlnaHQiLCBfdGhpczYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNzc1RyYWNrSGVpZ2h0KG9wdGlvbnMpLCB3aWR0aCk7XG4gICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJMaXN0U3R5bGVzID0gZnVuY3Rpb24gcmVnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVyTGlzdFN0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgU3R5bGUyID0gdGhpcy5TdHlsZTtcbiAgICB2YXIgc2VsZWN0b3IgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4iICsgQ0xBU1NfTElTVDtcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjRbMF0sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIG9wdGlvbnMgPSBfcmVmNFsxXTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciwgInRyYW5zZm9ybSIsIF90aGlzNy5idWlsZFRyYW5zbGF0ZShvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyksIHdpZHRoKTtcblxuICAgICAgaWYgKCFfdGhpczcuY3NzU2xpZGVIZWlnaHQob3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMpKSB7XG4gICAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAiYXNwZWN0LScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRpbyIsIF90aGlzNy5jc3NBc3BlY3RSYXRpbyhvcHRpb25zKSwgd2lkdGgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTbGlkZVN0eWxlcygpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF90aGlzOCA9IHRoaXM7XG5cbiAgICB2YXIgU3R5bGUyID0gdGhpcy5TdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGU7XG4gICAgdmFyIHNlbGVjdG9yID0gIi4iICsgQ0xBU1NfU0xJREU7XG4gICAgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuYnJlYWtwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgd2lkdGggPSBfcmVmNVswXSxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjVbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFdO1xuICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsICJ3aWR0aCIsIF90aGlzOC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzU2xpZGVXaWR0aChvcHRpb25zKSwgd2lkdGgpO1xuICAgICAgU3R5bGUyLnJ1bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHNlbGVjdG9yLCAiaGVpZ2h0IiwgX3RoaXM4LmNzc1NsaWRlSGVpZ2h0KG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zKSB8fCAiMTAwJSIsIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciwgX3RoaXM4LnJlc29sdmUoIm1hcmdpblJpZ2h0IiksIHVuaXQob3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwKSB8fCAiMHB4Iiwgd2lkdGgpO1xuICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyICsgIiA+IGltZyIsICJkaXNwbGF5Iiwgb3B0aW9ucy5jb3ZlciA/ICJub25lIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiAiaW5saW5lIiwgd2lkdGgpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkVHJhbnNsYXRlID0gZnVuY3Rpb24gYnVpbGRUcmFuc2xhdGUob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX3RoaXMkRGlyZWN0aW9uID0gdGhpcy5EaXJlY3Rpb24sXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uLnJlc29sdmUsXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcmllbnQgPSBfdGhpcyREaXJlY3Rpb24ub3JpZW50O1xuICAgIHZhciB2YWx1ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gW107XG4gICAgdmFsdWVzLnB1c2godGhpcy5jc3NPZmZzZXRDbG9uZXMob3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMpKTtcbiAgICB2YWx1ZXMucHVzaCh0aGlzLmNzc09mZnNldEdhcHMob3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpKTtcblxuICAgIGlmICh0aGlzLmlzQ2VudGVyKG9wdGlvbnMpKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFsdWVzLnB1c2godGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudCgtNTApLCAiJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKSk7XG4gICAgICB2YWx1ZXMucHVzaC5hcHBseSh2YWx1ZXMsIHRoaXMuY3NzT2ZmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NldENlbnRlcihvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gInRyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAiKCIgKyB2YWx1ZSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiKSI7XG4gICAgfSkuam9pbigiICIpO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmZnNldENsb25lcyA9IGZ1bmN0aW9uIGNzc09mZnNldENsb25lcyhvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBfdGhpcyREaXJlY3Rpb24yID0gdGhpcy5EaXJlY3Rpb24sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uMi5yZXNvbHZlLFxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3JpZW50ID0gX3RoaXMkRGlyZWN0aW9uMi5vcmllbnQ7XG4gICAgdmFyIGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50ID0gdGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hlZFdpZHRoKG9wdGlvbnMpKSB7XG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgPSB0aGlzLnBhcnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCJmaXhlZFdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCIpXSksXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlLnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90aGlzJHBhcnNlQ3NzVmFsdWUudW5pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBjbG9uZUNvdW50LCB1bml0Mik7XG4gICAgfVxuXG4gICAgdmFyIHBlcmNlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gMTAwICogY2xvbmVDb3VudCAvIG9wdGlvbnMucGVyUGFnZTtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIG9yaWVudChwZXJjZW50KSArICIlIjtcbiAgfTtcblxuICBfcHJvdG8zLmNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NPZmZzZXRDZW50ZXIgPSBmdW5jdGlvbiBjc3NPZmZzZXRDZW50ZXIob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX3RoaXMkRGlyZWN0aW9uMyA9IHRoaXMuRGlyZWN0aW9uLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcmVzb2x2ZSA9IF90aGlzJERpcmVjdGlvbjMucmVzb2x2ZSxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9yaWVudCA9IF90aGlzJERpcmVjdGlvbjMub3JpZW50O1xuXG4gICAgaWYgKHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmlzRml4ZWRXaWR0aChvcHRpb25zKSkge1xuICAgICAgdmFyIF90aGlzJHBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNzc1ZhbHVlMiA9IHRoaXMucGFyc2VDc3NWYWx1ZShvcHRpb25zW3Jlc29sdmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJmaXhlZFdpZHRoIildKSxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHBhcnNlQ3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1ZhbHVlMi52YWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90aGlzJHBhcnNlQ3NzVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlMi51bml0O1xuXG4gICAgICByZXR1cm4gW3RoaXMuYnVpbGRDc3NWYWx1ZShvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZW50KHZhbHVlIC8gMiksIHVuaXQyKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXMgPSBbXTtcbiAgICB2YXIgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZSxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGdhcCA9IG9wdGlvbnMuZ2FwO1xuICAgIHZhbHVlcy5wdXNoKG9yaWVudCg1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAgLyBwZXJQYWdlKSArICIlIik7XG5cbiAgICBpZiAoZ2FwKSB7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF90aGlzJHBhcnNlQ3NzVmFsdWUzID0gdGhpcy5wYXJzZUNzc1ZhbHVlKGdhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLFxuICAgICAgICAgIF92YWx1ZSA9IF90aGlzJHBhcnNlQ3NzVmFsdWUzLnZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgICBfdW5pdCA9IF90aGlzJHBhcnNlQ3NzVmFsdWUzLnVuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuXG4gICAgICB2YXIgZ2FwT2Zmc2V0ID0gKF92YWx1ZSAvIHBlclBhZ2UgLSBfdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSAvIDI7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLmJ1aWxkQ3NzVmFsdWUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yaWVudChnYXBPZmZzZXQpLCBfdW5pdCkpO1xuICAgIH1cblxuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdmFsdWVzO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzT2Zmc2V0R2FwcyA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjc3NPZmZzZXRHYXBzKG9wdGlvbnMpIHtcbiAgICB2YXIgY2xvbmVDb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPSB0aGlzLmdldENsb25lQ291bnQoKTtcblxuICAgIGlmIChjbG9uZUNvdW50ICYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiBvcHRpb25zLmdhcCkge1xuICAgICAgdmFyIG9yaWVudCA9IHRoaXMuRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5vcmllbnQ7XG5cbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlNCA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnBhcnNlQ3NzVmFsdWUob3B0aW9ucy5nYXApLFxuICAgICAgICAgIHZhbHVlID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ190aGlzJHBhcnNlQ3NzVmFsdWU0LnZhbHVlLFxuICAgICAgICAgIHVuaXQyID0gX3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzJHBhcnNlQ3NzVmFsdWU0LnVuaXQ7XG5cbiAgICAgIGlmICh0aGlzLmlzRml4ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV2lkdGgob3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUob3JpZW50KHZhbHVlICogY2xvbmVDb3VudCksIHVuaXQyKTtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnYXBzID0gY2xvbmVDb3VudCAvIHBlclBhZ2U7XG4gICAgICByZXR1cm4gdGhpcy5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VpbGRDc3NWYWx1ZShvcmllbnQoZ2FwcyAqIHZhbHVlKSwgdW5pdDIpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICByZXR1cm4gIiI7XG4gIH07XG5cbiAgX3Byb3RvMy5yZXNvbHZlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHJlc29sdmUocHJvcCkge1xuICAgIHJldHVybiBjYW1lbFRvS2ViYWIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuRGlyZWN0aW9uLnJlc29sdmUocHJvcCkpO1xuICB9O1xuXG4gIF9wcm90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28zLmNzc1BhZGRpbmcgPSBmdW5jdGlvbiBjc3NQYWRkaW5nKG9wdGlvbnMsIHJpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodCkge1xuICAgIHZhciBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nO1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJvcCA9IHRoaXMuRGlyZWN0aW9uLnJlc29sdmUocmlnaHQgPyAicmlnaHQiIDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJsZWZ0IiwgdHJ1ZSk7XG4gICAgcmV0dXJuIHBhZGRpbmcgJiYgdW5pdChwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ1twcm9wXSB8fCAoaXNPYmplY3QocGFkZGluZykgPyAwIDogcGFkZGluZykpIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAiMHB4IjtcbiAgfTtcblxuICBfcHJvdG8zLmNzc1RyYWNrSGVpZ2h0ID0gZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGNzc1RyYWNrSGVpZ2h0KG9wdGlvbnMpIHtcbiAgICB2YXIgaGVpZ2h0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICIiO1xuXG4gICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICBoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0ID0gdGhpcy5jc3NIZWlnaHQob3B0aW9ucyk7XG4gICAgICBhc3NlcnQoaGVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCwgXCciaGVpZ2h0IiBpcyBtaXNzaW5nLlwnKTtcbiAgICAgIGhlaWdodCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiY2FsYygiICsgaGVpZ2h0ICsgIiAtICIgKyB0aGlzLmNzc1BhZGRpbmcob3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMsIGZhbHNlKSArICIgLSAiICsgdGhpcy5jc3NQYWRkaW5nKG9wdGlvbnMsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKSArICIpIjtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8zLmNzc0hlaWdodCA9IGZ1bmN0aW9uIGNzc0hlaWdodChvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHJldHVybiB1bml0KG9wdGlvbnMuaGVpZ2h0KTtcbiAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3Byb3RvMy5jc3NTbGlkZVdpZHRoID0gZnVuY3Rpb24gY3NzU2xpZGVXaWR0aCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaWR0aCA/ICIiIDogdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQob3B0aW9ucy5maXhlZFdpZHRoKSB8fCAodGhpcy5pc1ZlcnRpY2FsKCkgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiIgOiB0aGlzLmNzc1NsaWRlU2l6ZShvcHRpb25zKSk7XG4gIH07XG5cbiAgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90bzMuY3NzU2xpZGVIZWlnaHQgPSBmdW5jdGlvbiBjc3NTbGlkZUhlaWdodChvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucykge1xuICAgIHJldHVybiB1bml0KG9wdGlvbnMuZml4ZWRIZWlnaHQpIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAodGhpcy5pc1ZlcnRpY2FsKCkgPyBvcHRpb25zLmF1dG9IZWlnaHQgPyAiIiA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmNzc1NsaWRlU2l6ZShvcHRpb25zKSA6IHRoaXMuY3NzSGVpZ2h0KG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKSk7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NTbGlkZVNpemUgPSBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY3NzU2xpZGVTaXplKG9wdGlvbnMpIHtcbiAgICB2YXIgZ2FwID0gdW5pdChvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5nYXApO1xuICAgIHJldHVybiAiY2FsYygoMTAwJSIgKyAoZ2FwICYmICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICsgIiArIGdhcCkgKyAiKS8iICsgKG9wdGlvbnMucGVyUGFnZSB8fCAxKSArIChnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwICYmICIgLSAiICsgZ2FwKSArICIpIjtcbiAgfTtcblxuICBfcHJvdG8zLmNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NBc3BlY3RSYXRpbyA9IGZ1bmN0aW9uIGNzc0FzcGVjdFJhdGlvKG9wdGlvbnMpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgdmFyIGhlaWdodFJhdGlvID0gb3B0aW9ucy5oZWlnaHRSYXRpbztcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGhlaWdodFJhdGlvID8gIiIgKyAxIC8gaGVpZ2h0UmF0aW8gOiAiIjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZENzc1ZhbHVlID0gZnVuY3Rpb24gYnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkQ3NzVmFsdWUodmFsdWUsIHVuaXQyKSB7XG4gICAgcmV0dXJuICIiICsgdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlICsgdW5pdDI7XG4gIH07XG5cbiAgX3Byb3RvMy5wYXJzZUNzc1ZhbHVlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhcnNlQ3NzVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNTdHJpbmcoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlKSkge1xuICAgICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAwO1xuICAgICAgdmFyIHVuaXQyID0gdmFsdWUucmVwbGFjZSgvXFxkKihcXC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxkKik/LywgIiIpIHx8ICJweCI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWU6IG51bWJlcixcbiAgICAgICAgdW5pdDogdW5pdDJcbiAgICAgIH07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdW5pdDogInB4IlxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvMy5wYXJzZUJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidha3BvaW50cyA9IGZ1bmN0aW9uIHBhcnNlQnJlYWtwb2ludHMoKSB7XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfdGhpczkgPSB0aGlzO1xuXG4gICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5vcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5icmVha3BvaW50cztcbiAgICB0aGlzLmJyZWFrcG9pbnRzLnB1c2goWyJkZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXVsdCIsIHRoaXMub3B0aW9uc10pO1xuXG4gICAgaWYgKGJyZWFrcG9pbnRzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgZm9yT3duKGJyZWFrcG9pbnRzLCBmdW5jdGlvbiAob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoKSB7XG4gICAgICAgIF90aGlzOS5icmVha3BvaW50cy5wdXNoKFt3aWR0aCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1lcmdlKG1lcmdlKHt9LCBfdGhpczkub3B0aW9ucyksIG9wdGlvbnMpXSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMuaXNGaXhlZFdpZHRoID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGlzRml4ZWRXaWR0aChvcHRpb25zKSB7XG4gICAgcmV0dXJuICEhbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnNbdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSgiZml4ZWRXaWR0aCIpXTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ307XG5cbiAgX3Byb3RvMy5pc0xvb3AgPSBmdW5jdGlvbiBpc0xvb3AoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gTE9PUDtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5pc0NlbnRlciA9IGZ1bmN0aW9uIGlzQ2VudGVyKG9wdGlvbnMpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgPT09ICJjZW50ZXIiKSB7XG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKHRoaXMuaXNMb29wKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFNMSURFKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICByZXR1cm4gIXRoaXMub3B0aW9ucy50cmltU3BhY2U7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBfcHJvdG8zLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1ZlcnRpY2FsID0gZnVuY3Rpb24gaXNWZXJ0aWNhbCgpIHtcbiAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09IFRUQjtcbiAgfTtcblxuICBfcHJvdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvMy5idWlsZENsYXNzZXMgPSBmdW5jdGlvbiBidWlsZENsYXNzZXMoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHJldHVybiBbQ0xBU1NfUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1QsIENMQVNTX1JPT1QgKyAiLS0iICsgb3B0aW9ucy50eXBlLCBDTEFTU19ST09UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbiwgb3B0aW9ucy5kcmFnICYmIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19ST09UICsgIi0tZHJhZ2dhYmxlIiwgb3B0aW9ucy5pc05hdmlnYXRpb24gJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1JPT1QgKyAiLS1uYXYiLCBDTEFTU19BQ1RJVkUsICF0aGlzLmNvbmZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cuaGlkZGVuICYmIENMQVNTX1JFTkRFUkVEXS5maWx0ZXIoQm9vbGVhbikuam9pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIiAiKTtcbiAgfTtcblxuICBfcHJvdG8zLmJ1aWxkQXR0cnMgPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYnVpbGRBdHRycyhhdHRycykge1xuICAgIHZhciBhdHRyID0gIiI7XG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3bihhdHRycywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGF0dHIgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlID8gIiAiICsgY2FtZWxUb0tlYmFiKGtleSkgKyAiPVxcIiIgKyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiXFwiIiA6ICIiO1xuICAgIH0pO1xuICAgIHJldHVybiBhdHRyLnRyaW0oKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZFN0eWxlcyA9IGZ1bmN0aW9uIGJ1aWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFN0eWxlcyhzdHlsZXMpIHtcbiAgICB2YXIgc3R5bGUgPSAiIjtcbiAgICBmb3JPd24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHN0eWxlcywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHN0eWxlICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciICIgKyBjYW1lbFRvS2ViYWIoa2V5KSArICI6IiArIHZhbHVlICsgIjsiO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9KTtcbiAgICByZXR1cm4gc3R5bGUudHJpbSgpO1xuICB9O1xuXG4gIF9wcm90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczLnJlbmRlclNsaWRlcyA9IGZ1bmN0aW9uIHJlbmRlclNsaWRlcygpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhZyA9IHRoaXMuY29uZmlnLnNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZVRhZztcbiAgICByZXR1cm4gdGhpcy5zbGlkZXMubWFwKGZ1bmN0aW9uIChjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVudCkge1xuICAgICAgcmV0dXJuICI8IiArIHRhZyArICIgIiArIF90aGlzMTAuYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1aWxkQXR0cnMoY29udGVudC5hdHRycykgKyAiPiIgKyAoY29udGVudC5odG1sIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAiIikgKyAiPC8iICsgdGFnICsgIj4iO1xuICAgIH0pLmpvaW4oIiIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmNvdmVyID0gZnVuY3Rpb24gY292ZXIoY29udGVudCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgc3R5bGVzID0gY29udGVudC5zdHlsZXMsXG4gICAgICAgIF9jb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCRodG1sID0gY29udGVudC5odG1sLFxuICAgICAgICBodG1sID0gX2NvbnRlbnQkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWwgPT09IHZvaWQgMCA/ICIiIDogX2NvbnRlbnQkaHRtbDtcblxuICAgIGlmICh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5vcHRpb25zLmNvdmVyICYmICF0aGlzLm9wdGlvbnMubGF6eUxvYWQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB2YXIgc3JjID0gaHRtbC5tYXRjaCgvPGltZy4qP3NyY1xccyo9XFxzKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoW1wnIl0pKC4rPylcXDEuKj8+Lyk7XG5cbiAgICAgIGlmIChzcmMgJiYgc3JjWzInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSkge1xuICAgICAgICBzdHlsZXMuYmFja2dyb3VuZCA9ICJjZW50ZXIvY292ZXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvLXJlcGVhdCB1cmwoXCciICsgc3JjWzJdICsgIlwnKSI7XG4gICAgICB9XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgfTtcblxuICBfcHJvdG8zLmdlbmVyYXRlQ2xvbmVzID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdlbmVyYXRlQ2xvbmVzKGNvbnRlbnRzKSB7XG4gICAgdmFyIGNsYXNzZXMgPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmNsYXNzZXM7XG4gICAgdmFyIGNvdW50ID0gdGhpcy5nZXRDbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb3VudCgpO1xuICAgIHZhciBzbGlkZXMgPSBjb250ZW50cy5zbGljZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHdoaWxlIChzbGlkZXMubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKHNsaWRlcywgc2xpZGVzKTtcbiAgICB9XG5cbiAgICBwdXNoKHNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xpY2UoLWNvdW50KS5yZXZlcnNlKCksIHNsaWRlcy5zbGljZSgwLCBjb3VudCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKS5mb3JFYWNoKGZ1bmN0aW9uIChjb250ZW50LCBpbmRleCkge1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRycyA9IGFzc2lnbih7fSwgY29udGVudC5hdHRycywge1xuICAgICAgICBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6IGNvbnRlbnQuYXR0cnMuY2xhc3MgKyAiICIgKyBjbGFzc2VzLmNsb25lXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgICB2YXIgY2xvbmUgPSBhc3NpZ24oe30sIGNvbnRlbnQsIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGF0dHJzOiBhdHRyc1xuICAgICAgfSk7XG4gICAgICBpbmRleCA8IGNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA/IGNvbnRlbnRzLnVuc2hpZnQoY2xvbmUpIDogY29udGVudHMucHVzaChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMuZ2V0Q2xvbmVDb3VudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBnZXRDbG9uZUNvdW50KCkge1xuICAgIGlmICh0aGlzLmlzTG9vcCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAob3B0aW9ucy5jbG9uZXMpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lcztcbiAgICAgIH1cblxuICAgICAgdmFyIHBlclBhZ2UgPSBtYXguYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHZvaWQgMCwgdGhpcy5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24gKF9yZWY2KSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICB2YXIgb3B0aW9uczIgPSBfcmVmNlsxXTtcbiAgICAgICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zMi5wZXJQYWdlO1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHBlclBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlICogKChvcHRpb25zLmZsaWNrTWF4UGFnZXMgfHwgMSkgKyAxKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgX3Byb3RvMy5yZW5kZXJBcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dzID0gZnVuY3Rpb24gcmVuZGVyQXJyb3dzKCkge1xuICAgIHZhciBodG1sID0gIiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIGh0bWwgKz0gIjxkaXYgY2xhc3M9XFwiIiArIHRoaXMub3B0aW9ucy5jbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Nlcy5hcnJvd3MgKyAiXFwiPiI7XG4gICAgaHRtbCArPSB0aGlzLnJlbmRlckFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndyh0cnVlKTtcbiAgICBodG1sICs9IHRoaXMucmVuZGVyQXJyb3coZmFsc2UpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBodG1sICs9ICI8L2Rpdj4iO1xuICAgIHJldHVybiBodG1sO1xuICB9O1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfcHJvdG8zLnJlbmRlckFycm93ID0gZnVuY3Rpb24gcmVuZGVyQXJyb3cocHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNsYXNzZXMgPSBfdGhpcyRvcHRpb25zLmNsYXNzZXMsXG4gICAgICAgIGkxOG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gX3RoaXMkb3B0aW9ucy5pMThuO1xuICAgIHZhciBhdHRycyA9IHtcbiAgICAgIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzczogY2xhc3Nlcy5hcnJvdyArICIgIiArIChwcmV2ID8gY2xhc3Nlcy5wcmV2ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGNsYXNzZXMubmV4dCksXG4gICAgICB0eXBlOiAiYnV0dG9uIixcbiAgICAgIGFyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhTGFiZWw6IHByZXYgPyBpMThuLnByZXYgOiBpMThuLm5leHRcbiAgICB9O1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gIjxidXR0b24gIiArIHRoaXMuYnVpbGRBdHRycyhhdHRycykgKyAiPjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ZnIHhtbG5zPVxcIiIgKyBYTUxfTkFNRV9TUEFDRSArICJcXCIgdmlld0JveCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiMCAwICIgKyBTSVpFICsgIiAiICsgU0laRSArICJcXCIgd2lkdGg9XFwiIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyBTSVpFICsgIlxcIiBoZWlnaHQ9XFwiIiArIFNJWkUgKyAiXFwiPjxwYXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkPVxcIiIgKyAodGhpcy5vcHRpb25zLmFycm93UGF0aCB8fCBQQVRIKSArICJcXCIgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+PC9zdmc+PC9idXR0b24+IjtcbiAgfTtcblxuICBfcHJvdG8zLmh0bWwgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaHRtbCgpIHtcbiAgICB2YXIgX3RoaXMkY29uZmlnID0gdGhpcy5jb25mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnLFxuICAgICAgICByb290Q2xhc3MgPSBfdGhpcyRjb25maWcucm9vdENsYXNzLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgbGlzdFRhZyA9IF90aGlzJGNvbmZpZy5saXN0VGFnLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyb3dzID0gX3RoaXMkY29uZmlnLmFycm93cyxcbiAgICAgICAgYmVmb3JlVHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrID0gX3RoaXMkY29uZmlnLmJlZm9yZVRyYWNrLFxuICAgICAgICBhZnRlclRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF90aGlzJGNvbmZpZy5hZnRlclRyYWNrLFxuICAgICAgICBzbGlkZXIgPSBfdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMkY29uZmlnLnNsaWRlcixcbiAgICAgICAgYmVmb3JlU2xpZGVyID0gX3RoaXMkYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmZpZy5iZWZvcmVTbGlkZXIsXG4gICAgICAgIGFmdGVyU2xpZGVyID0gX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmZpZy5hZnRlclNsaWRlcjtcbiAgICB2YXIgaHRtbCA9ICIiO1xuICAgIGh0bWwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJys9ICI8ZGl2IGlkPVxcIiIgKyB0aGlzLmlkICsgIlxcIiBjbGFzcz1cXCIiICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuYnVpbGRDbGFzc2VzKCkgKyAiICIgKyAocm9vdENsYXNzIHx8ICIiKSArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciXFwiPiI7XG4gICAgaHRtbCArPSAiPHN0eWxlPiIgKyB0aGlzLlN0eWxlLmJ1aWxkKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICsgIjwvc3R5bGU+IjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAgICAgIGh0bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsICs9IGJlZm9yZVNsaWRlciB8fCAiIjtcbiAgICAgIGh0bWwgKz0gIjxkaXYgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzPVxcInNwbGlkZV9fc2xpZGVyXFwiPiI7XG4gICAgfVxuXG4gICAgaHRtbCArPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVmb3JlVHJhY2sgfHwgIiI7XG5cbiAgICBpZiAoYXJyb3dzKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHRtbCArPSB0aGlzLnJlbmRlckFycm93cygpO1xuICAgIH1cblxuICAgIGh0bWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICs9ICI8ZGl2IGNsYXNzPVxcInNwbGlkZV9fdHJhY2tcXCI+IjtcbiAgICBodG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCArPSAiPCIgKyBsaXN0VGFnICsgIiBjbGFzcz1cXCJzcGxpZGVfX2xpc3RcXCI+IjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaHRtbCArPSB0aGlzLnJlbmRlclNsaWRlcygpO1xuICAgIGh0bWwgKz0gIjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyIgKyBsaXN0VGFnICsgIj4iO1xuICAgIGh0bWwgKz0gIjwvZGl2PiI7XG4gICAgaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWwgKz0gYWZ0ZXJUcmFjayB8fCAiIjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBodG1sICs9ICI8L2Rpdj4iO1xuICAgICAgaHRtbCArPSBhZnRlclNsaWRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgIiI7XG4gICAgfVxuXG4gICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGh0bWw7XG4gIH07XG5cbiAgcmV0dXJuIFNwbGlkZVJlbmRlcmVyO1xufSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZXhwb3J0IHsgQ0xBU1NFUywgQ0xBU1NfQUNUSVZFLCBDTEFTU19BUlJPVywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX0FSUk9XUywgQ0xBU1NfQVJST1dfTkVYVCwgQ0xBU1NfQVJST1dfUFJFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0NMT05FLCBDTEFTU19DT05UQUlORVIsIENMQVNTX0ZPQ1VTX0lOLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfSU5JVElBTElaRUQsIENMQVNTX0xJU1QsIENMQVNTX0xPQURJTkcsIENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19ORVhULCBDTEFTU19PVkVSRkxPVywgQ0xBU1NfUEFHSU5BVElPTiwgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BBR0lOQVRJT05fUEFHRSwgQ0xBU1NfUFJFViwgQ0xBU1NfUFJPR1JFU1MsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19QUk9HUkVTU19CQVIsIENMQVNTX1JPT1QsIENMQVNTX1NMSURFLCBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfU1BJTk5FUiwgQ0xBU1NfU1IsIENMQVNTX1RPR0dMRSwgQ0xBU1NfVE9HR0xFXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQQVVTRSwgQ0xBU1NfVE9HR0xFX1BMQVksIENMQVNTX1RSQUNLLCBDTEFTU19WSVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUJMRSwgREVGQVVMVFMsIEVWRU5UX0FDVElWRSwgRVZFTlRfQVJST1dTX01PVU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VELCBFVkVOVF9BUlJPV1NfVVBEQVRFRCwgRVZFTlRfQVVUT1BMQVlfUEFVU0UsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9BVVRPUExBWV9QTEFZLCBFVkVOVF9BVVRPUExBWV9QTEFZSU5HLCBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfQ0xJQ0ssIEVWRU5UX0RFU1RST1ksIEVWRU5UX0RSQUcsIEVWRU5UX0RSQUdHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VELCBFVkVOVF9EUkFHR0lORywgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9ISURERU4sIEVWRU5UX0lOQUNUSVZFLCBFVkVOVF9MQVpZTE9BRF9MT0FERUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFLCBFVkVOVF9NT1ZFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05BVklHQVRJT05fTU9VTlRFRCwgRVZFTlRfT1ZFUkZMT1csIEVWRU5UX1BBR0lOQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OX01PVU5URUQsIEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCwgRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQURZLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UX1JFU0laRUQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9TSElGVEVELCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfU0xJREVfS0VZRE9XTiwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfVklTSUJMRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEV2ZW50QmluZGVyLCBFdmVudEludGVyZmFjZSwgRkFERSwgTE9PUCwgTFRSLCBSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RMLCBSZXF1ZXN0SW50ZXJ2YWwsIFNMSURFLCBTVEFUVVNfQ0xBU1NFUywgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgU3BsaWRlUmVuZGVyZXIsIFN0YXRlLCBUVEIsIFRocm90dGxlLCBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzIGRlZmF1bHQgfTtcbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUuZXNtLmpzJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogMzQ6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy8qIVxuICogU3BsaWRlLmpzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBNSVRcbiAqIENvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0LG47dD10aGlzLG49ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHM9InJ0bCIsdScKICAgICAgICAgICAgICAgICAgICAgICAgYic9InR0YiIsbz17d2lkdGg6WyJoZWlnaHQiXSxsZWZ0OlsidG9wIiwicmlnaHQiXSxyaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6WyJib3R0b20iLCJsZWZ0Il0seDpbInkiXSxYOlsiWSJdLFk6WyJYIl0sQXJyb3dMZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDpbIkFycm93VXAiLCJBcnJvd1JpZ2h0Il0sQXJyb3dSaWdodDpbIkFycm93RG93biIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidBcnJvd0xlZnQiXX07ZnVuY3Rpb24gZSh0LG4sZSl7cmV0dXJue3Jlc29sdmU6ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKHQsbixpKXt2YXIgcj0oaT1pfHxlLmRpcmVjdGlvbikhPT1zfHxuP2k9PT11PzA6LTEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOjE7cmV0dXJuIG9bdF0mJm9bdF1bcl18fHQucmVwbGFjZSgvd2lkdGh8bGVmdHxyaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgYicvaSxmdW5jdGlvbih0LG4pe3Q9b1t0LnRvTG93ZXJDYXNlKCldW3JdfHx0O3JldHVybiAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxuP3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTp0fSl9LG9yaWVudDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24odCl7cmV0dXJuIHQqKGUuZGlyZWN0aW9uPT09cz8xOi0xKX19fXZhciBpPScKICAgICAgICAgICAgICAgICAgICAgICAgYicic3BsaWRlIix0PWkrIl9fIixyPWksYT10KyJ0cmFjayIsYz10KyJsaXN0IixoPXQrInNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSIsZj1oKyItLWNsb25lIixuPXQrImFycm93IixsPXQrInBhZ2luYXRpb24iLGQ9ImknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy1hY3RpdmUiLHY9e3R5cGU6InNsaWRlIixyb2xlOiJyZWdpb24iLHNwZWVkOjQwMCxwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyUGFnZToxLGNsb25lU3RhdHVzOiEwLGFycm93czohMCxwYWdpbmF0aW9uOiEwLHBhZ2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uS2V5Ym9hcmQ6ITAsaW50ZXJ2YWw6NWUzLHBhdXNlT25Ib3ZlcjohMCxwYXVzZU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkZvY3VzOiEwLHJlc2V0UHJvZ3Jlc3M6ITAsZWFzaW5nOiJjdWJpYy1iZXppZXIoMC4yNScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIDEsIDAuNSwgMSkiLGRyYWc6ITAsZGlyZWN0aW9uOiJsdHIiLHRyaW1TcGFjZTohMCxmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXNhYmxlTm9kZXM6ImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCBzZWxlY3QsIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnJhbWUiLGxpdmU6ITAsY2xhc3Nlczp7c2xpZGU6aCxjbG9uZTpmLGFycm93czp0KyJhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3dzIixhcnJvdzpuLHByZXY6bisiLS1wcmV2IixuZXh0Om4rIi0tbmV4dCIscGFnaW5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb246bCxwYWdlOmwrIl9fcGFnZSIsc3Bpbm5lcjp0KyJzcGlubmVyIn0saTE4bjp7cHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXY6IlByZXZpb3VzIHNsaWRlIixuZXh0OiJOZXh0IHNsaWRlIixmaXJzdDoiR28gdG8gZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpcnN0IHNsaWRlIixsYXN0OiJHbyB0byBsYXN0IHNsaWRlIixzbGlkZVg6IkdvIHRvIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSAlcyIscGFnZVg6IkdvIHRvIHBhZ2UgJXMiLHBsYXk6IlN0YXJ0IGF1dG9wbGF5IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2U6IlBhdXNlIGF1dG9wbGF5IixjYXJvdXNlbDoiY2Fyb3VzZWwiLHNsaWRlOiJzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUiLHNlbGVjdDoiU2VsZWN0IGEgc2xpZGUgdG8gc2hvdyIsc2xpZGVMYWJlbDoiJXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mICVzIn0scmVkdWNlZE1vdGlvbjp7c3BlZWQ6MCxyZXdpbmRTcGVlZDowLGF1dG9wbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneToicGF1c2UifX07ZnVuY3Rpb24gcCh0LG4saSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xpY2UuY2FsbCh0LG4saSl9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5iaW5kLmFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0LFtudWxsXS5jb25jYXQocChhcmd1bWVudHMsMSkpKX1mdW5jdGlvbiB3KHQsbil7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB0eXBlb2Ygbj09PXR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbCE9PXQmJncoIicKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QiLHQpfXZhciBtPUFycmF5LmlzQXJyYXkseT0oZyh3LCJmdW5jdGlvbiIpLGcoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3csInN0cmluZyIpKTtmdW5jdGlvbiB4KHQpe3JldHVybiBtKHQpP3Q6W3RdfWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBfKHQsbil7eCh0KS5mb3JFYWNoKG4pfWZ1bmN0aW9uIEEodCxuKXtyZXR1cm4gdC5wdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzaC5hcHBseSh0LHgobikpLHR9ZnVuY3Rpb24gTCh0LG4pe3JldHVybiBmdW5jdGlvbih0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dHJ5e3JldHVybiB0IGluc3RhbmNlb2YodC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3x8d2luZG93KS5IVE1MRWxlbWVudH1jYXRjaCh0KXtyZXR1cm4hMX19KHQpJiYodC5tcycKICAgICAgICAgICAgICAgICAgICAgICAgYidNYXRjaGVzU2VsZWN0b3J8fHQubWF0Y2hlcykuY2FsbCh0LG4pfWZ1bmN0aW9uIE0odCxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7cmV0dXJuIG4/KGk9bixuPShuPXQpP3Aobi5jaGlsZHJlbik6W10sKGk/bi5maWx0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uKHQpe3JldHVybiBMKHQsaSl9KTpuKVswXSk6dC5maXJzdEVsZW1lbnRDaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGQ7dmFyIGl9Zyh3LCJ1bmRlZmluZWQiKTt2YXIgRT1PYmplY3Qua2V5cztmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gUChuLGksdCl7biYmKHQ/RShuKS5yZXZlcnNlKCk6RShuKSkuZm9yRWFjaChmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24odCl7Il9fcHJvdG9fXyIhPT10JiZpKG5bdF0sdCl9KX1mdW5jdGlvbiBTKHIpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gcChhcmd1bWVudHMsMSkuZm9yRWFjaChmdW5jdGlvbihpKXtQKGksZnVuY3Rpb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qsbil7cltuXT1pW25dfSl9KSxyfWZ1bmN0aW9uIFgoaSl7cmV0dXJuIHAoYXJndW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywxKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1AodCxmdW5jdGlvbih0LG4pe20odCk/aVtuXScKICAgICAgICAgICAgICAgICAgICAgICAgYic9dC5zbGljZSgpOmIodCk/aVtuXT1YKHt9LGIoaVtuXSk/aVtuXTp7fSx0KTppW25dPXR9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl9KSxpfWZ1bmN0aW9uIGoodCl7Xyh0LGZ1bmN0aW9uKHQpe3QmJnQucGFyZW50Tm9kZSYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pfWZ1bmN0aW9uIEcodCl7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KHQpP3Q6dD90KyJweCI6IiJ9ZnVuY3Rpb24gTyh0LG4pe2lmKCF0KXRocm93IG5ldyBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jyb3IoIlsiK2krIl0gIisobnx8IiIpKX1NYXRoLm1pbjt2YXIgUj1NYXRoLm1heDtNYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaC5mbG9vcixNYXRoLmNlaWwsTWF0aC5hYnM7ZnVuY3Rpb24gVCh0KXtyZXR1cm4gdC5yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpfXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igej17fTtmdW5jdGlvbiBCKCl7dmFyIG89W107ZnVuY3Rpb24gaSh0LGkscil7Xyh0LGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbihuKXtuJiZfKGksZnVuY3Rpb24odCl7dC5zcGxpdCgiICIpLmZvckVhY2goZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uKHQpe3Q9dC5zcGxpdCgiLiIpO3Iobix0WzBdLHRbMV0pfSl9KX0pfXJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ257YmluZDpmdW5jdGlvbih0LG4scyx1KXtpKHQsbixmdW5jdGlvbih0LG4saSl7dmFyIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSJhZGRFdmVudExpc3RlbmVyImluIHQsZT1yP3QucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZCh0LG4scyx1KTp0LnJlbW92ZUxpc3RlbmVyLmJpbmQodCxzKTtyP3QuYWRkRXZlbnRMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdGVuZXIobixzLHUpOnQuYWRkTGlzdGVuZXIocyksby5wdXNoKFt0LG4saSxzLGVdKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0sdW5iaW5kOmZ1bmN0aW9uKHQsbixlKXtpKHQsbixmdW5jdGlvbihuLGkscil7bz1vLicKICAgICAgICAgICAgICAgICAgICAgICAgYidmaWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISEodFswXSE9PW58fHRbMV0hPT1pfHx0WzJdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyE9PXJ8fGUmJnRbM10hPT1lKXx8KHRbNF0oKSwhMSl9KX0pfSxkaXNwYXRjaDpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24odCxuLGkpe3ZhciByO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBDdXN0b21FdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYic/cj1uZXcgQ3VzdG9tRXZlbnQobix7YnViYmxlczohMCxkZXRhaWw6aX0pOihyPWRvY3VtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5jcmVhdGVFdmVudCgiQ3VzdG9tRXZlbnQiKSkuaW5pdEN1c3RvbUV2ZW50KG4sITAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCExLGkpLHQuZGlzcGF0Y2hFdmVudChyKSxyfSxkZXN0cm95OmZ1bmN0aW9uKCl7by5mbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaChmdW5jdGlvbih0KXt0WzRdKCl9KSxvLmxlbmd0aD0wfX19ZnVuY3Rpb24gQyh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dmFyIGk9dD90LmV2ZW50LmJ1czpkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpLHI9QigpO3JldHVybiB0JiZ0LmV2ZW50Lm9uKCJkZXN0cm95IixyLmRlc3Ryb3kpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTKHIse2J1czppLG9uOmZ1bmN0aW9uKHQsbil7ci5iaW5kKGkseCh0KS5qb2luKCIgIiksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKHQpe24uYXBwbHkobixtKHQuZGV0YWlsKT90LmRldGFpbDpbXSl9KX0sb2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZjpnKHIudW5iaW5kLGkpLGVtaXQ6ZnVuY3Rpb24odCl7ci5kaXNwYXRjaChpLHQscChhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidndW1lbnRzLDEpKX19KX12YXIgVz17bGlzdFRhZzoidWwiLHNsaWRlVGFnOiJsaSJ9LGs9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4pe3RoaXMuc3R5bGVzPXt9LHRoaXMuaWQ9dCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5vcHRpb25zPW59dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4ucnVsZT1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24odCxuLGkscil7cj10aGlzLnN0eWxlc1tyPXJ8fCJkZWZhdWx0Il09dGhpcy5zdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzW3JdfHx7fTsoclt0XT1yW3RdfHx7fSlbbl09aX0sbi5idWlsZD1mdW5jdGlvbigpe3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgaT10aGlzLG49IiI7cmV0dXJuIHRoaXMuc3R5bGVzLmRlZmF1bHQmJihuKz10aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZFNlbGVjdG9ycyh0aGlzLnN0eWxlcy5kZWZhdWx0KSksT2JqZWN0LmtleXModGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Muc3R5bGVzKS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIm1pbiI9PT1pLm9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm1lZGlhUXVlcnk/K3QtK246K24tK3R9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJkZWZhdScKICAgICAgICAgICAgICAgICAgICAgICAgYidsdCIhPT10JiYobj0obis9IkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICIrdCsiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B4KSB7IikraS5idWlsZFNlbGVjdG9ycyhpLnN0eWxlc1t0XSkrIn0iKX0pLG59LG4uYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkU2VsZWN0b3JzPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscj0iIjtyZXR1cm4gUCh0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbih0LG4pe249KCIjIitpLmlkKyIgIituKS50cmltKCkscis9bisiIHsiLFAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsZnVuY3Rpb24odCxuKXshdCYmMCE9PXR8fChyKz1uKyI6ICIrdCsiOyIpfSkscis9In0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIn0pLHJ9LHR9KCk7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LG4saSxyKXt0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5zbGlkZXM9W10sdGhpcy5vcHRpb25zPXt9LHRoaXMuYnJlYWtwb2ludHM9W10sWCh2JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxyfHx7fSksWChYKHRoaXMub3B0aW9ucyx2KSxufHx7fSksdGhpcy5jb250ZW50cz10LHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmNvbmZpZz1TKHt9LFcsaXx8e30pLHRoaXMuaWQ9dGhpcy5jb25maWcuaWR8fCIiKycKICAgICAgICAgICAgICAgICAgICAgICAgYicocj0ic3BsaWRlIikrKChyPXpbcl09KHpbcl18fDApKzEpPDEwPyIwIityOiIiK3IpLHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLlN0eWxlPW5ldyBrKHRoaXMuaWQsdGhpcy5vcHRpb25zKSx0aGlzLkRpcmVjdGlvbj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSgwLDAsdGhpcy5vcHRpb25zKSxPKHRoaXMuY29udGVudHMubGVuZ3RoLCJQcm92aWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdCBsZWFzdCAxIGNvbnRlbnQuIiksdGhpcy5pbml0KCl9dC5jbGVhbj1mdW5jdGlvbih0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dmFyIG4saT1DKHQpLm9uLHI9dC5yb290LHQ9KHQ9ciwobj0iLiIrZik/cCh0LnF1ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIneVNlbGVjdG9yQWxsKG4pKTpbXSk7aSgibW91bnRlZCIsZnVuY3Rpb24oKXtqKE0ociwicycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlIikpfSksaih0KX07dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuIG4uaW5pdD1mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oKXt0aGlzLnBhcnNlQnJlYWtwb2ludHMoKSx0aGlzLmluaXRTbGlkZXMoKSx0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5yZWdpc3RlclJvb3RTdHlsZXMoKSx0aGlzLnJlZ2lzdGVyVHJhY2tTdHlsZXMoKSx0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5yZWdpc3RlclNsaWRlU3R5bGVzKCksdGhpcy5yZWdpc3Rlckxpc3RTdHlsZXMoKX0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uaW5pdFNsaWRlcz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7QSh0aGlzLnNsaWRlcyx0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5jb250ZW50cy5tYXAoZnVuY3Rpb24odCxuKXsodD15KHQpP3todG1sOnR9OnQpLnN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXM9dC5zdHlsZXN8fHt9LHQuYXR0cnM9dC5hdHRyc3x8e30saS5jb3Zlcih0KTtuPWkuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuY2xhc3Nlcy5zbGlkZSsiICIrKDA9PT1uPyJpcy1hY3RpdmUiOiIiKTtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIFModC5hdHRycyx7Y2xhc3M6KG4rIiAiKyh0LmF0dHJzLmNsYXNzfHwiIikpLnRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYidtKCksc3R5bGU6aS5idWlsZFN0eWxlcyh0LnN0eWxlcyl9KSx0fSkpLHRoaXMuaXNMb29wJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpJiZ0aGlzLmdlbmVyYXRlQ2xvbmVzKHRoaXMuc2xpZGVzKX0sbi5yZWdpc3RlclJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3R5bGVzPWZ1bmN0aW9uKCl7dmFyIGk9dGhpczt0aGlzLmJyZWFrcG9pbnRzLmZvckVhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0sdD10WzFdO2kuU3R5bGUucnVsZSgiICIsIm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gtd2lkdGgiLEcodC53aWR0aCksbil9KX0sbi5yZWdpc3RlclRyYWNrU3R5bGVzPWZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbigpe3ZhciBpPXRoaXMscj10aGlzLlN0eWxlLGU9Ii4iK2E7dGhpcy5icmVha3BvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10WzBdLHQ9dFsxXTtyLnJ1bGUoZSxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5yZXNvbHZlKCJwYWRkaW5nTGVmdCIpLGkuY3NzUGFkZGluZyh0LCExKSxuKSxyLnJ1bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGUsaS5yZXNvbHZlKCJwYWRkaW5nUmlnaHQiKSxpLmNzc1BhZGRpbmcodCwhMCksbikscicKICAgICAgICAgICAgICAgICAgICAgICAgYicucnVsZShlLCJoZWlnaHQiLGkuY3NzVHJhY2tIZWlnaHQodCksbil9KX0sbi5yZWdpc3RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JMaXN0U3R5bGVzPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxyPXRoaXMuU3R5bGUsZT0iLiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInK2M7dGhpcy5icmVha3BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0sdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9dFsxXTtyLnJ1bGUoZSwidHJhbnNmb3JtIixpLmJ1aWxkVHJhbnNsYXRlKHQpLG4pLGkuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1NsaWRlSGVpZ2h0KHQpfHxyLnJ1bGUoZSwiYXNwZWN0LXJhdGlvIixpLmNzc0FzcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RSYXRpbyh0KSxuKX0pfSxuLnJlZ2lzdGVyU2xpZGVTdHlsZXM9ZnVuY3Rpb24oKXt2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGk9dGhpcyxyPXRoaXMuU3R5bGUsZT0iLiIraDt0aGlzLmJyZWFrcG9pbnRzLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0sdD10WzFdO3IucnVsZShlLCJ3aWR0aCIsaS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzU2xpZGVXaWR0aCh0KSxuKSxyLnJ1bGUoZSwiaGVpZ2h0IixpLmNzc1NsaWRlSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCh0KXx8IjEwMCUiLG4pLHIucnVsZShlLGkucmVzb2x2ZSgibWFyZ2luUmlnaHQiKSxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0LmdhcCl8fCIwcHgiLG4pLHIucnVsZShlKyIgPiBpbWciLCJkaXNwbGF5Iix0LmNvdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncj8ibm9uZSI6ImlubGluZSIsbil9KX0sbi5idWlsZFRyYW5zbGF0ZT1mdW5jdGlvbih0KScKICAgICAgICAgICAgICAgICAgICAgICAgYid7dmFyIG49dGhpcy5EaXJlY3Rpb24saT1uLnJlc29sdmUsbj1uLm9yaWVudCxyPVtdO3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gci5wdXNoKHRoaXMuY3NzT2Zmc2V0Q2xvbmVzKHQpKSxyLnB1c2godGhpcy5jc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2Zmc2V0R2Fwcyh0KSksdGhpcy5pc0NlbnRlcih0KSYmKHIucHVzaCh0aGlzLmJ1aWxkQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlKG4oLTUwKSwiJSIpKSxyLnB1c2guYXBwbHkocix0aGlzLmNzc09mZnNldENlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXIodCkpKSxyLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuInQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2xhdGUiK2koIlgiKSsiKCIrdCsiKSJ9KS5qb2luKCIgIil9LG4uY3NzT2Zmc2V0QycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lcz1mdW5jdGlvbih0KXt2YXIgbixpPXRoaXMuRGlyZWN0aW9uLHI9aS5yZXNvbHZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxpPWkub3JpZW50LGU9dGhpcy5nZXRDbG9uZUNvdW50KCk7cmV0dXJuIHRoaXMuaXNGaXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRXaWR0aCh0KT8obj0ocj10aGlzLnBhcnNlQ3NzVmFsdWUodFtyKCJmaXhlZFdpZHRoIicKICAgICAgICAgICAgICAgICAgICAgICAgYicpXSkpLnZhbHVlLHI9ci51bml0LHRoaXMuYnVpbGRDc3NWYWx1ZShpKG4pKmUscikpOmkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEwMCplL3QucGVyUGFnZSkrIiUifSxuLmNzc09mZnNldENlbnRlcj1mdW5jdGlvbih0KXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIG4saSxyPXRoaXMuRGlyZWN0aW9uLGU9ci5yZXNvbHZlLHI9ci5vcmllbnQ7cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0aGlzLmlzRml4ZWRXaWR0aCh0KT8obj0oZT10aGlzLnBhcnNlQ3NzVmFsdWUodFtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJygiZml4ZWRXaWR0aCIpXSkpLnZhbHVlLGU9ZS51bml0LFt0aGlzLmJ1aWxkQ3NzVmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHIobi8yKSxlKV0pOihuPXQucGVyUGFnZSxlPXQuZ2FwLCh0PVtdKS5wdXNoKHIoNTAvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicpKyIlIiksZSYmKGk9KGU9dGhpcy5wYXJzZUNzc1ZhbHVlKGUpKS52YWx1ZSxlPWUudW5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsdC5wdXNoKHRoaXMuYnVpbGRDc3NWYWx1ZShyKChpL24taSkvMiksZSkpKSx0KX0sbi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzT2Zmc2V0R2Fwcz1mdW5jdGlvbih0KXt2YXIgbixpLHIsZT10aGlzLmdldENsb25lQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCk7cmV0dXJuIGUmJnQuZ2FwPyhuPXRoaXMuRGlyZWN0aW9uLm9yaWVudCxpPShyJwogICAgICAgICAgICAgICAgICAgICAgICBiJz10aGlzLnBhcnNlQ3NzVmFsdWUodC5nYXApKS52YWx1ZSxyPXIudW5pdCx0aGlzLmlzRmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGVkV2lkdGgodCk/dGhpcy5idWlsZENzc1ZhbHVlKG4oaSplKSxyKToodD10LnBlclBhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlLHRoaXMuYnVpbGRDc3NWYWx1ZShuKGUvdCppKSxyKSkpOiIifSxuLnJlc29sdmU9ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKHQpe3JldHVybiBUKHRoaXMuRGlyZWN0aW9uLnJlc29sdmUodCkpfSxuLmNzc1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkaW5nPWZ1bmN0aW9uKHQsbil7dD10LnBhZGRpbmcsbj10aGlzLkRpcmVjdGlvbi5yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZShuPyJyaWdodCI6ImxlZnQiLCEwKTtyZXR1cm4gdCYmRyh0W25dfHwoYih0KT8wJwogICAgICAgICAgICAgICAgICAgICAgICBiJzp0KSl8fCIwcHgifSxuLmNzc1RyYWNrSGVpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBuPSIiO3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJihPKG49dGhpcy5jc3NIZWlnaHQodCksXCciaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCIgaXMgbWlzc2luZy5cJyksbj0iY2FsYygiK24rIiAtICIrdGhpcy5jc3NQYWRkaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyh0LCExKSsiIC0gIit0aGlzLmNzc1BhZGRpbmcodCwhMCkrIikiKSxufSxuLmNzc0hlaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIEcodC5oZWlnaHQpfSxuLmNzc1NsaWRlV2lkdGg9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKHQpe3JldHVybiB0LmF1dG9XaWR0aD8iIjpHKHQuZml4ZWRXaWR0aCl8fCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5pc1ZlcnRpY2FsKCk/IiI6dGhpcy5jc3NTbGlkZVNpemUodCkpfSxuLmNzc1NsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZUhlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gRyh0LmZpeGVkSGVpZ2h0KXx8KHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzVmVydGljYWwoKT90LmF1dG9IZWlnaHQ/IiI6dGhpcy5jc3NTbGlkZVNpemUodCk6dGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuY3NzSGVpZ2h0KHQpKX0sbi5jc3NTbGlkZVNpemU9ZnVuY3Rpb24odCl7dmFyIG49RycKICAgICAgICAgICAgICAgICAgICAgICAgYicodC5nYXApO3JldHVybiJjYWxjKCgxMDAlIisobiYmIiArICIrbikrIikvIisodC5wZXJQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZXx8MSkrKG4mJiIgLSAiK24pKyIpIn0sbi5jc3NBc3BlY3RSYXRpbz1mdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCl7dD10LmhlaWdodFJhdGlvO3JldHVybiB0PyIiKzEvdDoiIn0sbi5idWlsZENzc1ZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZT1mdW5jdGlvbih0LG4pe3JldHVybiIiK3Qrbn0sbi5wYXJzZUNzc1ZhbHVlPWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbih0KXtyZXR1cm4geSh0KT97dmFsdWU6cGFyc2VGbG9hdCh0KXx8MCx1bml0OnQucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2UoL1xcZCooXFwuXFxkKik/LywiIil8fCJweCJ9Ont2YWx1ZTp0LHVuaXQ6InB4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ9fSxuLnBhcnNlQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHQ9dGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5icmVha3BvaW50czt0aGlzLmJyZWFrcG9pbnRzLnB1c2goWyJkZWZhdWx0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsdGhpcy5vcHRpb25zXSksdCYmUCh0LGZ1bmN0aW9uKHQsbil7aS5icmVha3BvaW50cy5wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaChbbixYKFgoe30saS5vcHRpb25zKSx0KV0pfSl9LG4uaXNGaXhlZFdpZHRoPWZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbih0KXtyZXR1cm4hIXRbdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSgiZml4ZWRXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciKV19LG4uaXNMb29wPWZ1bmN0aW9uKCl7cmV0dXJuImxvb3AiPT09dGhpcy5vcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50eXBlfSxuLmlzQ2VudGVyPWZ1bmN0aW9uKHQpe2lmKCJjZW50ZXIiPT09dC5mb2N1cyknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne2lmKHRoaXMuaXNMb29wKCkpcmV0dXJuITA7aWYoInNsaWRlIj09PXRoaXMub3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicudHlwZSlyZXR1cm4hdGhpcy5vcHRpb25zLnRyaW1TcGFjZX1yZXR1cm4hMX0sbi5pc1ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0aWNhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uPT09dX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG4uYnVpbGRDbGFzc2VzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYidbcixyKyItLSIrdC50eXBlLHIrIi0tIit0LmRpcmVjdGlvbix0LmRyYWcmJnIrIi0tZHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dnYWJsZSIsdC5pc05hdmlnYXRpb24mJnIrIi0tbmF2IixkLCF0aGlzLmNvbmZpZy5oaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuJiYiaXMtcmVuZGVyZWQiXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfSxuLmJ1aScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZEF0dHJzPWZ1bmN0aW9uKHQpe3ZhciBpPSIiO3JldHVybiBQKHQsZnVuY3Rpb24odCxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7aSs9dD8iICIrVChuKStcJz0iXCcrdCtcJyJcJzoiIn0pLGkudHJpbSgpfSxuLmJ1aWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZFN0eWxlcz1mdW5jdGlvbih0KXt2YXIgaT0iIjtyZXR1cm4gUCh0LGZ1bmN0aW9uKHQsbicKICAgICAgICAgICAgICAgICAgICAgICAgYicpe2krPSIgIitUKG4pKyI6Iit0KyI7In0pLGkudHJpbSgpfSxuLnJlbmRlclNsaWRlcz1mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24oKXt2YXIgbj10aGlzLGk9dGhpcy5jb25maWcuc2xpZGVUYWc7cmV0dXJuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnNsaWRlcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIjwiK2krIiAiK24uYnVpbGRBdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cnModC5hdHRycykrIj4iKyh0Lmh0bWx8fCIiKSsiPC8iK2krIj4ifSkuam9pbigiIil9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxuLmNvdmVyPWZ1bmN0aW9uKHQpe3ZhciBuPXQuc3R5bGVzLHQ9dC5odG1sLHQ9dm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMD09PXQ/IiI6dDt0aGlzLm9wdGlvbnMuY292ZXImJiF0aGlzLm9wdGlvbnMubGF6eUxvYScKICAgICAgICAgICAgICAgICAgICAgICAgYidkJiYodD10Lm1hdGNoKC88aW1nLio/c3JjXFxzKj1cXHMqKFtcJyJdKSguKz8pXFwxLio/JwogICAgICAgICAgICAgICAgICAgICAgICBiJz4vKSkmJnRbMl0mJihuLmJhY2tncm91bmQ9ImNlbnRlci9jb3ZlciBuby1yZXBlYXQgdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbChcJyIrdFsyXSsiXCcpIil9LG4uZ2VuZXJhdGVDbG9uZXM9ZnVuY3Rpb24ocil7Zm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncih2YXIgZT10aGlzLm9wdGlvbnMuY2xhc3NlcyxzPXRoaXMuZ2V0Q2xvbmVDb3VudCgpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PXIuc2xpY2UoKTt0Lmxlbmd0aDxzOylBKHQsdCk7QSh0LnNsaWNlKC1zKS5yZXZlcnNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpLHQuc2xpY2UoMCxzKSkuZm9yRWFjaChmdW5jdGlvbih0LG4pe3ZhciBpPVMoe30sdC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMse2NsYXNzOnQuYXR0cnMuY2xhc3MrIiAiK2UuY2xvbmV9KSx0PVMoe30sdCx7YScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJzOml9KTtuPHM/ci51bnNoaWZ0KHQpOnIucHVzaCh0KX0pfSxuLmdldENsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250PWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIHRoaXMuaXNMb29wKCk/KHQ9dGhpcy5vcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucykuY2xvbmVzfHxSLmFwcGx5KHZvaWQgMCx0aGlzLmJyZWFrcG9pbnRzLm1hcChmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24odCl7cmV0dXJuIHRbMV0ucGVyUGFnZX0pKSooKHQuZmxpY2tNYXhQYWdlc3x8JwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpKzEpOjB9LG4ucmVuZGVyQXJyb3dzPWZ1bmN0aW9uKCl7dmFyIHQ9IiI7cmV0dXJuKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKz1cJzxkaXYgY2xhc3M9IlwnK3RoaXMub3B0aW9ucy5jbGFzc2VzLmFycm93cytcJyI+JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1wnKSt0aGlzLnJlbmRlckFycm93KCEwKSt0aGlzLnJlbmRlckFycm93KCExKSsiPC9kaXY+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ9LG4ucmVuZGVyQXJyb3c9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLGk9bi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhc3NlcyxuPW4uaTE4bixpPXtjbGFzczppLmFycm93KyIgIisodD9pLnByZXY6aS5uZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCksdHlwZToiYnV0dG9uIixhcmlhTGFiZWw6dD9uLnByZXY6bi5uZXh0fTtyZXR1cm4iJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxidXR0b24gIit0aGlzLmJ1aWxkQXR0cnMoaSkrXCc+PHN2ZyB4bWxucz0iaHR0cDovL3d3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDAgNDAiIHdpZHRoPSI0MCIgaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodD0iNDAiPjxwYXRoIGQ9IlwnKyh0aGlzLm9wdGlvbnMuYXJyb3dQYXRofHwibTE1LjUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAuOTMyLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LicKICAgICAgICAgICAgICAgICAgICAgICAgYic2IDQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IikrXCciIC8+PC9zdmc+PC9idXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiIm9uPid9LG4uaHRtbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY29uZmlnLG49dC5yb290Q2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzLGk9dC5saXN0VGFnLHI9dC5hcnJvd3MsZT10LmJlZm9yZVRyYWNrLHM9dC5hZnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidUcmFjayx1PXQuc2xpZGVyLG89dC5iZWZvcmVTbGlkZXIsdD10LmFmdGVyU2xpZGVyLGE9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyIiO3JldHVybiBhPShhKz1cJzxkaXYgaWQ9IlwnK3RoaXMuaWQrXCciIGNsYXNzPSJcJysnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5idWlsZENsYXNzZXMoKSsiICIrKG58fCIiKStcJyI+XCcpKygiPHN0eWxlPiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInK3RoaXMuU3R5bGUuYnVpbGQoKSsiPC9zdHlsZT4iKSx1JiYoYT1hKyhvfHwiIikrXCc8ZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndiBjbGFzcz0ic3BsaWRlX19zbGlkZXIiPlwnKSxhKz1lfHwiIixyJiYoYSs9dGhpcy5yZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyQXJyb3dzKCkpLGE9KGE9KGE9YStcJzxkaXYgY2xhc3M9InNwbGlkZV9fdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrIj5cJysoIjwiK2krXCcgY2xhc3M9InNwbGlkZV9fbGlzdCI+XCcpKSt0aGlzLnJlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJTbGlkZXMoKSsoIjwvIitpKyI+IikpKyI8L2Rpdj4iKyhzfHwiIiksdSYmKGE9YSsiPCcKICAgICAgICAgICAgICAgICAgICAgICAgYicvZGl2PiIrKHR8fCIiKSksYSs9IjwvZGl2PiJ9LHR9KCl9LCJvYmplY3QiPT10eXBlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6KCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TcGxpZGVSZW5kZXJlcj1uKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGxpZGUtcmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcmVyLm1pbi5qcy5tYXBcbicsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUtcmVuZGVyZXIubWluLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInLyohXG4gKiBTcGxpZGUuanNcbiAqIFZlcnNpb24gIDogNC4xLjRcbiAqIExpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnNlICA6IE1JVFxuICogQ29weXJpZ2h0OiAyMDIyIE5hb3Rvc2hpIEZ1aml0YVxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xudmFyIHQsbjt0PXRoaXMsbj1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9InJ0bCIsdT0idHRiIixvPXt3aWR0aDpbImhlaWdodCJdLGxlZnQ6WyJ0b3AiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlnaHQiXSxyaWdodDpbImJvdHRvbSIsImxlZnQiXSx4OlsieSJdLFg6WyJZIl0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1k6WyJYIl0sQXJyb3dMZWZ0OlsiQXJyb3dVcCIsIkFycm93UmlnaHQiXSxBcnJvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSaWdodDpbIkFycm93RG93biIsIkFycm93TGVmdCJdfTtmdW5jdGlvbiBlKHQsbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSl7cmV0dXJue3Jlc29sdmU6ZnVuY3Rpb24odCxuLGkpe3ZhciByPShpPWl8fGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbikhPT1zfHxuP2k9PT11PzA6LTE6MTtyZXR1cm4gb1t0XSYmb1t0XScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbcl18fHQucmVwbGFjZSgvd2lkdGh8bGVmdHxyaWdodC9pLGZ1bmN0aW9uKHQsbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3Q9b1t0LnRvTG93ZXJDYXNlKCldW3JdfHx0O3JldHVybiAwPG4/dC5jaGFyQXQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTp0fSl9LG9yaWVudDpmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodCl7cmV0dXJuIHQqKGUuZGlyZWN0aW9uPT09cz8xOi0xKX19fXZhciBpPSJzcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIix0PWkrIl9fIixyPWksYT10KyJ0cmFjayIsYz10KyJsaXN0IixoPXQrInNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSIsZj1oKyItLWNsb25lIixuPXQrImFycm93IixsPXQrInBhZ2luYXRpb24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkPSJpcy1hY3RpdmUiLHY9e3R5cGU6InNsaWRlIixyb2xlOiJyZWdpb24iLHNwZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDo0MDAscGVyUGFnZToxLGNsb25lU3RhdHVzOiEwLGFycm93czohMCxwYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbjohMCxwYWdpbmF0aW9uS2V5Ym9hcmQ6ITAsaW50ZXJ2YWw6NWUzLHBhdXNlTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduSG92ZXI6ITAscGF1c2VPbkZvY3VzOiEwLHJlc2V0UHJvZ3Jlc3M6ITAsZWFzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZzoiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgMSkiLGRyYWc6ITAsZGlyZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbjoibHRyIix0cmltU3BhY2U6ITAsZm9jdXNhYmxlTm9kZXM6ImEsIGJ1dHRvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHRleHRhcmVhLCBpbnB1dCwgc2VsZWN0LCBpZnJhbWUiLGxpdmU6ITAsY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXM6e3NsaWRlOmgsY2xvbmU6ZixhcnJvd3M6dCsiYXJyb3dzIixhcnJvdzpuLHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2Om4rIi0tcHJldiIsbmV4dDpuKyItLW5leHQiLHBhZ2luYXRpb246bCxwYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKyJfX3BhZ2UiLHNwaW5uZXI6dCsic3Bpbm5lciJ9LGkxOG46e3ByZXY6IlByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW91cyBzbGlkZSIsbmV4dDoiTmV4dCBzbGlkZSIsZmlyc3Q6IkdvIHRvIGZpcnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZSIsbGFzdDoiR28gdG8gbGFzdCBzbGlkZSIsc2xpZGVYOiJHbyB0byBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUgJXMiLHBhZ2VYOiJHbyB0byBwYWdlICVzIixwbGF5OiJTdGFydCBhdXRvcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXkiLHBhdXNlOiJQYXVzZSBhdXRvcGxheSIsY2Fyb3VzZWw6ImNhcm91c2VsIixzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGU6InNsaWRlIixzZWxlY3Q6IlNlbGVjdCBhIHNsaWRlIHRvIHNob3ciLHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZUxhYmVsOiIlcyBvZiAlcyJ9LHJlZHVjZWRNb3Rpb246e3NwZWVkOjAscmV3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFNwZWVkOjAsYXV0b3BsYXk6InBhdXNlIn19O2Z1bmN0aW9uIHAodCxuLGkpe3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCxuLGkpfWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnKHQpe3JldHVybiB0LmJpbmQuYXBwbHkodCxbbnVsbF0uY29uY2F0KHAoYXJndW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywxKSkpfWZ1bmN0aW9uIHcodCxuKXtyZXR1cm4gdHlwZW9mIG49PT10fWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBiKHQpe3JldHVybiBudWxsIT09dCYmdygib2JqZWN0Iix0KX12YXIgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9QXJyYXkuaXNBcnJheSx5PShnKHcsImZ1bmN0aW9uIiksZyh3LCJzdHJpbmciKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Z1bmN0aW9uIHgodCl7cmV0dXJuIG0odCk/dDpbdF19ZnVuY3Rpb24gXyh0LG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t4KHQpLmZvckVhY2gobil9ZnVuY3Rpb24gQSh0LG4pe3JldHVybiB0LnB1c2guYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KHQseChuKSksdH1mdW5jdGlvbiBMKHQsbil7cmV0dXJuIGZ1bmN0aW9uKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXt0cnl7cmV0dXJuIHQgaW5zdGFuY2VvZih0Lm93bmVyRG9jdW1lbnQuZGVmYXVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RWaWV3fHx3aW5kb3cpLkhUTUxFbGVtZW50fWNhdGNoKHQpe3JldHVybiExfX0odCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpJiYodC5tc01hdGNoZXNTZWxlY3Rvcnx8dC5tYXRjaGVzKS5jYWxsKHQsbil9ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIE0odCxuKXtyZXR1cm4gbj8oaT1uLG49KG49dCk/cChuLmNoaWxkcmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6W10sKGk/bi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIEwodCxpKX0pOm4pWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXSk6dC5maXJzdEVsZW1lbnRDaGlsZDt2YXIgaX1nKHcsInVuZGVmaW5lZCIpO3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgRT1PYmplY3Qua2V5cztmdW5jdGlvbiBQKG4saSx0KXtuJiYodD9FKG4pLnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlcnNlKCk6RShuKSkuZm9yRWFjaChmdW5jdGlvbih0KXsiX19wcm90b19fIiE9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0JiZpKG5bdF0sdCl9KX1mdW5jdGlvbiBTKHIpe3JldHVybiBwKGFyZ3VtZW50cywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMSkuZm9yRWFjaChmdW5jdGlvbihpKXtQKGksZnVuY3Rpb24odCxuKXtyW25dPWlbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25dfSl9KSxyfWZ1bmN0aW9uIFgoaSl7cmV0dXJuIHAoYXJndW1lbnRzLDEpLmZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKGZ1bmN0aW9uKHQpe1AodCxmdW5jdGlvbih0LG4pe20odCk/aVtuXT10LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGljZSgpOmIodCk/aVtuXT1YKHt9LGIoaVtuXSk/aVtuXTp7fSx0KTppW25dPXR9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9KSxpfWZ1bmN0aW9uIGoodCl7Xyh0LGZ1bmN0aW9uKHQpe3QmJnQucGFyZW50TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX0pfWZ1bmN0aW9uIEcodCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiB5KHQpP3Q6dD90KyJweCI6IiJ9ZnVuY3Rpb24gTyh0LG4pe2lmKCF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl0aHJvdyBuZXcgRXJyb3IoIlsiK2krIl0gIisobnx8IiIpKX1NYXRoLm1pbjt2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIFI9TWF0aC5tYXg7TWF0aC5mbG9vcixNYXRoLmNlaWwsTWF0aC5hYnM7ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIFQodCl7cmV0dXJuIHQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyQxLSQyIikudG9Mb3dlckNhc2UoKX12YXIgej17fTtmdW5jdGlvbiBCKCl7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvPVtdO2Z1bmN0aW9uIGkodCxpLHIpe18odCxmdW5jdGlvbihuKXtuJiZfKGksZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKHQpe3Quc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q9dC5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaXQoIi4iKTtyKG4sdFswXSx0WzFdKX0pfSl9KX1yZXR1cm57YmluZDpmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24odCxuLHMsdSl7aSh0LG4sZnVuY3Rpb24odCxuLGkpe3ZhciByPSJhZGRFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRMaXN0ZW5lciJpbiB0LGU9cj90LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxuLHMsdSk6dC5yZW1vdmVMaXN0ZW5lci5iaW5kKHQscyk7cj90LmFkZEV2ZW50TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3RlbmVyKG4scyx1KTp0LmFkZExpc3RlbmVyKHMpLG8ucHVzaChbdCxuLGkscywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV0pfSl9LHVuYmluZDpmdW5jdGlvbih0LG4sZSl7aSh0LG4sZnVuY3Rpb24obixpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxyKXtvPW8uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhKHRbMF0hPT1ufHx0WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxXSE9PWl8fHRbMl0hPT1yfHxlJiZ0WzNdIT09ZSl8fCh0WzRdKCksITEpfSl9KX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGRpc3BhdGNoOmZ1bmN0aW9uKHQsbixpKXt2YXIgcjtyZXR1cm4iZnVuY3Rpb24iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09dHlwZW9mIEN1c3RvbUV2ZW50P3I9bmV3IEN1c3RvbUV2ZW50KG4se2J1YmJsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzOiEwLGRldGFpbDppfSk6KHI9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCIpKS5pbml0Q3VzdG9tRXZlbnQobiwhMCwhMSxpKSx0LmRpc3BhdGNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KHIpLHJ9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtvLmZvckVhY2goZnVuY3Rpb24odCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3RbNF0oKX0pLG8ubGVuZ3RoPTB9fX1mdW5jdGlvbiBDKHQpe3ZhciBpPXQ/dC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQuYnVzOmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxyPUIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7cmV0dXJuIHQmJnQuZXZlbnQub24oImRlc3Ryb3kiLHIuZGVzdHJveSksUyhyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7YnVzOmksb246ZnVuY3Rpb24odCxuKXtyLmJpbmQoaSx4KHQpLmpvaW4oIiAiKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24odCl7bi5hcHBseShuLG0odC5kZXRhaWwpP3QuZGV0YWlsOltdKX0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sb2ZmOmcoci51bmJpbmQsaSksZW1pdDpmdW5jdGlvbih0KXtyLmRpc3BhdGNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpLHQscChhcmd1bWVudHMsMSkpfX0pfXZhciBXPXtsaXN0VGFnOiJ1bCIsc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGFnOiJsaSJ9LGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7dGhpcy5zdHlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzPXt9LHRoaXMuaWQ9dCx0aGlzLm9wdGlvbnM9bn12YXIgbj10LnByb3RvdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7cmV0dXJuIG4ucnVsZT1mdW5jdGlvbih0LG4saSxyKXtyPXRoaXMuc3R5bGVzW3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXJ8fCJkZWZhdWx0Il09dGhpcy5zdHlsZXNbcl18fHt9OyhyW3RdPXJbdF18fHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJylbbl09aX0sbi5idWlsZD1mdW5jdGlvbigpe3ZhciBpPXRoaXMsbj0iIjtyZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHRoaXMuc3R5bGVzLmRlZmF1bHQmJihuKz10aGlzLmJ1aWxkU2VsZWN0b3JzKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnN0eWxlcy5kZWZhdWx0KSksT2JqZWN0LmtleXModGhpcy5zdHlsZXMpLnNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuIm1pbiI9PT1pLm9wdGlvbnMubWVkaWFRdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnk/K3QtK246K24tK3R9KS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJkZWZhdWx0IiEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT10JiYobj0obis9IkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICIrdCsiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B4KSB7IikraS5idWlsZFNlbGVjdG9ycyhpLnN0eWxlc1t0XSkrIn0iKX0pLG59LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLmJ1aWxkU2VsZWN0b3JzPWZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscj0iIjtyZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIFAodCxmdW5jdGlvbih0LG4pe249KCIjIitpLmlkKyIgIituKS50cmltKCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IrPW4rIiB7IixQKHQsZnVuY3Rpb24odCxuKXshdCYmMCE9PXR8fChyKz1uKyI6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciK3QrIjsiKX0pLHIrPSJ9In0pLHJ9LHR9KCk7cmV0dXJuIGZ1bmN0aW9uKCl7ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHQodCxuLGkscil7dGhpcy5zbGlkZXM9W10sdGhpcy5vcHRpb25zPXt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0aGlzLmJyZWFrcG9pbnRzPVtdLFgodixyfHx7fSksWChYKHRoaXMub3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdiksbnx8e30pLHRoaXMuY29udGVudHM9dCx0aGlzLmNvbmZpZz1TKHt9LFcsaXwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHt9KSx0aGlzLmlkPXRoaXMuY29uZmlnLmlkfHwiIisocj0ic3BsaWRlIikrKChyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz16W3JdPSh6W3JdfHwwKSsxKTwxMD8iMCIrcjoiIityKSx0aGlzLlN0eWxlPW5ldycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgayh0aGlzLmlkLHRoaXMub3B0aW9ucyksdGhpcy5EaXJlY3Rpb249ZSgwLDAsdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucyksTyh0aGlzLmNvbnRlbnRzLmxlbmd0aCwiUHJvdmlkZSBhdCBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vhc3QgMSBjb250ZW50LiIpLHRoaXMuaW5pdCgpfXQuY2xlYW49ZnVuY3Rpb24odCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3ZhciBuLGk9Qyh0KS5vbixyPXQucm9vdCx0PSh0PXIsKG49Ii4iK2YpP3AodC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlcnlTZWxlY3RvckFsbChuKSk6W10pO2koIm1vdW50ZWQiLGZ1bmN0aW9uKCl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ooTShyLCJzdHlsZSIpKX0pLGoodCl9O3ZhciBuPXQucHJvdG90eXBlO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbi5pbml0PWZ1bmN0aW9uKCl7dGhpcy5wYXJzZUJyZWFrcG9pbnRzKCksdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdFNsaWRlcygpLHRoaXMucmVnaXN0ZXJSb290U3R5bGVzKCksdGhpcy5yZWdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZXJUcmFja1N0eWxlcygpLHRoaXMucmVnaXN0ZXJTbGlkZVN0eWxlcygpLHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnJlZ2lzdGVyTGlzdFN0eWxlcygpfSxuLmluaXRTbGlkZXM9ZnVuY3Rpb24oKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGk9dGhpcztBKHRoaXMuc2xpZGVzLHRoaXMuY29udGVudHMubWFwKGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbih0LG4peyh0PXkodCk/e2h0bWw6dH06dCkuc3R5bGVzPXQuc3R5bGVzfHx7fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdC5hdHRycz10LmF0dHJzfHx7fSxpLmNvdmVyKHQpO249aS5vcHRpb25zLmNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzLnNsaWRlKyIgIisoMD09PW4/ImlzLWFjdGl2ZSI6IiIpO3JldHVybiBTKHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJzLHtjbGFzczoobisiICIrKHQuYXR0cnMuY2xhc3N8fCIiKSkudHJpbSgpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZTppLmJ1aWxkU3R5bGVzKHQuc3R5bGVzKX0pLHR9KSksdGhpcy5pc0xvb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkmJnRoaXMuZ2VuZXJhdGVDbG9uZXModGhpcy5zbGlkZXMpfSxuLnJlZ2lzdGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Jvb3RTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3RoaXMuYnJlYWtwb2ludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dFswXSx0PXRbMV07aS5TdHlsZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVsZSgiICIsIm1heC13aWR0aCIsRyh0LndpZHRoKSxuKX0pfSxuLnJlZ2lzdGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RyYWNrU3R5bGVzPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxyPXRoaXMuU3R5bGUsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9Ii4iK2E7dGhpcy5icmVha3BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj10WzBdLHQ9dFsxXTtyLnJ1bGUoZSxpLnJlc29sdmUoInBhZGRpbmdMZWZ0IiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kuY3NzUGFkZGluZyh0LCExKSxuKSxyLnJ1bGUoZSxpLnJlc29sdmUoInBhZGRpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnUmlnaHQiKSxpLmNzc1BhZGRpbmcodCwhMCksbiksci5ydWxlKGUsImhlaWdodCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGkuY3NzVHJhY2tIZWlnaHQodCksbil9KX0sbi5yZWdpc3Rlckxpc3RTdHlsZXM9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKCl7dmFyIGk9dGhpcyxyPXRoaXMuU3R5bGUsZT0iLiIrYzt0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidicmVha3BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0sdD10WzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXTtyLnJ1bGUoZSwidHJhbnNmb3JtIixpLmJ1aWxkVHJhbnNsYXRlKHQpLG4pLGkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1NsaWRlSGVpZ2h0KHQpfHxyLnJ1bGUoZSwiYXNwZWN0LXJhdGlvIixpLmNzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBc3BlY3RSYXRpbyh0KSxuKX0pfSxuLnJlZ2lzdGVyU2xpZGVTdHlsZXM9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKCl7dmFyIGk9dGhpcyxyPXRoaXMuU3R5bGUsZT0iLiIraDt0aGlzLmJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0sdD10WzFdO3IucicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bGUoZSwid2lkdGgiLGkuY3NzU2xpZGVXaWR0aCh0KSxuKSxyLnJ1bGUoZSwiaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCIsaS5jc3NTbGlkZUhlaWdodCh0KXx8IjEwMCUiLG4pLHIucnVsZShlLGkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc29sdmUoIm1hcmdpblJpZ2h0IiksRyh0LmdhcCl8fCIwcHgiLG4pLHIucnVsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSsiID4gaW1nIiwiZGlzcGxheSIsdC5jb3Zlcj8ibm9uZSI6ImlubGluZSIsbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSl9LG4uYnVpbGRUcmFuc2xhdGU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5EaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uLGk9bi5yZXNvbHZlLG49bi5vcmllbnQscj1bXTtyZXR1cm4gci5wdXNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmNzc09mZnNldENsb25lcyh0KSksci5wdXNoKHRoaXMuY3NzT2Zmc2V0R2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHModCkpLHRoaXMuaXNDZW50ZXIodCkmJihyLnB1c2godGhpcy5idWlsZENzc1ZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZShuKC01MCksIiUiKSksci5wdXNoLmFwcGx5KHIsdGhpcy5jc3NPZmZzZXRDZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyKHQpKSksci5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uKHQpe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4idHJhbnNsYXRlIitpKCJYIikrIigiK3QrIikifSkuam9pbigiICIpfSxuLmNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NPZmZzZXRDbG9uZXM9ZnVuY3Rpb24odCl7dmFyIG4saT10aGlzLkRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicscj1pLnJlc29sdmUsaT1pLm9yaWVudCxlPXRoaXMuZ2V0Q2xvbmVDb3VudCgpO3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdGhpcy5pc0ZpeGVkV2lkdGgodCk/KG49KHI9dGhpcy5wYXJzZUNzc1ZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSh0W3IoImZpeGVkV2lkdGgiKV0pKS52YWx1ZSxyPXIudW5pdCx0aGlzLmJ1aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZENzc1ZhbHVlKGkobikqZSxyKSk6aSgxMDAqZS90LnBlclBhZ2UpKyIlIn0sbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzT2Zmc2V0Q2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBuLGkscj10aGlzLkRpcmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24sZT1yLnJlc29sdmUscj1yLm9yaWVudDtyZXR1cm4gdGhpcy5pc0ZpeGVkVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZHRoKHQpPyhuPShlPXRoaXMucGFyc2VDc3NWYWx1ZSh0W2UoImZpeGVkV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIildKSkudmFsdWUsZT1lLnVuaXQsW3RoaXMuYnVpbGRDc3NWYWx1ZShyKG4vMiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpXSk6KG49dC5wZXJQYWdlLGU9dC5nYXAsKHQ9W10pLnB1c2gocig1MC9uKSsiJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKSxlJiYoaT0oZT10aGlzLnBhcnNlQ3NzVmFsdWUoZSkpLnZhbHVlLGU9ZS51bmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCx0LnB1c2godGhpcy5idWlsZENzc1ZhbHVlKHIoKGkvbi1pKS8yKSxlKSkpLHQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sbi5jc3NPZmZzZXRHYXBzPWZ1bmN0aW9uKHQpe3ZhciBuLGkscixlPXRoaXMuZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldENsb25lQ291bnQoKTtyZXR1cm4gZSYmdC5nYXA/KG49dGhpcy5EaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLm9yaWVudCxpPShyPXRoaXMucGFyc2VDc3NWYWx1ZSh0LmdhcCkpLnZhbHVlLHI9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IudW5pdCx0aGlzLmlzRml4ZWRXaWR0aCh0KT90aGlzLmJ1aWxkQ3NzVmFsdWUobicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoaSplKSxyKToodD10LnBlclBhZ2UsdGhpcy5idWlsZENzc1ZhbHVlKG4oZS90KmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxyKSkpOiIifSxuLnJlc29sdmU9ZnVuY3Rpb24odCl7cmV0dXJuIFQodGhpcy5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uLnJlc29sdmUodCkpfSxuLmNzc1BhZGRpbmc9ZnVuY3Rpb24odCxuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7dD10LnBhZGRpbmcsbj10aGlzLkRpcmVjdGlvbi5yZXNvbHZlKG4/InJpZ2h0IjonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImxlZnQiLCEwKTtyZXR1cm4gdCYmRyh0W25dfHwoYih0KT8wOnQpKXx8IjBweCJ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxuLmNzc1RyYWNrSGVpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBuPSIiO3JldHVybiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5pc1ZlcnRpY2FsKCkmJihPKG49dGhpcy5jc3NIZWlnaHQodCksXCciaGVpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIgaXMgbWlzc2luZy5cJyksbj0iY2FsYygiK24rIiAtICIrdGhpcy5jc3NQYWRkaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyh0LCExKSsiIC0gIit0aGlzLmNzc1BhZGRpbmcodCwhMCkrIikiKSxufSxuLmNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NIZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIEcodC5oZWlnaHQpfSxuLmNzc1NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZVdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiB0LmF1dG9XaWR0aD8iIjpHKHQuZmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGVkV2lkdGgpfHwodGhpcy5pc1ZlcnRpY2FsKCk/IiI6dGhpcy5jc3NTbGlkZVNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plKHQpKX0sbi5jc3NTbGlkZUhlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gRyh0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaXhlZEhlaWdodCl8fCh0aGlzLmlzVmVydGljYWwoKT90LmF1dG9IZWlnaHQ/IiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOnRoaXMuY3NzU2xpZGVTaXplKHQpOnRoaXMuY3NzSGVpZ2h0KHQpKX0sbi5jc3NTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplPWZ1bmN0aW9uKHQpe3ZhciBuPUcodC5nYXApO3JldHVybiJjYWxjKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoMTAwJSIrKG4mJiIgKyAiK24pKyIpLyIrKHQucGVyUGFnZXx8MSkrKG4mJiIgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIituKSsiKSJ9LG4uY3NzQXNwZWN0UmF0aW89ZnVuY3Rpb24odCl7dD10LmhlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RSYXRpbztyZXR1cm4gdD8iIisxL3Q6IiJ9LG4uYnVpbGRDc3NWYWx1ZT1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24odCxuKXtyZXR1cm4iIit0K259LG4ucGFyc2VDc3NWYWx1ZT1mdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCl7cmV0dXJuIHkodCk/e3ZhbHVlOnBhcnNlRmxvYXQodCl8fDAsdW5pdDp0LnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYWNlKC9cXGQqKFxcLlxcZCopPy8sIiIpfHwicHgifTp7dmFsdWU6dCx1bml0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzoicHgifX0sbi5wYXJzZUJyZWFrcG9pbnRzPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdD10aGlzLm9wdGlvbnMuYnJlYWtwb2ludHM7dGhpcy5icmVha3BvaW50cy5wdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaChbImRlZmF1bHQiLHRoaXMub3B0aW9uc10pLHQmJlAodCxmdW5jdGlvbih0LG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tpLmJyZWFrcG9pbnRzLnB1c2goW24sWChYKHt9LGkub3B0aW9ucyksdCldKX0pfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsbi5pc0ZpeGVkV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuISF0W3RoaXMuRGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbi5yZXNvbHZlKCJmaXhlZFdpZHRoIildfSxuLmlzTG9vcD1mdW5jdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tyZXR1cm4ibG9vcCI9PT10aGlzLm9wdGlvbnMudHlwZX0sbi5pc0NlbnRlcj1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24odCl7aWYoImNlbnRlciI9PT10LmZvY3VzKXtpZih0aGlzLmlzTG9vcCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSlyZXR1cm4hMDtpZigic2xpZGUiPT09dGhpcy5vcHRpb25zLnR5cGUpcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyF0aGlzLm9wdGlvbnMudHJpbVNwYWNlfXJldHVybiExfSxuLmlzVmVydGljYWw9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5kaXJlY3Rpb249PT11fSxuLmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWlsZENsYXNzZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tyLHIrIi0tIit0LnR5cGUscisiLS0iK3QuZGlyZWN0aW9uLHQuZHJhZyYmcisiLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictZHJhZ2dhYmxlIix0LmlzTmF2aWdhdGlvbiYmcisiLS1uYXYiLGQsIXRoaXMuY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmZpZy5oaWRkZW4mJiJpcy1yZW5kZXJlZCJdLmZpbHRlcihCb29sZWFuKS5qb2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygiICIpfSxuLmJ1aWxkQXR0cnM9ZnVuY3Rpb24odCl7dmFyIGk9IiI7cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQKHQsZnVuY3Rpb24odCxuKXtpKz10PyIgIitUKG4pK1wnPSJcJyt0K1wnIlwnOiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIn0pLGkudHJpbSgpfSxuLmJ1aWxkU3R5bGVzPWZ1bmN0aW9uKHQpe3ZhciBpPSIiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztyZXR1cm4gUCh0LGZ1bmN0aW9uKHQsbil7aSs9IiAiK1QobikrIjoiK3QrIjsifScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGkudHJpbSgpfSxuLnJlbmRlclNsaWRlcz1mdW5jdGlvbigpe3ZhciBuPXRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGk9dGhpcy5jb25maWcuc2xpZGVUYWc7cmV0dXJuIHRoaXMuc2xpZGVzLm1hcChmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24odCl7cmV0dXJuIjwiK2krIiAiK24uYnVpbGRBdHRycyh0LmF0dHJzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIj4iKyh0Lmh0bWx8fCIiKSsiPC8iK2krIj4ifSkuam9pbigiIil9LG4uY292ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWZ1bmN0aW9uKHQpe3ZhciBuPXQuc3R5bGVzLHQ9dC5odG1sLHQ9dm9pZCAwPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q/IiI6dDt0aGlzLm9wdGlvbnMuY292ZXImJiF0aGlzLm9wdGlvbnMubGF6eUxvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkJiYodD10Lm1hdGNoKC88aW1nLio/c3JjXFxzKj1cXHMqKFtcJyJdKSguKz8pXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMS4qPz4vKSkmJnRbMl0mJihuLmJhY2tncm91bmQ9ImNlbnRlci9jb3ZlciBuby1yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VwZWF0IHVybChcJyIrdFsyXSsiXCcpIil9LG4uZ2VuZXJhdGVDbG9uZXM9ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKHIpe2Zvcih2YXIgZT10aGlzLm9wdGlvbnMuY2xhc3NlcyxzPXRoaXMuZ2V0QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lQ291bnQoKSx0PXIuc2xpY2UoKTt0Lmxlbmd0aDxzOylBKHQsdCk7QSh0LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGljZSgtcykucmV2ZXJzZSgpLHQuc2xpY2UoMCxzKSkuZm9yRWFjaChmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24odCxuKXt2YXIgaT1TKHt9LHQuYXR0cnMse2NsYXNzOnQuYXR0cnMuY2xhc3MrIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIitlLmNsb25lfSksdD1TKHt9LHQse2F0dHJzOml9KTtuPHM/ci51bnNoaWZ0KHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpyLnB1c2godCl9KX0sbi5nZXRDbG9uZUNvdW50PWZ1bmN0aW9uKCl7dmFyIHQ7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0aGlzLmlzTG9vcCgpPyh0PXRoaXMub3B0aW9ucykuY2xvbmVzfHxSLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseSh2b2lkIDAsdGhpcy5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24odCl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB0WzFdLnBlclBhZ2V9KSkqKCh0LmZsaWNrTWF4UGFnZXN8fDEpKzEpOjB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxuLnJlbmRlckFycm93cz1mdW5jdGlvbigpe3ZhciB0PSIiO3JldHVybih0Kz1cJzwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGl2IGNsYXNzPSJcJyt0aGlzLm9wdGlvbnMuY2xhc3Nlcy5hcnJvd3MrXCciPicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcJykrdGhpcy5yZW5kZXJBcnJvdyghMCkrdGhpcy5yZW5kZXJBcnJvdyghMSkrIjwvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpdj4ifSxuLnJlbmRlckFycm93PWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMsaT1uLmNsYXNzZXMsbj1uLmkxOG4saT17Y2xhc3M6aS5hcnJvdysiICIrKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInP2kucHJldjppLm5leHQpLHR5cGU6ImJ1dHRvbiIsYXJpYUxhYmVsOnQ/bi5wcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpuLm5leHR9O3JldHVybiI8YnV0dG9uICIrdGhpcy5idWlsZEF0dHJzKGkpK1wnPjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAgMCA0MCA0MCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj48cGF0aCBkPSJcJysodGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucy5hcnJvd1BhdGh8fCJtMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0LTE0LjYtMTQuNnoiKStcJyIgLz48L3N2Zz48L2J1dHRvbj5cJ30sbi5odG1sPWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbigpe3ZhciB0PXRoaXMuY29uZmlnLG49dC5yb290Q2xhc3MsaT10Lmxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGFnLHI9dC5hcnJvd3MsZT10LmJlZm9yZVRyYWNrLHM9dC5hZnRlclRyYWNrLHU9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Quc2xpZGVyLG89dC5iZWZvcmVTbGlkZXIsdD10LmFmdGVyU2xpZGVyLGE9IiI7cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBhPShhKz1cJzxkaXYgaWQ9IlwnK3RoaXMuaWQrXCciIGNsYXNzPSJcJysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5idWlsZENsYXNzZXMoKSsiICIrKG58fCIiKStcJyI+XCcpKygiPHN0eWxlPiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK3RoaXMuU3R5bGUuYnVpbGQoKSsiPC9zdHlsZT4iKSx1JiYoYT1hKyhvfHwiIikrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1wnPGRpdiBjbGFzcz0ic3BsaWRlX19zbGlkZXIiPlwnKSxhKz1lfHwiIixyJiYoYSs9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMucmVuZGVyQXJyb3dzKCkpLGE9KGE9KGE9YStcJzxkaXYgY2xhc3M9InNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RyYWNrIj5cJysoIjwiK2krXCcgY2xhc3M9InNwbGlkZV9fbGlzdCI+XCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkrdGhpcy5yZW5kZXJTbGlkZXMoKSsoIjwvIitpKyI+IikpKyI8L2Rpdj4iKyhzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IiIpLHUmJihhPWErIjwvZGl2PiIrKHR8fCIiKSksYSs9IjwvZGl2PiJ9LHR9KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfSwib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1uKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKG4pOih0PSJ1bmRlZmluZWQiIT10eXBlbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5TcGxpZGVSZW5kZXJlcj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbigpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3BsaWRlLXJlbmRlcmVyLm1pbi5qcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicubWFwXG4nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLXJlbmRlcmVyLm1pbi5qcycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9fSwKIDM1OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYid7InZlcnNpb24iOjMsImZpbGUiOiJzcGxpZGUubWluLmpzIiwic291cmNlcyI6WyIuLi8uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4vc3JjL2pzL2NvbnN0YW50cy9tZWRpYS50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3N0YXRlcy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9lbXB0eS9lbXB0eS50cycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCIuLi8uLi9zcmMvanMvdXRpbHMvYXJyYXlMaWtlL3NsaWNlL3NsaWNlLnRzIiwiLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uL3NyYy9qcy91dGlscy9mdW5jdGlvbi9hcHBseS9hcHBseS50cyIsIi4uLy4uL3NyYy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInanMvdXRpbHMvZnVuY3Rpb24vbm9vcC9ub29wLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzLycKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi9uZXh0VGljay9uZXh0VGljay50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24vcmFmL3JhZi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy90eXBlL3R5cGUudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L3RvQXJyYXkvdG9BcnJheS50cyIsIi4uLycKICAgICAgICAgICAgICAgICAgICAgICAgYicuLi9zcmMvanMvdXRpbHMvYXJyYXkvZm9yRWFjaC9mb3JFYWNoLnRzIiwiLi4vLi4vc3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9qcy91dGlscy9hcnJheS9pbmNsdWRlcy9pbmNsdWRlcy50cyIsIi4uLy4uL3NyYy9qcy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXRpbHMvYXJyYXkvcHVzaC9wdXNoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS90bycKICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlQ2xhc3MvdG9nZ2xlQ2xhc3MudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2FkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RDbGFzcy9hZGRDbGFzcy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vYXBwZW5kL2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlbmQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2JlZm9yZS9iZWZvcmUudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9tYXRjaGVzL21hdGNoZXMudHMiLCIuLi8uLi9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjL2pzL3V0aWxzL2RvbS9jaGlsZHJlbi9jaGlsZHJlbi50cyIsIi4uLy4uL3NyYy9qcy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXRpbHMvZG9tL2NoaWxkL2NoaWxkLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicvb3duS2V5cy9vd25LZXlzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdC9mb3JPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3duL2Zvck93bi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9vYmplY3QvYXNzaWduL2Fzc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ24udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvb2JqZWN0L21lcmdlL21lcmdlLnRzIiwiLicKICAgICAgICAgICAgICAgICAgICAgICAgYicuLy4uL3NyYy9qcy91dGlscy9vYmplY3Qvb21pdC9vbWl0LnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy91dGlscy9kb20vcmVtb3ZlQXR0cmlidXRlL3JlbW92ZUF0dHJpYnV0ZS50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvdXRpbHMvZG9tL3NldEF0dHJpYnV0ZS9zZXRBdHRyaWJ1dGUudHMiLCIuLicKICAgICAgICAgICAgICAgICAgICAgICAgYicvLi4vc3JjL2pzL3V0aWxzL2RvbS9jcmVhdGUvY3JlYXRlLnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy91dGlscy9kb20vc3R5bGUvc3R5bGUudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNwbGF5L2Rpc3BsYXkudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2ZvY3VzL2ZvYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1cy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vZ2V0QXR0cmlidXRlL2dldEF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2hhc0NsYXNzL2hhc0NsYXNzLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcmVjdC9yZWN0LnRzIiwiLi4vLi4vc3JjLycKICAgICAgICAgICAgICAgICAgICAgICAgYidqcy91dGlscy9kb20vcmVtb3ZlL3JlbW92ZS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tL3BhcnNlSHRtbC9wYXJzZUh0bWwudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2ZW50L3ByZXZlbnQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3F1ZXJ5L3F1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyeS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcXVlcnlBbGwvcXVlcnlBbGwudHMiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9yZW1vdmVDbGFzcy9yZW1vdmVDbGFzcy50cyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3RpbWVPZi90aW1lT2YudHMiLCIuLi8uLi9zcicKICAgICAgICAgICAgICAgICAgICAgICAgYidjL2pzL3V0aWxzL2RvbS91bml0L3VuaXQudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9wcm9qZWN0LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Vycm9yL2Fzc2VydC9hc3NlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvbWF0aC9tYXRoLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy91dGlscy9tYXRoL2FwcHJveGltYXRlbHlFcXVhbC9hcHByb3hpbWF0ZWx5RXF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvYmV0d2Vlbi9iZXR3ZWVuLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy91dGlscy9tYXRoL2NsYW1wL2NsYW1wLnRzIiwiLi4vLi4vc3JjLycKICAgICAgICAgICAgICAgICAgICAgICAgYidqcy91dGlscy9tYXRoL3NpZ24vc2lnbi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9zdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nL2Zvcm1hdC9mb3JtYXQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3BhZC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFkLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL3N0cmluZy91bmlxdWVJZC91bmlxdWVJZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicudHMiLCIuLi8uLi9zcmMvanMvY29uc3RydWN0b3JzL0V2ZW50QmluZGVyL0V2ZW50QmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlci50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZXZlbnRzLnRzIiwiLi4vLi4vc3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInYy9qcy9jb25zdHJ1Y3RvcnMvRXZlbnRJbnRlcmZhY2UvRXZlbnRJbnRlcmZhY2UudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLi4vLi4vc3JjL2pzL2NvbnN0cnVjdG9ycy9SZXF1ZXN0SW50ZXJ2YWwvUmVxdWVzdEluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnZhbC50cyIsIi4uLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvU3RhdGUvU3RhdGUudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9hcnJvd3MudHMiLCIuLi8uLi9zcmMvanMvYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0YW50cy9kaXJlY3Rpb25zLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvRGlyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbi9EaXJlY3Rpb24udHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzL2F0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9jbGFzc2VzLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy9jb21wb25lbnRzL0RyYWcvY29uc3RhbnRzLnRzIiwiLi4vLi4vc3JjL2pzL2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdGFudHMvdHlwZXMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9TbGlkZXMvU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXV0b3BsYXkvY29uc3RhbnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvbGlzdGVuZXItb3B0aW9ucy50cyIsIi4uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8uLi9zcmMvanMvdXRpbHMvZG9tL25vcm1hbGl6ZUtleS9ub3JtYWxpemVLZXkudHMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvS2V5Ym9hcmQvS2V5Ym9hcmQudHMiLCIuLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgYicvc3JjL2pzL2NvbXBvbmVudHMvTGF6eUxvYWQvY29uc3RhbnRzLnRzIiwiLi4vLi4vc3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9qcy9jb21wb25lbnRzL1N5bmMvU3luYy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy9NZWRpYS9NZWRpYS50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0VsZW1lbnRzLycKICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50cy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vY2xvc2VzdC9jbG9zZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL1NsaWRlcy9TbGlkZXMudHMiLCIuLi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi4vc3JjL2pzL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50cyIsIi4uLy4uL3NyYy9qcycKICAgICAgICAgICAgICAgICAgICAgICAgYicvY29uc3RydWN0b3JzL1Rocm90dGxlL1Rocm90dGxlLnRzIiwiLi4vLi4vc3JjL2pzL2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzL0Nsb25lcy9DbG9uZXMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS9Nb3ZlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQ29udHJvbGxlci9DbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudHJvbGxlci50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0Fycm93cy9BcnJvd3MuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXJyb3dzL3BhdGgudHMiLCIuLi8uLi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjL2pzL2NvbXBvbmVudHMvQXV0b3BsYXkvQXV0b3BsYXkudHMiLCIuLi8uLi9zcmMvaicKICAgICAgICAgICAgICAgICAgICAgICAgYidzL2NvbXBvbmVudHMvQ292ZXIvQ292ZXIudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MvU2Nyb2xsL1Njcm9sbC50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL1Njcm9sbC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3RhbnRzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvRHJhZy9EcmFnLnRzIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0xhenlMb2FkL0xhenlMb2FkLnRzIiwiLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uL3NyYy9qcy9jb21wb25lbnRzL1BhZ2luYXRpb24vUGFnaW5hdGlvbi50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvY29tcG9uZW50cy9XaGVlbC9XaGVlbC50cyIsIi4uLy4uL3NyYy9qcy9jbycKICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cy9MaXZlL0xpdmUudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzL2RlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvaTE4bi50cyIsIi4uLy4uL3NyYy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInanMvdHJhbnNpdGlvbnMvRmFkZS9GYWRlLnRzIiwiLi4vLi4vc3JjL2pzL3RyYW5zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy9TbGlkZS9TbGlkZS50cyIsIi4uLy4uL3NyYy9qcy9jb3JlL1NwbGlkZS9TcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxcclxcbiAqIE1hdGNoZXMgd2hlbiB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcnMgcmVxdWVzdCByZWR1Y2luZyBub24tZXNzZW50aWFsIGFuaW1hdGlvbnMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VuLVVTL2RvY3MvV2ViL0NTUy9AbWVkaWEvcHJlZmVycy1yZWR1Y2VkLW1vdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RJT04gPSBcJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpXCc7IiwiLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFNwbGlkZSBoYXMgYmVlbiBqdXN0IGNyZWF0ZWQuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBDUkVBVEVEID0gMTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogU3BsaWRlIGhhcyBtb3VudGVkIGNvbXBvbmVudHMuXFxyXFxuICovXFxyXFxuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBjb25zdCBNT1VOVEVEID0gMjtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIHJlYWR5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJRExFID0gMztcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuLyoqXFxyXFxuICogU3BsaWRlIGlzIG1vdmluZy5cXHJcXG4gKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXhwb3J0IGNvbnN0IE1PVklORyA9IDQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSBpcyBtb3ZpbmcuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNDUk9MTElOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0cgPSA1O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB1c2VyIGlzIGRyYWdnaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgc2xpZGVyLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBEUkFHR0lORyA9IDYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFNwbGlkZSBoYXMgYmVlbiBkZXN0cm95ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBERVNUUk9ZRUQgPSA3O1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBUaGUgY29sbGVjdGlvbiBvZiBhbGwgc3RhdGVzLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBVEVTID0ge1xcclxcbiAgQ1JFQVRFRCxcXHJcXG4gIE1PVU5URUQsXFxyXFxuICBJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RMRSxcXHJcXG4gIE1PVklORyxcXHJcXG4gIFNDUk9MTElORyxcXHJcXG4gIERSQUdHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lORyxcXHJcXG4gIERFU1RST1lFRCxcXHJcXG59O1xcclxcbiIsIi8qKlxcclxcbiAqIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXB0aWVzIHRoZSBhcnJheS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEEgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5IHRvIGVtcHR5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5OiBhbnlbXSApOiB2b2lkIHtcXHJcXG4gIGFycmF5Lmxlbmd0aCA9IDA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgc2xpY2UgbWV0aG9kIGZvciBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYictbGlrZSBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gYXJyYXlMaWtlIC0gQW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5LWxpa2Ugb2JqZWN0LlxcclxcbiAqIEBwYXJhbSBzdGFydCAgICAgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwuIEEgc3RhcnQgaW5kZXguXFxyXFxuICogQHBhcmFtIGVuZCAgICAgICAtIE9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25hbC4gQSBlbmQgaW5kZXguXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSB3aXRoIHNsaWNlZCBlbGVtZW50cy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNsaWNlPFQ+KCBhcnJheUxpa2U6IEFycmF5TGlrZTxUPiwgc3RhcnQ/OiBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbmQ/OiBudW1iZXIgKTogVFtdIHtcXHJcXG4gIHJldHVybiBBcnJheS5wcm90b3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlLnNsaWNlLmNhbGwoIGFycmF5TGlrZSwgc3RhcnQsIGVuZCApO1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24sIFNoaWZ0TiB9IGZyb20gXCcuLi8uLi8uLi90eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByb3ZpZGVkIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyXFxuICogYHRoaXNgIHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbWV0ZXIgd2lsbCBiZSBhbHdheXMgbnVsbC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuYyAtIEEgZnVuY3Rpb24uXFxyXFxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGJpbmQgdG8gdGhlIGZ1bmN0aW9uLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB3aGVyZSBhcmd1bWVudHMgYXJlIGJvdW5kLlxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgZnVuY3Rpb24gYXBwbHk8RiBleHRlbmRzIEFueUZ1bmN0aW9uLCBBIGV4dGVuZHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FueVtdID0gYW55W10+KFxcclxcbiAgZnVuYzogRixcXHJcXG4gIC4uLmFyZ3M6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBXFxyXFxuKTogKCAuLi5hcmdzOiBTaGlmdE48UGFyYW1ldGVyczxGPiwgQVtcXCJsZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ3RoXFwiXT4gKSA9PiBSZXR1cm5UeXBlPEY+O1xcclxcblxcclxcbi8qKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDcmVhdGUgYSBmdW5jdGlvbiB3aGVyZSBwcm92aWRlZCBhcmd1bWVudHMgYXJlIGJvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZC5cXHJcXG4gKiBgdGhpc2AgcGFyYW1ldGVyIHdpbGwgYmUgYWx3YXlzIG51bGwuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHBhcmFtIGZ1bmMgLSBBIGZ1bmN0aW9uLlxcclxcbiAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgZnVuY3Rpb24gYXBwbHkoIGZ1bmM6IEFueUZ1bmN0aW9uICk6IGFueSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gIHJldHVybiBmdW5jLmJpbmQoIG51bGwsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAuLi5zbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIE5vIG9wZXJhdGlvbi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3Qgbm9vcCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSAoKTogdm9pZCA9PiB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJpbXBvcnQgeyBBbnlGdW5jdGlvbiB9IGZyb20gXCcuLi8uLi8uLi90eXBlc1wnOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJbnZva2VzIHRoZSBjYWxsYmFjayBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdGhlIG5leHQgdGljay5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBuZXh0VCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2s6ICggY2FsbGJhY2s6IEFueUZ1bmN0aW9uICkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldFRpbWVvdXQ+ID0gc2V0VGltZW91dDtcXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWFzIG9mIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKClgLlxcclxcbiAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgZnVuY3Rpb24gcmFmKCBmdW5jOiBGcmFtZVJlcXVlc3RDYWxsYmFjayApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyIHtcXHJcXG4gIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmN0aW9uIH0gZnJvbSBcJy4uJwogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHkgfSBmcm9tICcuLi9mdW5jdGlvIgogICAgICAgICAgICAgICAgICAgICAgICBiIm4nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhbGlhcyBvZiB0aGUgdHkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGUgY2hlY2sgZnVuY3Rpb24uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdHlwZSAgICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBIHR5cGUuXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzcGVjaWZpZWQgdHlwZS5cXHJcXG4gKi9cXHJcXG5mdW5jdGlvbiB0eXBlT2YoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlOiBzdHJpbmcsIHN1YmplY3Q6IHVua25vd24gKTogYm9vbGVhbiB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSB0eXBlO1xcclxcbn1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Qgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IGlzIGFuIG9iamVjdCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCggc3ViamVjdDogdW5rbm93biApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogc3ViamVjdCBpcyBvYmplY3Qge1xcclxcbiAgcmV0dXJuICEgaXNOdWxsKCBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICBiImVjdCApICYmIHR5cGVPZiggJ29iamVjdCcsIHN1YmplY3QgKTtcXHJcXG59XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhbiBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0IGlzIGFuIGFycmF5LCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IGlzQXJyYXk6IDxUPiggc3ViamVjdDogdW5rbm93biAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA9PiBzdWJqZWN0IGlzIFRbXSA9IEFycmF5LmlzQXJyYXk7XFxyXFxuXFxyXFxuLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhIGZ1bmN0aW9uIG9yIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYSBmdW5jdGlvbiwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBjb25zdCBpc0Z1bmN0aW9uID0gPCggc3ViamVjdDogdW5rbm93biApID0+IHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgYiJqZWN0IGlzIEFueUZ1bmN0aW9uPmFwcGx5KCB0eXBlT2YsICdmdW5jdGlvbicgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBhIHN0cmluZyBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AgaWYgdGhlIHN1YmplY3QgaXMgYSBzdHJpbmcsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSA8KCBzdWJqZWN0OiB1bicKICAgICAgICAgICAgICAgICAgICAgICAgYiJrbm93biApID0+IHN1YmplY3QgaXMgc3RyaW5nPmFwcGx5KCB0eXBlT2YsICdzdHJpbmcnIgogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgaXMgYHVuZGVmaW5lZGAgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGB1bmRlZmluZWRgLCBvciBvdGhlcndpc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2BmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGlzVW5kZWZpbmVkID0gPCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzIHVuZGVmaW5lZD5hcHBseSggdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ5cGVPZiwgJ3VuZGVmaW5lZCcgKTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVjayIKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGBudWxsYCBvciBub3QuXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYG51bGxgLCBvciBvdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2woIHN1YmplY3Q6IHVua25vd24gKTogc3ViamVjdCBpcyBudWxsIHtcXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gc3ViamVjdCA9PT0gbnVsbDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY2Ugb3Igbm90LlxcclxcbiAqIFRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2hpY2ggYHdpbmRvd2AgdGhlIG5vZGUgYmVsb25ncyB0by5cXHJcXG4gKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGFuY2UsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaXNIVE1MRWxlbWVudCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZWN0IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBIVE1MRWxlbWVudCB7XFxyXFxuICB0cnkge1xcclxcbiAgICByZXR1cm4gc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5zdGFuY2VvZiAoICggc3ViamVjdCBhcyBOb2RlICkub3duZXJEb2N1bWVudC5kZWZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdFZpZXcgfHwgd2luZG93ICkuSFRNTEVsZW1lbnQ7XFxyXFxuICB9IGNhdGNoICggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKSB7XFxyXFxuICAgIHJldHVybiBmYWxzZTtcXHJcXG4gIH1cXHJcXG59IiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBQdXNoIHRoZSBwcm92aWRlZCB2YWx1ZSB0byBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBhcnJheS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20gdmFsdWUgLSBBIHZhbHVlIHRvIHB1c2guXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZSwgb3IgdGhlIHZhbHVlIGl0c2VsZiBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaXQgaXMgYWxyZWFkeSBhbiBhcnJheS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHRvQXJyYXk8VD4oIHZhbHVlOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGlzQXJyYXkoIHZhbHVlICkgPyB2YWx1ZSA6IFsgdmFsdWUgXTtcXHJcXG59XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tIFwnLi4vdG9BcnJheS90b0FycmF5XCcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBleHRlbmRlZCBgQXJyYXkjZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2hgIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgdmFsdWUgYXMgYW4gYXJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlcyAgIC0gQSB2YWx1ZSBvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWVzIHRvIGl0ZXJhdGUgb3Zlci5cXHJcXG4gKiBAcGFyYW0gaXRlcmF0ZWUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoPFQ+KCB2YWx1ZXM6IFQgfCBUW10sIGl0ZXJhdGVlOiAoIHZhbHVlOiBULCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg6IG51bWJlciwgYXJyYXk6IFRbXSApID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdG9BcnJheSggdmFsdWVzICkuZm9yRWFjaCggaXRlcmF0ZWUgKTtcXHJcXG59XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsIi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgYXJyYXkgaW5jbHVkZXMgdGhlIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSBvciBub3QuXFxyXFxuICogYEFycmF5I2luY2x1ZGVzYCBpcyBub3Qgc3VwcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRlZCBieSBJRS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEFuIGFycmF5LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGFycmF5IGluY2x1ZGVzIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgdmFsdWUsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gaW5jbHVkZXM8VD4oIGFycmF5OiBUW10sIHZhbHVlOiBUICk6IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcXHJcXG4gIHJldHVybiBhcnJheS5pbmRleE9mKCB2YWx1ZSApID4gLTE7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG4iLCJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSBcJy4uL3RvQXJyYXkvdG9BcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJyYXknO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEV4dGVuZGVkIGBBcnJheSNwIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaCgpYCB0aGF0IGFjY2VwdHMgYW4gaXRlbSBvciBhbiBhcnJheSB3aXRoIGl0ZW1zLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEFuIGFycmF5IHRvIHB1c2ggaXRlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAqIEBwYXJhbSBpdGVtcyAtIEFuIGl0ZW0gb3IgaXRlbXMgdG8gcHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgcHJvdmlkZWQgYXJyYXkgaXRzZWxmLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcHVzaDxUPiggYXJyYXk6IFRbXSwgaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1zOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICBhcnJheS5wdXNoKCAuLi50b0FycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSggaXRlbXMgKSApO1xcclxcbiAgcmV0dXJuIGFycmF5O1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJy4uLy4uL2FycmF5JztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVG9nZ2xlcyB0aGUgcHJvdmlkZWQgY2xhc3Mgb3IgY2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYnkgZm9sbG93aW5nIHRoZSBgYWRkYCBib29sZWFuLlxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBlbG0gICAgIC0gQW4gZWxlbWVudCB3aG9zZSBjbGFzc2VzIGFyZSB0b2dnbGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gY2xhc3NlcyAtIEEgY2xhc3Mgb3IgY2xhc3MgbmFtZXMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSBhZGQgICAgIC0gV2hldGhlciB0byBhZGQgb3IgcmVtb3ZlIGEgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVDbGFzcyggZWxtOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRWxlbWVudCwgY2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10sIGFkZDogYm9vbGVhbiApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICBpZiAoIGVsbSApIHtcXHJcXG4gICAgZm9yRWFjaCggY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMsIG5hbWUgPT4ge1xcclxcbiAgICAgIGlmICggbmFtZSApIHtcXHJcXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJlbG0uY2xhc3NMaXN0WyBhZGQgPyAnYWRkJyA6ICdyZW1vdmUnIF0oIG5hbWUgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfVxcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCcuLi8uLi90eXBlL3R5cGVcJztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgdG9nZ2xlQ2xhc3MgfSBmcm9tICcuLi90b2dnbGVDbGFzcy90b2dnbGVDIgogICAgICAgICAgICAgICAgICAgICAgICBiImxhc3MnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEFkZHMgY2xhc3NlcyB0byAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtICAgICAtIEFuIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50IHRvIGFkZCBjbGFzc2VzIHRvLlxcclxcbiAqIEBwYXJhbSBjbGFzc2VzIC0gQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMgdG8gYWRkLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoIGVsbTogRWxlbWVudCwgY2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgdG9nZ2xlQ2xhc3MoIGVsbSwgaXNTdHJpbmcoIGNsYXNzZXMgKSA/IGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGFzc2VzLnNwbGl0KCAnICcgKSA6IGNsYXNzZXMsIHRydWUgKTtcXHJcXG59XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwnLi4vLi4vYXJyYXlcJztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQXBwZW5kcyBjaGlsZHJlbiB0byB0aGUgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVudCBlbGVtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHBhcmVudCAgIC0gQSBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIGNoaWxkcmVuIC0gQSBjaGlsZCBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hpbGRyZW4gdG8gYXBwZW5kIHRvIHRoZSBwYXJlbnQuXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBmdW5jdGlvbiBhcHBlbmQoIHBhcmVudDogRWxlbWVudCwgY2hpbGRyZW46IE5vZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgTm9kZVtdICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCggY2hpbGRyZW4sIHBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuYXBwZW5kQ2hpbGQuYmluZCggcGFyZW50ICkgKTtcXHJcXG59XFxyXFxuIiwiaW1wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJydCB7IGZvckVhY2ggfSBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIEluc2VydHMgYSBub2RlIG9yIG5vZGVzIGJlZm9yZSB0aGUgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidwZWNpZmllZCByZWZlcmVuY2Ugbm9kZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBub2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgLSBBIG5vZGUgb3Igbm9kZXMgdG8gaW5zZXJ0LlxcclxcbiAqIEBwYXJhbSByZWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLSBBIHJlZmVyZW5jZSBub2RlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVmb3JlKCBub2RlczogTm9kZSB8IE5vZGVbXSwgcmVmOiBOb2RlIHwgbnVsbCApOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZCB7XFxyXFxuICBmb3JFYWNoKCBub2Rlcywgbm9kZSA9PiB7XFxyXFxuICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQgPSAoIHJlZiB8fCBub2RlICkucGFyZW50Tm9kZTtcXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICggcGFyZW50ICkge1xcclxcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlLCByZWYgKTtcXHJcXG4gICAgfVxcclxcbiAgfSApO1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZWxlbWVudCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGJlIHNlbGVjdGVkIGJ5IHRoZSBwcm92aWRlZCBzZWxlY3RvciBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHBhcmFtIGVsbSAgICAgIC0gQW4gZWxlbWVudCB0byBjaGVjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBzZWxlY3RvciB0byB0ZXN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzZWxlY3RvciBtYXRjaGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgZWxlbWVudCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBmdW5jdGlvbiBtYXRjaGVzKCBlbG06IEVsZW1lbnQgfCBFdmVudFRhcmdldCwgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdG9yOiBzdHJpbmcgKTogYm9vbGVhbiB7XFxyXFxuICByZXR1cm4gaXNIVE1MRScKICAgICAgICAgICAgICAgICAgICAgICAgYiJsZW1lbnQoIGVsbSApICYmICggZWxtWyAnbXNNYXRjaGVzU2VsZWN0b3InIF0gfHwgZWxtIgogICAgICAgICAgICAgICAgICAgICAgICBiJy5tYXRjaGVzICkuY2FsbCggZWxtLCBzZWxlY3RvciApO1xcclxcbn1cXHJcXG4iLCJpbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3J0IHsgc2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIieyBtYXRjaGVzIH0gZnJvbSAnLi4vbWF0Y2hlcy9tYXRjaGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogRmluZHMgY2hpbGRyZW4gdGhhdCBoYXMgdGhlIHNwZWNpZmllJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgdGFnIG9yIGNsYXNzIG5hbWUuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gcGFyZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uYWwuIEEgc2VsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBmaWx0ZXJlZCBjaGlsZHJlbi5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkcmVuPEUgZXh0ZW5kcyBIVE1MRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ+KCBwYXJlbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcj86IHN0cmluZyApOiBFW10gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50ID8gc2xpY2UoIHBhcmVudC5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW4gKSBhcyBFW10gOiBbXTtcXHJcXG4gIHJldHVybiBzZWxlY3RvciA/IGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbi5maWx0ZXIoIGNoaWxkID0+IG1hdGNoZXMoIGNoaWxkLCBzZWxlY3RvciApICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDogY2hpbGRyZW47XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGNoaWxkcmVuIH0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uL2NoaWxkcmVuL2NoaWxkcmVuJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyBhIGNoaWxkIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRhZyBvciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHBhcmVudCAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgcGFyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXRjaGVkIGNoaWxkIGVsZW1lbnQgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlZmluZWRgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjaGlsZDxFIGV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I/OiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaW5nICk6IEUgfCB1bmRlZmluZWQge1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkcmVuPEU+KCBwYXJlbnQsIHNlbGVjdG9yIClbIDAgXSA6IHBhcmVudC5maXJzdEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50Q2hpbGQgYXMgRTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogQW4gYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWFzIG9mIGBPYmplY3Qua2V5cygpYFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBvdycKICAgICAgICAgICAgICAgICAgICAgICAgYiduS2V5cyA9IE9iamVjdC5rZXlzOyIsImltcG9ydCB7IG93bktleXMgfSBmcm9tIFwnLi4vbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJ3bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogSXRlcmF0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIG92ZXIgdGhlIHByb3ZpZGVkIG9iamVjdCBieSBvd24gZW51bWVyYWJsZSBrZXlzIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIGNhbGxpbmcgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBvYmplY3QgICAtIEFuIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBpdGVyYXRlZSAtIEFuIGl0ZXJhdGVlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2B2YWx1ZWAgYW5kIGBrZXlgIGFzIGFyZ3VtZW50cy5cXHJcXG4gKiBAcGFyYW0gcmlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0ICAgIC0gSWYgYHRydWVgLCB0aGUgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgdGhlIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgZnJvbSB0aGUgZW5kIGxpa2UgYGZvckVhY2hSaWdodCgpYC5cXHJcXG4gKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIEEgcHJvdmlkZWQgb2JqZWN0IGl0c2VsZi5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIGZvck93bjxUIGV4dGVuZHMgb2JqZWN0PihcXHJcXG4gIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Q6IFQsXFxyXFxuICBpdGVyYXRlZTogKCB2YWx1ZTogVFsga2V5b2YgVCBdLCBrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V5OiBzdHJpbmcgKSA9PiBib29sZWFuIHwgdm9pZCxcXHJcXG4gIHJpZ2h0PzogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW5cXHJcXG4pOiBUIHtcXHJcXG4gIGlmICggb2JqZWN0ICkge1xcclxcbiAgICAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCA/IG93bktleXMoIG9iamVjdCApLnJldmVyc2UoKSA6IG93bktleXMoIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiY3QgKSApLmZvckVhY2goIGtleSA9PiB7XFxyXFxuICAgICAga2V5ICE9PSAnX19wcm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG9fXycgJiYgaXRlcmF0ZWUoIG9iamVjdFsga2V5IF0sIGtleSApO1xcclxcbiAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiIsImltcG9ydCB7IENhc3QsIEhlYWQsIFB1c2gsIFJlc29sdmUsIFNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBzbGljZSB9IGZyIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IGZvck93biB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi9mb3JPd24vZm9yT3duJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBc3MiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWducyBVIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIGFzc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBbiBvYmplY3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvIGFzc2lnbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXNzaWduZWQgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlIEFzc2lnbjxULCBVPiA9IE9taXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPFQsIGtleW9mIFU+ICYgVTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZWN1cnNpdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHkgYXNzaWducyBVW10gdG8gVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBvYmplY3QgdG8gYXNzaWduIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEEgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cGxlIGNvbnRhaW5zIG9iamVjdHMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpZ25lZCBvYmplY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBBc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQ8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdLCBOIGV4dGVuZHMgbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciwgQyBleHRlbmRzIGFueVtdID0gW10+ID0ge1xcclxcbiAgMDogVCxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxOiBBc3NpZ25lZDxBc3NpZ248VCwgSGVhZDxVPj4sIFNoaWZ0PFU+LCBOLCBQdXNoPEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPj4sXFxyXFxufVsgQ1snbGVuZ3RoJ10gZXh0ZW5kcyBOID8gMCA6IDEgXSBleHRlbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBpbmZlciBBID8gQ2FzdDxBLCBhbnk+IDogbmV2ZXI7XFxyXFxuXFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBhc3NpZ248VCBleHRlbmRzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplY3QsIFUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4dGVuZHMgb2JqZWN0W10+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgLi4uc291cicKICAgICAgICAgICAgICAgICAgICAgICAgYiJjZXM6IFVcXHJcXG4pOiBSZXNvbHZlPEFzc2lnbmVkPFQsIFUsIFVbJ2xlbmd0aCddPiIKICAgICAgICAgICAgICAgICAgICAgICAgYic+XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQXNzaWducyBhbGwgb3duIGVudW1lcmFibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByb3BlcnRpZXMgb2YgYWxsIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBwcm92aWRlZCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAtIEFuIG9iamVjdCB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzaWduIHByb3BlcnRpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QgYXNzaWduZWQgcHJvcGVydGllcyBvZiB0aGUgc291cmNlcyB0by5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZHMgb2JqZWN0PiggbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdDogVCApOiBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZSBwcmVmZXItcmVzdC1wYXJhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gIHNsaWNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJndW1lbnRzLCAxICkuZm9yRWFjaCggc291cmNlID0+IHtcXHJcXG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3biggc291cmNlLCAoIHZhbHVlLCBrZXkgKSA9PiB7XFxyXFxuICAgICAgb2JqZWN0WycKICAgICAgICAgICAgICAgICAgICAgICAgYicga2V5IF0gPSBzb3VyY2VbIGtleSBdO1xcclxcbiAgICB9ICk7XFxyXFxuICB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IENhc3QsIEhlYWQsIFB1c2gsIFJlc29sdmUsIFNoaWZ0IH0gZnJvbSAnLi4vLi4vLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiInR5cGVzJztcXHJcXG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrIgogICAgICAgICAgICAgICAgICAgICAgICBiImUnO1xcclxcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiInR5cGUvdHlwZSc7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gZnJvbSAnLi4vZm9yT3duIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9mb3JPd24nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIE1lcmdlcyBVIHRvIFQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSBUIC0gQW4gb2JqZWN0IHRvIG1lcmdlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidVIGludG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0gQW4gb2JqZWN0IHRvIG1lcmdlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wZXJ0aWVzIGZyb20uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgbWVyZ2VkIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBNZXJnZTxUIGV4dGVuZHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdD4gPSBPbWl0PFQsIGtleW9mIFU+ICYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIFsgSyBpbiAoIGtleW9mIFQgJiBrZXlvZiBVICkgXTogVVsgSyBdIGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIG9iamVjdFxcclxcbiAgICA/IFVbIEsgXSBleHRlbmRzIGFueVtdXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgID8gVVsgSyBdXFxyXFxuICAgICAgOiBUWyBLIF0gZXh0ZW5kcyBvYmplY3RcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICA/IE1lcmdlPFRbIEsgXSwgVVsgSyBdPiBleHRlbmRzIGluZmVyIEEgPyBSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZTxDYXN0PEEsIG9iamVjdD4+IDogbmV2ZXJcXHJcXG4gICAgICAgIDogVVsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0sgXVxcclxcbiAgICA6IFVbIEsgXTtcXHJcXG59ICYgT21pdDxVLCBrZXlvZiBUPicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVjdXJzaXZlbHkgbWVyZ2VzIFVbXSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicgVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBhc3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2duIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEEgdHVwbGUgY29udGFpbnMgb2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdHMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBNZXJnZWQ8VCBleHRlbmRzIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIFUgZXh0ZW5kcyBvYmplY3RbXSwgTiBleHRlbmRzIG51bWJlciwgQyBleHRlbmRzIGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lbXSA9IFtdPiA9IHtcXHJcXG4gIDA6IFQsXFxyXFxuICAxOiBNZXJnZWQ8TWVyZ2U8VCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEhlYWQ8VT4+LCBTaGlmdDxVPiwgTiwgUHVzaDxDPj4sXFxyXFxufVsgQ1snbGVuZ3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaCddIGV4dGVuZHMgTiA/IDAgOiAxIF0gZXh0ZW5kcyBpbmZlciBBID8gQ2FzdDxBLCBhbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid5PiA6IG5ldmVyO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gbWVyZ2U8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdPihcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBvYmplY3Q6IFQsXFxyXFxuICAuLi5zb3VyY2VzOiBVXFxyXFxuKTogUmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiI8TWVyZ2VkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiIKICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVjdXJzaXZlbHkgbWVyZ2VzIHNvdXJjZSBwcm9wZXJ0aWVzIHRvIHRoZSBvYmplY3QuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEJlIGF3YXJlIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3QgbWVyZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5cy4gVGhleSBhcmUganVzdCBkdXBsaWNhdGVkIGJ5IGBzbGljZSgpYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0IHRvIG1lcmdlIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wZXJ0aWVzIHRvLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIG5ldyBvYmplY3Qgd2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGggbWVyZ2VkIHByb3BlcnRpZXMuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtZXJnZTxUIGV4dGVuZHMgb2JqZWN0Piggb2JqZWN0OiBUICk6IGFueSB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHNsaWNlKCBhcmd1bWVudHMsIDEgKS5mb3JFYWNoKCBzb3VyY2UgPT4ge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZm9yT3duKCBzb3VyY2UsICggdmFsdWUsIGtleSApID0+IHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKCBpc0FycmF5KCB2YWx1ZSApICkge1xcclxcbiAgICAgICAgb2JqZWN0WycKICAgICAgICAgICAgICAgICAgICAgICAgYicga2V5IF0gPSB2YWx1ZS5zbGljZSgpO1xcclxcbiAgICAgIH0gZWxzZSBpZiAoIGlzTycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCggdmFsdWUgKSApIHtcXHJcXG4gICAgICAgIG9iamVjdFsga2V5IF0gPSBtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2UoIHt9LCBpc09iamVjdCggb2JqZWN0WyBrZXkgXSApID8gb2JqZWN0WyBrZXkgXSA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7fSwgdmFsdWUgKTtcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFsga2V5IF0gPSB2YWx1ZTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9ICk7XFxyXFxuXFxyXFxuICByZXR1cm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgZm9yRWFjaCB9IGZyb20gJy4uLy4uL2FycmF5JztcXHJcXG5pbXBvcnQgeyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgb3duS2V5cyB9IGZyb20gJy4uL293bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKlxcclxcbiAqIERlbGV0ZXMgc3BlY2lmaWVkIG93biBrZXlzIGZyb20gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0ga2V5cyAgIC0gQSBrZXkgb3Iga2V5cyB0byBkZWxldGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgb3duIGVudW1lcmFibGUga2V5cyB3aWxsIGJlIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxldGVkLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBvbWl0KCBvYmplY3Q6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QsIGtleXM/OiBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKCBrZXlzIHx8IG93bktleXMoIG9iamVjdCApLCBrZXkgPT4ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVsZXRlIG9iamVjdFsga2V5IF07XFxyXFxuICB9ICk7XFxyXFxufSIsImltcG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBSZW1vdmVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZWxlbWVudC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtcyAgLSBBbiBlbGVtZW50IG9yIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgb3IgYXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlKCBlbG1zOiBFbGVtZW50IHwgRWxlbWVudFtdLCBhdHRyczogc3RyaW5nIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZ1tdICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCggZWxtcywgZWxtID0+IHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGZvckVhY2goIGF0dHJzLCBhdHRyID0+IHtcXHJcXG4gICAgICBlbG0gJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbS5yZW1vdmVBdHRyaWJ1dGUoIGF0dHIgKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCcuLi8uLi9hcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJyYXknO1xcclxcbmltcG9ydCB7IGZvck93biB9IGZyb20gJy4uLy4uL29iamVjdCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IGlzTnVsbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyByZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi9yZW1vdmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiQXR0cmlidXRlL3JlbW92ZUF0dHJpYnV0ZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3IiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoIGVsbXM6IEVsZW1lbnQgfCBFbGVtZW50W10sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuICk6IHZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkO1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoIGVsbXM6IEVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IHwgRWxlbWVudFtdLCBhdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB8IGJvb2xlYW4+ICk6IHZvaWQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU2V0cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cmlidXRlL2F0dHJpYnV0ZXMgdG8gdGhlIGVsZW1lbnQgb3IgZWxlbWVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIElmIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgYW4gZW1wdHkgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdGhlIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGVsbXMgIC0gQW4gZWxlbWVudCBvciBhbiBhcnJheSB3aXRoIGVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgbmFtZSBvZiBhbiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHdpdGggcGFpcnMgb2YgYSBuYW1lIGFuZCBhIHZhbHVlLlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHNldC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHNldEF0dHJpYnV0ZShcXHJcXG4gIGVsbXM6IEVsZW1lbnQgfCBFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFtdLFxcclxcbiAgYXR0cnM6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfCBudW1iZXIgfCBib29sZWFuPixcXHJcXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB8IGJvb2xlYW5cXHJcXG4pOiB2b2lkIHtcXHJcXG4gIGlmICggaXNPYmplY3QoIGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycyApICkge1xcclxcbiAgICBmb3JPd24oIGF0dHJzLCAoIHZhbHVlLCBuYW1lICkgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGVsbXMsIG5hbWUsIHZhbHVlICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9ICk7XFxyXFxuICB9IGVsc2Uge1xcclxcbiAgICBmb3JFYWNoKCBlbG1zLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZWxtID0+IHtcXHJcXG4gICAgICBpc051bGwoIHZhbHVlICkgfHwgdmFsdWUgPT09ICciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJyA/IHJlbW92ZUF0dHJpYnV0ZSggZWxtLCBhdHRycyApIDogZWxtLnNldEF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGF0dHJzLCBTdHJpbmcoIHZhbHVlICkgKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwnLi4vLi4vdHlwZS90JwogICAgICAgICAgICAgICAgICAgICAgICBiInlwZSc7XFxyXFxuaW1wb3J0IHsgYWRkQ2xhc3MgfSBmcm9tICcuLi9hZGRDbGFzcy9hIgogICAgICAgICAgICAgICAgICAgICAgICBiImRkQ2xhc3MnO1xcclxcbmltcG9ydCB7IGFwcGVuZCB9IGZyb20gJy4uL2FwcGVuZC9hIgogICAgICAgICAgICAgICAgICAgICAgICBiInBwZW5kJztcXHJcXG5pbXBvcnQgeyBzZXRBdHRyaWJ1dGUgfSBmcm9tICcuLi9zZXRBIgogICAgICAgICAgICAgICAgICAgICAgICBiInR0cmlidXRlL3NldEF0dHJpYnV0ZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1IgogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjcmVhdGU8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFxcclxcbiAgdGFnOiBLLFxcclxcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCBzdHJpbmcsXFxyXFxuICBwYXJlbnQ/OiBIVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNTEVsZW1lbnRcXHJcXG4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbIEsgXTtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShcXHJcXG4gIHRhZzogc3RyaW5nLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc3RyaW5nLFxcclxcbiAgcGFyZW50PzogSFRNTEVsZW1lbnRcXHJcXG4pOiBIVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlcyBhIEhUTUwgZWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdGFnICAgIC0gQSB0YWcgbmFtZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHBhcmFtIGF0dHJzICAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCBhdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlcyB0byBhcHBseSB0aGUgY3JlYXRlZCBlbGVtZW50IHRvLCBvciBhIHN0cmluZyB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aCBjbGFzc2VzLlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgLSBPcHRpb25hbC4gQSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50IGVsZW1lbnQgd2hlcmUgdGhlIGNyZWF0ZWQgZWxlbWVudCBpcyBhcHBlbmRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZTxLIGV4dGVuZHMga2V5bycKICAgICAgICAgICAgICAgICAgICAgICAgYidmIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXFxyXFxuICB0YWc6IEssXFxyXFxuICBhdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB8IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcsXFxyXFxuICBwYXJlbnQ/OiBIVE1MRWxlbWVudFxcclxcbik6IEhUTUxFbGVtZW50VCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ05hbWVNYXBbIEsgXSB7XFxyXFxuICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlRWxlbWVudCggdGFnICk7XFxyXFxuXFxyXFxuICBpZiAoIGF0dHJzICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaXNTdHJpbmcoIGF0dHJzICkgPyBhZGRDbGFzcyggZWxtLCBhdHRycyApIDogc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZSggZWxtLCBhdHRycyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCAmJiBhcHBlbmQoIHBhcmVudCwgZWxtICk7XFxyXFxuXFxyXFxuICByZXR1cm4gZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNOdWxsLCBpc1VuZGVmaW5lZCB9IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcclxcbmV4cG9ydCBmdW5jdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc3R5bGU8SyBleHRlbmRzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb24+KFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGVsbTogSFRNTEVsZW1lbnQsXFxyXFxuICBwcm9wOiBLLFxcclxcbik6IENTU1N0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZURlY2xhcmF0aW9uWyBLIF07XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShcXHJcXG4gIGVsbTogSFRNTEVsZW1lbnQsXFxyXFxuICBwcm9wOiBzdHJpbmcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbik6IHN0cmluZztcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gc3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZWxtOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IHN0cmluZyxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXFxyXFxuKTogdm9pZDtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogQXBwbGllcyBpbmxpbmUgc3R5bGVzIHRvIHRoZSBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZWQgZWxlbWVudCBieSBhbiBvYmplY3QgbGl0ZXJhbC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZWxtICAgLSBBbiBlbGVtZW50IHRvIGFwcGx5IHN0eWxlcyB0by5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIHByb3AgIC0gQW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBzdHlsZXMgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EgcHJvcGVydHkgbmFtZS5cXHJcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlKFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbTogSFRNTEVsZW1lbnQsXFxyXFxuICBwcm9wOiBzdHJpbmcsXFxyXFxuICB2YWx1ZT8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcgfCBudW1iZXJcXHJcXG4pOiBzdHJpbmcgfCB2b2lkIHtcXHJcXG4gIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGlzVW5kZWZpbmVkKCB2YWx1ZSApICkge1xcclxcbiAgICByZXR1cm4gZ2V0Q29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVkU3R5bGUoIGVsbSApWyBwcm9wIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCAhIGlzTnVsbCggdmFsdWUgKSApIHtcXHJcXG4gICAgZWxtLnN0eWxlWyBwcm9wICcKICAgICAgICAgICAgICAgICAgICAgICAgYiddID0gYCR7IHZhbHVlIH1gO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iLCJpbXBvcnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgc3R5bGUgfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyIKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFNldHMgdGhlIGBkaXNwbGF5YCBDU1MgdmFsdWUgdG8gdGhlIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGVsbSAgICAgLSBBbiBlbGVtZW50IHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQgYSBuZXcgdmFsdWUgdG8uXFxyXFxuICogQHBhcmFtIGRpc3BsYXkgLSBBIG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3cgYGRpc3BsYXlgIHZhbHVlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheSggZWxtOiBIVE1MRWxlbWVudCwgZGlzcGxheTogc3RyaW5nICk6IHZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiIntcXHJcXG4gIHN0eWxlKCBlbG0sICdkaXNwbGF5JywgZGlzcGxheSApO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuIiwiLyoqXFxyXFxuICogRm9jdXNlcyB0aGUgcHJvdmlkZWQgZWxlbWVudCB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aG91dCBzY3JvbGxpbmcgdGhlIGFzY2VuZGFudCBlbGVtZW50LlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBwYXJhbSBlbG0gLSBBbiBlbGVtZW50IHRvIGZvY3VzLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgZnVuY3Rpb24gZm9jdXMoIGVsbTogSFRNTEVsZW1lbnQgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIie1xcclxcbiAgZWxtWyAnc2V0QWN0aXZlJyBdICYmIGVsbVsgJ3NldEFjdGl2ZScgXSgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB8fCBlbG0uZm9jdXMoIHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9ICk7XFxyXFxufVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlbG0gIC0gQW4gZWxlbWVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHBhcmFtIGF0dHIgLSBBbiBhdHRyaWJ1dGUgdG8gZ2V0LlxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCBlbG06IEVsZW1lbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyOiBzdHJpbmcgKTogc3RyaW5nIHwgbnVsbCB7XFxyXFxuICByZXR1cm4gZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRBdHRyaWJ1dGUoIGF0dHIgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogQycKICAgICAgICAgICAgICAgICAgICAgICAgYidoZWNrcyBpZiB0aGUgZWxlbWVudCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGNsYXNzIG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtICAgICAgIC0gQW4gZWxlbWVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gY2hlY2suXFxyXFxuICogQHBhcmFtIGNsYXNzTmFtZSAtIEEgY2xhc3MgbmFtZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhhdCBtYXkgYmUgY29udGFpbmVkIGJ5IHRoZSBlbGVtZW50LlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGFzQ2xhc3MoIGVsbTogRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcgKTogYm9vbGVhbicKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgcmV0dXJuIGVsbSAmJiBlbG0uY2xhc3NMaXN0LmNvbnRhaW5zKCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NOYW1lICk7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFJldHVybnMgYSBETycKICAgICAgICAgICAgICAgICAgICAgICAgYidNUmVjdCBvYmplY3Qgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHRhcmdldCAtIEFuIGVsZW1lbnQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiByZWN0KCB0YXJnZXQ6IEVsZW1lbnQgKTogRE9NUmVjdCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwnLi4vLi4vYXJyYXlcJztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVtb3ZlcyB0aGUgcHJvdmlkZWQgbm9kZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnJvbSBpdHMgcGFyZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG5vZGVzIC0gQSBubycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSBvciBub2RlcyB0byByZW1vdmUuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZW1vdmUoIG5vZGVzOiBOb2RlIHwgTm9kZVtdICk6IHZvaWQge1xcclxcbiAgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2goIG5vZGVzLCBub2RlID0+IHtcXHJcXG4gICAgaWYgKCBub2RlICYmIG5vZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmVudE5vZGUgKSB7XFxyXFxuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZCggbm9kZSApO1xcclxcbiAgICB9XFxyXFxuICB9ICk7XFxyXFxufVxcclxcbiIsImknCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBjaGlsZCB9IGZyb20gJy4uL2NoaWxkL2NoaWxkJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogUGFyc2VzIHRoZSBwcm92aWRlZCBIVE1MIHN0cmluZyBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gaHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWwgLSBBbiBIVE1MIHN0cmluZyB0byBwYXJzZS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIEFuIEVsZW1lbnQgb24gc3VjY2Vzcywgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIdG1sPEUgZXh0ZW5kcyBIVE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEVsZW1lbnQ+KCBodG1sOiBzdHJpbmcgKTogRSB8IHVuZGVmaW5lZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGNoaWxkPEU+KCBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCBodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidtbCwgXCd0ZXh0L2h0bWxcJyApLmJvZHkgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIENhbGwgdGhlIGBwcmV2ZW50RGVmYXVsdCgpYCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGUgICAgICAgICAgICAgICAtIEFuIEV2ZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QuXFxyXFxuICogQHBhcmFtIHN0b3BQcm9wYWdhdGlvbiAtIE9wdGlvbmFsLicKICAgICAgICAgICAgICAgICAgICAgICAgYicgV2hldGhlciB0byBzdG9wIHRoZSBldmVudCBwcm9wYWdhdGlvbiBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50KCBlOiBFdmVudCwgc3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidQcm9wYWdhdGlvbj86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICBlLnByZXZlbnREZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCgpO1xcclxcblxcclxcbiAgaWYgKCBzdG9wUHJvcGFnYXRpb24gKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcclxcbiAgICBlLnN0b3BJbW1lZGlhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlUHJvcGFnYXRpb24oKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JldHVybnMgYW4gZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHNlbGVjdG9yIHRvIHF1ZXJ5LlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuZCBlbGVtZW50IG9yIGBudWxsYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHF1ZXJ5PEUgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oIHBhcmVudDogRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfCBEb2N1bWVudCwgc2VsZWN0b3I6IHN0cmluZyApOiBFIHwgbnVsbCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3Rvciggc2VsZWN0b3IgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxufVxcclxcbiIsImltcG9ydCB7IHNsaWNlIH0gZnJvbSBcJy4uLy4uL2FycmF5TGlrJwogICAgICAgICAgICAgICAgICAgICAgICBiImUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFJldHVybnMgZWxlbWVudHMgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHNlbGVjdG9yLlxcclxcbiAqXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IgdG8gcXVlcnkuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhcnJheSB3aXRoIG1hdGNoZWQgZWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUFsbDxFIGV4dGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIEVsZW1lbnQgPSBFbGVtZW50PiggcGFyZW50OiBFbGVtZW50IHwgRG9jdW1lbnQsIHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3Rvcj86IHN0cmluZyApOiBFW10ge1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWNlPEU+KCBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKSApIDogW10nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyB0b2dnbGVDbGFzcyB9IGZyb20gXCcuLi90b2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZ2xlQ2xhc3MvdG9nZ2xlQ2xhc3MnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqICIKICAgICAgICAgICAgICAgICAgICAgICAgYidSZW1vdmVzIGNsYXNzZXMgZnJvbSB0aGUgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gZWxtICAgICAtIEFuIGVsZW1lbnQgdG8gcmVtb3ZlIGNsYXNzZXMgZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogQHBhcmFtIGNsYXNzZXMgLSBDbGFzc2VzIHRvIHJlbW92ZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKCBlbG06IEVsZW1lbnQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGFzc2VzOiBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkIHtcXHJcXG4gIHRvZ2dsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VDbGFzcyggZWxtLCBjbGFzc2VzLCBmYWxzZSApO1xcclxcbn1cXHJcXG4iLCIvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogRXh0cmFjdHMgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSBldmVudCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGUgLSBBbiBFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0aW1lT2YoIGU6IEV2ZW50ICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIge1xcclxcbiAgcmV0dXJuIGUudGltZVN0YW1wO1xcclxcbn0iLCJpbXBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiInsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBBcHBlbmRzIGBweGAgdG8gdGhlIHByb3ZpZGVkIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXFxyXFxuICogSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgc3RyaW5nLCBqdXN0IHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm5zIGl0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwZW5kIGBweGAgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgc3RyaW5nIHdpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIHRoZSBDU1MgdW5pdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdW5pdCggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlOiBudW1iZXIgfCBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdHJpbmcoIHZhbHVlICkgPyB2YWx1ZSA6IHZhbHVlID8gYCR7IHZhbHVlIH1weGAgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXCdcJztcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHByb2plY3QgY29kZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiInN0IFBST0pFQ1RfQ09ERSA9ICdzcGxpZGUnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgZGF0YSBhdHRyaWJ1dGUgcHJlZml4LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBEQVRBX0FUVFJJQlVURSA9IGBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0YS0keyBQUk9KRUNUX0NPREUgfWA7XFxyXFxuIiwiaW1wb3J0IHsgUFJPSkVDVF9DTycKICAgICAgICAgICAgICAgICAgICAgICAgYiJERSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGl0aW9uIGlzIGZhbHN5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGNvbmRpdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidJZiBmYWxzeSwgYW4gZXJyb3IgaXMgdGhyb3duLlxcclxcbiAqIEBwYXJhbSBtZXNzYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZSAgIC0gT3B0aW9uYWwuIEEgbWVzc2FnZSB0byBkaXNwbGF5LlxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KCBjb25kaXRpb246IGFueSwgbWVzc2FnZT86IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmcgKTogdm9pZCB7XFxyXFxuICBpZiAoICEgY29uZGl0aW9uICkge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhyb3cgbmV3IEVycm9yKCBgWyR7IFBST0pFQ1RfQ09ERSB9XSAkeyBtZXNzYWdlIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBcJ1wnIH1gICk7XFxyXFxuICB9XFxyXFxufVxcclxcbiIsImV4cG9ydCBjb25zdCB7IG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4sIG1heCwgZmxvb3IsIGNlaWwsIGFicyB9ID0gTWF0aDtcXHJcXG4iLCJpbXBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHsgYWJzIH0gZnJvbSAnLi4vbWF0aC9tYXRoJztcXHJcXG5cXHJcXG5cXHJcXG4vKioiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCAyIG51bWJlcnMgYXJlIGFwcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3hpbWF0ZWx5IGVxdWFsIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB4ICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgbnVtYmVyLlxcclxcbiAqIEBwYXJhbSB5ICAgICAgIC0gQW5vdGhlciBudScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyIHRvIGNvbXBhcmUuXFxyXFxuICogQHBhcmFtIGVwc2lsb24gLSBBbiBhY2N1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY3kgdGhhdCBkZWZpbmVzIHRoZSBhcHByb3hpbWF0aW9uLlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ByZXR1cm4gYHRydWVgIGlmIDIgbnVtYmVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBlcXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWwsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gYXBwcm94aW1hdGVseUVxdWFsKCB4OiBudW1iZXIsIHk6IG51bWJlciwgZXBzaWxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ246IG51bWJlciApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiBhYnMoIHggLSB5ICkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzwgZXBzaWxvbjtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwnJwogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL21hdGgvbWF0aCc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiB0aGUgc3ViamVjdCBudW1iZXIgaXMgYmV0d2VlbiBgeGAgYW5kIGB5YC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAcGFyYW0gbnVtYmVyICAgIC0gQSBzdWJqZWN0IG51bWJlciB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2suXFxyXFxuICogQHBhcmFtIHggICAgICAgICAtIEEgbWluIG9yIG1heCBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyLlxcclxcbiAqIEBwYXJhbSB5ICAgICAgICAgLSBBIG1heCBvciBtaW4gbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cXHJcXG4gKiBAcGFyYW0gZXhjbHVzaXZlIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2x1ZGUgYHhgIG9yIGB5YC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gYicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHdlZW4oIG51bWJlcjogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlciwgZXhjbHVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZT86IGJvb2xlYW4gKTogYm9vbGVhbiB7XFxyXFxuICBjb25zdCBtaW5pbXVtID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pbiggeCwgeSApO1xcclxcbiAgY29uc3QgbWF4aW11bSA9IG1heCggeCwgeSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHJldHVybiBleGNsdXNpdmVcXHJcXG4gICAgPyBtaW5pbXVtIDwgbnVtYmVyICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBudW1iZXIgPCBtYXhpbXVtXFxyXFxuICAgIDogbWluaW11bSA8PSBudW1iZXIgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciA8PSBtYXhpbXVtO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBtYXgsIG1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi9tYXRoL21hdGgnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBDbGFtcHMgYSBudW1iZXIuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gbnVtYmVyIC0gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdCBudW1iZXIgdG8gY2hlY2suXFxyXFxuICogQHBhcmFtIHggICAgICAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1pbiBvciBtYXggbnVtYmVyLlxcclxcbiAqIEBwYXJhbSB5ICAgICAgLSBBIG1pbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgbWF4IG51bWJlci5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBjbGFtcGVkIG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKCBudW1iZXI6IG51JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyICk6IG51bWJlciB7XFxyXFxuICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgbWluaW11bSA9IG1pbiggeCwgeSApO1xcclxcbiAgY29uc3QgbWF4aW11bSA9IG1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3goIHgsIHkgKTtcXHJcXG4gIHJldHVybiBtaW4oIG1heCggbWluaW11bSwgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApLCBtYXhpbXVtICk7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFJldHVybnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzaWduIG9mIHRoZSBwcm92aWRlZCBudW1iZXIuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIHggLSBBIG51bWJlci5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYDFgIGZvciBwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidzaXRpdmUgbnVtYmVycywgYC0xYCBmb3IgbmVnYXRpdmUgbnVtYmVycywgb3IgYDBgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYDBgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzaWduKCB4OiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IG51bWJlciB7XFxyXFxuICByZXR1cm4gKyggeCA+IDAgKSAtICsoIHggPCAwICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSBcJy4uLy4uL2FycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIieSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRm9ybWF0cyBhIHN0cmluZy5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gc3RyaW5nICAgICAgIC0gQSBzdHJpbmcgdG8gZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21hdC5cXHJcXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRzIC0gQSByZXBsYWNlbWVudCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcmVwbGFjZW1lbnRzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIGZvcm1hdHRlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQoIHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBzdHJpbmcgfCBudW1iZXIgfCBBcnJheTxzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nIHwgbnVtYmVyPiApOiBzdHJpbmcge1xcclxcbiAgZm9yRWFjaCggcmVwbGFjZW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cywgcmVwbGFjZW1lbnQgPT4ge1xcclxcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwJwogICAgICAgICAgICAgICAgICAgICAgICBiImxhY2UoICclcycsIGAkeyByZXBsYWNlbWVudCB9YCApO1xcclxcbiAgfSApO1xcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHJldHVybiBzdHJpbmc7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFBhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBudW1iZXIgd2l0aCAwLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG51bWJlciAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIG51bWJlciB0byBwYWQuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIHN0cmluZyAtIFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkZWQgbnVtYmVyLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwYWQoIG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXI6IG51bWJlciApOiBzdHJpbmcge1xcclxcbiAgcmV0dXJuIG51bWJlciA8IDEwICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IGAwJHsgbnVtYmVyIH1gIDogYCR7IG51bWJlciB9YDtcXHJcXG59XFxyXFxuIiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IHBhZCB9IGZyb20gJy4uL3BhZC9wYWQnO1xcclxcblxcclxcblxcclxcbi8qIgogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBTdG9yZXMgdW5pcXVlIElEcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBpZHM6IFJlY29yZDxzdHJpbmcsIG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXI+ID0ge307XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmV0dXJucyBhIHNlcXVlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWFsIHVuaXF1ZSBJRCBhcyBcXCJ7IHByZWZpeCB9LXsgbnVtYmVyIH1cXCIuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHBhcmFtIHByZWZpeCAtIEEgcHJlZml4IGZvciB0aGUgSUQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVJZCggcHJlZml4OiBzdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gYCR7IHByZWZpeCB9JHsgcGFkKCAoIGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NbIHByZWZpeCBdID0gKCBpZHNbIHByZWZpeCBdIHx8IDAgKSArIDEgKSApIH1gOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24gfSBmcm9tIFwnLi4vLi4vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ5cGVzJztcXHJcXG5pbXBvcnQgeyBlbXB0eSwgZm9yRWFjaCB9IGZyb20gJy4uLy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ1dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGFuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudFRhcmdldCBvciBhbiBhcnJheSB3aXRoIEV2ZW50VGFyZ2V0IG9iamVjdHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxudHlwZSBFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUYXJnZXRzID0gRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdldFtdO1xcclxcblxcclxcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRCaW5kZXIgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIGJpbmQoIHRhcmdldDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEV2ZW50VGFyZ2V0cywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbnlGdW5jdGlvbiwgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zICk6IHZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkXFxyXFxuICB1bmJpbmQoIHRhcmdldDogRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RbXSwgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s/OiBBbnlGdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKTogdm9pZDtcXHJcXG4gIGRpc3BhdGNoPFQ+KCB0YXJnZXQ6IEV2ZW50VGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgZXZlbnQ6IHN0cmluZywgZGV0YWlsPzogVCApOiB2b2lkO1xcclxcbiAgZGVzdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3koKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgYid1Y3RvciBmdW5jdGlvbiB0byBwcm92aWRlIG1ldGhvZHMgdG8gc3Vic2NyaWJlIG5hdGl2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZXZlbnRzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICogQGNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdHJ1Y3RvclxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBFdmVudEJpbmRlciBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBFdmVudEJpbmRlcigpOiBFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRCaW5kZXJPYmplY3Qge1xcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIGhhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kbGVycyB0aGF0IGxpc3RlbiB0byBuYXRpdmUgZXZlbnRzLlxcclxcbiAgICogYFsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2ssIHJlbW92ZXIgXWBcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0ZW5lcnM6IFsgRXZlbnRUYXJnZXQsIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csIHN0cmluZyB8IHVuZGVmaW5lZCwgQW55RnVuY3Rpb24sICgpID0+IHZvaWQgXVtdID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBMaXN0ZW5zIHRvIG5hdGl2ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnRzLlxcclxcbiAgICogLSBgZGVzdHJveSgpYCBjYW4gdW5zdWJzY3JpYmUgYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCBldmVudHMuXFxyXFxuICAgKiAtIEluIElFLCBtZWRpYVF1ZXJ5TGlzdCBkb2VzIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QgaW5oZXJpdCBFdmVudFRhcmdldCxcXHJcXG4gICAqICAgYW5kIG9ubHkgc3VwcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzIGRlcHJlY2F0ZWQgYGFkZExpc3RlbmVyYCBhbmQgYHJlbW92ZUxpc3RlbmVyYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYVF1ZXJ5TGlzdC9hZGRMaXN0ZW5lcicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCwgdGhlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBvciBldmVudHMgdG8gbGlzdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB0by5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuIFRoZSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyB0byBwYXNzIHRvIHRoZSBgYWRkRXZlbnRMaXN0ZW5lcmAgZnVuY3Rpb24uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBiaW5kKFxcclxcbiAgICB0YXJnZXRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogRXZlbnRUYXJnZXRzLFxcclxcbiAgICBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gICAgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLFxcclxcbiAgICBvcHRpb25zPzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zXFxyXFxuICApOiB2b2lkIHtcXHJcXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2hFdmVudCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG5hbWVzJwogICAgICAgICAgICAgICAgICAgICAgICBiInBhY2UgKSA9PiB7XFxyXFxuICAgICAgY29uc3QgaXNFdmVudFRhcmdldCA9ICdhZGRFIgogICAgICAgICAgICAgICAgICAgICAgICBiInZlbnRMaXN0ZW5lcicgaW4gdGFyZ2V0O1xcclxcbiAgICAgIGNvbnN0IHJlbW92ZXIgIgogICAgICAgICAgICAgICAgICAgICAgICBiJz0gaXNFdmVudFRhcmdldFxcclxcbiAgICAgICAgPyB0YXJnZXQucmVtb3ZlRXZlbnRMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdGVuZXIuYmluZCggdGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMgKScKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgICAgIDogdGFyZ2V0WyAncmVtb3ZlTGlzdGVuZXInIF0uYmluZCggdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgY2FsbGJhY2sgKTtcXHJcXG5cXHJcXG4gICAgICBpc0V2ZW50VGFyZ2V0ID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldC5hZGRFdmVudExpc3RlbmVyKCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOiB0YXJnZXRbICdhZGRMaXN0ZW5lcicgXSggY2FsbGJhY2sgKTtcXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJzLnB1c2goIFsgdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlbW92ZXIgXSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBSZW1vdmVzIHRoZSBldmVudCBoYW5kbGVyLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtZW50LCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzIHRvIHJlbW92ZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbC4gU3BlY2lmeSB0aGUgY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrIHRvIHJlbW92ZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdW5iaW5kKCB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0czogRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSApID0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlciggbGlzdGVuZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyID0+IHtcXHJcXG4gICAgICAgIGlmICggbGlzdGVuZXJbIDAgXSA9PT0gdGFyZ2V0XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgICAmJiBsaXN0ZW5lclsgMSBdID09PSBldmVudFxcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgJiYgbGlzdGVuZXJbIDIgXSA9PT0gbmFtZXNwYWNlXFxyXFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAoICEgY2FsbGJhY2sgfHwgbGlzdGVuZXJbIDMgXSA9PT0gY2FsbGJhY2sgKScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgICkge1xcclxcbiAgICAgICAgICBsaXN0ZW5lclsgNCBdKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxyXFxuICAgICAgICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxyXFxuICAgICAgfSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEaXNwYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBhIGN1c3RvbSBldmVudCBvZiB0aGUgdGFyZ2V0LlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gdGFyZ2V0IC0gQW4gZXZlbnQgdGFyZ2V0LlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlICAgLSBBbiBldmVudCB0eXBlLlxcclxcbiAgICogQHBhcmFtIGRldGFpbCAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBPcHRpb25hbC4gVGhlIGBkZXRhaWxgIG9iamVjdCBvZiB0aGUgZXZlbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gZXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZnVuY3Rpb24gZGlzcGF0Y2g8VD4oIHRhcmdldDogRXZlbnRUYXJnZXQsIHR5cGU6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcsIGRldGFpbD86IFQgKTogQ3VzdG9tRXZlbnQge1xcclxcbiAgICBsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IEN1c3RvbUV2ZW50O1xcclxcbiAgICBjb25zdCBidWJibGVzID0gdHJ1ZTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgIGlmICggdHlwZW9mIEN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nICkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGJ1YmJsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBkZXRhaWwgfSApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIGUgPSBkb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgYiJlbnQuY3JlYXRlRXZlbnQoICdDdXN0b21FdmVudCcgKTtcXHJcXG4gICAgICBlLmluaSIKICAgICAgICAgICAgICAgICAgICAgICAgYid0Q3VzdG9tRXZlbnQoIHR5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG5cXHJcXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogSXRlcmF0ZXMgb3ZlciBlYWNoIHRhcmdldCBhbmQgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoXFxyXFxuICAgIHRhcmdldHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpdGVyYXRlZTogKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZywgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQgKSA9PiB2b2lkXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIHRhcmdldHMsIHRhcmdldCA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHRhcmdldCAmJiBmb3JFYWNoKCBldmVudHMsIGV2ZW50cyA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgICAgZXZlbnRzLnNwbGl0KCAnICcgKS5mb3JFYWNoKCBldmVudE5TID0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiB7XFxyXFxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXZlbnROUy5zcGxpdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuJyApO1xcclxcbiAgICAgICAgICBpdGVyYXRlZSggdGFyZ2V0LCBmcmFnbWVudFsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAgXSwgZnJhZ21lbnRbIDEgXSApO1xcclxcbiAgICAgICAgfSApO1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVycy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIGxpc3RlbmVycy5mb3JFYWNoKCBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0YSA9PiB7IGRhdGFbIDQgXSgpIH0gKTtcXHJcXG4gICAgZW1wdHkoIGxpc3RlbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIGJpbmQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB1bmJpbmQsXFxyXFxuICAgIGRpc3BhdGNoLFxcclxcbiAgICBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImV4cG9ydCBjb25zdCBFVkVOVF9NT1UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTlRFRCAgICAgICAgICAgID0gJ21vdW50ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTlRfUkVBRFkgICAgICAgICAgICAgID0gJ3JlYWR5JztcXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEVWRU5UX01PVkUgICAgICAgICAgICAgICA9ICdtb3ZlJztcXHJcXG5leHBvcnQgY28iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnN0IEVWRU5UX01PVkVEICAgICAgICAgICAgICA9ICdtb3ZlZCc7XFxyXFxuZXhwb3IiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCBjb25zdCBFVkVOVF9DTElDSyAgICAgICAgICAgICAgPSAnY2xpY2snO1xcclxcbmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIieHBvcnQgY29uc3QgRVZFTlRfQUNUSVZFICAgICAgICAgICAgID0gJ2FjdGl2ZSc7IgogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9JTkFDVElWRSAgICAgICAgICAgPSAnaW5hIgogICAgICAgICAgICAgICAgICAgICAgICBiImN0aXZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfVklTSUJMRSAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA9ICd2aXNpYmxlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfSElEREVOICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA9ICdoaWRkZW4nO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9SRUZSRVNIIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICAgICAgID0gJ3JlZnJlc2gnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9VIgogICAgICAgICAgICAgICAgICAgICAgICBiIlBEQVRFRCAgICAgICAgICAgID0gJ3VwZGF0ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFIgogICAgICAgICAgICAgICAgICAgICAgICBiIlZFTlRfUkVTSVpFICAgICAgICAgICAgID0gJ3Jlc2l6ZSc7XFxyXFxuZXhwb3J0IGNvIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5zdCBFVkVOVF9SRVNJWkVEICAgICAgICAgICAgPSAncmVzaXplZCc7XFxyXFxuZXhwIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCBjb25zdCBFVkVOVF9EUkFHICAgICAgICAgICAgICAgPSAnZHJhZyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiImV4cG9ydCBjb25zdCBFVkVOVF9EUkFHR0lORyAgICAgICAgICAgPSAnZHJhZ2dpbmcnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBR0dFRCAgICAgICAgICAgID0gJ2RyYWdnZWQnIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfU0NST0xMICAgICAgICAgICAgID0gJ3NjIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbGwnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TQ1JPTExFRCAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIj0gJ3Njcm9sbGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfT1ZFUkZMT1cgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA9ICdvdmVyZmxvdyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RFU1RSIgogICAgICAgICAgICAgICAgICAgICAgICBiIk9ZICAgICAgICAgICAgPSAnZGVzdHJveSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UIgogICAgICAgICAgICAgICAgICAgICAgICBiIl9BUlJPV1NfTU9VTlRFRCAgICAgPSAnYXJyb3dzOm1vdW50ZWQnO1xcclxcbmV4cG9yIgogICAgICAgICAgICAgICAgICAgICAgICBiInQgY29uc3QgRVZFTlRfQVJST1dTX1VQREFURUQgICAgID0gJ2Fycm93czp1cGRhdGVkJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICdwYWciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5hdGlvbjptb3VudGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUEFHSU5BVEkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiT05fVVBEQVRFRCA9ICdwYWdpbmF0aW9uOnVwZGF0ZWQnO1xcclxcbmV4cG9ydCBjb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gJ25hdmlnYXRpb246bW91bnRlZCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZICAgICAgPSAnYXV0b3BsYXkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOnBsYXknO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZSU5HICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiID0gJ2F1dG9wbGF5OnBsYXlpbmcnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiT1BMQVlfUEFVU0UgICAgID0gJ2F1dG9wbGF5OnBhdXNlJztcXHJcXG5leHBvcnQgY28iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnN0IEVWRU5UX0xBWllMT0FEX0xPQURFRCAgICA9ICdsYXp5bG9hZDpsb2FkZWQnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4vKiogQGludGVybmFsICovXFxyXFxuZXhwb3J0IGNvbnN0IEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVOVF9TTElERV9LRVlET1dOICAgICA9ICdzayc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWIgogICAgICAgICAgICAgICAgICAgICAgICBiIkVOVF9TSElGVEVEICAgICAgICAgICA9ICdzaCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9IFwnZWlcJztcXHJcXG4iLCJpbXBvcnQgeyBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTlRfREVTVFJPWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgRXZlbnRNYXAgfSBmcm9tICcuLi8uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFwcGx5LCBhc3NpZ24sIGlzQXJyYXksIHNsIgogICAgICAgICAgICAgICAgICAgICAgICBiImljZSwgdG9BcnJheSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBFIgogICAgICAgICAgICAgICAgICAgICAgICBiInZlbnRCaW5kZXIsIEV2ZW50QmluZGVyT2JqZWN0IH0gZnJvbSAnLi4vRXZlbnRCaW5kZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL0V2ZW50QmluZGVyJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZU9iamVjdCBleHRlbmRzIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudDogSywgY2FsbGJhY2s6IEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudE1hcFsgSyBdICk6IHZvaWQ7XFxyXFxuICBvbiggZXZlbnRzOiBzdHJpbmcgfCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB2b2lkO1xcclxcbiAgb2ZmPCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudHM6IEsgfCBLW10gfCBzdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc3RyaW5nW10gKTogdm9pZDtcXHJcXG4gIGVtaXQ8SyBleHRlbmRzIGtleW9mIEV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudE1hcD4oIGV2ZW50OiBLLCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEV2ZW50TWFwWyBLIF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiApOiB2b2lkXFxyXFxuICBlbWl0KCBldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInW10gKTogdm9pZDtcXHJcXG5cXHJcXG4gIC8qKiBAaW50ZXJuYWwgKi9cXHJcXG4gIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6IERvY3VtZW50RnJhZ21lbnQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBpbnRlcmZhY2UgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnRlcm5hbCBhbmQgbmF0aXZlIGV2ZW50cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKiBAY29uc3RydWN0b3JcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBIGNvbGxlY3Rpb24gb2YgaW50ZXJmYWNlIGZ1bmN0aW9ucy5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGU/OiBTcGxpZGUgKTogRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50SW50ZXJmYWNlT2JqZWN0IHtcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGRvY3VtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCBmcmFnbWVudCBmb3IgaW50ZXJuYWwgZXZlbnRzLlxcclxcbiAgICogUHJvdmlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIFNwbGlkZSBpbnN0YW5jZSB0byBzaGFyZSB0aGUgYnVzLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgY29uc3QgYnVzID0gU3BsaWRlID8gU3BsaWRlLmV2ZW50LmJ1cyA6IGRvY3VtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBBbiBldmVudCBiaW5kZXIgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIExpc3RlbnMgdG8gYW4gaW50ZXJuYWwgZXZlbnQgb3IgZXZlbnRzLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVc2UgYSBkb3QoLikgdG8gYWRkIGEgbmFtZXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZS5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHRvIHJlZ2lzdGVyLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbiggZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIGJpbmRlci5iaW5kKCBidXMsIHRvQXJyYXkoIGV2ZW50cyApLmpvaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJuKCAnICcgKSwgZSA9PiB7XFxyXFxuICAgICAgY2FsbGJhY2suYXBwbHkoIGNhbGxiYSIKICAgICAgICAgICAgICAgICAgICAgICAgYidjaywgaXNBcnJheSggZS5kZXRhaWwgKSA/IGUuZGV0YWlsIDogW10gKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHJpZ2dlcnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrIGZ1bmN0aW9ucy5cXHJcXG4gICAqIFRoaXMgYWNjZXB0cyBhZGRpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hbCBhcmd1bWVudHMgYW5kIHBhc3NlcyB0aGVtIHRvIGNhbGxiYWNrcy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIGV2ZW50IC0gQW4gZXZlbnQgbmFtZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIGVtaXQoIGV2ZW50OiBzdHJpbmcgKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcHJlZmVyLXNwcmVhZFxcclxcbiAgICBiaW5kZXIuZGlzcGF0Y2goIGJ1cywgZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBzbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIFNwbGlkZSApIHtcXHJcXG4gICAgU3BsaWRlLmV2ZW50Lm9uKCBFVkVOVF9EJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VTVFJPWSwgYmluZGVyLmRlc3Ryb3kgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gYXNzaWduKCBiaW5kZXIsIHtcXHJcXG4gICAgYnVzLFxcclxcbiAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIG9mZjogYXBwbHkoIGJpbmRlci51bmJpbmQsIGJ1cyApLFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdCxcXHJcXG4gIH0gKTtcXHJcXG59IiwiaW1wb3J0IHsgbWluLCByYWYgfSBmcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIibSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJmYWNlIGZvciB0aGUgcmV0dXJuaW5nIHZhbHVlIG9mIHRoZSBSZXF1ZXN0SW50ZXJ2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpbnRlcmZhY2UgUmVxdWVzdEludGVydmFsSW50ZXJmYWNlIHtcXHJcXG4gIHN0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggcmVzdW1lPzogYm9vbGVhbiApOiB2b2lkO1xcclxcbiAgcGF1c2UoKTogdm9pZDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZXdpbmQoKTogdm9pZDtcXHJcXG4gIGNhbmNlbCgpOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNldCggaW50ZXJ2YWw6IG51bWJlciApOiB2b2lkO1xcclxcbiAgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk6IGJvb2xlYW47XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFJlcXVlc3RzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbCBsaWtlIHRoZSBuYXRpdmUgYHNldEludGVydmFsKClgIHdpdGggdXNpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIGludGVydmFsICAgLSBUaGUgaW50ZXJ2YWwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cXHJcXG4gKiBAcGFyYW0gb25JbnRlcnZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBUaGUgY2FsbGJhY2sgZmlyZWQgb24gZXZlcnkgaW50ZXJ2YWwuXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBvblVwZGF0ZSAgIC0gT3B0aW9uYWwuIENhbGxlZCBvbiBldmVyeSBhbmltYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGZyYW1lLCB0YWtpbmcgdGhlIHByb2dyZXNzIHJhdGUuXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBsaW1pdCAgICAgIC0gT3B0aW9uYWwuIExpbWl0cyB0aGUgbnVtYmVyIG9mIGludGVydmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdEludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhcXHJcXG4gIGludGVydmFsOiBudW1iZXIsXFxyXFxuICBvbkludGVydmFsOiAoKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZCxcXHJcXG4gIG9uVXBkYXRlPzogKCByYXRlOiBudW1iZXIgKSA9PiB2b2lkLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGxpbWl0PzogbnVtYmVyXFxyXFxuKTogUmVxdWVzdEludGVydmFsSW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSB7XFxyXFxuICBjb25zdCB7IG5vdyB9ID0gRGF0ZTtcXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIFRoZSB0aW1lIHdoZW4gdGhlIGludGVydmFsIHN0YXJ0cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGxldCBzdGFydFRpbWU6IG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFRoZSBjdXJyZW50IHByb2dyZXNzIHJhdGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBsZXQgcmF0ZSA9IDA7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYW5pbWF0aW9uIGZyYW1lIElELlxcclxcbiAgICovXFxyXFxuICBsZXQgaWQ6IG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXI7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgaW50ZXJ2YWwgaXMgY3VycmVudGx5IHBhdXNlZCBvciBub3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsZXQgcGF1c2VkID0gdHJ1ZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoZSBsb29wIGNvdW50LiBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgYGxpbWl0YCBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnQgaXMgcHJvdmlkZWQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjb3VudCA9IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgdXBkYXRlIGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsZWQgb24gZXZlcnkgYW5pbWF0aW9uIGZyYW1lLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgcGF1c2VkICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICByYXRlID0gaW50ZXJ2YWwgPyBtaW4oICggbm93KCkgLSBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lICkgLyBpbnRlcnZhbCwgMSApIDogMTtcXHJcXG4gICAgICBvblVwZGF0ZSAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgb25VcGRhdGUoIHJhdGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIHJhdGUgPj0gMSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICBvbkludGVydmFsKCk7XFxyXFxuICAgICAgICBzdGFydFRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbm93KCk7XFxyXFxuXFxyXFxuICAgICAgICBpZiAoIGxpbWl0ICYmICsrY291bnQgPicKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGxpbWl0ICkge1xcclxcbiAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGlkID0gcmFmKCB1cGRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFN0YXJ0cyB0aGUgaW50ZXJ2YWwuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXN1bWUgLSBPcHRpb25hbC4gV2hldGhlciB0byByZXN1bWUgdGhlIHBhdXNlZCBwcm9ncicKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Mgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdGFydCggcmVzdW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJz86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHN0YXJ0VGltZSA9IG5vdygpIC0gKCByZXN1bWUgPyByYXRlICogaW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsIDogMCApO1xcclxcbiAgICBwYXVzZWQgICAgPSBmYWxzZTtcXHJcXG4gICAgaWQgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA9IHJhZiggdXBkYXRlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBQYXVzZXMgdGhlIGludGVydmFsLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGF1c2UoKTogdm9pZCB7XFxyXFxuICAgIHBhdXNlZCA9IHRydWU7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXdpbmRzIHRoZSBjdXJyZW50IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9ncmVzcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgc3RhcnRUaW1lID0gbm93KCk7XFxyXFxuICAgIHJhdGUgICAgICA9IDA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIG9uVXBkYXRlICkge1xcclxcbiAgICAgIG9uVXBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSggcmF0ZSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBDYW5jZWxzIHRoZSBpbnRlcnZhbC5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcXHJcXG4gICAgaWQgJiYgY2FuY2VsQW5pbWF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbkZyYW1lKCBpZCApO1xcclxcbiAgICByYXRlICAgPSAwO1xcclxcbiAgICBpZCAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gMDtcXHJcXG4gICAgcGF1c2VkID0gdHJ1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIFNldHMgbmV3IGludGVydmFsIGR1cmF0aW9uLlxcclxcbiAgICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gdGltZSAtIFRoZSBpbnRlcnZhbCBkdXJhdGlvbiBpbiBtaWxsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWNvbmRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzZXQoIHRpbWU6IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogdm9pZCB7XFxyXFxuICAgIGludGVydmFsID0gdGltZTtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgaW50ZXJ2YWwgaXMgcGF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlZCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnRlcnZhbCBpcyBwYXVzZWQsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gaXNQYXVzZWQoKTogYm9vbGVhbiB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gcGF1c2VkO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0YXJ0LFxcclxcbiAgICByZXdpbmQsXFxyXFxuICAgIHBhdXNlLFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY2FuY2VsLFxcclxcbiAgICBzZXQsXFxyXFxuICAgIGlzUGF1c2VkLFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ307XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGluY2x1ZGVzLCB0b0FycmF5IH0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBmb3IgdGhlIFN0YXRlIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlT2JqZWN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICBzZXQoIHN0YXRlOiBudW1iZXIgKTogdm9pZDtcXHJcXG4gIGlzKCBzdGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzOiBudW1iZXIgfCBudW1iZXJbXSApOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGZ1bmN0aW9uIHByb3ZpZGluZyBhIHN1cGVyIHNpbXBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugc3RhdGUgc3lzdGVtLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGluaXRpYWxTdGF0ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBTcGVjaWZpZXMgdGhlIGluaXRpYWwgc3RhdGUuXFxyXFxuICovXFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBTdGF0ZSggaW5pdGlhbFN0YXRlOiBudW1iZXIgKTogU3RhdGVPYmplY3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBsZXQgc3RhdGUgPSBpbml0aWFsU3RhdGU7XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBTZXRzIGEgbmV3IHN0YXRlLlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gdmFsdWUgLSBBIG5ldyBzdGF0ZSB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHNldCggdmFsdWU6IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlID0gdmFsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidja3MgaWYgdGhlIGN1cnJlbnQgc3RhdGUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgb25lLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc3RhdGVzIC0gQSBzdGF0ZSB0byBjaGVjay4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlIGlzIHRoZSBwcm92aWRlZCBvbmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyggc3RhdGVzOiBudW1iZXIgfCBudW1iZXJbXSApOiBib29sZWFuIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiBpbmNsdWRlcyggdG9BcnJheSggc3RhdGVzICksIHN0YXRlICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHsgc2V0LCBpcyB9O1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiY29uc3QgQVJST1cgPSBcJ0Fycm93XCc7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgYidMRUZUICA9IGAkeyBBUlJPVyB9TGVmdGA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgYidSSUdIVCA9IGAkeyBBUlJPVyB9UmlnaHRgO1xcclxcbmV4cG9ydCBjb25zdCBBUlJPVycKICAgICAgICAgICAgICAgICAgICAgICAgYidfVVAgICAgPSBgJHsgQVJST1cgfVVwYDtcXHJcXG5leHBvcnQgY29uc3QgQVJST1dfRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPV04gID0gYCR7IEFSUk9XIH1Eb3duYDsiLCIvKipcXHJcXG4gKiBFbnVtZXJhdGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgTFRSID0gJ2x0cic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRW51bWVyYXRlcyBzIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzIGZyb20gcmlnaHQgdG8gbGVmdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIFJUTCA9ICdydGwnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgc2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlcyBpbiBhIGNvbC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgVFRCID0gJ3R0YiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcJztcXHJcXG4iLCJpbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV18nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiUklHSFQsIEFSUk9XX1VQIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7IgogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmltcG9ydCB7IFJUTCwgVFRCIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpIgogICAgICAgICAgICAgICAgICAgICAgICBiInJlY3Rpb25zJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERpcmVjdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQge1xcclxcbiAgcmVzb2x2ZSggcHJvcDogc3RyaW5nLCBheGlzT25seT86ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpb25zWydkaXJlY3Rpb24nXSApOiBzdHJpbmc7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgb3JpZW50KCB2YWx1ZTogbnVtYmVyICk6IG51bWJlcjtcXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB0cmFuc2xhdGlvbiBtYXAgZm9yIGRpcmVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBjb25zdCBPUklFTlRBVElPTl9NQVAgPSB7XFxyXFxuICB3aWR0aCAgICAgOiBbICcKICAgICAgICAgICAgICAgICAgICAgICAgYiInaGVpZ2h0JyBdLFxcclxcbiAgbGVmdCAgICAgIDogWyAndG9wJywgJ3JpZ2h0JyBdLCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gIHJpZ2h0ICAgICA6IFsgJ2JvdHRvbScsICdsZWZ0JyBdLFxcclxcbiAgeCAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA6IFsgJ3knIF0sXFxyXFxuICBYICAgICAgICAgOiBbICdZJyBdLFxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIFkgICAgICAgICA6IFsgJ1gnIF0sXFxyXFxuICBBcnJvd0xlZnQgOiBbIEFSUk9XX1UiCiAgICAgICAgICAgICAgICAgICAgICAgIGInUCwgQVJST1dfUklHSFQgXSxcXHJcXG4gIEFycm93UmlnaHQ6IFsgQVJST1dfRE9XTiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSUk9XX0xFRlQgXSxcXHJcXG59O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50IHRoYXQgYWJzb3JicyB0aGUgZGlmZmVyZW5jZSBhbW9uZyBkaXJlY3Rpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQScKICAgICAgICAgICAgICAgICAgICAgICAgYicgRGlyZWN0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBEaXJlY3Rpb24oIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBEaXJlY3Rpb25Db21wb25lbnQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmVzb2x2ZXMgdGhlIHByb3ZpZGVkIHByb3BlcnR5IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW1lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwcm9wICAgICAgLSBBIHByb3BlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0eSBuYW1lIHRvIHRyYW5zbGF0ZS5cXHJcXG4gICAqIEBwYXJhbSBheGlzT25seSAgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9uYWwuIElmIGB0dXJlYCwgcmV0dXJucyB0aGUgc2FtZSBwcm9wZXJ0eSBmb3IgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xUUiBhbmQgUlRMLlxcclxcbiAgICogQHBhcmFtIGRpcmVjdGlvbiAtIE9wdGlvbmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4gU3BlY2lmeSB0aGUgZGlyZWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXJlY3Rpb25gIG9wdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHByb3A6IHN0cmluZywgYXhpc09ubHk/OiBib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9uc1snZGlyZWN0aW9uJ10gKTogc3RyaW5nIHtcXHJcXG4gICAgZGlyZWN0aW9uID0gIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gZGlyZWN0aW9uID09PSBSVEwgJiYgISBheGlzT25seSA/IDEgOiBkaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBUVEIgPyAwIDogLTE7XFxyXFxuXFxyXFxuICAgIHJldHVybiBPUklFTlRBVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidfTUFQWyBwcm9wIF0gJiYgT1JJRU5UQVRJT05fTUFQWyBwcm9wIF1bIGluZGV4IF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfHwgcHJvcC5yZXBsYWNlKCAvd2lkdGh8bGVmdHxyaWdodC9pLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBtYXRjaCwgb2Zmc2V0ICkgPT4ge1xcclxcbiAgICAgICAgY29uc3QgcmVwbGFjZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gT1JJRU5UQVRJT05fTUFQWyBtYXRjaC50b0xvd2VyQ2FzZSgpIF1bIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiddIHx8IG1hdGNoO1xcclxcbiAgICAgICAgcmV0dXJuIG9mZnNldCA+IDAgPyByZXBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW1lbnQuY2hhckF0KCAwICkudG9VcHBlckNhc2UoKSArIHJlcGxhY2VtZW50LnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggMSApIDogcmVwbGFjZW1lbnQ7XFxyXFxuICAgICAgfSApO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogT3JpZW50cyB0aGUgdmFsdWUgdG93YXJkcyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJlbnQgZGlyZWN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHZhbHVlIHRvIG9yaWVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugb3JpZW50ZWQgdmFsdWUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG9yaWVudCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhbHVlOiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHZhbHVlIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJUTCA/IDEgOiAtMSApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIHJlc29sdmUsXFxyXFxuICAgIG9yaScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJleHBvcnQgY29uc3QgUk9MRSAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICA9ICdyb2xlJztcXHJcXG5leHBvcnQgY29uc3QgVEFCX0lOREVYID0gJ3RhYmluZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJleCc7XFxyXFxuZXhwb3J0IGNvbnN0IERJU0FCTEVEICA9ICdkaXNhYmxlZCc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmV4cG9ydCBjb25zdCBBUklBX1BSRUZJWCAgICAgICAgICA9ICdhcmlhLSc7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0NPTlRST0xTICAgICAgICA9IGAkeyBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19QUkVGSVggfWNvbnRyb2xzYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9DVVJSRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1jdXJyZW50YDtcXHJcXG5leHBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IEFSSUFfU0VMRUNURUQgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1zZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0xBQkVMICAgICAgICAgICA9IGAkeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9QUkVGSVggfWxhYmVsYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9MQUJFTEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRURCWSAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1sYWJlbGxlZGJ5YDtcXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGNvbnN0IEFSSUFfSElEREVOICAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1oaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZGVuYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9PUklFTlRBVElPTiAgICAgPSBgJCcKICAgICAgICAgICAgICAgICAgICAgICAgYid7IEFSSUFfUFJFRklYIH1vcmllbnRhdGlvbmA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBX1JPTEVERVNDUklQVElPTiA9IGAkeyBBUklBX1BSRUZJWCB9cm9sZWRlc2NyaXB0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2A7XFxyXFxuZXhwb3J0IGNvbnN0IEFSSUFfTElWRSAgICAgICAgICAgID0gYCR7IEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX1BSRUZJWCB9bGl2ZWA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSSUFfQlVTWSAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICA9IGAkeyBBUklBX1BSRUZJWCB9YnVzeWA7XFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBUklBX0FUT01JQyAgICAgICAgICA9IGAkeyBBUklBX1BSRUZJWCB9YXRvbWljYCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFycmF5IHdpdGggYWxsIGF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVzIHRvIHJlbW92ZSBsYXRlci5cXHJcXG4gKiBOZWVkIHRvIG1hbnVhbGx5IHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUgYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgaW4gdGhpcy5cXHJcXG4gKiBOb3RlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGF0IHJlbW92aW5nIGBhcmlhLWxpdmVgIGRpc2FibGVzIHRoZSBsaXZlIHJlZ2lvbiB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250aWwgdGhlIHBhZ2UgcmVsb2FkLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBBTExfQVRUUklCVVRFUyA9IFtcXHJcXG4gIFJPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFLFxcclxcbiAgVEFCX0lOREVYLFxcclxcbiAgRElTQUJMRUQsXFxyXFxuICBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UUk9MUyxcXHJcXG4gIEFSSUFfQ1VSUkVOVCxcXHJcXG4gIEFSSUFfTEFCRUwsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgQVJJQV9MQUJFTExFREJZLFxcclxcbiAgQVJJQV9ISURERU4sXFxyXFxuICBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19PUklFTlRBVElPTixcXHJcXG4gIEFSSUFfUk9MRURFU0NSSVBUSU9OLFxcclxcbl07XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiIsImltcG9ydCB7IFBST0pFQ1RfQ09ERSB9IGZyb20gXCcuL3Byb2plY3RcJztcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHByZWZpeCBmb3IgY2xhc3Nlcy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAc2luY2UgNC4xLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBDTEFTU19QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYID0gYCR7IFBST0pFQ1RfQ09ERSB9X19gO1xcclxcblxcclxcbi8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBUaGUgcHJlZml4IGZvciBzdGF0dXMgY2xhc3Nlcy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgNC4xLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBTVEFUVVNfQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgYiI9ICdpcy0nO1xcclxcblxcclxcbi8qKlxcclxcbiAqIEFsbCBjbGFzc2VzIGFzIGNvbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGFudHMuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1JPT1QgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgPSBQUk9KRUNUX0NPREU7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1RSQUNLJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH10cmFja2A7XFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19MSVNUICAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1saXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1NMSURFICAgICAgICAgICA9IGAkeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfUFJFRklYIH1zbGlkZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0NMT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSAgICAgICAgICAgPSBgJHsgQ0xBU1NfU0xJREUgfS0tY2xvbmVgO1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnQgY29uc3QgQ0xBU1NfQ09OVEFJTkVSICAgICAgID0gYCR7IENMQVNTX1NMSURFIH1fXycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb250YWluZXJgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPV1MgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgID0gYCR7IENMQVNTX1BSRUZJWCB9YXJyb3dzYDtcXHJcXG5leHBvcnQgY29uc3QgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FSUk9XICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWFycm93YDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XX1BSRVYgICAgICA9IGAkeyBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1cgfS0tcHJldmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XX04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVhUICAgICAgPSBgJHsgQ0xBU1NfQVJST1cgfS0tbmV4dGA7XFxyXFxuZXhwb3J0IGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBDTEFTU19QQUdJTkFUSU9OICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1wYWdpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1BBR0lOQVRJT05fUEFHRSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgJHsgQ0xBU1NfUEFHSU5BVElPTiB9X19wYWdlYDtcXHJcXG5leHBvcnQgY29uc3QgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1BST0dSRVNTICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXByb2dyZXNzYDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1BST0dSRVNTX0JBUiAgICA9IGAkeyBDTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgYidPR1JFU1MgfV9fYmFyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXRvZ2dsZWA7XFxyXFxuZXhwb3J0IGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBDTEFTU19UT0dHTEVfUExBWSAgICAgPSBgJHsgQ0xBU1NfVE9HR0xFIH1fX3BsYXlgJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFX1BBVVNFICAgID0gYCR7IENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19UT0dHTEUgfV9fcGF1c2VgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19TUElOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05FUiAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9c3Bpbm5lcmA7XFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBjb25zdCBDTEFTU19TUiAgICAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3JgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19JTklUSUFMSVpFRCAgICAgPSBgJHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNUQVRVU19DTEFTU19QUkVGSVggfWluaXRpYWxpemVkYDtcXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IENMQVNTX0FDVElWRSAgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9YWN0aXZlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfUFJFViAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1wcmV2YDtcXHJcXG5leHBvcnQgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IENMQVNTX05FWFQgICAgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dGA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1ZJU0lCTEUgICAgICAgICA9IGAkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3sgU1RBVFVTX0NMQVNTX1BSRUZJWCB9dmlzaWJsZWA7XFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19MT0FESU5HICAgICAgICAgPSBgJHsgU1RBVFVTX0NMQVNTX1BSRUZJWCB9bG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRpbmdgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19GT0NVU19JTiAgICAgICAgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfWZvY3VzLWluYDtcXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IENMQVNTX09WRVJGTE9XICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9b3ZlcmZsb3dgO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhcnJheSB3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbGwgc3RhdHVzIGNsYXNzZXMgZXhjZXB0IGZvciBgaXMtaW5pdGlhbGl6ZWRgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgU1RBVFVTX0NMQVNTRVMgPSBbXFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVklTSUJMRSxcXHJcXG4gIENMQVNTX1BSRVYsXFxyXFxuICBDTEFTU19ORVhULFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIENMQVNTX0xPQURJTkcsXFxyXFxuICBDTEFTU19GT0NVU19JTixcXHJcXG4gIENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19PVkVSRkxPVyxcXHJcXG5dO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVjdGlvbiBvZiBjbGFzc2VzIGZvciBlbGVtZW50cyB0aGF0IFNwbGlkZSBkeW5hbWljYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbHkgY3JlYXRlcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NFUyA9IHtcXHJcXG4gIHNsaWRlICAgICA6IENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19TTElERSxcXHJcXG4gIGNsb25lICAgICA6IENMQVNTX0NMT05FLFxcclxcbiAgYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cyAgICA6IENMQVNTX0FSUk9XUyxcXHJcXG4gIGFycm93ICAgICA6IENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyxcXHJcXG4gIHByZXYgICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCAgICAgIDogQ0xBU1NfQVJST1dfTkVYVCxcXHJcXG4gIHBhZ2luYXRpb246IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QQUdJTkFUSU9OLFxcclxcbiAgcGFnZSAgICAgIDogQ0xBU1NfUEFHSU5BVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidfUEFHRSxcXHJcXG4gIHNwaW5uZXIgICA6IENMQVNTX1NQSU5ORVIsXFxyXFxufTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHBvd2VyIG9mIHRoZSBmcmljdGlvbi5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IEZSSUNUSU9OID0gNTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJZiB0aGUgdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgc3RvcHMgZHJhZ2dpbmcgZm9yIHRoaXMgZHVyYXRpb24gd2l0aCBrZWVwaW5nIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgcG9pbnRlciBkb3duLCB1cGRhdGVzIHRoZSBiYXNlIGNvb3JkIGFuZCB0aW1lLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgTE9HX0lOVEVSVkFMID0gMjAwO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBldmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX0RPV05fRVZFTlRTID0gJ3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3VjaHN0YXJ0IG1vdXNlZG93bic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVXBkYXQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBldmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX01PVkVfRVZFTlRTID0gJ3RvIgogICAgICAgICAgICAgICAgICAgICAgICBiInVjaG1vdmUgbW91c2Vtb3ZlJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBFbmQgZXZlIgogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyBmb3IgZHJhZ2dpbmcuXFxyXFxuICogVGhlIGBjbGlja2AgZXZlbnQgaXMgcmVxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VpcmVkIGJlY2F1c2UgdGhlIGJyb3dzZXIgc29tZXRpbWVzIGRpc3BhdGNoZXMgYGRyYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBldmVudHMgaW5zdGVhZCBvZiBgbW91c2VgLlxcclxcbiAqXFxyXFxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYiczLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX1VQX0VWRU5UUyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBcJ3RvdWNoZW5kIHRvdWNoY2FuY2VsIG1vdXNldXAgY2xpY2tcJztcXHJcXG4iLCIvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogVGhlIHR5cGUgZm9yIHRoZSByZWd1bGFyIHNsaWRlci5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNMSURFID0gJ3NsaWRlJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgdHlwZSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIHRoZSBjYXJvdXNlbCBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IExPT1AgPSAnbG9vcCc7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG5vdCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiIiogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEZBREUgPSAnZmEiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVcJztcXHJcXG4iLCJpbXBvcnQge1xcclxcbiAgQUxMX0FUVFJJQlVURVMsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQVJJQV9DT05UUk9MUyxcXHJcXG4gIEFSSUFfQ1VSUkVOVCxcXHJcXG4gIEFSSUFfSEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRERFTixcXHJcXG4gIEFSSUFfTEFCRUwsXFxyXFxuICBBUklBX1JPTEVERVNDUklQVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYiIsXFxyXFxuICBST0xFLFxcclxcbiAgVEFCX0lOREVYLFxcclxcbn0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0YW50cy9hdHRyaWJ1dGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgQ0xBU1NfIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVElWRSxcXHJcXG4gIENMQVNTX0NPTlRBSU5FUixcXHJcXG4gIENMQVNTX05FWFQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgQ0xBU1NfUFJFVixcXHJcXG4gIENMQVNTX1ZJU0lCTEUsXFxyXFxuICBTVEFUVVNfJwogICAgICAgICAgICAgICAgICAgICAgICBiIkNMQVNTRVMsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmltcG9ydCB7XFxyXFxuICBFVkVOVF9BQ1RJVkUsXFxyXFxuICBFVkVOVF9DTElDSyxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBFVkVOVF9ISURERU4sXFxyXFxuICBFVkVOVF9JTkFDVElWRSxcXHJcXG4gIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9NT1ZFLFxcclxcbiAgRVZFTlRfTU9WRUQsXFxyXFxuICBFVkVOVF9OQVZJR0FUSU9OXycKICAgICAgICAgICAgICAgICAgICAgICAgYidNT1VOVEVELFxcclxcbiAgRVZFTlRfU0NST0xMRUQsXFxyXFxuICBFVkVOVF9TSElGVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIEVWRU5UX1NMSURFX0tFWURPV04sXFxyXFxuICBFVkVOVF9WSVNJQkxFLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJNT1ZJTkcsIFNDUk9MTElORyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdGF0ZXMnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5pbXBvcnQgeyBGQURFLCBMT09QIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3R5cGVzJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJTcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgYWJzLFxcclxcbiAgYSIKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5LFxcclxcbiAgY2VpbCxcXHJcXG4gIGNoaWxkLFxcclxcbiAgZmxvb3IsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZm9jdXMsXFxyXFxuICBmb3JtYXQsXFxyXFxuICBnZXRBdHRyaWJ1dGUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaGFzQ2xhc3MsXFxyXFxuICBtaW4sXFxyXFxuICBwYWQsXFxyXFxuICBxdWVyeUFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wsXFxyXFxuICByZWN0LFxcclxcbiAgcmVtb3ZlQXR0cmlidXRlLFxcclxcbiAgcmVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZUNsYXNzLFxcclxcbiAgc2V0QXR0cmlidXRlLFxcclxcbiAgc3R5bGUgYXMgX3N0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSxcXHJcXG4gIHRvZ2dsZUNsYXNzLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlIHN1YiBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSAgU2xpZGVDb21wb25lbnQgZXh0ZW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgQmFzZUNvbXBvbmVudCB7XFxyXFxuICBpbmRleDogbnVtYmVyO1xcclxcbiAgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXg6IG51bWJlcjtcXHJcXG4gIHNsaWRlOiBIVE1MRWxlbWVudDtcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0YWluZXI6IEhUTUxFbGVtZW50O1xcclxcbiAgaXNDbG9uZTogYm9vbGVhbjtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHN0eWxlKCBwcm9wOiBzdHJpbmcsIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nIHwgbnVtYmVyLCB1c2VDb250YWluZXI/OiBib29sZWFuICk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkXFxyXFxuICBpc1dpdGhpbiggZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgc3ViY29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBmb3IgbWFuYWdpbmcgZWFjaCBzbGlkZS5cXHJcXG4gKlxcclxcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBpbmRleCAgICAgIC0gQSBzbGlkZSBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXguXFxyXFxuICogQHBhcmFtIHNsaWRlSW5kZXggLSBBIHNsaWRlIGluZGV4IGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmVzLiBUaGlzIG11c3QgYmUgYC0xYCBpZiB0aGUgc2xpZGUgaXMgbm90IGEgY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lLlxcclxcbiAqIEBwYXJhbSBzbGlkZSAgICAgIC0gQSBzbGlkZSBlbGVtZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBTbGlkZSBzdWJjb21wb25lbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTbGlkZSggU3BsaWRlOiBTcGxpZGUsIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDogbnVtYmVyLCBzbGlkZUluZGV4OiBudW1iZXIsIHNsaWRlOiBIVE1MRWxlbWVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogU2xpZGVDb21wb25lbnQge1xcclxcbiAgY29uc3QgZXZlbnQgPSBFdmVudEludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBvbiwgZW1pdCwgYmluZCB9ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50O1xcclxcbiAgY29uc3QgeyBDb21wb25lbnRzLCByb290LCBvcHRpb25zIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyBpc05hdmlnYXRpb24sIHVwZGF0ZU9uTW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUsIGkxOG4sIHBhZ2luYXRpb24sIHNsaWRlRm9jdXMgfSA9IG9wdGlvbnM7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgY29uc3QgeyByZXNvbHZlIH0gPSBDb21wb25lbnRzLkRpcmVjdGlvbjtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICBjb25zdCBzdHlsZXMgICAgPSBnZXRBdHRyaWJ1dGUoIHNsaWRlLCAnc3R5bGUnICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgY29uc3QgbGFiZWwgICAgID0gZ2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9MQUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUwgKTtcXHJcXG4gIGNvbnN0IGlzQ2xvbmUgICA9IHNsaWRlSW5kZXggPiAtMTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBjb25zdCBjb250YWluZXIgPSBjaGlsZCggc2xpZGUsIGAuJHsgQ0xBU1NfQ09OVEFJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05FUiB9YCApO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUdXJucyBpbnRvIGB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZWAgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGxldCBkZXN0cm95ZWQ6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCggdGhpczogU2xpZGVDb21wb25lbnQgKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBpZiAoICEgaXNDbG9uZSApIHtcXHJcXG4gICAgICBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaWQgPSBgJHsgcm9vdC5pZCB9LXNsaWRlJHsgcGFkKCBpbmRleCArIDEgKSB9YDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgUk9MRSwgcGFnaW5hdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPyAndGFicGFuZWwnIDogJ2dyb3VwJyApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlLCBBUklBX1JPTEVERVNDUklQVElPTiwgaTE4bi5zbGlkZSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzZXRBdHRyaWJ1dGUoIHNsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCBmb3JtYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBpMThuLnNsaWRlTGFiZWwsIFsgaW5kZXggKyAxLCBTcGxpZGUubGVuZ3RoIF0gKSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsaXN0ZW4oKTtcXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gc29tZSBldmVudHMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsaXN0ZW4oKTogdm9pZCB7XFxyXFxuICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5kKCBzbGlkZSwgJ2NsaWNrJywgYXBwbHkoIGVtaXQsIEVWRU5UX0NMSUNLLCBzZWxmICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIpICk7XFxyXFxuICAgIGJpbmQoIHNsaWRlLCAna2V5ZG93bicsIGFwcGx5KCBlbWl0LCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfU0xJREVfS0VZRE9XTiwgc2VsZiApICk7XFxyXFxuICAgIG9uKCBbIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1ZFRCwgRVZFTlRfU0hJRlRFRCwgRVZFTlRfU0NST0xMRUQgXSwgdXBkYXRlICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBvbiggRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVELCBpbml0TmF2aWdhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCB1cGRhdGVPbk1vdmUgKSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG9uKCBFVkVOVF9NT1ZFLCBvbk1vdmUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xcclxcbiAgICBldmVudC5kZXN0cm95KCk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICByZW1vdmVDbGFzcyggc2xpZGUsIFNUQVRVU19DTEFTU0VTICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmVBdHRyaWJ1dGUoIHNsaWRlLCBBTExfQVRUUklCVVRFUyApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgJ3N0eWxlJywgc3R5bGVzICk7XFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICBzZXRBdHRyaWJ1dGUoIHNsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCAnJyApO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBhcyBuYXZpZ2F0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0TmF2aScKICAgICAgICAgICAgICAgICAgICAgICAgYidnYXRpb24oKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IGNvbnRyb2xzID0gU3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVzLm1hcCggdGFyZ2V0ID0+IHtcXHJcXG4gICAgICBjb25zdCBTbGlkZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuU2xpZGVzLmdldEF0KCBpbmRleCApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgICByZXR1cm4gU2xpZGUgPyBTbGlkZS5zbGlkZS5pZCA6ICcnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgfSApLmpvaW4oICcgJyApO1xcclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHNsIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQVJJQV9MQUJFTCwgZm9ybWF0KCBpMThuLnNsaWRlWCwgKCBpc0Nsb25lID8gc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlSW5kZXggOiBpbmRleCApICsgMSApICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlLCBBUklBX0NPTlRST0xTLCBjb250cm9scyApO1xcclxcbiAgICBzZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmlidXRlKCBzbGlkZSwgUk9MRSwgc2xpZGVGb2N1cyA/ICdidXR0b24nIDogJycgKTtcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHNsaWRlRm9jdXMgJiYgcmVtb3ZlQXR0cmlidXRlKCBzbGlkZSwgQVJJQV9ST0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRURFU0NSSVBUSU9OICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidJZiB0aGUgYHVwZGF0ZU9uTW92ZWAgb3B0aW9uIGlzIGB0cnVlYCwgY2FsbGVkIHdoZW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzbGlkZXIgc3RhcnRzIG1vdmluZy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uTW92ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhIGRlc3Ryb3llZCApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgdXBkYXRlKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFVwZGF0ZXMgYXR0cmlidXRlIGFuZCBjbGFzc2VzIG9mIHRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIGlmICggISBkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgY29uc3QgeyBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg6IGN1cnIgfSA9IFNwbGlkZTtcXHJcXG5cXHJcXG4gICAgICB1cGRhdGVBY3RpdmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHkoKTtcXHJcXG4gICAgICB1cGRhdGVWaXNpYmlsaXR5KCk7XFxyXFxuICAgICAgdG9nZycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfUFJFViwgaW5kZXggPT09IGN1cnIgLSAxICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfTkVYVCwgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBjdXJyICsgMSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBVcGRhdGVzIHRoZSBzdGF0dXMgcmVsYXRlZCB3aXRoIGFjdGl2aScKICAgICAgICAgICAgICAgICAgICAgICAgYid0eS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdHkoKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Qge1xcclxcbiAgICBjb25zdCBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgaWYgKCBhY3RpdmUgIT09IGhhc0NsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInICkge1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9DVVInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgc2VsZiApOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBVcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkYXRlcyBjbGFzc2VzIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgd2l0aCB2aXNpYmlsaXR5JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIC0gRG8gbm90IHVwZGF0ZSBhcmlhLWhpZGRlbiBvbiBzaGlmdGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgdG8gYXZvaWQgV2luZG93IE5hcnJhdG9yIGZyb20gc3RhcnQgcmVhZGluZyBjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuXFxyXFxuICAgKiAtIElmIHRoZSBzbGlkZSBoYXMgZm9jdXMgYW5kIGdldHMgaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRlbiwgbW92ZXMgZm9jdXMgdG8gdGhlIGFjdGl2ZSBzbGlkZS5cXHJcXG4gICAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKTogdm9pZCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB2aXNpYmxlID0gaXNWaXNpYmxlKCk7XFxyXFxuICAgIGNvbnN0IGhpZGRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSAhIHZpc2libGUgJiYgKCAhIGlzQWN0aXZlKCkgfHwgaXNDbG9uZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgaWYgKCAhIFNwbGlkZS5zdGF0ZS5pcyggWyBNT1ZJTkcsIFNDUk9MTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkcgXSApICkge1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggc2xpZGUsIEFSSUFfSCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJJRERFTiwgaGlkZGVuIHx8ICcnICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcyIKICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZSggcXVlcnlBbGwoIHNsaWRlLCBvcHRpb25zLmZvY3VzYWJsZU5vZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB8fCAnJyApLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogJycgKTtcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICggc2xpZGVGb2N1cyApIHtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgVEFCX0lOREVYLCBoaWRkZW4gPyAtMSA6IDAgKTtcXHJcXG4gICAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgaWYgKCB2aXNpYmxlICE9PSBoYXNDbGFzcyggc2xpZGUsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidWSVNJQkxFICkgKSB7XFxyXFxuICAgICAgdG9nZ2xlQ2xhc3MoIHNsaWRlLCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfVklTSUJMRSwgdmlzaWJsZSApO1xcclxcbiAgICAgIGVtaXQoIHZpc2libGUgPyBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfVklTSUJMRSA6IEVWRU5UX0hJRERFTiwgc2VsZiApO1xcclxcbiAgICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBpZiAoICEgdmlzaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gc2xpZGUgKSB7XFxyXFxuICAgICAgY29uc3QgU2xpZGUgPSBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TbGlkZXMuZ2V0QXQoIFNwbGlkZS5pbmRleCApO1xcclxcbiAgICAgIFNsaWRlICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb2N1cyggU2xpZGUuc2xpZGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogQWRkcyBhIENTUyBydWxlIHRvIHRoZSBzbGlkZXIgb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBjb250YWluZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHByb3AgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLSBBIHByb3BlcnR5IG5hbWUuXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgQ1NTIHZhbHVlIHRvIGFkZC5cXHJcXG4gICAqIEBwYXJhbSB1c2VDb250YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBhcHBseSB0aGUgcnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgdG8gdGhlIGNvbnRhaW5lciBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBzdHlsZSggcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1c2VDbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudGFpbmVyPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgX3N0eWxlKCAoIHVzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250YWluZXIgJiYgY29udGFpbmVyICkgfHwgc2xpZGUsIHByb3AsIHZhbHVlICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSBpcyBhY3RpdmUgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2B0cnVlYCBpZiB0aGUgc2xpZGUgaXMgYWN0aXZlLlxcclxcbiAgICovXFxyXFxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gaXNBY3RpdmUoKTogYm9vbGVhbiB7XFxyXFxuICAgIGNvbnN0IHsgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjdXJyIH0gPSBTcGxpZGU7XFxyXFxuICAgIHJldHVybiBjdXJyID09PSBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHwgKCBvcHRpb25zLmNsb25lU3RhdHVzICYmIGN1cnIgPT09IHNsaWRlSW5kZXggKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIGlzIHZpc2libGUgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNpYmxlKCk6IGJvb2xlYW4ge1xcclxcbiAgICBpZiAoIFNwbGlkZS5pcyggRkFERSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSApIHtcXHJcXG4gICAgICByZXR1cm4gaXNBY3RpdmUoKTtcXHJcXG4gICAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gICAgY29uc3QgdHJhY2tSZWN0ID0gcmVjdCggQ29tcG9uZW50cy5FbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudHMudHJhY2sgKTtcXHJcXG4gICAgY29uc3Qgc2xpZGVSZWN0ID0gcmVjdCggc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlICk7XFxyXFxuICAgIGNvbnN0IGxlZnQgICAgICA9IHJlc29sdmUoICdsZWZ0JywiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRydWUgKTtcXHJcXG4gICAgY29uc3QgcmlnaHQgICAgID0gcmVzb2x2ZSggJ3JpZ2giCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCcsIHRydWUgKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGZsb29yKCB0cmFja1JlY3RbICIKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0IF0gKSA8PSBjZWlsKCBzbGlkZVJlY3RbIGxlZnQgXSApXFxyXFxuICAgICAgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIGZsb29yKCBzbGlkZVJlY3RbIHJpZ2h0IF0gKSA8PSBjZWlsKCB0cmFja1JlY3RbIHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCBdICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGN1bGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzIGhvdyBmYXIgdGhpcyBzbGlkZSBpcyBmcm9tIGFub3RoZXIgc2xpZGUgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRpc3RhbmNlIGlzIHdpdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdGhlIGdpdmVuIG51bWJlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC0gQW4gaW5kZXggb2YgYSBiYXNlIHNsaWRlLlxcclxcbiAgICogQHBhcmFtIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0YW5jZSAtIGB0cnVlYCBpZiB0aGUgc2xpZGUgaXMgd2l0aGluIHRoaXMgbnVtYmVyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGUgaXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpdGhpbiB0aGUgYGRpc3RhbmNlYCBmcm9tIHRoZSBiYXNlIHNsaWRlLCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzV2l0aGluKCBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyICk6IGJvb2xlYW4ge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbGV0IGRpZmYgPSBhYnMoIGZyb20gLSBpbmRleCApO1xcclxcblxcclxcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhIGlzQ2xvbmUgJiYgKCBvcHRpb25zLnJld2luZCB8fCBTcGxpZGUuaXMoIExPT1AgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSApIHtcXHJcXG4gICAgICBkaWZmID0gbWluKCBkaWZmLCBTcGxpZGUubGVuZ3RoIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpZmYgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGlmZiA8PSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzdGFuY2U7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBjb25zdCBzZWxmID0ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaW5kZXgsXFxyXFxuICAgIHNsaWRlSW5kZXgsXFxyXFxuICAgIHNsaWRlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgY29udGFpbmVyLFxcclxcbiAgICBpc0Nsb25lLFxcclxcbiAgICBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIHVwZGF0ZSxcXHJcXG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlLFxcclxcbiAgICBpc1dpdGhpbixcXHJcXG4gIH07XFxyXFxuXFxyXFxuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNlbGY7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IERBVEFfQVRUUklCVVRFIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgYXV0b3BsYXkgaW50ZXJ2YWwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cmF0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNS4wXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBjb25zdCBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSA9IGAkeyBEQVRBX0FUVFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUJVVEUgfS1pbnRlcnZhbGA7XFxyXFxuIiwiLyoqXFxyXFxuICogQWRkRXZlbnRMaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJPcHRpb25zIGZvciBsaXN0ZW5lcnMgdGhhdCBtYXkgcHJldmVudCB0aGUgYnJvd3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igc2Nyb2xsLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNC4xXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyA9IHsgcGFzc2l2ZTogZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHNlLCBjYXB0dXJlOiB0cnVlIH07XFxyXFxuIiwiaW1wb3J0IHsgQVJST1dfRE9XTicKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIEFSUk9XX0xFRlQsIEFSUk9XX1JJR0hULCBBUlJPV19VUCB9IGZyb20gJy4uLy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvYXJyb3dzJztcXHJcXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWFwIHRvIGFzc29jaWF0ZSBhIG5vbi1zdGFuZGFyZCBuYW1lIHRvIHRoZSBzdGFuZGFyZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb25lLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCBjb25zdCBOT1JNQUxJWkFUSU9OX01BUCA9IHtcXHJcXG4gIFNwYWNlYmFyOiAnIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAnLFxcclxcbiAgUmlnaHQgICA6IEFSUk9XX1JJR0hULFxcclxcbiAgTGVmdCAgICA6IEEiCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPV19MRUZULFxcclxcbiAgVXAgICAgICA6IEFSUk9XX1VQLFxcclxcbiAgRG93biAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBBUlJPV19ET1dOLFxcclxcbn07XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogTm9ybWFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZXMgdGhlIGtleS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBrZXkgLSBBIHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYSBLZXlib2FyZEV2ZW50IG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbm9ybWFsaXplZCBrZXkuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpemVLZXkoIGtleTogc3RyaW5nIHwgS2V5Ym9hcmRFdmVudCApOiBzdHJpbmcgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGtleSA9IGlzU3RyaW5nKCBrZXkgKSA/IGtleSA6IGtleS5rZXk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIE5PUk1BTElaQVRJT05fTUFQWyBrZXkgXSB8fCBrZXk7XFxyXFxufSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJpbXBvcnQgeyBBUlJPV19MRUZULCBBUlJPV19SSUdIVCB9IGZyb20gXCcuLi8uLi9jb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiInRhbnRzL2Fycm93cyc7XFxyXFxuaW1wb3J0IHsgRVZFTlRfTU9WRSwgRVZFTlRfVVBEIgogICAgICAgICAgICAgICAgICAgICAgICBiIkFURUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgIgogICAgICAgICAgICAgICAgICAgICAgICBiInsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgbm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3V0aWxzL2RvbS9ub3JtYWxpemVLZXkvbm9ybWFsaXplS2V5JztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEtleWJvYXJkIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGludGVyZmFjZSBLZXlib2FyZENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHtcXHJcXG4gIGRpc2FibGUoIGRpc2FibGVkOiBib29sZWFuICk6IHZvaWQ7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUga2V5Ym9hcmQgZXZlbnQgbmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy42LjBcXHJcXG4gKi9cXHJcXG5jb25zdCBLJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVZQk9BUkRfRVZFTlQgPSAna2V5ZG93bic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBjb21wb25lbnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBzbGlkZXIgYnkga2V5Ym9hcmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EgS2V5Ym9hcmQgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIEtleWJvYXJkKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogS2V5Ym9hcmRDb21wb25lbnQge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbnN0IHsgb24sIGJpbmQsIHVuYmluZCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKTtcXHJcXG4gIGNvbnN0IHsgcm9vdCB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgb2YgdGhlIGtleWJvYXJkIGV2ZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgbGV0IHRhcmdldDogV2luZG93IHwgSFRNTEVsZW1lbnQ7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudCBpcyBjdXJyZW50bHkgZGlzYWJsZWQgb3Igbm90LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgbGV0IGRpc2FibGVkOiBib29sZWFuO1xcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGluaXQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVEVELCBkZXN0cm95ICk7XFxyXFxuICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggRVZFTlRfVVBEQVRFRCwgaW5pdCApO1xcclxcbiAgICBvbiggRVZFTlRfTU9WRSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uTW92ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGl6ZXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsga2V5Ym9hcmQgfSA9IG9wdGlvbnM7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIGtleWJvYXJkICkge1xcclxcbiAgICAgIHRhcmdldCA9IGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXlib2FyZCA9PT0gJ2dsb2JhbCcgPyB3aW5kb3cgOiByb290O1xcclxcbiAgICAgIGIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKCB0YXJnZXQsIEtFWUJPQVJEX0VWRU5ULCBvbktleWRvd24gKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Qge1xcclxcbiAgICB1bmJpbmQoIHRhcmdldCwgS0VZQk9BUkRfRVZFTlQgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERpc2FibGVzIHRoZSBrZXlib2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmQgaW5wdXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gVG9nZ2xlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsaW5nL2VuYWJsaW5nIHRoZSBrZXlib2FyZCBpbnB1dC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGRpc2FibGUoIHZhbHVlOiBib29sZWFuICk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBzbGlkZXIgbW92ZXMuXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVG8gYXZvaWQgdGhlIHNsaWRlciBmcm9tIG1vdmluZyB0d2ljZSwgd2FpdCBmb3IgYSB0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidjay5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3ZlKCk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgY29uc3QgX2Rpc2FibGVkID0gZGlzYWJsZWQ7XFxyXFxuICAgIGRpc2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCA9IHRydWU7XFxyXFxuICAgIG5leHRUaWNrKCAoKSA9PiB7IGRpc2FibGVkID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlZCB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZWQgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQgb24gdGhlIHRhcmdldC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIEtleWJvYXJkRXZlbnQgb2JqZWN0LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25LZXlkb3duKCBlOiBLZXlib2FyZEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhIGRpc2FibGVkICkge1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoIGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBrZXkgPT09IHJlc29sdmUoIEFSUk9XX0xFRlQgKSApIHtcXHJcXG4gICAgICAgIFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGUuZ28oICc8JyApO1xcclxcbiAgICAgIH0gZWxzZSBpZiAoIGtleSA9PT0gcmVzIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9sdmUoIEFSUk9XX1JJR0hUICkgKSB7XFxyXFxuICAgICAgICBTcGxpZGUuZ28oICc+IgogICAgICAgICAgICAgICAgICAgICAgICBiIicgKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRpc2FibGUsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBEQVRBJwogICAgICAgICAgICAgICAgICAgICAgICBiIl9BVFRSSUJVVEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcHJvamVjdCc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzcmMgdmFsdWUuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IFNSQ19EQVRBX0FUVFJJQlVURSA9IGAkeyBEQVRBX0FUVFJJQicKICAgICAgICAgICAgICAgICAgICAgICAgYidVVEUgfS1sYXp5YDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZGF0YSBhdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlIGZvciB0aGUgc3Jjc2V0IHZhbHVlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTUkNTRVRfREFUQV9BVFRSSUJVVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYCR7IFNSQ19EQVRBX0FUVFJJQlVURSB9LXNyY3NldGA7XFxyXFxuXFxyXFxuLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIFRoZSBzZWxlY3RvciBzdHJpbmcgZm9yIGltYWdlcyB0byBsb2FkLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgSU1BR0VfU0VMRUNUT1IgPSBgWyR7IFNSQ19EQVRBX0FUVFJJQlVURSB9XSwgWyR7IFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkNTRVRfREFUQV9BVFRSSUJVVEUgfV1gO1xcclxcbiIsImltcG9ydCB7IEFSSUFfT1InCiAgICAgICAgICAgICAgICAgICAgICAgIGIiSUVOVEFUSU9OIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dHJpYnV0ZXMnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5pbXBvcnQgeyBUVEIgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGlyZWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBFVkVOVF9DTElDSyxcXHJcXG4gIEVWRU5UIgogICAgICAgICAgICAgICAgICAgICAgICBiJ19NT1VOVEVELFxcclxcbiAgRVZFTlRfTU9WRSxcXHJcXG4gIEVWRU5UX05BVklHQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVU5URUQsXFxyXFxuICBFVkVOVF9TTElERV9LRVlET1dOLFxcclxcbiAgRVZFTlRfVScKICAgICAgICAgICAgICAgICAgICAgICAgYiJQREFURUQsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgTE9PUCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltcG9ydCB7IEV2ZW50SW50ZXJmYWNlLCBFdmVudEludGVyZmFjZU9iamVjdCB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIicG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5pbXBvcnQgeyBhcHBseSwgZW1wdHksIGluY2x1ZGVzLCBpc1VuZGVmaW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiImQsIHByZXZlbnQsIHNldEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuaW1wb3J0IHsgbm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL25vcm0iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYWxpemVLZXkvbm9ybWFsaXplS2V5JztcXHJcXG5pbXBvcnQgeyBTbGlkZUNvbXBvbmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnQgfSBmcm9tICcuLi9TbGlkZXMvU2xpZGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU3luYyBjb21wb25lbnQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgU3luY0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbW91bnQoKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzIGZvciB0cmlnZ2VyaW5nIHRoZSBuYXZpZ2F0aW9uIHNsaWRlLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmNvbnN0IFRSSUdHRVJfS0VZUyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJbICcgJywgJ0VudGVyJyBdO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wbyIKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IGZvciBzeW5jaW5nIG11bHRpcGxlIHNsaWRlcnMuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIFN5bmMgY29tcG9uZW50IG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFN5bmMoIFNwbGlkZTogU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBTeW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IGlzTmF2aWdhdGlvbiwgc2xpZGVGb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXMgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0b3JlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQgb2JqZWN0cy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgZXZlbnRzOiBFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJbnRlcmZhY2VPYmplY3RbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIFNwbGlkZS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlcy5mb3JFYWNoKCB0YXJnZXQgPT4ge1xcclxcbiAgICAgIGlmICggISB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzUGFyZW50ICkge1xcclxcbiAgICAgICAgc3luYyggU3BsaWRlLCB0YXJnZXQuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSApO1xcclxcbiAgICAgICAgc3luYyggdGFyZ2V0LnNwbGlkZSwgU3BsaWRlICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICBpZiAoIGlzTmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlnYXRpb24gKSB7XFxyXFxuICAgICAgbmF2aWdhdGUoKTtcXHJcXG4gICAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBldmVudHMuZm9yRWFjaCggZXZlbnQgPT4geyBldmVudC5kZXN0cm95KCkgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgZW1wdHkoIGV2ZW50cyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogUmVtb3VudHMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQGludGVybmFsXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJlbW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBkZXN0cm95KCk7XFxyXFxuICAgIG1vdW50KCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTeW5jcyB0aGUgY3VycmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaW5kZXggd2l0aCBhIHByb3ZpZGVkIGNoaWxkIHNwbGlkZSBpbnN0YW5jZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHNwbGlkZSAtIEEgc3BsaWRlIGluc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0byBzeW5jIHdpdGguXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gQSB0YXJnZXQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZSBpbnN0YW5jZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc3luYyggc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTogU3BsaWRlLCB0YXJnZXQ6IFNwbGlkZSApOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIHNwbGlkZSApO1xcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQub24oIEVWRU5UX01PVkUsICggaW5kZXgsIHByZXYsIGRlc3QgKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIHRhcmdldC5nbyggdGFyZ2V0LmlzKCBMT09QICkgPyBkZXN0IDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4ICk7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZXZlbnRzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBldmVudCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBNYWtlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVzIGNsaWNrYWJsZSBhbmQgbW92ZXMgdGhlIHNsaWRlciB0byB0aGUgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mIGNsaWNrZWQgc2xpZGUuXFxyXFxuICAgKiBOb3RlIHRoYXQgdGhlIGRpcmVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gb2YgYG1lbnVgIGlzIGltcGxpY2l0bHkgYHZlcnRpY2FsYCBhcyBkZWZhdWx0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbmF2aWdhdGUoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBjb25zdCBldmVudCA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGNvbnN0IHsgb24gfSA9IGV2ZW50O1xcclxcblxcclxcbiAgICBvbiggRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMSUNLLCBvbkNsaWNrICk7XFxyXFxuICAgIG9uKCBFVkVOVF9TTElERV9LRVlET1dOJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgb25LZXlkb3duICk7XFxyXFxuICAgIG9uKCBbIEVWRU5UX01PVU5URUQsIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19VUERBVEVEIF0sIHVwZGF0ZSApO1xcclxcblxcclxcbiAgICBldmVudHMucHVzaCggZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ICk7XFxyXFxuICAgIGV2ZW50LmVtaXQoIEVWRU5UX05BVklHQVRJT05fTU9VTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIFNwbGlkZS5zcGxpZGVzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBVcGRhdGUgYXR0cmlidXRlcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5FbGVtZW50cy5saXN0LCBBUklBX09SSUVOVEFUSU9OLCBvcHRpb25zLmRpcmVjdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPT09IFRUQiA/ICd2ZXJ0aWNhbCcgOiAnJyApO1xcclxcbiAgfVxcclxcblxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIG5hdmlnYXRpb24gc2xpZGUgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsaWNrZWQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIFNsaWRlIC0gQSBjbGljaycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCBTbGlkZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG9uQ2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NrKCBTbGlkZTogU2xpZGVDb21wb25lbnQgKTogdm9pZCB7XFxyXFxuICAgIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuZ28oIFNsaWRlLmluZGV4ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDYWxsZWQgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQgb24gdGhlIG5hdmlnYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNsaWRlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5cXHJcXG4gICAqIEBwYXJhbSBlICAgICAtIEEgS2V5Ym9hcmRFdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbktleWRvd24oIFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogU2xpZGVDb21wb25lbnQsIGU6IEtleWJvYXJkRXZlbnQgKTogdm9pZCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBpZiAoIGluY2x1ZGVzKCBUUklHR0VSX0tFWVMsIG5vcm1hbGl6ZUtleSggZSApICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpICkge1xcclxcbiAgICAgIG9uQ2xpY2soIFNsaWRlICk7XFxyXFxuICAgICAgcHJldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHNldHVwOiBhcHBseShcXHJcXG4gICAgICBDb21wb25lbnRzLk1lZGlhJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zZXQsXFxyXFxuICAgICAgeyBzbGlkZUZvY3VzOiBpc1VuZGVmaW5lZCggc2xpZGVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMgKSA/IGlzTmF2aWdhdGlvbiA6IHNsaWRlRm9jdXMgfSxcXHJcXG4gICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZVxcclxcbiAgICApLFxcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHJlbW91bnQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvbWVkaWEnO1xcclxcbmltcG9ydCB7IENSRUFURUQsIERFU1RST1lFRCB9IGZyb20gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEJpbmRlciIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwIgogICAgICAgICAgICAgICAgICAgICAgICBiImVzJztcXHJcXG5pbXBvcnQgeyBtZXJnZSwgb21pdCwgb3duS2V5cyB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGludGVyZmFjZSBmb3IgdGhlIE1lZGlhIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgLyoqIEBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuYWwgKi9cXHJcXG4gIHJlZHVjZSggcmVkdWNlZDogYm9vbGVhbiApOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNldCggb3B0aW9uczogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdGlmeT86ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidib29sZWFuICk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50IGZvciBvYnNlcnZpbmcgbWVkaWEgcXVlcmllcyBhbmQgdXBkYXRpbmcgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgaWYgbmVjZXNzYXJ5LlxcclxcbiAqIFRoaXMgdXNlZCB0byBiZSB0aGUgT3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEByZXR1cm4gQSBNZWRpYSBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgZnVuY3Rpb24gTWVkaWEoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBNZWRpYUNvbXBvbmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgY29uc3QgeyBzdGF0ZSB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgYnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrcG9pbnRzICAgPSBvcHRpb25zLmJyZWFrcG9pbnRzIHx8IHt9O1xcclxcbiAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHJlZHVjZWRNb3Rpb24gPSBvcHRpb25zLnJlZHVjZWRNb3Rpb24gfHwge307XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgY29uc3QgYmluZGVyICAgICAgICA9IEV2ZW50QmluZGVyKCk7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBTdG9yZXMgb3B0aW9ucyBhbmQgTWVkaWFRdWVyeUxpc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgcXVlcmllczogQXJyYXk8WyBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucywgTWVkaWFRdWVyeUxpc3QgXT4gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgY29uc3RydWN0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzZXR1cCgpOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgIGNvbnN0IGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAnbWluJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIG93bktleXMoIGJyZWFrcG9pbnRzIClcXHJcXG4gICAgICAuc29ydCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggbiwgbSApID0+IGlzTWluID8gK24gLSArbSA6ICttIC0gK24gKVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAuZm9yRWFjaCgga2V5ID0+IHtcXHJcXG4gICAgICAgIHJlZ2lzdGVyKCBicmVha3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib2ludHNbIGtleSBdLCBgKCR7IGlzTWluID8gJ21pbicgOiAnbWF4JyB9LXdpZHRoOiR7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYidrZXkgfXB4KWAgKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJlZ2lzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciggcmVkdWNlZE1vdGlvbiwgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTiApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgdXBkYXRlKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcGxldGVseSAtIFdpbGwgYmUgYHRydWVgIGZvciBjb21wbGV0ZSBkZXN0cnVjdGlvbi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koIGNvbXBsZXRlbHk6IGJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWFuICk6IHZvaWQge1xcclxcbiAgICBpZiAoIGNvbXBsZXRlbHkgKSB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmRlci5kZXN0cm95KCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBlbnRyaWVzIGFzIFsgT3B0aW9ucywgbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlhIHF1ZXJ5IHN0cmluZyBdLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducyAtIE9wdGlvbnMgbWVyZ2VkIHRvIGN1cnJlbnQgb3B0aW9ucyB3aGVuIHRoZSBkb2N1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQgbWF0Y2hlcyB0aGUgcXVlcnkuXFxyXFxuICAgKiBAcGFyYW0gcXVlcnkgICAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIHF1ZXJ5IHN0cmluZy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBvcHRpb25zOiBPcHRpb25zLCBxdWVyeTogc3RyaW5nICk6IHZvaWQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgcXVlcnlMaXN0ID0gbWF0Y2hNZWRpYSggcXVlcnkgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGJpbmRlci5iaW5kKCBxdWVyeUxpc3QsICdjaGFuZ2UnLCB1cGRhdGUgKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHF1ZXJpZXMucHVzaCggWyBvcHRpb25zLCBxdWVyeUxpc3QgXSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGFsbCBtZWRpYSBxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmllcyBpbiBlbnRyaWVzIGFuZCB1cGRhdGVzIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBmdW5jdGlvbiB1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5ZWQgPSBzdGF0ZS5pcyggREVTVFJPWUVEICk7XFxyXFxuICAgIGNvbnN0IGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSBvcHRpb25zLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgbWVyZ2VkID0gcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXJpZXMucmVkdWNlPE9wdGlvbnM+KCAoIG1lcmdlZCwgZW50cnkgKSA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHJldHVybiBtZXJnZSggbWVyZ2VkLCBlbnRyeVsgMSBdLm1hdGNoZXMgPyBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cnlbIDAgXSA6IHt9ICk7XFxyXFxuICAgIH0sIHt9ICk7XFxyXFxuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbWl0KCBvcHRpb25zICk7XFxyXFxuICAgIHNldCggbWVyZ2VkICk7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpZiAoIG9wdGlvbnMuZGVzdHJveSApIHtcXHJcXG4gICAgICBTcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiImRlc3Ryb3koIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2NvbXBsZXRlbHknICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKCBkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgZGVzdHJveSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUgKTtcXHJcXG4gICAgICBTcGxpZGUubW91bnQoKTtcXHJcXG4gICAgfSBlbHNlIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZGlyZWN0aW9uICE9PSBvcHRpb25zLmRpcmVjdGlvbiAmJiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnJlZnJlc2goKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogRGlzYWJsZXMgb3IgZW5hYmxlcyBgcmVkdWNlZE1vdGlvbmAgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgZG9jdW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IGRvZXMgbm90IG1hdGNoIHRoZSBxdWVyeS5cXHJcXG4gICAqXFxyXFxuICAgKiBAaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVybmFsXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGVuYWJsZSAtIERldGVybWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHdoZXRoZXIgdG8gYXBwbHkgYHJlZHVjZWRNb3Rpb25gIG9wdGlvbnMgb3Igbm90LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVkdWNlKCBlbmFibGU6IGJvb2xlYW4gKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBpZiAoIG1hdGNoTWVkaWEoIE1FRElBX1BSRUZFUlNfUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFRFVDRURfTU9USU9OICkubWF0Y2hlcyApIHtcXHJcXG4gICAgICBlbmFibGUgPyBtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2UoIG9wdGlvbnMsIHJlZHVjZWRNb3Rpb24gKSA6IG9taXQoIG9wdGlvbnMsIG93bktlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzKCByZWR1Y2VkTW90aW9uICkgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogU2V0cyBjdXJyZW50IG9wdGlvbnMgb3IgYmFzZSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyAocHJvdG90eXBlKS5cXHJcXG4gICAqIElmIGNoYW5naW5nIGJhc2Ugb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMsIGFsd2F5cyBlbWl0cyB0aGUgYHVwZGF0ZWRgIGV2ZW50LlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAaW50ZXJuYWxcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0cyAgIC0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05ldyBvcHRpb25zLlxcclxcbiAgICogQHBhcmFtIGJhc2UgICAtIE9wdGlvbmFsLiBEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ZXJtaW5lcyB3aGV0aGVyIHRvIGFsc28gdXBkYXRlIGJhc2Ugb3B0aW9ucyBvciBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICogQHBhcmFtIG5vdGlmeSAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHdheXMgZW1pdHMgdGhlIGB1cGRhdGVgIGV2ZW50LlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gc2V0KCBvcHRzOiBPcHRpb25zLCBiYXNlPzogYm9vbGVhbiwgbm90aWZ5PzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIG1lcmdlKCBvcHRpb25zLCBvcHRzICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBiYXNlICYmIG1lcmdlKCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICksIG9wdHMgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBub3RpZnkgfHwgISBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUuaXMoIENSRUFURUQgKSApIHtcXHJcXG4gICAgICBTcGxpZGUuZW1pdCggRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1VQREFURUQsIG9wdGlvbnMgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiB7XFxyXFxuICAgIHNldHVwLFxcclxcbiAgICBkZXN0cm95LFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVkdWNlLFxcclxcbiAgICBzZXQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb3J0IHsgQUxMX0FUVFJJQlVURVMsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBST0xFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhdHRyaWJ1dGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgQ0xBU1NfQUNUSVZFLFxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIENMQVNTX0FSUk9XX05FWFQsXFxyXFxuICBDTEFTU19BUlJPV19QUkVWLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIENMQVNTX0FSUk9XUyxcXHJcXG4gIENMQVNTX0NMT05FLFxcclxcbiAgQ0xBU1NfRk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1VTX0lOLFxcclxcbiAgQ0xBU1NfTElTVCxcXHJcXG4gIENMQVNTX1BBR0lOQVRJT04sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgQ0xBU1NfUFJPR1JFU1NfQkFSLFxcclxcbiAgQ0xBU1NfUk9PVCxcXHJcXG4gIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19TTElERSxcXHJcXG4gIENMQVNTX1RPR0dMRSxcXHJcXG4gIENMQVNTX1RSQUNLLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXHJcXG5pbXBvcnQgIgogICAgICAgICAgICAgICAgICAgICAgICBiInsgRVZFTlRfUkVGUkVTSCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBQUk9KRUNUX0NPREUgfSBmcm9tICcuLi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBhZGRDbGFzcyxcXHJcXG4gIGFzc2VydCIKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBhc3NpZ24sXFxyXFxuICBjaGlsZCxcXHJcXG4gIGNoaWxkcmVuLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGVtcHR5LFxcclxcbiAgZm9yT3duLFxcclxcbiAgZ2V0QXR0cmlidXRlLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHB1c2gsXFxyXFxuICBxdWVyeSxcXHJcXG4gIHJlbW92ZUF0dHJpYnV0ZSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICByZW1vdmVDbGFzcyxcXHJcXG4gIHNldEF0dHJpYnV0ZSxcXHJcXG4gIHRvZ2dsZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGFzcyxcXHJcXG4gIHVuaXF1ZUlkLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyBjbG9zZXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL2NsIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9zZXN0L2Nsb3Nlc3QnO1xcclxcbmltcG9ydCB7IFBPSU5URVJfRE9XTl9FVkVOVFMgIgogICAgICAgICAgICAgICAgICAgICAgICBiIn0gZnJvbSAnLi4vRHJhZy9jb25zdGFudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzaXN0cyBvZi5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRDb2xsZWN0aW9uIHtcXHJcXG4gIHJvb3Q6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBIVE1MRWxlbWVudDtcXHJcXG4gIHRyYWNrOiBIVE1MRWxlbWVudDtcXHJcXG4gIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBIVE1MRWxlbWVudDtcXHJcXG4gIHNsaWRlczogSFRNTEVsZW1lbnRbXTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcnJvd3M/OiBIVE1MRWxlbWVudDtcXHJcXG4gIHBhZ2luYXRpb24/OiBIVE1MVUxpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0RWxlbWVudDtcXHJcXG4gIHByZXY/OiBIVE1MQnV0dG9uRWxlbWVudDtcXHJcXG4gIG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XFxyXFxuICBiYXI/OiBIVE1MRWxlbWVudDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICB0b2dnbGU/OiBIVE1MRWxlbWVudDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBFbGVtZW50cyBjb21wb25lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UgRWxlbWVudHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50LCBFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudENvbGxlY3Rpb24ge1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCB0aGF0IGNvbGxlY3RzIGFuZCBoYW5kbGVzIGVsZW1lbnRzIHdoaWNoIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyIGNvbnNpc3RzIG9mLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEByZXR1cm4gQW4gRWxlbWVudHMgY29tcG9uZW50IG9iamVjdC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIEVsZW1lbnRzKCBTcGxpZGU6IFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24sIGJpbmQgfSA9IEV2ZW50SScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCB7IHJvb3QgfSA9IFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBjb25zdCB7IGkxOG4gfSA9IG9wdGlvbnM7XFxyXFxuICBjb25zdCBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IEVsZW1lbnRDb2xsZWN0aW9uID0ge30gYXMgRWxlbWVudENvbGxlY3Rpb247XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHNsaWRlIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3Qgc2xpZGVzOiBIVE1MRWxlbWVudFtdID0gWycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHJvb3QgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCByb290Q2xhc3Nlczogc3RyaW5nW10gPSBbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0b3JlcyBhbGwgbGlzdCBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlcy5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHRyYWNrQ2xhc3Nlczogc3RyaW5nW10gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSB0cmFjayBlbGVtZW50LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgbGV0IHRyYWNrOiBIVE1MRWxlbWVudDtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIFRoZSBsaXN0IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBsZXQgbGlzdDogSFRNTEVsZW1lbnQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBUdXJucyBpbnRvIGB0cnVlYCB3aGVuIGRldGVjdGluZyBrZXlkb3duLCBhbmQgYGZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZWAgd2hlbiBkZXRlY3RpbmcgcG9pbnRlcmRvd24uXFxyXFxuICAgKi9cXHJcXG4gIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgaXNVc2luZ0tleTogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgY29uc3RydWN0ZWQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBzZXR1cCgpOiB2b2lkIHtcXHJcXG4gICAgY29sbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gICAgaW5pdCgpO1xcclxcbiAgICB1cGRhdGUoKTtcXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgb24oIEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kgKTtcXHJcXG4gICAgb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNILCBzZXR1cCApO1xcclxcbiAgICBvbiggRVZFTlRfVVBEQVRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsIHVwZGF0ZSApO1xcclxcblxcclxcbiAgICBiaW5kKCBkb2N1bWVudCwgYCR7IFBPSU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEVSX0RPV05fRVZFTlRTIH0ga2V5ZG93bmAsIGUgPT4ge1xcclxcbiAgICAgIGlzVXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5nS2V5ID0gZS50eXBlID09PSAna2V5ZG93bic7XFxyXFxuICAgIH0sIHsgY2FwdHUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmU6IHRydWUgfSApO1xcclxcblxcclxcbiAgICBiaW5kKCByb290LCAnZm9jdXNpbicsICIKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA9PiB7XFxyXFxuICAgICAgdG9nZ2xlQ2xhc3MoIHJvb3QsIENMQVNTX0ZPQ1VTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidJTiwgISEgaXNVc2luZ0tleSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gY29tcGxldGVseSAtIFdoZXRoZXIgdG8gZGVzdHJveSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGNvbXBvbmVudCBjb21wbGV0ZWx5IG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGRlc3Ryb3koIGNvbXBsZXRlbHk/OiBib29sZWFuICk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgY29uc3QgYXR0cnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoICdzdHlsZScgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuXFxyXFxuICAgIGVtcHR5KCBzbGlkZXMgKTtcXHJcXG4gICAgcmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NsYXNzKCByb290LCByb290Q2xhc3NlcyApO1xcclxcbiAgICByZW1vdmVDbGFzcyggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrLCB0cmFja0NsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidXRlKCBbJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmFjaywgbGlzdCBdLCBhdHRycyApO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiIiByb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiBbICdzdHlsZScsIEFSSUFfUk9MRURFU0MiCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklQVElPTiBdICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVzIHRoZSBzdGF0dXMgb2YgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiB1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZUNsYXNzKCByb290LCByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vdENsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHRyYWNrLCB0cmFja0NsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzICk7XFxyXFxuXFxyXFxuICAgIHJvb3RDbGFzc2VzICA9IGdldENsYXNzZXMoIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19ST09UICk7XFxyXFxuICAgIHRyYWNrQ2xhc3NlcyA9IGdldENsYXNzZXMoIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19UUkFDSyApO1xcclxcblxcclxcbiAgICBhZGRDbGFzcyggcm9vdCwgcm9vdENsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzICk7XFxyXFxuICAgIGFkZENsYXNzKCB0cmFjaywgdHJhY2tDbGFzc2VzICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHJvb3QsIEFSSUFfTEFCRUwsIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmxhYmVsICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSggcm9vdCwgQVJJQV9MQUJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xMRURCWSwgb3B0aW9ucy5sYWJlbGxlZGJ5ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBDb2xsZWN0cyBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zaXN0cyBvZi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY29sbGVjdCgpOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZCB7XFxyXFxuICAgIHRyYWNrID0gZmluZCggYC4keyBDTEFTU19UUkFDSyB9YCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgbGlzdCAgPSBjaGlsZCggdHJhY2ssIGAuJHsgQ0xBU1NfTElTVCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifWAgKTtcXHJcXG5cXHJcXG4gICAgYXNzZXJ0KCB0cmFjayAmJiBsaXN0LCAnQSB0cmFjayIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvbGlzdCBlbGVtZW50IGlzIG1pc3NpbmcuJyApO1xcclxcbiAgICBwdXNoKCBzbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBjaGlsZHJlbiggbGlzdCwgYC4keyBDTEFTU19TTElERSB9Om5vdCguJHsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMT05FIH0pYCApICk7XFxyXFxuXFxyXFxuICAgIGZvck93bigge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcnJvd3MgICAgOiBDTEFTU19BUlJPV1MsXFxyXFxuICAgICAgcGFnaW5hdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX1BBR0lOQVRJT04sXFxyXFxuICAgICAgcHJldiAgICAgIDogQ0xBU1NfQVJSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09XX1BSRVYsXFxyXFxuICAgICAgbmV4dCAgICAgIDogQ0xBU1NfQVJST1dfTkVYVCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgYmFyICAgICAgIDogQ0xBU1NfUFJPR1JFU1NfQkFSLFxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0b2dnbGUgICAgOiBDTEFTU19UT0dHTEUsXFxyXFxuICAgIH0sICggY2xhc3NOYW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSwga2V5ICkgPT4ge1xcclxcbiAgICAgIGVsZW1lbnRzWyBrZXkgXSA9IGZpbmQoIGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiR7IGNsYXNzTmFtZSB9YCApO1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NpZ24oIGVsZW1lbnRzLCB7IHJvb3QsIHRyYWNrLCBsaXN0LCBzbGlkZXMgfSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VudGlhbCBlbGVtZW50cy5cXHJcXG4gICAqIE5vdGUgdGhhdCBkbyBub3QgY2hhbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0aGUgcm9sZSBvZiB0aGUgcm9vdCBlbGVtZW50LFxcclxcbiAgICogd2hpY2ggcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZXMgdGhlIHJlZ2lvbiBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAgICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWQgICA9IHJvb3QuaWQgfHwgdW5pcXVlSWQoIFBST0pFQ1RfQ09ERSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY29uc3Qgcm9sZSA9IG9wdGlvbnMucm9sZTtcXHJcXG5cXHJcXG4gICAgcm9vdC5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgID0gaWQ7XFxyXFxuICAgIHRyYWNrLmlkID0gdHJhY2suaWQgfHwgYCR7IGlkIH0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrYDtcXHJcXG4gICAgbGlzdC5pZCAgPSBsaXN0LmlkIHx8IGAkeyBpZCB9LWxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YDtcXHJcXG5cXHJcXG4gICAgaWYgKCAhIGdldEF0dHJpYnV0ZSggcm9vdCwgUk9MRSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKSAmJiByb290LnRhZ05hbWUgIT09ICdTRUNUSU9OJyAmJiByb2xlICkge1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzZXRBdHRyaWJ1dGUoIHJvb3QsIFJPTEUsIHJvbGUgKTtcXHJcXG4gICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgc2V0QXR0cmlidXRlKCByb290LCBBUklBX1JPTEVERVNDUklQVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT04sIGkxOG4uY2Fyb3VzZWwgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBsaXN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgUk9MRSwgJ3ByZXNlbnRhdGlvbicgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEZpbmRzIGFuIGVsZW1lbnQgb25seSBpbiB0aGlzIHNsaWRlciwgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnbm9yaW5nIGVsZW1lbnRzIGluIGEgbmVzdGVkIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBBIGZvdW5kIGVsZW1lbnQgb3IgbnVsbC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIGZpbmQoIHNlbGVjdG9yOiBzdHJpbmcgKTogSFRNTEVsZW1lbnQgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5kZWZpbmVkIHtcXHJcXG4gICAgY29uc3QgZWxtID0gcXVlcnk8SFRNTEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0Piggcm9vdCwgc2VsZWN0b3IgKTtcXHJcXG4gICAgcmV0dXJuIGVsbSAmJiBjbG9zZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCggZWxtLCBgLiR7IENMQVNTX1JPT1QgfWAgKSA9PT0gcm9vdCA/IGVsbSA6IHVuZGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZWQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybiBhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXkgd2l0aCBtb2RpZmllciBjbGFzc2VzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gYmFzZSAtIEEgYmFzZSBjbGFzcyBuYW1lLlxcclxcbiAgICpcXHJcXG4gICAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEFuIGFycmF5IHdpdGggY2xhc3Nlcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGdldENsYXNzZXMoIGJhc2U6IHN0cmluZyApOiBzdHJpbmdbXSB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gW1xcclxcbiAgICAgIGAkeyBiYXNlIH0tLSR7IG9wdGlvbnMudHlwZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfWAsXFxyXFxuICAgICAgYCR7IGJhc2UgfS0tJHsgb3B0aW9ucy5kaXJlY3Rpb24gfWAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICAgIG9wdGlvbnMuZHJhZyAmJiBgJHsgYmFzZSB9LS1kcmFnZ2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCxcXHJcXG4gICAgICBvcHRpb25zLmlzTmF2aWdhdGlvbiAmJiBgJHsgYmFzZSB9LS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF2YCxcXHJcXG4gICAgICBiYXNlID09PSBDTEFTU19ST09UICYmIENMQVNTX0FDVEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkUsXFxyXFxuICAgIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4gYXNzaWduKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudHMsIHtcXHJcXG4gICAgc2V0dXAsXFxyXFxuICAgIG1vdW50LFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveSxcXHJcXG4gIH0gKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJtYXRjaGVzIH0gZnJvbSAnLi4vbWF0Y2hlcy9tYXRjaGVzJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogU3RhcnRzIGZyb20gdGhlIHByb3ZpZGVkIGVsZW1lbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgaW4gYXNjZW5kYW50cy5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmcm9tICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBbiBlbGVtZW50IHRvIHNlYXJjaCBmcm9tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgLSBBIHNlbGVjdG9yLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBUaGUgZm91bmQgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQgaWYgYXZhaWxhYmxlLCBvciBgbnVsbGAuXFxyXFxuICovXFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjbG9zZXN0KCBmcm9tOiBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcXHJcXG4gIGlmICggaXNGdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyb20uY2xvc2VzdCApICkge1xcclxcbiAgICByZXR1cm4gZnJvbS5jbG9zZXN0KCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGxldCBlbG06IEhUTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCB8IG51bGwgPSBmcm9tO1xcclxcblxcclxcbiAgd2hpbGUgKCBlbG0gJiYgZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgYidub2RlVHlwZSA9PT0gMSApIHtcXHJcXG4gICAgaWYgKCBtYXRjaGVzKCBlbG0sIHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciApICkge1xcclxcbiAgICAgIGJyZWFrO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gZWxtO1xcclxcbn0iLCJpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiIlRfUkVTSVpFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvUyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbnQsICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQge1xcclxcbiAgYWRkQ2xhc3MsXFxyXFxuICBhcHBlbmQsXFxyXFxuICBhcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBiZWZvcmUsXFxyXFxuICBiZXR3ZWVuLFxcclxcbiAgZW1wdHksXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZm9yRWFjaCBhcyBmb3JFYWNoSXRlbSxcXHJcXG4gIGluY2x1ZGVzLFxcclxcbiAgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24sXFxyXFxuICBpc0hUTUxFbGVtZW50LFxcclxcbiAgaXNTdHJpbmcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgbWF0Y2hlcyxcXHJcXG4gIHBhcnNlSHRtbCxcXHJcXG4gIHF1ZXJ5QWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIHJlbW92ZSBhcyByZW1vdmVOb2RlLFxcclxcbiAgdG9BcnJheSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxufSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgU2xpZGUsIFNsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICBiIkNvbXBvbmVudCB9IGZyb20gJy4vU2xpZGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2xpZGVzIGNvbXBvbmVudC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZSBTbGlkZXNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHJlZ2lzdGVyKCBzbGlkZTogSFRNTEVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBpbmRleDogbnVtYmVyLCBzbGlkZUluZGV4OiBudW1iZXIgKTogdm9pZDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBnZXQoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IFNsaWRlQ29tcG9uZW50WycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcbiAgZ2V0SW4oIHBhZ2U6IG51bWJlciApOiBTbGlkZUNvbXBvbmVudFtdOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGdldEF0KCBpbmRleDogbnVtYmVyICk6IFNsaWRlQ29tcG9uZW50IHwgdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVmaW5lZDtcXHJcXG4gIGFkZCggc2xpZGU6IHN0cmluZyB8IEVsZW1lbnQgfCBBcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXk8c3RyaW5nIHwgRWxlbWVudD4sIGluZGV4PzogbnVtYmVyICk6IHZvaWQ7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcmVtb3ZlKCBzZWxlY3RvcjogU2xpZGVNYXRjaGVyICk6IHZvaWQ7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yRWFjaCggaXRlcmF0ZWU6IFNsaWRlc0l0ZXJhdGVlLCBleGNsdWRlQ2xvbmVzPzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW4gKTogdm9pZDtcXHJcXG4gIGZpbHRlciggbWF0Y2hlcjogU2xpZGVNYXRjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlciApOiBTbGlkZUNvbXBvbmVudFtdO1xcclxcbiAgc3R5bGUoIHByb3A6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHVzZUNvbnRhaW5lcj86IGJvb2xlYW4gKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWRcXHJcXG4gIGdldExlbmd0aCggZXhjbHVkZUNsb25lcz86IGJvb2xlYW4gKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlcjtcXHJcXG4gIGlzRW5vdWdoKCk6IGJvb2xlYW47XFxyXFxufVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBUaGUgaXRlcmF0ZWUgZnVuY3Rpb24gZm9yIFNsaWRlcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgU2xpZGVzSXRlcmF0ZWUgPSAoIFNsaWRlOiBTbGlkZUNvbXBvbmVudCwgaW5kZXg6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIFNsaWRlczogU2xpZGVDb21wb25lbnRbXSApID0+IHZvaWRcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBmb3IgU2xpZGVzLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZXNQcmVkaWNhdGUgPSAoIFNsaWRlOiBTbGlkZUNvbXBvbmVudCwgaW5kZXg6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIFNsaWRlczogU2xpZGVDb21wb25lbnRbXSApID0+IGFueVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgZmlsdGVyaW5nIFNsaWRlQ29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCB0eXBlIFNsaWRlTWF0Y2hlciA9IG51bWJlciB8IG51bWJlcltdIHwgc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyB8IFNsaWRlc1ByZWRpY2F0ZTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCBmb3IgbWFuYWdpbmcgYWxsIHNsaWRlcyBpbmNsdWRlIGNsb25lcy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZXMgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIFNsaWRlcyggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zOiBPcHRpb25zICk6IFNsaWRlc0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBvbiwgZW1pdCwgYmluZCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGNvbnN0IHsgc2xpZGVzLCBsaXN0IH0gPSBDb21wb25lbnRzLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGFsbCBTbGlkZUNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQgb2JqZWN0cy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgU2xpZGVzOiBTbGlkZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGluaXQoKTtcXHJcXG4gICAgb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNILCBkZXN0cm95ICk7XFxyXFxuICAgIG9uKCBFVkVOVF9SRUZSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VTSCwgaW5pdCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlhbGl6ZXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQoKTogdm9pZCB7XFxyXFxuICAgIHNsaWRlcy5mb3JFYWNoKCAoIHNsaWRlLCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggKSA9PiB7IHJlZ2lzdGVyKCBzbGlkZSwgaW5kZXgsIC0xICkgfSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBmb3JFYWNoKCBTbGlkZSA9PiB7IFNsaWRlLmRlc3Ryb3koKSB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICBlbXB0eSggU2xpZGVzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBNYW51YWxseSB1cGRhdGVzIHRoZSBzdGF0dXMgb2YgYWxsIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvckVhY2goIFNsaWRlID0+IHsgU2xpZGUudXBkYXRlKCkgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVnaXN0ZXJzIGEgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGVsZW1lbnQgYW5kIGNyZWF0ZXMgYSBTbGlkZSBvYmplY3QuXFxyXFxuICAgKiBOZScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZHMgdG8gc29ydCBldmVyeSB0aW1lIHdoZW4gYSBuZXcgc2xpZGUgaXMgcmVnaXN0ZXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgZXNwZWNpYWxseSBmb3IgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUgICAgICAtIEEgc2xpZGUgZWxlbWVudCB0byByZWdpc3Rlci5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gaW5kZXggICAgICAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIHNsaWRlSW5kZXggLSBBIHNsaWRlIGluZGV4IGZvciBjbG9uZXMuIFRoaXMgbXVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYmUgYC0xYCBmb3IgcmVndWxhciBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiByZWdpc3Rlciggc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyLCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVJbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBvYmplY3QgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUoIFNwbGlkZSwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBvYmplY3QubW91bnQoKTtcXHJcXG4gICAgU2xpZGVzLnB1c2goIG9iamVjdCApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgU2xpZGVzLnNvcnQoICggU2xpZGUxLCBTbGlkZTIgKSA9PiBTbGlkZTEuaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4IC0gU2xpZGUyLmluZGV4ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBSZXR1cm5zIGFsbCBTbGlkZSBvYmplY3RzLlxcclxcbiAgICpcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZXhjbHVkZUNsb25lcyAtIE9wdGlvbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGV4Y2x1ZGUgY2xvbmVzIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBBbiBhcnJheSB3aXRoIFNsaWRlIG9iamVjdHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBnZXQoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IFNsaWRlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tdIHtcXHJcXG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyBmaWx0ZXIoIFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9PiAhIFNsaWRlLmlzQ2xvbmUgKSA6IFNsaWRlcztcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgc2xpZGVzIGluIHRoZSBzcGVjaWZpZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2UuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBhZ2UgLSBBIHBhZ2UgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBzbGlkZXMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoYXQgYmVsb25nIHRvIHRoZSBwYWdlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0SW4oIHBhZ2U6IG51bWJlciApOiBTbGlkZUNvbXBvbmVudFtdIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHsgQ29udHJvbGxlciB9ID0gQ29tcG9uZW50cztcXHJcXG4gICAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4ID0gQ29udHJvbGxlci50b0luZGV4KCBwYWdlICk7XFxyXFxuICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXggICA9IENvbnRyb2xsZXIuaGFzRm9jdXMoKSA/IDEgOiBvcHRpb25zLnBlclBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICByZXR1cm4gZmlsdGVyKCBTbGlkZSA9PiBiZXR3ZWVuKCBTbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgsIGluZGV4LCBpbmRleCArIG1heCAtIDEgKSApO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBhIFNsaWRlIG9iamVjdCBhdCB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwZWNpZmllZCBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBzbGlkZSBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgU2xpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldEF0KCBpbmRleDogbnVtYmVyICk6IFNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XFxyXFxuICAgIHJldHVybiBmaWx0ZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCApWyAwIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNlcnRzIGEgc2xpZGUgb3Igc2xpZGVzIGF0IGEgc3BlY2lmaWVkIGluZGV4LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaXRlbXMgLSBBIHNsaWRlIGVsZW1lbnQsIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBIVE1MIHN0cmluZyBvciBhbiBhcnJheSB3aXRoIHRoZW0uXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGluZGV4IC0gT3B0aW9uYWwuIEFuIGluZGV4IHRvIGluc2VydCB0aGUgc2xpZGUgYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0LiBJZiBvbWl0dGVkLCBhcHBlbmRzIGl0IHRvIHRoZSBsaXN0LlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gYWRkKCBpdGVtczogc3RyaW5nIHwgRWxlbWVudCB8IEFycmF5PHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmcgfCBFbGVtZW50PiwgaW5kZXg/OiBudW1iZXIgKTogdm9pZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmb3JFYWNoSXRlbSggaXRlbXMsIHNsaWRlID0+IHtcXHJcXG4gICAgICBpZiAoIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1N0cmluZyggc2xpZGUgKSApIHtcXHJcXG4gICAgICAgIHNsaWRlID0gcGFyc2VIdG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCggc2xpZGUgKTtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgaWYgKCBpc0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MRWxlbWVudCggc2xpZGUgKSApIHtcXHJcXG4gICAgICAgIGNvbnN0IHJlZiA9IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXNbIGluZGV4IF07XFxyXFxuICAgICAgICByZWYgPyBiZWZvcmUoIHNsaWRlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmICkgOiBhcHBlbmQoIGxpc3QsIHNsaWRlICk7XFxyXFxuICAgICAgICBhZGRDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3MoIHNsaWRlLCBvcHRpb25zLmNsYXNzZXMuc2xpZGUgKTtcXHJcXG4gICAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnNlcnZlSW1hZ2VzKCBzbGlkZSwgYXBwbHkoIGVtaXQsIEVWRU5UX1JFU0laRSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICBlbWl0KCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVGUkVTSCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcyBzbGlkZXMgdGhhdCBtYXRjaCB0aGUgbWF0Y2hlclxcclxcbiAgICogdGhhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheSB3aXRoIGluZGljZXMsIGEgc2VsZWN0b3IsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXJyYXkgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBzdHJpbmcsIG9yIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gcmVtb3ZlKCBtYXRjaGVyOiBTbGlkZU1hdGNoZXIgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICByZW1vdmVOb2RlKCBmaWx0ZXIoIG1hdGNoZXIgKS5tYXAoIFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9PiBTbGlkZS5zbGlkZSApICk7XFxyXFxuICAgIGVtaXQoIEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEl0ZXJhdGVzIG92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIFNsaWRlIG9iamVjdHMgYnkgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gaXRlcmF0ZWUgICAgICAtIEFuIGl0ZXJhdGVlIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiB0aGF0IHRha2VzIGEgU2xpZGUgb2JqZWN0LCBhbiBpbmRleCBhbmQgYW4gYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5IHdpdGggU2xpZGVzLlxcclxcbiAgICogQHBhcmFtIGV4Y2x1ZGVDbG9uZXMgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBleGNsdWRlIGNsb25lcyBvciBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoKCBpdGVyYXRlZTogU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc0l0ZXJhdGVlLCBleGNsdWRlQ2xvbmVzPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGdldCggZXhjbHVkZUNsb25lcyApLmZvckVhY2goIGl0ZXJhdGVlICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBGaWx0ZXJzIFNsaWRlcyBieScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIG1hdGNoZXJcXHJcXG4gICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvciBhIHByZWRpY2F0ZSBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFycmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGEgcHJlZGljYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSBmdW5jdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEFuIGFycmF5IHdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIFNsaWRlQ29tcG9uZW50IG9iamVjdHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBmaWx0ZXIoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciApOiBTbGlkZUNvbXBvbmVudFtdICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHJldHVybiBTbGlkZXMuZmlsdGVyKCBpc0Z1bmN0aW9uKCBtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciApXFxyXFxuICAgICAgPyBtYXRjaGVyXFxyXFxuICAgICAgOiBTbGlkZSA9PiBpc1N0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcoIG1hdGNoZXIgKVxcclxcbiAgICAgICAgPyBtYXRjaGVzKCBTbGlkZS5zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIG1hdGNoZXIgKVxcclxcbiAgICAgICAgOiBpbmNsdWRlcyggdG9BcnJheSggbWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXIgKSwgU2xpZGUuaW5kZXggKVxcclxcbiAgICApO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogQWRkcyBhIENTUyBydWxlIHRvIGFsbCBzbGlkZXMgb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRhaW5lcnMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHByb3AgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHByb3BlcnR5IG5hbWUuXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgQ1NTIHZhbHVlIHRvIGFkZC5cXHJcXG4gICAqIEBwYXJhbSB1c2VDb250YWluZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBhcHBseSB0aGUgcnVsZSB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28gdGhlIGNvbnRhaW5lciBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSggcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1c2VDb250YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaCggU2xpZGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHsgU2xpZGUuc3R5bGUoIHByb3AsIHZhbHVlLCB1c2VDb250YWluZXIgKSB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbnZva2VzIHRoZSBjYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2sgYWZ0ZXIgYWxsIGltYWdlcyBpbiB0aGUgZWxlbWVudCBhcmUgbG9hZGVkLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZWxtICAgICAgLSBBbiBlbGVtZW50IHRoYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heSBjb250YWluIGltYWdlcy5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvYnNlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZUltYWdlcyggZWxtOiBFbGVtZW50LCBjYWxsYmFjazogQW55RnVuY3Rpb24gKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiImQge1xcclxcbiAgICBjb25zdCBpbWFnZXMgPSBxdWVyeUFsbCggZWxtLCAnaW1nJyApIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgbGV0IHsgbGVuZ3RoIH0gPSBpbWFnZXM7XFxyXFxuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIGxlbmd0aCApIHtcXHJcXG4gICAgICBpbWFnZXMuZm9yRWFjaCggaW1nID0+JwogICAgICAgICAgICAgICAgICAgICAgICBiIiB7XFxyXFxuICAgICAgICBiaW5kKCBpbWcsICdsb2FkIGVycm9yJywgKCkgPT4ge1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICAgICAgaWYgKCAhIC0tbGVuZ3RoICkge1xcclxcbiAgICAgICAgICAgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaygpO1xcclxcbiAgICAgICAgICB9XFxyXFxuICAgICAgICB9ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIH0gKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBjYWxsYmFjaygpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJucyB0aGUgbGVuZ3RoIG9mIHNsaWRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGV4Y2x1ZGVDbG9uZXMgLSBPcHRpb25hbC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdWRlIGNsb25lcyBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGxlbmd0aCBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldExlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gZXhjbHVkZUNsb25lcyA/IHNsaWRlcy5sZW5ndGggOiBTbGlkZXMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyIG9mIHNsaWRlcyBpcyBvdmVyIHRoYW4gdGhlIGBwZXJQYWdlYCBvcHRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmNsdWRpbmcgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGVyZSBhcmUgZW5vdWdoIHNsaWRlcywgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc0Vub3VnaCgpOiBib29sZWFuIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBTbGlkZXMubGVuZ3RoID4gb3B0aW9ucy5wZXJQYWdlO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveSxcXHJcXG4gICAgdXBkYXRlLFxcclxcbiAgICByZWdpc3RlcixcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGdldCxcXHJcXG4gICAgZ2V0SW4sXFxyXFxuICAgIGdldEF0LFxcclxcbiAgICBhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkLFxcclxcbiAgICByZW1vdmUsXFxyXFxuICAgIGZvckVhY2gsXFxyXFxuICAgIGZpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXIsXFxyXFxuICAgIHN0eWxlLFxcclxcbiAgICBnZXRMZW5ndGgsXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc0Vub3VnaCxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IFRUQiB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJmcm9tICcuLi8uLi9jb25zdGFudHMvZGlyZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHsgRSIKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX09WRVJGTE9XLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNJWkVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlLCBUaHJvdHRsZSB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5pbXBvcnQgeyBhYnMsIGFwcGx5LCBhc3NlcnQsIGlzT2JqZWN0LCByZWN0LCBzdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIHRvZ2dsZUNsYXNzLCB1bml0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBGQURFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3R5cGVzJztcXHJcXG5pbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgQ0xBU1NfT1ZFUkZMT1cgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3NlIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgTGF5b3V0IGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIExheW91dENvbXBvbmVudCBleHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIGxpc3RTaXplKCk6IG51bWJlcjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBzbGlkZVNpemUoIGluZGV4OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuICk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XFxyXFxuICBzbGlkZXJTaXplKCB3aXRob3V0R2FwPzogYm9vbGVhbiApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyO1xcclxcbiAgdG90YWxTaXplKCBpbmRleD86IG51bWJlciwgd2l0aG91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RHYXA/OiBib29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGdldFBhZGRpbmcoIHJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFxuICBpc092ZXJmbG93KCk6IGJvb2xlYW47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqIEBpbnRlcm5hbCAqL1xcclxcbiAgcmVzaXplKCBmb3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U/OiBib29sZWFuICk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29tcG9uZW50IHRoYXQgYWRqdXN0cyBzbGlkZXIgc3R5bGVzIGFuZCBwcm92aWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWV0aG9kcyBmb3IgZGltZW5zaW9ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAcmV0dXJuIEFuIExheW91dCBjb21wb25lbnQgb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KCBTcGxpZGU6IFNwbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogTGF5b3V0Q28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBiaW5kLCBlbWl0IH0gPSBFdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBTbGlkZXMgfSA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzO1xcclxcbiAgY29uc3QgeyByZXNvbHZlIH0gPSBDb21wb25lbnRzLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XFxyXFxuICBjb25zdCB7IHJvb3QsIHRyYWNrLCBsaXN0IH0gPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5FbGVtZW50cztcXHJcXG4gIGNvbnN0IHsgZ2V0QXQsIHN0eWxlOiBzdHlsZVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMgfSA9IFNsaWRlcztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlcyB3aGV0aGVyIHRoZSBzbGlkZXIgZGlyZWN0aW9uIGlzIHZlcnRpY2FsIG9yIG5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIGxldCB2ZXJ0aWNhbDogYm9vbGVhbjtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIEtlZXBzIHRoZSBET01SZWN0IG9iamVjdCBvZiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvb3QgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHJvb3RSZWN0OiBET01SZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHVybnMgaW50byBgdHJ1ZWAgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gdGhlIGNhcm91c2VsIGlzIHdpZGVyIHRoYW4gdGhlIGxpc3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsZXQgb3ZlcmZsb3c6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG4gICAgYmluZCggd2luZG93LCAncmVzaXplIGxvYWQnLCBUaHJvdHRsZSggIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KCBlbWl0LCBFVkVOVF9SRVNJWkUgKSApICk7XFxyXFxuICAgIG9uKCBbIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIIF0sIGluaXQgKTtcXHJcXG4gICAgb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRVNJWkUsIHJlc2l6ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBvbiBgbW91bnRgIG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBgdXBkYXRlZGAuXFxyXFxuICAgKiBVc2VzIGBtYXgtd2lkdGhgIGZvciB0aGUgcm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdG8gcHJldmVudCB0aGUgc2xpZGVyIGZyb20gZXhjZWVkaW5nIHRoZSBwYXJlbnQgZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGluaXQoKTogdm9pZCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB2ZXJ0aWNhbCA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiblxcclxcbiAgICBzdHlsZSggcm9vdCwgJ21heFdpZHRoJywgdW5pdCggb3B0aW9ucy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIid2lkdGggKSApO1xcclxcbiAgICBzdHlsZSggdHJhY2ssIHJlc29sdmUoICdwYWRkaW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZ0xlZnQnICksIGNzc1BhZGRpbmcoIGZhbHNlICkgKTtcXHJcXG4gICAgc3R5bGUoIHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmFjaywgcmVzb2x2ZSggJ3BhZGRpbmdSaWdodCcgKSwgY3NzUGFkZGluZyggdHJ1ZSApICIKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcblxcclxcbiAgICByZXNpemUoIHRydWUgKTtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIFVwZGF0ZXMgZGltZW5zaW9ucyBvZiBzb21lIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50cyB3aGVuIHRoZSBjYXJvdXNlbCBpcyByZXNpemVkLlxcclxcbiAgICogQWxzbycKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hlY2tzIHRoZSBjYXJvdXNlbCBzaXplIGFuZCBlbWl0cyBgb3ZlcmZsb3dgIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgd2hlbiBpdCBleGNlZWRzIHRoZSBsaXN0IHdpZHRoLlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gZm9yY2UgLSBTa2lwcyBjaGVja2luZyB0aGUgcm9vdCBkaW1lbnNpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoYW5nZSBhbmQgYWx3YXlzIHBlcmZvcm1zIHRoZSByZXNpemluZyBwcm9jZXNzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzaXplKCBmb3JjZT86IGJvb2xlYW4gKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBjb25zdCBuZXdSZWN0ID0gcmVjdCggcm9vdCApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgaWYgKCBmb3JjZSB8fCByb290UmVjdC53aWR0aCAhPT0gbmV3UmVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qud2lkdGggfHwgcm9vdFJlY3QuaGVpZ2h0ICE9PSBuZXdSZWN0LmhlaWdodCApICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7XFxyXFxuICAgICAgc3R5bGUoIHRyYWNrLCAnaGVpZ2h0JywgY3NzVHJhY2tIZWlnaCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0KCkgKTtcXHJcXG5cXHJcXG4gICAgICBzdHlsZVNsaWRlcyggcmVzb2x2ZSggJ21hcmdpIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5SaWdodCcgKSwgdW5pdCggb3B0aW9ucy5nYXAgKSApO1xcclxcbiAgICAgIHN0eWxlIgogICAgICAgICAgICAgICAgICAgICAgICBiIlNsaWRlcyggJ3dpZHRoJywgY3NzU2xpZGVXaWR0aCgpICk7XFxyXFxuICAgICAgc3R5IgogICAgICAgICAgICAgICAgICAgICAgICBiImxlU2xpZGVzKCAnaGVpZ2h0JywgY3NzU2xpZGVIZWlnaHQoKSwgdHJ1ZSApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgICByb290UmVjdCA9IG5ld1JlY3Q7XFxyXFxuICAgICAgZW1pdCggRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFU0laRUQgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIG92ZXJmbG93ICE9PSAoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVyZmxvdyA9IGlzT3ZlcmZsb3coKSApICkge1xcclxcbiAgICAgICAgdG9nZ2xlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKCByb290LCBDTEFTU19PVkVSRkxPVywgb3ZlcmZsb3cgKTtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbWl0KCBFVkVOVF9PVkVSRkxPVywgb3ZlcmZsb3cgKTtcXHJcXG4gICAgICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFBhcnNlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHBhZGRpbmcgb3B0aW9uIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgZWFjaCBzaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5cXHJcXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHBhZGRpbmdUb3BgIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgcGFkZGluZ0JvdHRvbWAgZm9yIHRoZSB2ZXJ0aWNhbCBzbGlkZXIuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSByaWdodCAtIERldGVybWluZXMgd2hldGhlciB0byBnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGBwYWRkaW5nUmlnaHQvQm90dG9tYCBvciBgcGFkZGluZ0xlZnQvVG9wYC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgcGFkZGluZyB2YWx1ZSBhcyBhIENTUycKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjc3NQYWRkaW5nKCByaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IGJvb2xlYW4gKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyBwYWRkaW5nIH0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucztcXHJcXG4gICAgY29uc3QgcHJvcCA9IHJlc29sdmUoIHJpZ2h0ID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiIidyaWdodCcgOiAnbGVmdCcgKTtcXHJcXG4gICAgcmV0dXJuIHBhZGRpbmdcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgJiYgdW5pdCggcGFkZGluZ1sgcHJvcCBdIHx8ICggaXNPYmplY3QoIHBhZGRpbmcgKScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgPyAwIDogcGFkZGluZyApIClcXHJcXG4gICAgICB8fCAnMHB4JztcXHJcXG4gIH0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHRyYWNrIGVsZW1lbnQgYXMgYSBDU1Mgc3RyaW5nLlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIFRoZSBoZWlnaHQgb2YgdGhlIHRyYWNrLlxcclxcbiAgICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gY3NzVHJhY2tIZWlnaHQoKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiIiBoZWlnaHQgPSAnJztcXHJcXG5cXHJcXG4gICAgaWYgKCB2ZXJ0aWNhbCApIHtcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgaGVpZ2h0ID0gY3NzSGVpZ2h0KCk7XFxyXFxuICAgICAgYXNzZXJ0KCBoJwogICAgICAgICAgICAgICAgICAgICAgICBiImVpZ2h0LCAnaGVpZ2h0IG9yIGhlaWdodFJhdGlvIGlzIG1pc3NpbmcuJyApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICBoZWlnaHQgPSBgY2FsYygkeyBoZWlnaHQgfSAtICR7IGNzc1BhZGRpbmcoIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzZSApIH0gLSAkeyBjc3NQYWRkaW5nKCB0cnVlICkgfSlgO1xcclxcbiAgICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICByZXR1cm4gaGVpZ2h0O1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQ29udmVydHMgb3B0aW9ucyByZWxhdGVkIHdpdGggaGVpZ2h0IHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhIENTUyBzdHJpbmcuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBhcyBhIENTUyBzdHJpbmcgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYW4gZW1wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5IHN0cmluZy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzSGVpZ2h0KCk6IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jpbmcge1xcclxcbiAgICByZXR1cm4gdW5pdCggb3B0aW9ucy5oZWlnaHQgfHwgcmVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIGxpc3QgKS53aWR0aCAqIG9wdGlvbnMuaGVpZ2h0UmF0aW8gKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUgYXMgYSBDU1Mgc3RyaW5nLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB3aWR0aCBvZiB0aGUgc2xpZGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNzc1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xcclxcbiAgICByZXR1cm4gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuYXV0b1dpZHRoXFxyXFxuICAgICAgPyBudWxsXFxyXFxuICAgICAgOiB1bml0KCBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9ucy5maXhlZFdpZHRoICkgfHwgKCB2ZXJ0aWNhbCA/ICcnIDogY3NzU2xpZGVTaXplIgogICAgICAgICAgICAgICAgICAgICAgICBiJygpICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBoZWlnaHQgb2YgdGhlIHNsaWRlIGFzIGEgQ1NTIHN0cmluZy5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHJldHVybiBUaGUgaGVpZ2h0IG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KCk6IHN0cmluZyB8IG51bGwgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuIHVuaXQoIG9wdGlvbnMuZml4ZWRIZWlnaHQgKVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB8fCAoIHZlcnRpY2FsID8gKCBvcHRpb25zLmF1dG9IZWlnaHQgPyBudWxsIDogY3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1NsaWRlU2l6ZSgpICkgOiBjc3NIZWlnaHQoKSApO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgQ1NTIHN0cmluZyBmb3Igc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpZHRoIG9yIGhlaWdodCB3aXRob3V0IGdhcC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBUaGUgQ1NTIHN0cmluZyBmb3Igc2xpZGUgd2lkdGggb3IgaGVpZ2h0LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzU2xpZGVTaXplKCk6IHN0cmluZyB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBjb25zdCBnYXAgPSB1bml0KCBvcHRpb25zLmdhcCApO1xcclxcbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGBjYWxjKCgxMDAlJHsgZ2FwICYmIGAgKyAkeyBnYXAgfWAgfSkvJHsgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMucGVyUGFnZSB8fCAxIH0keyBnYXAgJiYgYCAtICR7IGdhcCB9YCB9KWA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCBmb3IgdGhlIGhvcml6b250YWwgc2xpZGVyLCBvciB0aGUgaGVpZ2h0IGZvciB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHZlcnRpY2FsIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSBvZiB0aGUgbGlzdCBlbGVtZW50IGluIHBpeGVsLlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gbGlzdFNpemUoKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCBsaXN0IClbIHJlc29sdmUoICd3aWR0aCcgKSBdO1xcclxcbiAgfVxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgc2xpZGUgd2lkdGggZm9yIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG9yaXpvbnRhbCBzbGlkZXIsIG9yIHRoZSBoZWlnaHQgZm9yIHRoZSB2ZXJ0aWNhbCBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAgICAgIC0gT3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLiBBIHNsaWRlIGluZGV4LlxcclxcbiAgICogQHBhcmFtIHdpdGhvdXRHYXAgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBleGNsdWRlIHRoZSBnYXAgYW1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgc2l6ZSBvZiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHNwZWNpZmllZCBzbGlkZSBlbGVtZW50IGluIHBpeGVsLlxcclxcbiAgICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gc2xpZGVTaXplKCBpbmRleD86IG51bWJlciwgd2l0aG91dEdhcD86IGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IFNsaWRlID0gZ2V0QXQoIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCB8fCAwICk7XFxyXFxuICAgIHJldHVybiBTbGlkZVxcclxcbiAgICAgID8gcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIoIFNsaWRlLnNsaWRlIClbIHJlc29sdmUoICd3aWR0aCcgKSBdICsgKCB3aXRob3V0R2FwIgogICAgICAgICAgICAgICAgICAgICAgICBiJyA/IDAgOiBnZXRHYXAoKSApXFxyXFxuICAgICAgOiAwO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgdG90YWwgd2lkdGggb3IgaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvZiBzbGlkZXMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgc2xpZGVyIHRvIHRoZSBzcGVjaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaWVkIGluZGV4LlxcclxcbiAgICogVGhpcyBpbmNsdWRlcyBzaXplcyBvZiBjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGJlZm9yZSB0aGUgZmlyc3Qgc2xpZGUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCAgICAgIC0gQSBzbGlkZSBpbmRleC4gSWYgb21pdHRlZCwgdXNlcyB0aGUgbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gd2l0aG91dEdhcCAtIE9wdGlvbmFsLiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIGxhc3QgZ2FwIG9yIG5vdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgdG90YWwgd2lkdGggb2Ygc2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiB0aGUgaG9yaXpvbnRhbCBzbGlkZXIsIG9yIHRoZSBoZWlnaHQgaW4gdGhlIHZlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWNhbCBvbmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvdGFsU2l6ZSggaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCBTbGlkZSA9IGdldEF0KCBpbmRleCApO1xcclxcblxcclxcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSApIHtcXHJcXG4gICAgICBjb25zdCByaWdodCA9IHJlY3QoIFNsaWRlLnNsJwogICAgICAgICAgICAgICAgICAgICAgICBiImlkZSApWyByZXNvbHZlKCAncmlnaHQnICkgXTtcXHJcXG4gICAgICBjb25zdCBsZWZ0IgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgPSByZWN0KCBsaXN0IClbIHJlc29sdmUoICdsZWZ0JyApIF07XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBhYnMoIHJpZ2h0IC0gbGVmdCApICsgKCB3aXRob3V0R2FwID8gMCA6IGdldEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXAoKSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiAwO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgc2xpZGVyIHNpeicKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHdpdGhvdXQgY2xvbmVzIGJlZm9yZSB0aGUgZmlyc3Qgc2xpZGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgRG8gbm90IHVzZSB0aGUgY2xvbmUncyBzaXplIGJlY2F1c2UgaXQncyB1bnN0YWJsZSB3IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGUgaW5pdGlhbGl6aW5nIGFuZCByZWZyZXNoaW5nIHByb2Nlc3MuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSB3aXRob3V0R2FwIC0gT3B0aW9uYWwuIERldGVybWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHdoZXRoZXIgdG8gZXhjbHVkZSB0aGUgbGFzdCBnYXAgb3Igbm90LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSB3aWR0aCBvciBoZWlnaHQgb2YgdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIgd2l0aG91dCBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJTaXplKCB3aXRob3V0R2FwPzogYm9vbGVhbiApOiBudW1iZXIge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRvdGFsU2l6ZSggU3BsaWRlLmxlbmd0aCAtIDEgKSAtIHRvdGFsU2l6ZSggMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSArIHNsaWRlU2l6ZSggMCwgd2l0aG91dEdhcCApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgZ2FwIHZhbHVlIGluIHBpeGVsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidieSB1c2luZyB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgdGhlIGZpcnN0IHNsaWRlLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBnYXAgdmFsdWUgaW4gcGl4ZWwuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRHYXAoKTogbnVtYmVyIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IFNsaWRlID0gZ2V0QXQoIDAgKTtcXHJcXG4gICAgcmV0dXJuIFNsaWRlICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJiBwYXJzZUZsb2F0KCBzdHlsZSggU2xpZGUuc2xpZGUsIHJlc29sdmUoICdtYXJnaW5SaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJnaHQnICkgKSApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBSZXR1cm5zIHRoZSBwYWRkaW5nIHZhbHVlLlxcclxcbiAgICogVGhpcyBtZXRob2QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc29sdmVzIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBkaXJlY3Rpb24uXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSByaWdodCAtIERldGVybWluZXMgd2hldGhlciB0byBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0IGBwYWRkaW5nUmlnaHQvQm90dG9tYCBvciBgcGFkZGluZ0xlZnQvVG9wYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgcGFkZGluZyB2YWx1ZSBpbiBwaXhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcoIHJpZ2h0OiBib28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVhbiApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gcGFyc2VGbG9hdCggc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCB0cmFjaywgcmVzb2x2ZSggYHBhZGRpbmckeyByaWdodCA/ICdSaWdodCcgOiAnTGVmdCIKICAgICAgICAgICAgICAgICAgICAgICAgYiInIH1gICkgKSApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBDaGVja3MgaWYgdGhlIGNhcm91c2VsIGlzIHdpZGVyIHRoYW4gdGhlIGxpc3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYHRydWVgIGZvciBhIGZhZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhcm91c2VsLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWwgaXMgd2lkZXIgdGhhbiB0aGUgbGlzdCwgb3Igb3RoZXJ3aXNlIGBmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc092ZXJmbG93KCk6IGJvb2xlYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgcmV0dXJuIFNwbGlkZS5pcyggRkFERSApIHx8IHNsaWRlclNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCB0cnVlICkgPiBsaXN0U2l6ZSgpO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICByZXNpemUsXFxyXFxuICAgIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2l6ZSxcXHJcXG4gICAgc2xpZGVTaXplLFxcclxcbiAgICBzbGlkZXJTaXplLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgdG90YWxTaXplLFxcclxcbiAgICBnZXRQYWRkaW5nLFxcclxcbiAgICBpc092ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmxvdyxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBSZXF1ZXN0SW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJydmFsIH0gZnJvbSAnLi4vUmVxdWVzdEludGVydmFsL1JlcXVlc3RJbnRlcnZhbCciCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuaW5nIHZhbHVlIG9mIHRoZSBSZXF1ZXN0SW50ZXJ2YWwuXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBUaHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3R0bGVJbnN0YW5jZTxGIGV4dGVuZHMgQW55RnVuY3Rpb24+IGV4dGVuZHMgRnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcXHJcXG4gICggLi4uYXJnczogUGFyYW1ldGVyczxGPiApOiB2b2lkO1xcclxcbn1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuLyoqXFxyXFxuICogUmV0dXJucyB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmdW5jICAgICAtIEEgZnVuY3Rpb24gdG8gdGhyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290dGxlLlxcclxcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIE9wdGlvbmFsLiBUaHJvdHRsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSB0aHJvdHRsZWQgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaHJvdHRsZTxGIGV4dGVuZHMgQW55RnVuY3Rpb24+KFxcclxcbiAgZnVuYzogRixcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBkdXJhdGlvbj86IG51bWJlclxcclxcbik6IFRocm90dGxlSW5zdGFuY2U8Rj4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIGNvbnN0IGludGVydmFsID0gUmVxdWVzdEludGVydmFsKCBkdXJhdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gfHwgMCwgZnVuYywgbnVsbCwgMSApO1xcclxcblxcclxcbiAgcmV0dXJuICgpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGludGVydmFsLmlzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiRVZFTlRfUkVTSVpFLCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJldmVudHMnO1xcclxcbmltcG9ydCB7IExPT1AgfSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidpbXBvcnQgeyBhZGRDbGFzcywgYXBwZW5kLCBiZWZvcmUsIGNlaWwsIGVtcHR5LCBpc1VuJwogICAgICAgICAgICAgICAgICAgICAgICBiImRlZmluZWQsIHBhZCwgcHVzaCwgcmVjdCwgcmVtb3ZlIH0gZnJvbSAnLi4vLi4vdXRpbHMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aCIKICAgICAgICAgICAgICAgICAgICAgICAgYidlIENsb25lIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIENsb25lc0NvbXBvbmVudCBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBCYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtdWx0aXBsaWVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb25lcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IE1VTFRJUExJRVIgPSAyO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50IHRoYXQgZ2VuZXJhdGVzIGNsb25lcyBmb3IgdGhlIGxvb3Agc2xpZGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xvbmVzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBDbG9uZXMoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uczogT3B0aW9ucyApOiBDbG9uZXNDb21wb25lbnQge1xcclxcbiAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBFbGVtZW50cywgU2xpZGVzIH0gPSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50cztcXHJcXG4gIGNvbnN0IHsgcmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZWQgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IGNsb25lczogSFRNTEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogS2VlcHMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjdXJyZW50IG51bWJlciBvZiBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVDb3VudDogbnVtYmVyO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICogTmVlZHMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvIHJlbW91bnQgdGhlIGNvbXBvbmVudCBvbiByZWZyZXNoLCBvdGhlcndpc2UgYHJlZnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoYCBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZ2FpbiB3aGlsZSByZWZyZXNoaW5nLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggRVZFTlRfUkVGUkVTSCwgcmVtb3VudCApO1xcclxcbiAgICBvbiggWyBFVkVOVF9VJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BEQVRFRCwgRVZFTlRfUkVTSVpFIF0sIG9ic2VydmUgKTtcXHJcXG5cXHJcXG4gICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggKCBjbG9uZUNvdW50ID0gY29tcHV0ZUNsb25lQ291bnQoKSApICkge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBnZW5lcmF0ZSggY2xvbmVDb3VudCApO1xcclxcbiAgICAgIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLkxheW91dC5yZXNpemUoIHRydWUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmVtb3VudHMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIHJlbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGRlc3Ryb3knCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XFxyXFxuICAgIG1vdW50KCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBEZXN0cm95cyBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95KCk6IHZvaWQge1xcclxcbiAgICByZW1vdmUoIGNsb25lcyApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1wdHkoIGNsb25lcyApO1xcclxcbiAgICBldmVudC5kZXN0cm95KCk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBPYnNlcnZlcyB0aGUgcmVxdWlyZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsb25lIGNvdW50IGFuZCByZWZyZXNoZXMgdGhlIHNsaWRlciBpZiBuZWNlc3NhcnkuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvYnNlcnZlKCk6IHZvaWQge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCgpO1xcclxcblxcclxcbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBjbG9uZUNvdW50ICE9PSBjb3VudCApIHtcXHJcXG4gICAgICBpZiAoIGNsb25lQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50IDwgY291bnQgfHwgISBjb3VudCApIHtcXHJcXG4gICAgICAgIGV2ZW50LmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBFVkVOVF9SRUZSRVNIICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBHZW5lcmF0ZXMgdGhlIHNwZWNpZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpZWQgbnVtYmVyIG9mIGNsb25lcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IC0gVGhlIG51bWJlciBvZiBjbG9uZXMgdG8gZ2VuZXJhdGUgZm9yIGVhY2ggc2lkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdlbmVyYXRlKCBjb3VudDogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiB2b2lkIHtcXHJcXG4gICAgY29uc3Qgc2xpZGVzID0gU2xpZGVzLmdldCgpLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgpO1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2xpZGVzO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgaWYgKCBsZW5ndGggKSB7XFxyXFxuICAgICAgd2hpbGUgKCBzbGlkZXMubCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmd0aCA8IGNvdW50ICkge1xcclxcbiAgICAgICAgcHVzaCggc2xpZGVzLCBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzICk7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHB1c2goIHNsaWRlcy5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2UoIC1jb3VudCApLCBzbGlkZXMuc2xpY2UoIDAsIGNvdW50ICkgKS5mb3JFYWNoKCAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSwgaW5kZXggKSA9PiB7XFxyXFxuICAgICAgICBjb25zdCBpc0hlYWQgPSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggPCBjb3VudDtcXHJcXG4gICAgICAgIGNvbnN0IGNsb25lICA9IGNsb25lRGVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3AoIFNsaWRlLnNsaWRlLCBpbmRleCApO1xcclxcbiAgICAgICAgaXNIZWFkID8gYmVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yZSggY2xvbmUsIHNsaWRlc1sgMCBdLnNsaWRlICkgOiBhcHBlbmQoIEVsZW1lbnRzLmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0LCBjbG9uZSApO1xcclxcbiAgICAgICAgcHVzaCggY2xvbmVzLCBjbG9uZSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgIFNsaWRlcy5yZWdpc3RlciggY2xvbmUsIGluZGV4IC0gY291bnQgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0hlYWQgPyAwIDogbGVuZ3RoICksIFNsaWRlLmluZGV4ICk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30gKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogRGVlcGx5IGNsb25lcyB0aGUgcHJvdmlkZWQgZWxlbWVudCB3aXRoIHJlbW92aW5nIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgSUQgYXR0cmlidXRlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlbG0gICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBlbGVtZW50IHRvIGNsb25lLlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4IG9mIHRoZSBjbG9uZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lZCBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjbG9uZURlZXAoIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG06IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyICk6IEhUTUxFbGVtZW50IHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGNvbnN0IGNsb25lID0gZWxtLmNsb25lTm9kZSggdHJ1ZSApIGFzIEhUTUxFbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudDtcXHJcXG4gICAgYWRkQ2xhc3MoIGNsb25lLCBvcHRpb25zLmNsYXNzZXMuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lICk7XFxyXFxuICAgIGNsb25lLmlkID0gYCR7IFNwbGlkZS5yb290LmlkIH0tYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lJHsgcGFkKCBpbmRleCArIDEgKSB9YDtcXHJcXG4gICAgcmV0dXJuIGNsb25lOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbnVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciBvZiBlbGVtZW50cyB0byBnZW5lcmF0ZS5cXHJcXG4gICAqIFRoaXMgYWx3YXlzJwogICAgICAgICAgICAgICAgICAgICAgICBiIiByZXR1cm5zIDAgaWYgdGhlIHNsaWRlciB0eXBlIGlzIG5vdCBgJ2xvb3AnYC5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGNsb25lcy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCk6IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBsZXQgeyBjbG9uZXMgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoICEgU3BsaWRlLmlzKCBMT09QICkgKSB7XFxyXFxuICAgICAgY2xvbmVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7XFxyXFxuICAgIH0gZWxzZSBpZiAoIGlzVW5kZWZpbmVkKCBjbG9uZXMgKSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgICAgY29uc3QgZml4ZWRTaXplICA9IG9wdGlvbnNbIHJlc29sdmUoICciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZml4ZWRXaWR0aCcgKSBdICYmIENvbXBvbmVudHMuTGF5b3V0LnNsaWRlU2l6ZSggMCApOyIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBjb25zdCBmaXhlZENvdW50ID0gZml4ZWRTaXplICYmIGNlaWwoICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJyZWN0KCBFbGVtZW50cy50cmFjayApWyByZXNvbHZlKCAnd2lkdGgnICkgXSAvIGZpeGVkIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1NpemUgKTtcXHJcXG4gICAgICBjbG9uZXMgPSBmaXhlZENvdW50IHx8ICggb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiInNbIHJlc29sdmUoICdhdXRvV2lkdGgnICkgXSAmJiBTcGxpZGUubGVuZ3RoICkgfHwgb3AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMucGVyUGFnZSAqIE1VTFRJUExJRVI7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBjbG9uZXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICB9O1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuIiwiaW1wb3J0IHtcXHJcXG4gIEVWRU5UX01PVU5URUQsXFxyXFxuICBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxcXHJcXG4gIEVWRU5UX01PVkVELFxcclxcbiAgRVZFTlRfUkVGUkVTSCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBFVkVOVF9SRVNJWkVELFxcclxcbiAgRVZFTlRfU0hJRlRFRCxcXHJcXG4gIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYiJVUERBVEVELFxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IElETEUsIE1PVklORyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdGF0ZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyBGQURFLCBMT09QLCBTTElERSB9IGZyb20gJy4uLy4uL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQW55RnUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uLCBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zLCBUcmFuc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhYiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzLCBjZWlsLCBjbGFtcCwgaXNVbmRlZmluZWQsIHJlY3QsIHN0eWxlIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBmb3IgdGhlIE1vdmUgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgTW92ZUNvbXBvbmVudCBleHRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIG1vdmUoIGRlc3Q6IG51bWJlciwgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4OiBudW1iZXIsIHByZXY6IG51bWJlciwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbiApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZDtcXHJcXG4gIGp1bXAoIGluZGV4OiBudW1iZXIgKTogdm9pZDtcXHJcXG4gIHRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc2xhdGUoIHBvc2l0aW9uOiBudW1iZXIsIHByZXZlbnRMb29wPzogYm9vbGVhbiApOiB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pZDtcXHJcXG4gIHNoaWZ0KCBwb3NpdGlvbjogbnVtYmVyLCBiYWNrd2FyZHM6IGJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGNhbmNlbCgpOiB2b2lkO1xcclxcbiAgdG9JbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgoIHBvc2l0aW9uOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbiAgdG9Qb3NpdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4OiBudW1iZXIsIHRyaW1taW5nPzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgZ2V0UG9zaXRpb24oKTogbnVtYmVyO1xcclxcbiAgZ2V0TGltaXQoIG1heDogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW4gKTogbnVtYmVyO1xcclxcbiAgZXhjZWVkZWRMaW1pdCggbWF4PzogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW4gfCB1bmRlZmluZWQsIHBvc2l0aW9uPzogbnVtYmVyICk6IGJvb2xlYW47XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqIEBpbnRlcm5hbCAqL1xcclxcbiAgcmVwb3NpdGlvbigpOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyB0aGUgc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gQSBNb3ZlIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBmdW5jdGlvbiBNb3ZlKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogTW92ZUNvbXBvbmVudCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgY29uc3QgeyBvbiwgZW1pdCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIGNvbnN0IHsgc2V0IH0gPSBTcGxpZGUuc3RhdGU7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBzbGlkZVNpemUsIGdldFBhZGRpbmcsIHRvdGFsU2l6ZSwgbGlzdFNpemUsIHNsaWRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidTaXplIH0gPSBDb21wb25lbnRzLkxheW91dDtcXHJcXG4gIGNvbnN0IHsgcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9yaWVudCB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0LCB0cmFjayB9ID0gQ29tcG9uZW50cy5FbGVtZW50cztcXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEhvbGRzIHRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGxldCBUcmFuc2l0aW9uOiBUcmFuc2l0aW9uQ29tcG9uZW50O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50cy5UcmFuc2l0aW9uO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTlRfVVBEQVRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1JFRlJFU0ggXSwgcmVwb3NpdGlvbiApO1xcclxcbiAgfVxcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogUmVwb3NpdGlvbnMgdGhlIHNsaWRlci5cXHJcXG4gICAqIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIERvIG5vdCBjYWxsIGBjYW5jZWwoKWAgaGVyZSBiZWNhdXNlIExhenlMb2FkIG1heSBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCByZXNpemUgd2hpbGUgdHJhbnNpdGlvbmluZy5cXHJcXG4gICAqIC0gaU9TIFNhZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmkgZW1pdHMgd2luZG93IHJlc2l6ZSBldmVudCB3aGlsZSB0aGUgdXNlciBzd2lwZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzbGlkZXIgYmVjYXVzZSBvZiB0aGUgYm90dG9tIGJhci5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIHJlcG9zaXRpb24oKTogdm9pZCB7XFxyXFxuICAgIGlmICggISAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50cy5Db250cm9sbGVyLmlzQnVzeSgpICkge1xcclxcbiAgICAgIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzLlNjcm9sbC5jYW5jZWwoKTtcXHJcXG4gICAgICBqdW1wKCBTcGxpZGUuaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4ICk7XFxyXFxuICAgICAgQ29tcG9uZW50cy5TbGlkZXMudXBkYXRlKCk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE1vdmVzIHRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVyIHRvIHRoZSBkZXN0IGluZGV4IHdpdGggdGhlIFRyYW5zaXRpb24gY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGVzdCAgICAgLSBBIGRlc3RpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbiBpbmRleCB0byBnbyB0bywgaW5jbHVkaW5nIGNsb25lcycuXFxyXFxuICAgKiBAcCIKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIGluZGV4ICAgIC0gQSBzbGlkZSBpbmRleC5cXHJcXG4gICAqIEBwYXJhbSBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldiAgICAgLSBBIHByZXZpb3VzIGluZGV4LlxcclxcbiAgICogQHBhcmFtIGNhbGxiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjayAtIE9wdGlvbmFsLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgdHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zaXRpb24gZW5kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW92ZSggZGVzdDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciwgaW5kZXg6IG51bWJlciwgcHJldjogbnVtYmVyLCBjYWxsYmFjaz86IEFueScKICAgICAgICAgICAgICAgICAgICAgICAgYidGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBkZXN0ICE9PSBpbmRleCAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FuU2hpZnQoIGRlc3QgPiBwcmV2ICkgKSB7XFxyXFxuICAgICAgY2FuY2VsKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIHRyYW5zbGF0ZSggc2hpZnQoIGdldFBvc2l0aW9uKCksIGRlc3QgPiBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndiApLCB0cnVlICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgc2V0KCBNT1ZJTkcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICAgIGVtaXQoIEVWRU5UX01PVkUsIGluZGV4LCBwcmV2LCBkZXN0ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICBUcmFuc2l0aW9uLnN0YXJ0KCBpbmRleCwgKCkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBzZXQoIElETEUgKTtcXHJcXG4gICAgICBlbWl0KCBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIGluZGV4LCBwcmV2LCBkZXN0ICk7XFxyXFxuICAgICAgY2FsbGJhY2sgJiYgY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxiYWNrKCk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEp1bXBzIHRvIHRoZSBzbGlkZSBhdCB0aGUgc3BlY2lmaWVkIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiBpbmRleCB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInanVtcCB0by5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24ganVtcCggaW5kZXg6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgKTogdm9pZCB7XFxyXFxuICAgIHRyYW5zbGF0ZSggdG9Qb3NpdGlvbiggaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4LCB0cnVlICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHRoZSBzbGlkZXIgdG8gdGhlIHByb3ZpZGVkIHBvc2l0aW9uLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gcG9zaXRpb24gICAgLSBUaGUgcG9zaXRpb24gdG8gbW92ZSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKiBAcGFyYW0gcHJldmVudExvb3AgLSBPcHRpb25hbC4gSWYgYHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlYCwgc2V0cyB0aGUgcHJvdmlkZWQgcG9zaXRpb24gYXMgaXMuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiB0cmFuc2xhdGUoIHBvc2l0aW9uOiBudW1iZXIsIHByZXZlbnRMb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncD86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIGlmICggISBTcGxpZGUuaXMoIEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQURFICkgKSB7XFxyXFxuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBwcmV2ZW50TG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3AgPyBwb3NpdGlvbiA6IGxvb3AoIHBvc2l0aW9uICk7XFxyXFxuICAgICAgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCBsaXN0LCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSR7IHJlc29sdmUoICdYJyApIH0oJCIKICAgICAgICAgICAgICAgICAgICAgICAgYid7IGRlc3RpbmF0aW9uIH1weClgICk7XFxyXFxuICAgICAgcG9zaXRpb24gIT09IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW5hdGlvbiAmJiBlbWl0KCBFVkVOVF9TSElGVEVEICk7XFxyXFxuICAgIH1cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExvb3BzIHRoZSBwcm92aWRlZCBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gaWYgaXQgZXhjZWVkcyBib3VuZHMgKGxpbWl0IGluZGljZXMpLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBBIHBvc2l0aW9uIHRvIGxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsb29wKCBwb3NpdGlvbjogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciApOiBudW1iZXIge1xcclxcbiAgICBpZiAoIFNwbGlkZS5pcyggTE9PUCApICkge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBjb25zdCBpbmRleCAgICAgICA9IHRvSW5kZXgoIHBvc2l0aW9uICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIGNvbnN0IGV4Y2VlZGVkTWF4ID0gaW5kZXggPiBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5Db250cm9sbGVyLmdldEVuZCgpO1xcclxcbiAgICAgIGNvbnN0IGV4Y2VlZGVkTWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IGluZGV4IDwgMDtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGV4Y2VlZGVkTWluIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlZWRlZE1heCApIHtcXHJcXG4gICAgICAgIHBvc2l0aW9uID0gc2hpZnQoIHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiwgZXhjZWVkZWRNYXggKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIHJldHVybiBwb3NpdGlvbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEFkZHMgb3Igc3VidHJhY3RzIHRoZSBzbGlkZXIgd2lkdGggdG8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBwcm92aWRlZCBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uICAtIEEgcG9zaXRpb24gdG8gc2hpZnQuXFxyXFxuICAgKiBAcGFyYW0gYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcyAtIERldGVybWluZXMgd2hldGhlciB0byBzaGlmdCB0aGUgc2xpZGVyIGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrd2FyZHMgb3IgZm9yd2FyZHMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoaWZ0ZWQgcG9zaXRpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNoaWZ0KCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zaXRpb246IG51bWJlciwgYmFja3dhcmRzOiBib29sZWFuICk6IG51bWJlciB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbWl0KCBiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dhcmRzICk7XFxyXFxuICAgIGNvbnN0IHNpemUgICA9IHNsaWRlclNpemUoKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBvc2l0aW9uIC09IG9yaWVudCggc2l6ZSAqICggY2VpbCggYWJzKCBleGNlc3MgKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyBzaXplICkgfHwgMSApICkgKiAoIGJhY2t3YXJkcyA/IDEgOiAtMSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHBvc2l0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQ2FuY2VscyB0cmFuc2l0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FuY2VsKCk6IHZvaWQge1xcclxcbiAgICB0cmFuc2xhdGUoIGdldFBvc2l0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlICk7XFxyXFxuICAgIFRyYW5zaXRpb24uY2FuY2VsKCk7XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCB0byB0aGUgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAtIEEgcG9zaXRpb24gdG8gY29udmVydC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBUaGUgY2xvc2VzdCBpbmRleCB0byB0aGUgcG9zaXRpb24uXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBmdW5jdGlvbiB0b0luZGV4KCBwb3NpdGlvbjogbnVtYmVyICk6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIge1xcclxcbiAgICBjb25zdCBTbGlkZXMgPSBDb21wb25lbnRzLlNsaWRlcy5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCk7XFxyXFxuXFxyXFxuICAgIGxldCBpbmRleCAgICAgICA9IDA7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXQgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcXHJcXG5cXHJcXG4gICAgZm9yICggbGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpID0gMDsgaSA8IFNsaWRlcy5sZW5ndGg7IGkrKyApIHtcXHJcXG4gICAgICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgc2xpZGVJbmRleCA9IFNsaWRlc1sgaSBdLmluZGV4O1xcclxcbiAgICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXN0YW5jZSAgID0gYWJzKCB0b1Bvc2l0aW9uKCBzbGlkZUluZGV4LCB0cnVlICkgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zaXRpb24gKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGRpc3RhbmNlIDw9IG1pbkRpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YW5jZSApIHtcXHJcXG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgaW5kZXggICAgICAgPSBzbGlkZUluZGV4O1xcclxcbiAgICAgIH0gZWxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uge1xcclxcbiAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICByZXR1cm4gaW5kZXg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBDb252ZXJ0cyB0aGUgc2xpZGUgaW5kZXggdG8gdGhlIHBvc2l0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggICAgLSBBbiBpbmRleCB0byBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udmVydC5cXHJcXG4gICAqIEBwYXJhbSB0cmltbWluZyAtIE9wdGlvbmFsLiBXaGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlciB0byB0cmltIGVkZ2Ugc3BhY2VzIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQHJldHVybiBUaGUgcG9zaXRpb24gY29ycmVzcG9uZGluZyB3aXRoIHRoZSBpbmRleC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvUG9zaXRpb24oIGluZGV4OiBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmltbWluZz86IGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgcG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uID0gb3JpZW50KCB0b3RhbFNpemUoIGluZGV4IC0gMSApIC0gb2Zmc2V0KCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXggKSApO1xcclxcbiAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKCBwb3NpdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA6IHBvc2l0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBUaGUgcG9zaXRpb24gb2YgdGhlIGxpc3QgZWxlbWVudC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCk6IG51bWJlciB7XFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCBsZWZ0ID0gcmVzb2x2ZSggJ2xlZnQnICk7XFxyXFxuICAgIHJldHVybiByZWN0KCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdCApWyBsZWZ0IF0gLSByZWN0KCB0cmFjayApWyBsZWZ0IF0gKyBvcmllbnQoIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidQYWRkaW5nKCBmYWxzZSApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBUcmltcyBzcGFjZXMgb24gdGhlIGVkZ2Ugb2YgdGhlIHNsaWRlci5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIHBvc2l0aW9uIC0gQSBwb3NpdGlvbiB0byB0cmltJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgdHJpbW1lZCBwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRyaW0oIHBvc2l0aW9uOiBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlciB7XFxyXFxuICAgIGlmICggb3B0aW9ucy50cmltU3BhY2UgJiYgU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5pcyggU0xJREUgKSApIHtcXHJcXG4gICAgICBwb3NpdGlvbiA9IGNsYW1wKCBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24sIDAsIG9yaWVudCggc2xpZGVyU2l6ZSggdHJ1ZSApIC0gbGlzdFNpemUoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBwb3NpdGlvbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW1vdW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEFuIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb2Zmc2V0KCBpbmRleDogbnVtYmVyICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBudW1iZXIge1xcclxcbiAgICBjb25zdCB7IGZvY3VzIH0gPSBvcHRpb25zO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgcmV0dXJuIGZvY3VzID09PSAnY2VudGVyJyA/ICggbGlzdFNpemUoKSAtIHNsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1NpemUoIGluZGV4LCB0cnVlICkgKSAvIDIgOiArZm9jdXMgKiBzbGlkZVNpemUoIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBsaW1pdCBudW1iZXIgdGhhdCB0aGUgc2xpZGVyIGNhbiBtb3ZlIHRvLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gbWF4IC0gRGV0ZXJtaW5lcyB3aGV0aGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0byByZXR1cm4gdGhlIG1heGltdW0gb3IgbWluaW11bSBsaW1pdC5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHJldHVybiBUaGUgYm9yZGVyIG51bWJlci5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGdldExpbWl0KCBtYXg6IGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB0b1Bvc2l0aW9uKCBtYXggPyBDb21wb25lbnRzLkNvbnRyb2xsZXIuZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldEVuZCgpIDogMCwgISEgb3B0aW9ucy50cmltU3BhY2UgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGVyZSBpcyBlbm91Z2ggd2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvIHNoaWZ0IHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrd2FyZHMgLSBgdHJ1ZWAgZm9yIGNoZWNraW5nIGJhY2t3YXJkcywgb3IgYGZhbHNlYCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIGRvaW5nIGZvcndhcmRzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgc2xpZGVyIGNhbiBiZSBzaGlmdGVkIGZvciB0aGUgc3BlY2lmaWVkIGRpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY2FuU2hpZnQoIGJhY2t3YXJkczogYm9vbGVhbiApOiBib29sZWFuIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGNvbnN0IHNoaWZ0ZWQgPSBvcmllbnQoIHNoaWZ0KCBnZXRQb3NpdGlvbigpLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmFja3dhcmRzICkgKTtcXHJcXG4gICAgcmV0dXJuIGJhY2t3YXJkc1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IHNoaWZ0ZWQgPj0gMFxcclxcbiAgICAgIDogc2hpZnRlZCA8PSBsaXN0WyByZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZSggJ3Njcm9sbFdpZHRoJyApIF0gLSByZWN0KCB0cmFjayApWyByZXNvbHZlKCAnd2lkIgogICAgICAgICAgICAgICAgICAgICAgICBiInRoJyApIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIHByb3ZpZGVkIHBvc2l0aW9uIGV4Y2VlZHMgdGhlIG1pbmltdW0gb3IgbWF4aScKICAgICAgICAgICAgICAgICAgICAgICAgYidtdW0gbGltaXQgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBtYXggICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLSBPcHRpb25hbC4gYHRydWVgIGZvciB0ZXN0aW5nIG1heCwgYGZhbHNlYCBmb3IgbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgYW5kIGB1bmRlZmluZWRgIGZvciBib3RoLlxcclxcbiAgICogQHBhcmFtIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAtIE9wdGlvbmFsLiBBIHBvc2l0aW9uIHRvIHRlc3QuIElmIG9taXR0ZWQsIHRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyB0aGUgY3VycmVudCBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBgdHJ1ZWAgaWYgdGhlIHBvc2l0aW9uIGV4Y2VlZHMgdGhlIGxpbWl0LCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGV4Y2VlZGVkTGltaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBtYXg/OiBib29sZWFuIHwgdW5kZWZpbmVkLCBwb3NpdGlvbj86IG51bWJlciApOiBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vbGVhbiB7XFxyXFxuICAgIHBvc2l0aW9uID0gaXNVbmRlZmluZWQoIHBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApID8gZ2V0UG9zaXRpb24oKSA6IHBvc2l0aW9uO1xcclxcbiAgICBjb25zdCBleGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkZWRNaW4gPSBtYXggIT09IHRydWUgJiYgb3JpZW50KCBwb3NpdGlvbiApIDwgb3JpZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggZ2V0TGltaXQoIGZhbHNlICkgKTtcXHJcXG4gICAgY29uc3QgZXhjZWVkZWRNYXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbWF4ICE9PSBmYWxzZSAmJiBvcmllbnQoIHBvc2l0aW9uICkgPiBvcmllbnQoIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMaW1pdCggdHJ1ZSApICk7XFxyXFxuICAgIHJldHVybiBleGNlZWRlZE1pbiB8fCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWVkZWRNYXg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQsXFxyXFxuICAgIG1vdmUsXFxyXFxuICAgIGp1bXAsXFxyXFxuICAgIHRyYW5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhdGUsXFxyXFxuICAgIHNoaWZ0LFxcclxcbiAgICBjYW5jZWwsXFxyXFxuICAgIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4LFxcclxcbiAgICB0b1Bvc2l0aW9uLFxcclxcbiAgICBnZXRQb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIGdldExpbWl0LFxcclxcbiAgICBleGNlZWRlZExpbWl0LFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVwb3NpdGlvbixcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfUkVTSVpFJwogICAgICAgICAgICAgICAgICAgICAgICBiIkQsIEVWRU5UX1VQREFURUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgTU9WSU5HLCBTQ1JPTExJTkcgfSBmcm9tICcuLi8uLi9jbyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuc3RhbnRzL3N0YXRlcyc7XFxyXFxuaW1wb3J0IHsgTE9PUCwgU0xJREUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RhbnRzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBBbnlGdW5jdGlvbiwgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9JwogICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHksIGFwcHJveGltIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZWx5RXF1YWwsIGJldHdlZW4sIGNsYW1wLCBmbG9vciwgaXNTdHJpbmcsIGlzVW5kZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5lZCwgbWluIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQ29udHJvbGxlciBjb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBpbnRlcmZhY2UgQ29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IHtcXHJcXG4gIGdvKCBjb250cm9sOiBudW1iZXIgfCBzdHJpbmcsIGFsbG93U2FtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VJbmRleD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RnVuY3Rpb24gKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBzY3JvbGwoIGRlc3RpbmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uPzogbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RnVuY3Rpb24gKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q7XFxyXFxuICBnZXROZXh0KCBkZXN0aW5hdGlvbj86IGJvb2xlYW4gKTogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIGdldFByZXYoIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZ2V0RW5kKCk6IG51bWJlcjtcXHJcXG4gIHNldEluZGV4KCBpbmRleDogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciApOiB2b2lkO1xcclxcbiAgZ2V0SW5kZXgoIHByZXY/OiBib29sZWFuICk6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXI7XFxyXFxuICB0b0luZGV4KCBwYWdlOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRvUGFnZSggaW5kZXg6IG51bWJlciApOiBudW1iZXI7XFxyXFxuICB0b0Rlc3QoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvbjogbnVtYmVyICk6IG51bWJlcjtcXHJcXG4gIGhhc0ZvY3VzKCk6IGJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWFuO1xcclxcbiAgaXNCdXN5KCk6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKiogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcm5hbCAqL1xcclxcbiAgZ2V0QWRqYWNlbnQoIHByZXY6IGJvb2xlYW4sIGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW5hdGlvbj86IGJvb2xlYW4gKTogbnVtYmVyO1xcclxcbn1cXHJcXG5cXHJcXG4vKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgY29udHJvbGxpbmcgdGhlIHNsaWRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENvbnRyb2xsZXIgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIENvbnRyb2xsZXIoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBDb250cm9sbGVyQ29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICBjb25zdCB7IG9uLCBlbWl0IH0gPSBFdmVudEludGVyZmFjZSggU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSApO1xcclxcbiAgY29uc3QgeyBNb3ZlIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgZ2V0UG9zaXRpb24sIGdldExpbWl0LCB0b1Bvc2l0aW9uIH0gPSBNb3ZlOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGNvbnN0IHsgaXNFbm91Z2gsIGdldExlbmd0aCB9ID0gQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicuU2xpZGVzO1xcclxcbiAgY29uc3QgeyBvbWl0RW5kIH0gPSBvcHRpb25zO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGlzTG9vcCAgPSBTcGxpZGUuaXMoIExPT1AgKTtcXHJcXG4gIGNvbnN0IGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlID0gU3BsaWRlLmlzKCBTTElERSApO1xcclxcbiAgY29uc3QgZ2V0TmV4dCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHBseSggZ2V0QWRqYWNlbnQsIGZhbHNlICk7XFxyXFxuICBjb25zdCBnZXRQcmV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGFwcGx5KCBnZXRBZGphY2VudCwgdHJ1ZSApO1xcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhlIGN1cnJlbnQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInckluZGV4ID0gb3B0aW9ucy5zdGFydCB8fCAwO1xcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogVGhlIGxhdGVzdCBlbmQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkSW5kZXg6IG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid2aW91cyBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXZJbmRleCA9IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBsYXRlc3QgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBzbGlkZUNvdW50OiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwZXJNb3ZlOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCB2YWx1ZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGxldCBwZXJQYWdlOiBudW1iZXI7XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluaXQoKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFU0gsIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEIF0sIGluaXQgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKCBFVkVOVF9SRVNJWkVELCBvblJlc2l6ZWQgKTtcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHNvbWUgcGFyYW1ldGVycy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBOZWVkcyB0byBjaGVjayB0aGUgbnVtYmVyIG9mIHNsaWRlcyBzaW5jZSB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1cnJlbnQgaW5kZXggbWF5IGJlIG91dCBvZiB0aGUgcmFuZ2UgYWZ0ZXIgcmVmcmVzaC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBUaGUgcHJvY2VzcyBvcmRlciBtdXN0IGJlIEVsZW1lbnRzIC0+IENvbnRybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGVyIC0+IE1vdmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGluaXQoKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Qge1xcclxcbiAgICBzbGlkZUNvdW50ID0gZ2V0TGVuZ3RoKCB0cnVlICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBwZXJNb3ZlICAgID0gb3B0aW9ucy5wZXJNb3ZlO1xcclxcbiAgICBwZXJQYWdlICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICA9IG9wdGlvbnMucGVyUGFnZTtcXHJcXG4gICAgZW5kSW5kZXggICA9IGdldEVuZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG5cXHJcXG4gICAgY29uc3QgaW5kZXggPSBjbGFtcCggY3VyckluZGV4LCAwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb21pdEVuZCA/IGVuZEluZGV4IDogc2xpZGVDb3VudCAtIDEgKTtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmICggaW5kZXggIT09IGN1cnJJbmRleCApIHtcXHJcXG4gICAgICBjdXJySW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gaW5kZXg7XFxyXFxuICAgICAgTW92ZS5yZXBvc2l0aW9uKCk7XFxyXFxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmlld3BvcnQgd2lkdGggaXMgY2hhbmdlZC5cXHJcXG4gICAqIFRoZSBlbmQgaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4IGNhbiBjaGFuZ2UgaWYgYGF1dG9XaWR0aGAgb3IgYGZpeGVkV2lkdGhgIGlzIGVuYWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvblJlc2l6ZWQoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBpZiAoIGVuZEluZGV4ICE9PSBnZXRFbmQoKSApIHtcXHJcXG4gICAgICBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCggRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTW92ZXMgdGhlIHNsaWRlciBieSB0aGUgY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb2wgcGF0dGVybi5cXHJcXG4gICAqXFxyXFxuICAgKiBAc2VlIGBTcGxpZGUjZ28oKWBcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgICAgICAgIC0gQSBjb250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCBwYXR0ZXJuLlxcclxcbiAgICogQHBhcmFtIGFsbG93U2FtZUluZGV4IC0gT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYWxsb3cgZ29pbmcgdG8gdGhlIGN1cnJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGluZGV4IG9yIG5vdC5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAgICAgICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25hbC4gQSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGFmdGVyIHRyYW5zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGVuZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdvKCBjb250cm9sOiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyIHwgc3RyaW5nLCBhbGxvd1NhbWVJbmRleD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQScKICAgICAgICAgICAgICAgICAgICAgICAgYidueUZ1bmN0aW9uICk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgaXNCdXN5KCkgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IGRlc3QgID0gcGFyc2UoIGNvbnRyb2wgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgaW5kZXggPSBsb29wKCBkZXN0ICk7XFxyXFxuXFxyXFxuICAgICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXggPiAtMSAmJiAoIGFsbG93U2FtZUluZGV4IHx8IGluZGV4ICE9PSBjdXJySW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4ICkgKSB7XFxyXFxuICAgICAgICBzZXRJbmRleCggaW5kZXggKTtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlLm1vdmUoIGRlc3QsIGluZGV4LCBwcmV2SW5kZXgsIGNhbGxiYWNrICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogU2Nyb2xscyB0aGUgc2xpZGVyIHRvIHRoZSBzcGVjaWZpZWQgZGVzdGluYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHdpdGggdXBkYXRpbmcgaW5kaWNlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIGRlc3RpbmF0aW9uIC0gVGhlIHBvc2l0aW9uIHRvIHNjcm9sbCB0aGUgc2xpZGVyIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIEBwYXJhbSBkdXJhdGlvbiAgICAtIE9wdGlvbmFsLiBTcGVjaWZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHRoZSBzY3JvbGwgZHVyYXRpb24uXFxyXFxuICAgKiBAcGFyYW0gc25hcCAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc25hcCB0aGUgc2xpZGVyIHRvIHRoZSBjbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzdCBzbGlkZSBvciBub3QuXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgICAgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9uYWwuIEEgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciBzY3JvbGwgZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNjcm9sbCggZGVzdGluYXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInPzogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIENvbXBvbmVudHMuU2Nyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC5zY3JvbGwoIGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgKCkgPT4ge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBjb25zdCBpbmRleCA9IGxvb3AoIE1vdmUudG9JbmRleCggZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKCkgKSApO1xcclxcbiAgICAgIHNldEluZGV4KCBvbWl0RW5kID8gbWluKCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGVuZEluZGV4ICkgOiBpbmRleCApO1xcclxcbiAgICAgIGNhbGxiYWNrICYmIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaygpO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBQYXJzZXMgdGhlIGNvbnRyb2wgYW5kIHJldHVybnMgYSBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBIGNvbnRybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsIHBhdHRlcm4gdG8gcGFyc2UuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIGBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdGAgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHBhcnNlKCBjb250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDogbnVtYmVyIHwgc3RyaW5nICk6IG51bWJlciB7XFxyXFxuICAgIGxldCBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjdXJySW5kZXg7XFxyXFxuXFxyXFxuICAgIGlmICggaXNTdHJpbmcoIGNvbnRyb2wgKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSB7XFxyXFxuICAgICAgY29uc3QgWyAsIGluZGljYXRvciwgbnVtYmVyIF0gPSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudHJvbC5tYXRjaCggLyhbK1xcXFwtPD5dKShcXFxcZCspPy8gKSB8fCBbXTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJuXFxyXFxuICAgICAgaWYgKCBpbmRpY2F0b3IgPT09ICcrJyB8fCBpbmRpY2F0b3IgPSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI9PSAnLScgKSB7XFxyXFxuICAgICAgICBpbmRleCA9IGNvbXB1dGVEZXN0SW5kZXgoICIKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXJySW5kZXggKyArYCR7IGluZGljYXRvciB9JHsgK251bWJlciB8fCAxIH1gLCBjdXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiIkluZGV4ICk7XFxyXFxuICAgICAgfSBlbHNlIGlmICggaW5kaWNhdG9yID09PSAnPicgIgogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgICAgaW5kZXggPSBudW1iZXIgPyB0b0luZGV4KCArbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApIDogZ2V0TmV4dCggdHJ1ZSApO1xcclxcbiAgICAgIH0gZWxzZSBpZiAoIGluZGljJwogICAgICAgICAgICAgICAgICAgICAgICBiImF0b3IgPT09ICc8JyApIHtcXHJcXG4gICAgICAgIGluZGV4ID0gZ2V0UHJldiggdHJ1IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKCBjb250cm9sLCAwLCBlbmRJbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gaW5kZXg7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGFuIGFkamFjZW50IGRlc3RpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAaW50ZXJuYWxcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIHByZXYgICAgICAgIC0gRGV0ZXJtaW5lcyB3aGV0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0byByZXR1cm4gYSBwcmV2aW91cyBvciBuZXh0IGluZGV4LlxcclxcbiAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBkZXN0aW5hdGlvbiAtIE9wdGlvbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCBhIGRlc3RpbmF0aW9uIGluZGV4IG9yIGEgc2xpZGUgb25lLlxcclxcbiAgICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcmV0dXJuIEFuIGFkamFjZW50IGluZGV4IGlmIGF2YWlsYWJsZSwgb3Igb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVyd2lzZSBgLTFgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRBZGphY2VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHByZXY6IGJvb2xlYW4sIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXIge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgY29uc3QgbnVtYmVyID0gcGVyTW92ZSB8fCAoIGhhc0ZvY3VzKCkgPyAxIDogcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlclBhZ2UgKTtcXHJcXG4gICAgY29uc3QgZGVzdCAgID0gY29tcHV0ZURlc3RJbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGN1cnJJbmRleCArIG51bWJlciAqICggcHJldiA/IC0xIDogMSApLCBjdXJySW5kZXgsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhICggcGVyTW92ZSB8fCBoYXNGb2N1cygpICkgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA9PT0gLTEgJiYgaXNTbGlkZSApIHtcXHJcXG4gICAgICBpZiAoICEgYXBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGltYXRlbHlFcXVhbCggZ2V0UG9zaXRpb24oKSwgZ2V0TGltaXQoICEgcHJldiApLCAxICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpICkge1xcclxcbiAgICAgICAgcmV0dXJuIHByZXYgPyAwIDogZW5kSW5kZXg7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdGluYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uID8gZGVzdCA6IGxvb3AoIGRlc3QgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIENvbnZlcnRzIHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0byB0aGUgdmFsaWQgb25lLlxcclxcbiAgICogLSBJZiB0aGUgYG1vdmVgIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gaXMgYHRydWVgLCBmaW5kcyB0aGUgZGVzdCBpbmRleCB3aG9zZSBwb3NpdGlvbiBpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlmZmVyZW50IHdpdGggdGhlIGN1cnJlbnQgb25lLlxcclxcbiAgICogLSBUaGlzIG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkgcmV0dXJuIGNsb25lIGluZGljZXMgaWYgdGhlIGVkaXRvciBpcyB0aGUgbG9vcCBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSxcXHJcXG4gICAqICAgb3IgYC0xYCBpZiB0aGVyZSBpcyBubyBzbGlkZSB0byBnbycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKiAtIFRoZXJlIGFyZSBzdGlsbCBzbGlkZXMgd2hlcmUgdGhlIGNhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlbCBjYW4gZ28gaWYgYm9yZGVycyBhcmUgYmV0d2VlbiBgZnJvbWAgYW5kIGBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AuXFxyXFxuICAgKiAtIElmIGBmb2N1c2AgaXMgYXZhaWxhYmxlLCBuZWVkcyB0byBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsY3VsYXRlIHRoZSBkZXN0IGluZGV4IGV2ZW4gaWYgdGhlcmUgYXJlIGVub3VnaCBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyIG9mIHNsaWRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGVzdCAgICAgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gZicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb20gICAgIC0gQSBiYXNlIGluZGV4LlxcclxcbiAgICogQHBhcmFtIHNuYXBQYWdlICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIE9wdGlvbmFsLiBXaGV0aGVyIHRvIHNuYXAgYSBwYWdlIG9yIG5vdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBBIGNvbnZlcnRlZCBkZXN0aW5hdGlvbiBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGluY2x1ZGluZyBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlRGVzdEluZGV4KCBkZXN0OiBudW1iZXIsIGZyb206IG51bWJlciwgc25hcFBhZ2U/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYm9vbGVhbiApOiBudW1iZXIge1xcclxcbiAgICBpZiAoIGlzRW5vdWdoKCkgfHwgaGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0ZvY3VzKCkgKSB7XFxyXFxuICAgICAgY29uc3QgaW5kZXggPSBjb21wdXRlTW92YWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVEZXN0SW5kZXgoIGRlc3QgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGluZGV4ICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCApIHtcXHJcXG4gICAgICAgIGZyb20gICAgID0gZGVzdDtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0ICAgICA9IGluZGV4O1xcclxcbiAgICAgICAgc25hcFBhZ2UgPSBmYWxzZTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGlmICggZGVzdCA8IDAgfHwgZGVzdCA+ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRJbmRleCApIHtcXHJcXG4gICAgICAgIGlmICggISBwZXJNb3ZlICYmICggYmV0dycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZW4oIDAsIGRlc3QsIGZyb20sIHRydWUgKSB8fCBiZXR3ZWVuKCBlbmRJbmRleCwgZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20sIGRlc3QsIHRydWUgKSApICkge1xcclxcbiAgICAgICAgICBkZXN0ID0gdG9JbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3goIHRvUGFnZSggZGVzdCApICk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKCBpc0xvb3AgKSB7XFxyXFxuICAgICAgICAgICAgZGVzdCA9IHNuYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUGFnZVxcclxcbiAgICAgICAgICAgICAgPyBkZXN0IDwgMCA/IC0gKCBzbGlkZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCAlIHBlclBhZ2UgfHwgcGVyUGFnZSApIDogc2xpZGVDb3VudFxcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIDogZGVzdDtcXHJcXG4gICAgICAgICAgfSBlbHNlIGlmICggb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kICkge1xcclxcbiAgICAgICAgICAgIGRlc3QgPSBkZXN0IDwgMCA/IGVuZEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCA6IDA7XFxyXFxuICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3QgPSAtMTtcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfVxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9IGVsc2Uge1xcclxcbiAgICAgICAgaWYgKCBzbmFwUGFnZSAmJiBkZXN0ICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJvbSApIHtcXHJcXG4gICAgICAgICAgZGVzdCA9IHRvSW5kZXgoIHRvUGFnZSggZicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb20gKSArICggZGVzdCA8IGZyb20gPyAtMSA6IDEgKSApO1xcclxcbiAgICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZGVzdCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYictMTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdDtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEZpbmRzIHRoZSBkZXN0IGluZGV4IHdob3NlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCB0aGUgY3VycmVudCBvbmUgZm9yIGB0cmltJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNwYWNlOiAnbW92ZSdgLlxcclxcbiAgICogVGhpcyBjYW4gYmUgbmVnYXRpdmUgb3IgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2dyZWF0ZXIgdGhhbiBgbGVuZ3RoIC0gMWAuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBkZXN0IC0gQSBkZXN0IGluZGV4LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY29tcHV0ZU1vdmFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlRGVzdEluZGV4KCBkZXN0OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiggaXNTbGlkZSAmJiBvcHRpb25zLnRyaW1TcGFjZSA9PT0gJ21vdmUnICYmIGRlc3QgIT0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjdXJySW5kZXggKSB7XFxyXFxuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oKTtcXHJcXG5cXHJcXG4gICAgICB3aGlsZSAoIHBvc2l0aW9uID09PSB0b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiggZGVzdCwgdHJ1ZSApICYmIGJldHdlZW4oIGRlc3QsIDAsIFNwbGlkZS5sZW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIC0gMSwgISBvcHRpb25zLnJld2luZCApICkge1xcclxcbiAgICAgICAgZGVzdCA8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjdXJySW5kZXggPyAtLWRlc3QgOiArK2Rlc3Q7XFxyXFxuICAgICAgfVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIExvb3BzIHRoZSBwcm92aWRlZCBpbmRleCBvbmx5IGluIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgbG9vcCBtb2RlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEFuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCB0byBsb29wLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBsb29wZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsb29wKCBpbmRleDogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gaXNMb29wID8gKCBpbmRleCArIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZUNvdW50ICkgJSBzbGlkZUNvdW50IHx8IDAgOiBpbmRleDtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGVuZCBpbmRleCB3aGVyZSB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHNsaWRlciBjYW4gZ28uXFxyXFxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIgaGFzIDEwIHNsaWRlcyBhbmQgdGhlIGBwZXJQYWdlYCBvcHRpb24gaXMgMycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgKiB0aGUgc2xpZGVyIGNhbiBnbyB0byB0aGUgc2xpZGUgOCAodGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCBpcyA3KS5cXHJcXG4gICAqIElmIHRoZSBgb21pdEVuZGAgb3B0aW9uIGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdmFpbGFibGUsIGNvbXB1dGVzIHRoZSBpbmRleCBmcm9tIHRoZSBzbGlkZSBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBbiBlbmQgaW5kZXguXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRFbmQoKTogbnVtYmVyIHtcXHJcXG4gICAgbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBlbmQgPSBzbGlkZUNvdW50IC0gKCBoYXNGb2N1cygpIHx8ICggaXNMb29wICYmIHBlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlICkgPyAxIDogcGVyUGFnZSApO1xcclxcblxcclxcbiAgICB3aGlsZSAoIG9taXRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kICYmIGVuZC0tID4gMCApIHtcXHJcXG4gICAgICBpZiAoIHRvUG9zaXRpb24oIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUNvdW50IC0gMSwgdHJ1ZSApICE9PSB0b1Bvc2l0aW9uKCBlbmQsIHRydWUgKSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgICBlbmQrKztcXHJcXG4gICAgICAgIGJyZWFrO1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIGNsYW1wKCBlbmQsIDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzbGlkZUNvdW50IC0gMSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQ29udmVydHMgdGhlIHBhZ2UgaW5kZXggdG8gdGhlIHNsaWRlIGluZGV4LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcGFnZSAtIEEgcGFnZSBpbmRleCB0byBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudmVydC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgc2xpZGUgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB0b0luZGV4KCBwYWdlOiBudW1iZXIgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBjbGFtcCggaGFzRm9jdXMoKSA/IHBhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlIDogcGVyUGFnZSAqIHBhZ2UsIDAsIGVuZEluZGV4ICk7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb252ZXJ0cyB0aGUgc2xpZGUgaW5kZXggdG8gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBwYWdlIGluZGV4LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCB0byBjb252ZXJ0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdG9QYWdlKCBpbmRleDogbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gaGFzRm9jdXMoKVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA/IG1pbiggaW5kZXgsIGVuZEluZGV4IClcXHJcXG4gICAgICA6IGZsb29yKCAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCA+PSBlbmRJbmRleCA/IHNsaWRlQ291bnQgLSAxIDogaW5kZXggKSAvIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgZGVzdGluYXRpb24gcG9zaXRpb24gdG8gdGhlIGRlc3QgaW5kZXguXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIEEgcG9zaXRpb24gdG8gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnZlcnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIGRlc3QgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB0b0Rlc3QoIGRlc3RpbmF0aW9uOiBudScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IGNsb3Nlc3QgPSBNb3ZlLnRvSScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KCBkZXN0aW5hdGlvbiApO1xcclxcbiAgICByZXR1cm4gaXNTbGlkZSA/IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtcCggY2xvc2VzdCwgMCwgZW5kSW5kZXggKSA6IGNsb3Nlc3Q7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBTZXRzIGEgbmV3IGluZGV4IGFuZCByZXRhaW5zIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGQgb25lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEEgbmV3IGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleCB0byBzZXQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNldEluZGV4KCBpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3g6IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBpbmRleCAhPT0gY3VyckluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCApIHtcXHJcXG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJJbmRleCA9IGluZGV4O1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50L3ByZXZpb3VzIGluZGV4LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIE9wdGlvbmFsLiBXaGV0aGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0byByZXR1cm4gcHJldmlvdXMgaW5kZXggb3Igbm90LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZ2V0SW5kZXgoIHByZXY/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJbmRleDtcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBmb2N1cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uIGlzIGF2YWlsYWJsZSBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gYHRydWVgIGlmIHRoZSBzbGlkZXIgaGFzIHRoZSBmb2N1cyBvcHRpb24uXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBoYXNGb2N1cygpOiBib29sZWFuIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiAhIGlzVW5kZWZpbmVkKCBvcHRpb25zLmZvY3VzICkgfHwgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNOYXZpZ2F0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY2tzIGlmIHRoZSBzbGlkZXIgaXMgbW92aW5nL3Njcm9sbGluZyBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzbGlkZXIgY2FuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGlzQnVzeSgpOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIFNwbGlkZS5zdGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuaXMoIFsgTU9WSU5HLCBTQ1JPTExJTkcgXSApICYmICEhIG9wdGlvbnMud2FpdEZvclQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50LFxcclxcbiAgICBnbyxcXHJcXG4gICAgc2Nyb2xsLFxcclxcbiAgICBnZXROZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCxcXHJcXG4gICAgZ2V0UHJldixcXHJcXG4gICAgZ2V0QWRqYWNlbnQsXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBnZXRFbmQsXFxyXFxuICAgIHNldEluZGV4LFxcclxcbiAgICBnZXRJbmRleCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHRvSW5kZXgsXFxyXFxuICAgIHRvUGFnZSxcXHJcXG4gICAgdG9EZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxcXHJcXG4gICAgaGFzRm9jdXMsXFxyXFxuICAgIGlzQnVzeSxcXHJcXG4gIH07XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCJpbXBvcnQgeyBBTExfQVRUUklCVVRFUywgQVJJQV9DT05UUk9MUycKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIEFSSUFfTEFCRUwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IENMQVNTX0FSUk9XUyB9IGZyb20gJy4uLy4uL2NvbnN0YW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRU5UX0FSUk9XU19NT1VOVCIKICAgICAgICAgICAgICAgICAgICAgICAgYidFRCxcXHJcXG4gIEVWRU5UX0FSUk9XU19VUERBVEVELFxcclxcbiAgRVZFTlRfRU5EX0lOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RFWF9DSEFOR0VELFxcclxcbiAgRVZFTlRfTU9VTlRFRCxcXHJcXG4gIEVWRU5UX01PVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxcXHJcXG4gIEVWRU5UX1JFRlJFU0gsXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICBFVkVOVF9VUERBVEVELFxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2UiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW0iCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCB7XFxyXFxuICBhZGRDbGFzcyxcXHJcXG4gIGFwcGVuZCxcXHJcXG4gIGFwcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIGFzc2lnbixcXHJcXG4gIGJlZm9yZSxcXHJcXG4gIGNyZWF0ZSxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBkaXNwbGF5LFxcclxcbiAgcGFyc2VIdG1sLFxcclxcbiAgcmVtb3ZlLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJlbW92ZUF0dHJpYnV0ZSxcXHJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbiAgc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiInJpYnV0ZSxcXHJcXG59IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBQQVQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiSCwgU0laRSwgWE1MX05BTUVfU1BBQ0UgfSBmcm9tICcuL3BhdGgnO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQXJyb3dzIGNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGludGVyZmFjZSBBcnJvd3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICBhcnJvd3M6IHsgcHJldj86IEhUTUxCdXR0b25FbGVtZW50LCBuZXh0PycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IEhUTUxCdXR0b25FbGVtZW50IH07XFxyXFxuXFxyXFxuICAvKiogQGludGVybmFsICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgdXBkYXRlKCk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBUaGUgY29tcG9uZW50IGZvciBoYW5kbGluZyBwcmV2aW91cyBhbmQgbmV4dCBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3dzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gQW4gQXJyb3dzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBBcnJvd3MoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cywgb3B0aW9uczogT3B0aW9ucyApOiBBcnJvd3NDb21wb25lbnQge1xcclxcbiAgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHsgb24sIGJpbmQsIGVtaXQgfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBjbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcywgaTE4biB9ID0gb3B0aW9ucztcXHJcXG4gIGNvbnN0IHsgRWxlbWVudHMsIENvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm9sbGVyIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBhcnJvd3M6IHBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWhvbGRlciwgdHJhY2sgfSA9IEVsZW1lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogVGhlIHdyYXBwZXIgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHdyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGVyID0gcGxhY2Vob2xkZXI7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcHJldmlvdXMgYXJyb3cgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRWxlbWVudHMucHJldjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0IGFycm93IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBuZXh0ID0gRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLm5leHQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldGhlciB0aGUgY29tcG9uZW50IGNyZWF0ZXMgYXJyb3dzIG9yIHJldHJpZXZlZCBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgRE9NLlxcclxcbiAgICovXFxyXFxuICBsZXQgY3JlYXRlZDogYm9vbGVhbicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmaWVyIGNsYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAgICovXFxyXFxuICBsZXQgd3JhcHBlckNsYXNzZXM6IHN0cmluZzsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFuIG9iamVjdCB3aXRoIHByZXZpb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBhbmQgbmV4dCBhcnJvd3MuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IGFycm93czogQScKICAgICAgICAgICAgICAgICAgICAgICAgYiJycm93c0NvbXBvbmVudFsgJ2Fycm93cycgXSA9IHt9O1xcclxcblxcclxcbiAgLyoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0KCk7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVEVELCByZW1vdW50ICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZW1vdW50cyB0aGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVtb3VudCgpOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGRlc3Ryb3koKTtcXHJcXG4gICAgbW91bnQoKTtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgZW5hYmxlZCA9IG9wdGlvbnMuYXJyb3dzO1xcclxcblxcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBlbmFibGVkICYmICEgKCBwcmV2ICYmIG5leHQgKSApIHtcXHJcXG4gICAgICBjcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlQXJyb3dzKCk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKCBwcmV2ICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBuZXh0ICkge1xcclxcbiAgICAgIGFzc2lnbiggYXJyb3dzLCB7IHByZXYsIG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gKTtcXHJcXG4gICAgICBkaXNwbGF5KCB3cmFwcGVyLCBlbmFibGVkID8gJycgOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ25vbmUnICk7XFxyXFxuICAgICAgYWRkQ2xhc3MoIHdyYXBwZXIsICggd3JhcHBlckMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc2VzID0gYCR7IENMQVNTX0FSUk9XUyB9LS0keyBvcHRpb25zLmRpcmVjdGlvbiB9YCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcblxcclxcbiAgICAgIGlmICggZW5hYmxlZCApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBsaXN0ZW4oKTtcXHJcXG4gICAgICAgIHVwZGF0ZSgpO1xcclxcbiAgICAgICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZSggWyBwcmV2LCBuZXh0IF0sIEFSSUFfQ09OVFJPTFMsIHRyYWNrLmlkICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgICAgZW1pdCggRVZFTlRfQVJST1dTX01PVU5URUQsIHByZXYsIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0ICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgZXZlbnQuZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3koKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHdyYXBwZXIsIHdyYXBwZXJDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcyApO1xcclxcblxcclxcbiAgICBpZiAoIGNyZWF0ZWQgKSB7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZSggcGxhY2Vob2xkZXIgPyBbIHByZXYsIG5leHQgXSA6IHdyYXBwZXIgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgcHJldiA9IG5leHQgPSBudWxsO1xcclxcbiAgICB9IGVsc2Uge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICByZW1vdmVBdHRyaWJ1dGUoIFsgcHJldiwgbmV4dCBdLCBBTExfQVRUUklCVScKICAgICAgICAgICAgICAgICAgICAgICAgYidURVMgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogTGlzdGVucyB0byBzb21lIGV2ZW50cy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGxpc3RlbigpOiB2b2lkIHtcXHJcXG4gICAgb24oIFsgRVZFTlRfTU9VTlRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX01PVkVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRF9JTkRFWF9DSEFOR0VEIF0sIHVwZGF0ZSApO1xcclxcbiAgICBiaW5kKCBuZXh0LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ2NsaWNrJywgYXBwbHkoIGdvLCAnPicgKSApO1xcclxcbiAgICBiaW5kKCBwcmV2LCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ2NsaWNrJywgYXBwbHkoIGdvLCAnPCcgKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogVGhlIHdyYXBwZXIgZnVuY3Rpb24gb2YgQ29udHJvbGxlciMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ28oKS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29udHJvbCAtIFRoZSBjb250cicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbCBwYXR0ZXJuLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnbyggY29udHJvbDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZyApOiB2b2lkIHtcXHJcXG4gICAgQ29udHJvbGxlci5nbyggY29udHJvbCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ3JlYXRlIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3MgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBmdW5jdGlvbiBjcmVhdGVBcnJvd3MoKTogdm9pZCB7XFxyXFxuICAgIHdyYXBwZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJyID0gcGxhY2Vob2xkZXIgfHwgY3JlYXRlKCAnZGl2JywgY2xhc3Nlcy5hcnJvd3MgKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHByZXYgICAgPSBjcmVhdGVBcnJvdyggdHJ1ZSApO1xcclxcbiAgICBuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCAgICA9IGNyZWF0ZUFycm93KCBmYWxzZSApO1xcclxcbiAgICBjcmVhdGVkID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XFxyXFxuXFxyXFxuICAgIGFwcGVuZCggd3JhcHBlciwgWyBwcmV2LCBuZXh0IF0gKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICEgcGxhY2Vob2xkZXIgJiYgYmVmb3JlKCB3cmFwcGVyLCB0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ3JlYXRlcyBhbiBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jyb3cgYnV0dG9uLlxcclxcbiAgICogSW4gSUUsIEEgU1ZHIGVsZW1lbnQgaXMgZm9jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzYWJsZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIERldGVybWluZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHdoZXRoZXIgdG8gY3JlYXRlIGEgcHJldmlvdXMgb3IgbmV4dCBhcnJvdy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHJldHVybiBBIGNyZWF0ZWQgYnV0dG9uIGVsZW1lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJvdyggcHJldjogYm9vbGVhbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xcclxcbiAgICBjb25zdCBhcnJvdyA9IGA8YicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbiBjbGFzcz1cXCIkeyBjbGFzc2VzLmFycm93IH0gJHsgcHJldiA/IGNsYXNzZXMucCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXYgOiBjbGFzc2VzLm5leHQgfVxcIiB0eXBlPVxcImJ1dHRvblxcIj5gXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICtcXHRgPHN2ZyB4bWxucz1cXCIkeyBYTUxfTkFNRV9TUEFDRSB9XFwiIHZpZXdCb3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIjAgMCAkeyBTSVpFIH0gJHsgU0laRSB9XFwiIHdpZHRoPVxcIiR7IFNJWkUgfVxcIicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaGVpZ2h0PVxcIiR7IFNJWkUgfVxcIiBmb2N1c2FibGU9XFwiZmFsc2VcXCI+YFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICArIGA8cGF0aCBkPVxcIiR7IG9wdGlvbnMuYXJyb3dQYXRoIHx8IFBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RIIH1cXCIgLz5gO1xcclxcblxcclxcbiAgICByZXR1cm4gcGFyc2VIdG1sPEhUTUxCdXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uRWxlbWVudD4oIGFycm93ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBVcGRhdGVzIHN0YXR1cyBvZiBhcnJvd3MsIHN1Y2ggYXMgYGRpc2FibGVkYCBhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkIGBhcmlhLWxhYmVsYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdXBkYXRlKCk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2b2lkIHtcXHJcXG4gICAgaWYgKCBwcmV2ICYmIG5leHQgKSB7XFxyXFxuICAgICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGluZGV4ICAgICA9IFNwbGlkZS5pbmRleDtcXHJcXG4gICAgICBjb25zdCBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndkluZGV4ID0gQ29udHJvbGxlci5nZXRQcmV2KCk7XFxyXFxuICAgICAgY29uc3QgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRJbmRleCA9IENvbnRyb2xsZXIuZ2V0TmV4dCgpO1xcclxcbiAgICAgIGNvbnN0IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCA8IHByZXZJbmRleCA/IGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLmxhc3QgOiBpMThuLnByZXY7XFxyXFxuICAgICAgY29uc3QgbmV4dExhYmVsID0gbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHRJbmRleCA+IC0xICYmIGluZGV4ID4gbmV4dEluZGV4ID8gaTE4bi5maXJzdCA6IGkxJwogICAgICAgICAgICAgICAgICAgICAgICBiJzhuLm5leHQ7XFxyXFxuXFxyXFxuICAgICAgcHJldi5kaXNhYmxlZCA9IHByZXZJbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPCAwO1xcclxcbiAgICAgIG5leHQuZGlzYWJsZWQgPSBuZXh0SW5kZXggPCAwO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIHByZXYsIEFSSUFfTEFCRUwsIHByZXZMYScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZWwgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIG5leHQsIEFSSUFfTEFCRUwsICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXh0TGFiZWwgKTtcXHJcXG5cXHJcXG4gICAgICBlbWl0KCBFVkVOVF9BUlJPV1NfVVBEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FURUQsIHByZXYsIG5leHQsIHByZXZJbmRleCwgbmV4dEluZGV4ICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBhcnJvd3MsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gICAgdXBkYXRlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH07XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFRoZSBuYW1lc3BhY2UgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvciBTVkcgZWxlbWVudHMuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFhNTF9OQU1FJwogICAgICAgICAgICAgICAgICAgICAgICBiIl9TUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSBhcnJvdyBwYXRoLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgUEFUSCA9ICdtMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41IDE0LjYtMTQuNSAxNC41ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiI0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LjQtMTQuNi0xNC42eic7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFNWRyB3aWR0aCBhbmQgaGVpZ2h0LlxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgY29uc3QgU0laRSA9IDQwO1xcclxcbiIsImltcG9ydCB7IEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiIkNPTlRST0xTLCBBUklBX0xBQkVMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dHJpYnUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU19BQ1RJVkUgfSBmcm9tICcuLi8uLi9jb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBFVkVOVF9BVVRPUExBWSIKICAgICAgICAgICAgICAgICAgICAgICAgYidfUEFVU0UsXFxyXFxuICBFVkVOVF9BVVRPUExBWV9QTEFZLFxcclxcbiAgRVZFTlRfQVVUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09QTEFZX1BMQVlJTkcsXFxyXFxuICBFVkVOVF9NT1ZFLFxcclxcbiAgRVZFTlRfUkVGUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiU0gsXFxyXFxuICBFVkVOVF9TQ1JPTEwsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UsIFJlcXVlc3RJbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0ZXJ2YWwgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBnZXRBdHRyaWJ1dGUsIHNldEF0dHJpYnV0IgogICAgICAgICAgICAgICAgICAgICAgICBiImUsIHN0eWxlLCB0b2dnbGVDbGFzcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUgfSBmcm9tICcuL2NvbnN0YW50cyciCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQXV0b3BsYXkgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b3BsYXlDb21wb25lbnQgZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICBwbGF5KCk6IHZvaWQ7XFxyXFxuICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2UoKTogdm9pZDtcXHJcXG4gIGlzUGF1c2VkKCk6IGJvb2xlYW47XFxyXFxufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciBhdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGhhbmRsaW5nIGEgcHJvZ3Jlc3MgYmFyIGFuZCBhIHRvZ2dsZSBidXR0b24uXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3V0b3BsYXkgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIEF1dG9wbGF5KCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9wdGlvbnM6IE9wdGlvbnMgKTogQXV0b3BsYXlDb21wb25lbnQge1xcclxcbiAgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IHsgb24sIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjb25zdCBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbCggb3B0aW9ucy5pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2YWwsIFNwbGlkZS5nby5iaW5kKCBTcGxpZGUsICc+JyApLCBvbkFuaW1hdGlvbkZyYW1lIgogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgY29uc3QgeyBpc1BhdXNlZCB9ID0gaW50ZXJ2YWw7XFxyXFxuICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgeyBFbGVtZW50cywgRWxlbWVudHM6IHsgcm9vdCwgdG9nZ2xlIH0gfSA9IENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzO1xcclxcbiAgY29uc3QgeyBhdXRvcGxheSB9ID0gb3B0aW9ucztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzbGlkZXIgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGhvdmVyZWQgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgaG92ZXJlZDogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbmUgb2Ygc2xpZGVyIGVsZW1lbnRzIGhhcyBmb2N1cyBvciBub3QuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBsZXQgZm9jdXNlZDogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBhdXRvcGxheSBpcyBzdG9wcGVkIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJub3QuXFxyXFxuICAgKiBJZiBzdG9wcGVkLCBhdXRvcGxheSB3b24ndCBzdGFydCBhdSIKICAgICAgICAgICAgICAgICAgICAgICAgYid0b21hdGljYWxseSB1bmxlc3MgYHBsYXkoKWAgaXMgZXhwbGljaXRseSBjYWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLlxcclxcbiAgICovXFxyXFxuICBsZXQgc3RvcHBlZCA9IGF1dG9wbGF5ID09PSAncGF1cyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJlJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBpZiAoIGF1dG9wbGF5ICkge1xcclxcbiAgICAgIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4oKTtcXHJcXG4gICAgICB0b2dnbGUgJiYgc2V0QXR0cmlidXRlKCB0b2dnbGUsIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklBX0NPTlRST0xTLCBFbGVtZW50cy50cmFjay5pZCApO1xcclxcbiAgICAgIHN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGVkIHx8IHBsYXkoKTtcXHJcXG4gICAgICB1cGRhdGUoKTtcXHJcXG4gICAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTGlzdGVucyB0byBzb21lIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGxpc3RlbigpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggb3B0aW9ucy5wYXVzZU9uSG92ZXIgKSB7XFxyXFxuICAgICAgYmluJwogICAgICAgICAgICAgICAgICAgICAgICBiImQoIHJvb3QsICdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCBlID0+IHtcXHJcXG4gICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICBob3ZlcmVkID0gZS50eXBlID09PSAnbW91c2VlbnRlcic7XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgYXV0b1RvZ2dsZSgpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgaWYgKCBvcHRpb25zLnBhdXNlT25Gb2N1cyApIHtcXHJcXG4gICAgICBiaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZCggcm9vdCwgJ2ZvY3VzaW4gZm9jdXNvdXQnLCBlID0+IHtcXHJcXG4gICAgICAgIGYiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib2N1c2VkID0gZS50eXBlID09PSAnZm9jdXNpbic7XFxyXFxuICAgICAgICBhdXRvVG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dsZSgpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgKCB0b2dnbGUgKSB7XFxyXFxuICAgICAgYmluZCggdG9nZ2xlLCAnY2xpY2snLCAoKSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgPT4ge1xcclxcbiAgICAgICAgc3RvcHBlZCA/IHBsYXkoKSA6IHBhdXNlKCB0cnVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBvbiggWyBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfTU9WRSwgRVZFTlRfU0NST0xMLCBFVkVOVF9SRUZSRVNIIF0sIGludGVydmFsLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXdpbmQgKTtcXHJcXG4gICAgb24oIEVWRU5UX01PVkUsIG9uTW92ZSApO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RhcnRzIGF1dG9wbGF5IGFuZCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXJzIGFsbCBmbGFncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcGxheSgpOiB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pZCB7XFxyXFxuICAgIGlmICggaXNQYXVzZWQoKSAmJiBDb21wb25lbnRzLlNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuaXNFbm91Z2goKSApIHtcXHJcXG4gICAgICBpbnRlcnZhbC5zdGFydCggISBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5yZXNldFByb2dyZXNzICk7XFxyXFxuICAgICAgZm9jdXNlZCA9IGhvdmVyZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gc3RvcHBlZCA9IGZhbHNlO1xcclxcbiAgICAgIHVwZGF0ZSgpO1xcclxcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9BVVRPUExBWV9QTEFZICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFBhdXNlcyBhdXRvcGxheS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIHN0b3AgLSBJZiBgdHJ1ZWAsIGF1dG9wbGF5IGtlZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBwYXVzZWQgdW50aWwgYHBsYXkoKWAgaXMgZXhwbGljaXRseSBjYWxsZWQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBwYXVzZSggc3RvcCA9IHRydWUgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBzdG9wcGVkID0gISEgc3RvcDtcXHJcXG4gICAgdXBkYXRlKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoICEgaXNQYXVzZWQoKSApIHtcXHJcXG4gICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJ2YWwucGF1c2UoKTtcXHJcXG4gICAgICBlbWl0KCBFVkVOVF9BVVRPUExBWV9QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVU0UgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVG9nZ2xlcyBwbGF5L3BhdXNlIGFjY29yZGluZyB0byBjdXJyZW50IGZsYWdzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIElmIGF1dG9wbGF5IGlzIG1hbnVhbGx5IHBhdXNlZCwgdGhpcyB3aWxsIGRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBub3RoaW5nLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBhdXRvVG9nZ2xlKCk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIHtcXHJcXG4gICAgaWYgKCAhIHN0b3BwZWQgKSB7XFxyXFxuICAgICAgaG92ZXJlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgZm9jdXNlZCA/IHBhdXNlKCBmYWxzZSApIDogcGxheSgpO1xcclxcbiAgICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBVcGRhdGVzIHRoZSB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlIGJ1dHRvbiBzdGF0dXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIGlmICggdG9nZ2xlICkge1xcclxcbiAgICAgIHRvZ2dsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyggdG9nZ2xlLCBDTEFTU19BQ1RJVkUsICEgc3RvcHBlZCApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUoIHRvZ2dsZSwgQVJJQV9MQUJFTCwgb3B0aW9ucy5pMThuWyBzJwogICAgICAgICAgICAgICAgICAgICAgICBiInRvcHBlZCA/ICdwbGF5JyA6ICdwYXVzZScgXSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgb24gZXZlcnkgYW5pbWF0aW9uIGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZSB3aGlsZSBhdXRvcGxheSBpcyBhY3RpdmUuXFxyXFxuICAgKlxcclxcbiAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSByYXRlIC0gVGhlIHByb2dyZXNzIHJhdGUgYmV0d2VlbiAwIGFuZCAxLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggcmF0ZTogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBiYXIgfSA9IEVsZW1lbnRzO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgYmFyICYmIHN0eWxlKCBiYXIsICd3aWR0aCcsIGAkeyByYXRlICogMTAwIH0lIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2AgKTtcXHJcXG4gICAgZW1pdCggRVZFTlRfQVVUT1BMQVlfUExBWUlORywgcmF0ZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVXBkYXRlcyBvciByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9yZXMgdGhlIGludGVydmFsIGR1cmF0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gaW5kZXggLSBBbiBpbmRleCB0byBtb3ZlIHRvLlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gb25Nb3ZlKCBpbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgU2xpZGUgPSBDb21wb25lbnRzLlNsaWRlcy5nZXRBdCggaW5kZXggKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGludGVydmFsLnNldCggU2xpZGUgJiYgK2dldEF0dHJpYnV0ZSggU2xpZGUuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLCBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSApIHx8IG9wdGlvbnMuaW50ZXJ2YWwgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGRlc3Ryb3k6IGludGVydmFsLmNhbmNlbCxcXHJcXG4gICAgcGxheSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHBhdXNlLFxcclxcbiAgICBpc1BhdXNlZCxcXHJcXG4gIH07XFxyXFxufVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4iLCJpbXBvcnQgeyBFVkVOVF9MQVpZTE9BRF9MT0FERUQsIEVWRU5UX01PVU5URUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJFVkVOVF9SRUZSRVNILCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9ldmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVuIgogICAgICAgICAgICAgICAgICAgICAgICBiInQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IGFwcGx5LCBjaGlsZCwgZGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgU2xpZGVDb21wb25lbnQgfSBmcm9tICcuLi9TbGlkZXMvU2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciIKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIENvdmVyIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIENvdmVyQ29tcG9uZW50IGV4dGVuZHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEJhc2VDb21wb25lbnQge1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCBmb3Igc2V0dGluZyB0aGUgaW1hZ2UgYXMgdGhlIHNsaWRlIGJhY2tncm91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBDb3ZlciBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gQ292ZXIoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uczogT3B0aW9ucyApOiBDb3ZlckNvbXBvbmVudCB7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBvbiB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuY292ZXIgKSB7XFxyXFxuICAgICAgb24oIEVWRU5UX0xBWllMT0FEX0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FERUQsIGFwcGx5KCB0b2dnbGUsIHRydWUgKSApO1xcclxcbiAgICAgIG9uKCBbIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIIF0sIGFwcGx5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY292ZXIsIHRydWUgKSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBTZXRzL3JlbW92ZXMgdGhlIGJhY2tncm91bmQgaW1hZ2UgdG8vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zyb20gYWxsIHNsaWRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY292ZXIgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSWYgYGZhbHNlYCwgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBpbWFnZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIGNvdmVyKCBjb3ZlcjogYm9vbGVhbiApOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIENvbXBvbmVudHMuU2xpZGVzLmZvckVhY2goIFNsaWRlID0+IHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgY29uc3QgaW1nID0gY2hpbGQ8SFRNTEltYWdlRWxlbWVudD4oIFNsaWRlLmNvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm50YWluZXIgfHwgU2xpZGUuc2xpZGUsICdpbWcnICk7XFxyXFxuXFxyXFxuICAgICAgaWYiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggaW1nICYmIGltZy5zcmMgKSB7XFxyXFxuICAgICAgICB0b2dnbGUoIGNvdmVyLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW1nLCBTbGlkZSApO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU2V0cy9yZW1vdmVzIHRoZSBiYWNrZ3JvdW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbWFnZSB0by9mcm9tIHRoZSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGNvdmVyIC0gSWYgYGZhbHNlYCwgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW1hZ2UuXFxyXFxuICAgKiBAcGFyYW0gaW1nICAgLSBBIHRhcmdldCBpbWFnZSBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudC5cXHJcXG4gICAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGVDb21wb25lbnQgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCB3aGVyZSB0aGUgaW1hZ2UgYmVsb25ncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHRvZ2dsZSggY292ZXI6IGJvb2xlYW4sIGltZzogSFRNTEltYWdlRWxlbWVudCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlOiBTbGlkZUNvbXBvbmVudCApOiB2b2lkIHtcXHJcXG4gICAgU2xpZGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIieWxlKCAnYmFja2dyb3VuZCcsIGNvdmVyID8gYGNlbnRlci9jb3ZlciBuby1yZXBlYXQgdSIKICAgICAgICAgICAgICAgICAgICAgICAgYidybChcXCIkeyBpbWcuc3JjIH1cXCIpYCA6IFwnXCcsIHRydWUgKTtcXHJcXG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpc3BsYXkoIGltZywgY292ZXIgPyAnbm9uZScgOiAnJyApO1xcclxcbiAgfVxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBkZXN0cm95OiBhcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGNvdmVyLCBmYWxzZSApLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7IEVWRU5UX01PVkUsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTCwgRVZFTlRfU0NSJwogICAgICAgICAgICAgICAgICAgICAgICBiIk9MTEVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IElETEUsIFNDUk9MTElORyB9IGZyb20gJy4uLy4uL2NvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBTTElERSB9IGZyb20gJy4uLy4uL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlLCBSZXEiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidWVzdEludGVydmFsLCBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2UgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgQiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7IGFicywgYXBwbHksIGFwcHJveGltYXRlbHlFcXVhbCwgIgogICAgICAgICAgICAgICAgICAgICAgICBiImZsb29yLCBtYXgsIHNpZ24gfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IgogICAgICAgICAgICAgICAgICAgICAgICBiJyB7IEJBU0VfVkVMT0NJVFksIEJPVU5DRV9ESUZGX1RIUkVTSE9MRCwgQk9VTkNFX0RVUkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiVElPTiwgRlJJQ1RJT05fRkFDVE9SLCBNSU5fRFVSQVRJT04gfSBmcm9tICcuL2NvbnN0YSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgU2Nyb2xsIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbENvbXBvbmVudCBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIHNjcm9sbCggcG9zaXRpb246IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gKTogdm9pZDtcXHJcXG4gIGNhbmNlbCgpOiB2b2lkO1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3Igc2Nyb2xsaW5nIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gQSBTY3JvbGwgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIFNjcm9sbCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IFNjcm9sbENvbXBvbmVudCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBvbiwgZW1pdCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGNvbnN0IHsgc3RhdGU6IHsgc2V0IH0gfSA9IFNwbGlkZTtcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB7IE1vdmUgfSA9IENvbXBvbmVudHM7XFxyXFxuICBjb25zdCB7IGdldFBvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiwgZ2V0TGltaXQsIGV4Y2VlZGVkTGltaXQsIHRyYW5zbGF0ZSB9ID0gTW92ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBjb25zdCBpc1NsaWRlID0gU3BsaWRlLmlzKCBTTElERSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0YWlucyB0aGUgYWN0aXZlIFJlcXVlc3RJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ2YWwgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBsZXQgaW50ZXJ2YWw6IFJlcXVlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJ2YWxJbnRlcmZhY2U7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2s6IEFueUZ1bmN0aW9uO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cnJlbnQgZnJpY3Rpb24gKDw9IDEpLlxcclxcbiAgICovXFxyXFxuICBsZXQgZnJpY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uID0gMTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCk6IHZvaWQge1xcclxcbiAgICBvbiggRVZFTlRfTU9WRSwgY2xlYXIgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIG9uKCBbIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgY2FuY2VsICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTY3JvbGxzIHRoZSBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVyIHRvIHRoZSBwcm92aWRlZCBkZXN0aW5hdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGRlc3RpbmF0aW9uIC0gVGhlIGRlc3RpbmF0aW9uIHRvIHNjcm9sbCB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlciB0by5cXHJcXG4gICAqIEBwYXJhbSBkdXJhdGlvbiAgICAtIE9wdGlvbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC4gVGhlIHNjcm9sbCBkdXJhdGlvbi4gSWYgb21pdHRlZCwgY2FsY3VsYXRlcyBpdCBieScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGRpc3RhbmNlLlxcclxcbiAgICogQHBhcmFtIHNuYXAgICAgICAgIC0gT3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsLiBXaGV0aGVyIHRvIHNuYXAgdGhlIHNsaWRlciB0byB0aGUgY2xvc2VzdCBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugb3Igbm90LlxcclxcbiAgICogQHBhcmFtIG9uU2Nyb2xsZWQgIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIGNhbGxiYWNrIGludm9rZWQgYWZ0ZXIgc2Nyb2xsIGVuZHMuXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIG5vQ29uc3RyYWluIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc3VwcHJlc3MgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0cmFpbnQgcHJvY2VzcyB3aGVuIHRoZSBzbGlkZXIgZXhjZWVkcyBib3VuZHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzY3JvbGwoXFxyXFxuICAgIGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbjogbnVtYmVyLFxcclxcbiAgICBkdXJhdGlvbj86IG51bWJlcixcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNuYXA/OiBib29sZWFuLFxcclxcbiAgICBvblNjcm9sbGVkPzogQW55RnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICBub0NvbnN0cmFpbj86IGJvb2xlYW5cXHJcXG4gICk6IHZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgY29uc3QgZnJvbSA9IGdldFBvc2l0aW9uKCk7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjbGVhcigpO1xcclxcblxcclxcbiAgICBpZiAoIHNuYXAgJiYgKCAhIGlzU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8ICEgZXhjZWVkZWRMaW1pdCgpICkgKSB7XFxyXFxuICAgICAgY29uc3Qgc2l6ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICA9IENvbXBvbmVudHMuTGF5b3V0LnNsaWRlclNpemUoKTtcXHJcXG4gICAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgb2Zmc2V0ID0gc2lnbiggZGVzdGluYXRpb24gKSAqIHNpemUgKiBmbG9vciggYWJzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gKSAvIHNpemUgKSB8fCAwO1xcclxcbiAgICAgIGRlc3RpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiA9IE1vdmUudG9Qb3NpdGlvbiggQ29tcG9uZW50cy5Db250cm9sbGVyLnRvRGVzdCggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3RpbmF0aW9uICUgc2l6ZSApICkgKyBvZmZzZXQ7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIGNvbnN0IG5vRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmcm9tLCBkZXN0aW5hdGlvbiwgMSApO1xcclxcblxcclxcbiAgICBmcmljdGlvbiA9IDE7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBkdXJhdGlvbiA9IG5vRGlzdGFuY2UgPyAwIDogZHVyYXRpb24gfHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21heCggYWJzKCBkZXN0aW5hdGlvbiAtIGZyb20gKSAvIEJBU0VfVkVMT0NJVFksIE1JTl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRFVSQVRJT04gKTtcXHJcXG4gICAgY2FsbGJhY2sgPSBvblNjcm9sbGVkO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoIGR1cmF0aW9uLCBvbkVuZCwgYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiApLCAxICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBzZXQoIFNDUk9MTElORyApO1xcclxcbiAgICBlbWl0KCBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0NST0xMICk7XFxyXFxuICAgIGludGVydmFsLnN0YXJ0KCk7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiBzY3JvbGwgZW5kcyBvciBoYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGJlZW4ganVzdCBjYW5jZWxlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kKCk6IHZvaWQge1xcclxcbiAgICBzZXQoIElETEUgKTtcXHJcXG4gICAgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIGNhbGxiYWNrKCk7XFxyXFxuICAgIGVtaXQoIEVWRU5UX1NDUk9MTEVEICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbmV2ZXIgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBpbnRlcnZhbCB0aW1lciBpcyB1cGRhdGVkLlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gZnJvbSAgICAgICAgLSBBIHBvc2l0aW9uIHdoZXJlIHNjcm9sbCBzdGFydHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHBhcmFtIHRvICAgICAgICAgIC0gQSBkZXN0aW5hdGlvbiB3aGVyZSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlciBnb2VzLlxcclxcbiAgICogQHBhcmFtIG5vQ29uc3RyYWluIC0gV2hldGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdG8gc3VwcHJlc3MgY29uc3RyYWludCBwcm9jZXNzIHdoZW4gdGhlIHNsaWRlciBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkcyBib3VuZHMuXFxyXFxuICAgKiBAcGFyYW0gcmF0ZSAgICAgICAgLSBBIGN1cnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHJhdGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSggZnJvbTogbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciwgdG86IG51bWJlciwgbm9Db25zdHJhaW46IGJvb2xlYW4gfCB1bmRlZmluZWQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByYXRlOiBudW1iZXIgKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHBvc2l0aW9uID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFBvc2l0aW9uKCk7XFxyXFxuICAgIGNvbnN0IHRhcmdldCAgID0gZnJvbSArICggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIC0gZnJvbSApICogZWFzaW5nKCByYXRlICk7XFxyXFxuICAgIGNvbnN0IGRpZmYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA9ICggdGFyZ2V0IC0gcG9zaXRpb24gKSAqIGZyaWN0aW9uO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdHJhbnNsYXRlKCBwb3NpdGlvbiArIGRpZmYgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNTbGlkZSAmJiAhIG5vQ29uc3RyYWluICYmIGV4Y2VlZGVkTGltaXQoKSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZnJpY3Rpb24gKj0gRlJJQ1RJT05fRkFDVE9SO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBpZiAoIGFicyggZGlmZiApIDwgQk9VTkNFX0RJRkZfVEhSRVNIT0xEICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHNjcm9sbCggZ2V0TGltaXQoIGV4Y2VlZGVkTGltaXQoIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlICkgKSwgQk9VTkNFX0RVUkFUSU9OLCBmYWxzZSwgY2FsbGJhY2ssIHRydWUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBDbGVhcnMgdGhlIGFjdGl2ZSBpbnRlcnZhbC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIGNsZWFyKCk6IHZvaWQge1xcclxcbiAgICBpZiAoIGludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbCApIHtcXHJcXG4gICAgICBpbnRlcnZhbC5jYW5jZWwoKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FuY2VscyB0aGUgYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSBpbnRlcnZhbCBhbmQgZW1pdHMgdGhlIGBzY3JvbGxlZGAgZXZlbnQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBjYW5jZWwoKTogdm9pZCB7XFxyXFxuICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGludGVydmFsICYmICEgaW50ZXJ2YWwuaXNQYXVzZWQoKSApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xlYXIoKTtcXHJcXG4gICAgICBvbkVuZCgpO1xcclxcbiAgICB9XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgZWFzaW5nIGZ1bmN0aW9uLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcGFyYW0gdCAtIEEgdmFsdWUgdG8gZWFzZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHJldHVybiBBbiBlYXNlZCB2YWx1ZS5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIGVhc2luZyggdDogbnVtYmVyICk6IG51bWJlciB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCB7IGVhc2luZ0Z1bmMgfSA9IG9wdGlvbnM7XFxyXFxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFzaW5nRnVuYyA/IGVhc2luZ0Z1bmMoIHQgKSA6IDEgLSBNYXRoLnBvdyggMSAtIHQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYic0ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGRlc3Ryb3k6IGNsZWFyLFxcclxcbiAgICBzY3JvbGwsXFxyXFxuICAgIGNhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWwsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUcmlnZ2VycyB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGJvdW5jZSBlZmZlY3Qgd2hlbiB0aGUgZGlmZiBiZWNvbWVzIGxlc3MgdGhhbiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyB2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgQk9VTkNFX0RJRkZfVEhSRVNIT0xEID0gMTA7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYm91bmNlIGVmZmVjdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEJPVU5DRV9EVVJBVElPTiA9IDYwMDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyaWN0aW9uIGZhY3Rvci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgdmVsb2NpdHkgdG8gY2FsY3VsYXRlIHRoZSBzY3JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsIGR1cmF0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBjb25zdCBCQVNFX1ZFTE9DSVRZID0gMS41O1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBUaGUgbWluaW11bSBkdXJhdGlvbiBvZiBzY3JvbGwuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5fRFVSQVRJT04gPSA4MDA7XFxyXFxuIiwiaW1wb3J0IHsgQ0xBU1NfQVJST1csIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTEFTU19QQUdJTkFUSU9OX1BBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcbmltcG9ydCB7IEVWRU5UX0RSQUcsIEVWRU5UX0RSQUdHRUQsIEVWRU5UXyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJEUkFHR0lORywgRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBTQ1JPTExfTElTVEVORVJfIgogICAgICAgICAgICAgICAgICAgICAgICBiIk9QVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGlzdGVuZXItb3B0aW9ucyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmltcG9ydCB7IERSQUdHSU5HLCBJRExFLCBNT1ZJTkcsIFNDUk9MTElORyB9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFLCBMT09QIgogICAgICAgICAgICAgICAgICAgICAgICBiIiwgU0xJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSciCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFicywgaXNPYmplY3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLCBtYXRjaGVzLCBtaW4sIG5vb3AsIHByZXZlbnQsIHNpZ24sIHRpbWVPZiB9IGZyb20gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRlJJQ1RJT04sIExPR19JTlRFUlZBTCIKICAgICAgICAgICAgICAgICAgICAgICAgYicsIFBPSU5URVJfRE9XTl9FVkVOVFMsIFBPSU5URVJfTU9WRV9FVkVOVFMsIFBPSU5URVJfJwogICAgICAgICAgICAgICAgICAgICAgICBiIlVQX0VWRU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcXHJcXG5cXHJcXG5cXHJcXG4vIgogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERyYWcgY29tcG9uZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIERyYWdDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBkaXNhYmxlKCBkaXNhYmxlZDogYm9vbGVhbiApOiB2b2lkO1xcclxcbiAgaXNEcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dpbmcoKTogYm9vbGVhbjtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnQgZm9yIGRyYWdnaW5nIHRoZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIERyYWcgY29tcG9uZW50IG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIERyYWcoIFNwbGlkZTogU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBEcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBlbWl0LCBiaW5kLCB1bmJpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCB7IHN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyBNb3ZlLCBTY3JvbGwsIENvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyLCBFbGVtZW50czogeyB0cmFjayB9LCBNZWRpYTogeyByZWR1Y2UgfSB9ID0gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHM7XFxyXFxuICBjb25zdCB7IHJlc29sdmUsIG9yaWVudCB9ID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMuRGlyZWN0aW9uO1xcclxcbiAgY29uc3QgeyBnZXRQb3NpdGlvbiwgZXhjZWVkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkTGltaXQgfSA9IE1vdmU7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSBzbGlkZXIgcG9zaXRpb24gdG8gY2FsY3VsYXRlIHRoZSBkZWx0YSBvZiBjb29yZHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBsZXQgYmFzZVBvc2l0aW9uOiBudW1iZXI7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgYmFzZSBldmVudCBvYmplY3Qgc2F2ZWQgcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBzcGVjaWZpYyBzYW1wbGluZyBpbnRlcnZhbC5cXHJcXG4gICAqL1xcclxcbiAgbGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYXNlRXZlbnQ6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50O1xcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogSG9sZHMgdGhlIHByZXZpb3VzIGJhc2UgZXZlbnQgb2JqZWN0LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgbGV0IHByZXZCYXNlRXZlbnQ6IFRvdWNoRXZlbnQgfCBNb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VFdmVudDtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVyIHRoZSBkcmFnIG1vZGUgaXMgYGZyZWVgIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxldCBpc0ZyZWU6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyIG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBkcmFnZ2luZzogYm9vbGVhbjtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2VlZHMgbGltaXRzIG9yIG5vdC5cXHJcXG4gICAqIFRoaXMgbXVzdCBub3QgYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGB1bmRlZmluZWRgIGZvciBzdHJpY3QgY29tcGFyaXNvbi5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxldCBleGNlZWRlZCA9IGZhbHNlO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVHVybnMgaW50byBgdHJ1ZWAgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjbGlja1ByZXZlbnRlZDogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgZHJhZyBjb21wb25lbnQgaXMgbm93IGRpc2FibGVkIG9yIG5vdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGxldCBkaXNhYmxlZDogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSB0YXJnZXQgZWxlbWVudCB0byBhdHRhY2ggbGlzdGVuZXJzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgbGV0IHRhcmdldDogV2luZG93IHwgSFRNTEVsZW1lbnQ7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIGJpbmQoIHRyYWNrLCBQT0lOVEVSX01PVkVfRVZFTlRTLCBub29wLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgU0NST0xMX0xJU1RFTkVSX09QVElPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhY2ssICcKICAgICAgICAgICAgICAgICAgICAgICAgYidQT0lOVEVSX1VQX0VWRU5UUywgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGJpbmQoIHRyYWNrLCBQT0lOVEVSX0RPV05fRVZFTlRTLCBvblBvaW50ZXJEbycKICAgICAgICAgICAgICAgICAgICAgICAgYid3biwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYiJrLCAnY2xpY2snLCBvbkNsaWNrLCB7IGNhcHR1cmU6IHRydWUgfSApO1xcclxcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgYmluZCggdHJhY2ssICdkcmFnc3RhcnQnLCBwcmV2ZW50ICk7XFxyXFxuICAgIG9uKCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgWyBFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEIF0sIGluaXQgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgY29uc3QgeyBkcmFnIH0gPSBvcHRpb25zO1xcclxcbiAgICBkaXNhYmxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgISBkcmFnICk7XFxyXFxuICAgIGlzRnJlZSA9IGRyYWcgPT09ICdmcmVlJztcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGlja3Mgb3IgdG91Y2hlcyB0aGUgc2xpZGVyLlxcclxcbiAgICogLSBOZWVkcyB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28gcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiB0aGUgc2xpZGVyIGlzIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXN5IHRvIGRlbnkgYW55IGFjdGlvbiwgc3VjaCBhcyBkcmFnZ2luZyBpbWFnZXNcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiAtIElFIGRvZXMgbm90IHN1cHBvcnQgTW91c2VFdmVudCBhbmQgVG91Y2hFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgY29uc3RydWN0b3JzXFxyXFxuICAgKiAtIFRoZSBgZHJhZ2dpbmdgIHN0YXRlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHdheXMgYmVjb21lcyBgdHJ1ZWAgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3doaWxlIHRoZSBzbGlkZXIgaXMgbW92aW5nXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKCBlOiBUb3VjaEV2ZW50IHwgTW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIGNsaWNrUHJldmVudGVkID0gZmFsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICBpZiAoICEgZGlzYWJsZWQgKSB7XFxyXFxuICAgICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQoIGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBpc0RyYWdnYWJsZSggZS50YXJnZXQgKSAmJiAoIGlzVG91Y2ggfHwgISBlLmJ1dHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKSApIHtcXHJcXG4gICAgICAgIGlmICggISBDb250cm9sbGVyLmlzQnVzeSgpICkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICAgICAgdGFyZ2V0ICAgICAgICA9IGlzVG91Y2ggPyB0cmFjayA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB3aW5kb3c7XFxyXFxuICAgICAgICAgIGRyYWdnaW5nICAgICAgPSBzdGF0ZS5pcyggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1sgTU9WSU5HLCBTQ1JPTExJTkcgXSApO1xcclxcbiAgICAgICAgICBwcmV2QmFzZUV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCA9IG51bGw7XFxyXFxuXFxyXFxuICAgICAgICAgIGJpbmQoIHRhcmdldCwgUE9JTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUsIFNDUk9MTF9MSVNURU5FUl9PUFRJTycKICAgICAgICAgICAgICAgICAgICAgICAgYidOUyApO1xcclxcbiAgICAgICAgICBiaW5kKCB0YXJnZXQsIFBPSU5URVJfVVBfRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUUywgb25Qb2ludGVyVXAsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICBNb3ZlLmNhbmNlbCgpO1xcclxcbiAgICAgICAgICBTY3JvbGwuY2FuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlbCgpO1xcclxcbiAgICAgICAgICBzYXZlKCBlICk7XFxyXFxuICAgICAgICB9IGVsc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICAgICAgcHJldmVudCggZSwgdHJ1ZSApO1xcclxcbiAgICAgICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIENhbGxlZCB3aGlsZSB0aGUgdXNlciBtb3ZlcyB0aGUgcG9pbnRlciBvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgb3IgTW91c2VFdmVudCBvYmplY3RcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduUG9pbnRlck1vdmUoIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IHZvaWQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgaWYgKCAhIHN0YXRlLmlzKCBEUkFHR0lORyApICkge1xcclxcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZS5zZXQoIERSQUdHSU5HICk7XFxyXFxuICAgICAgZW1pdCggRVZFTlRfRFJBRyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpZiAoIGUuY2FuY2VsYWJsZSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgaWYgKCBkcmFnZ2luZyApIHtcXHJcXG4gICAgICAgIE1vdmUudHJhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGF0ZSggYmFzZVBvc2l0aW9uICsgY29uc3RyYWluKCBkaWZmQ29vcmQoIGUgKSApICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICAgICAgY29uc3QgZXhwaXJlZCAgICAgPSBkaWZmVGltZSggZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA+IExPR19JTlRFUlZBTDtcXHJcXG4gICAgICAgIGNvbnN0IGhhc0V4Y2VlZGVkID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2VlZGVkICE9PSAoIGV4Y2VlZGVkID0gZXhjZWVkZWRMaW1pdCgpICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICAgICAgaWYgKCBleHBpcmVkIHx8IGhhc0V4Y2VlZGVkICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgc2F2ZSggZSApO1xcclxcbiAgICAgICAgfVxcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGNsaWNrUHJldmVudGVkID0gdHJ1ZTtcXHJcXG4gICAgICAgIGVtaXQoIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9EUkFHR0lORyApO1xcclxcbiAgICAgICAgcHJldmVudCggZSApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9IGVsc2UgaWYgKCBpc1NsaWRlckRpcmVjdGlvbiggZSApICkge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRyYWdnaW5nID0gc2hvdWxkU3RhcnQoIGUgKTtcXHJcXG4gICAgICAgIHByZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KCBlICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciByZWxlYXNlcyBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRpbmcgZGV2aWNlcy5cXHJcXG4gICAqIE5lZWRzIHRvIG1vdmUgdGhlIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igd2hlbjpcXHJcXG4gICAqIC0gVGhlIHVzZXIgZHJhZ3MgdGhlIHNsaWRlciBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBkaXN0YW5jZSBleGNlZWRzIHRoZSB0aHJlc2hvbGRcXHJcXG4gICAqIC0gVGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1c2VyIGFib3J0ZWQgdGhlIHNsaWRlciBtb3ZpbmcgYnkgcG9pbnRlcmRvd24gYW5kIGonCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXN0IHJlbGVhc2VkIGl0IHdpdGhvdXQgZHJhZ2dpbmcgdGhlIHNsaWRlclxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgVG91Y2hFdmVudCBvciBNb3VzZUV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvYmplY3RcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Qb2ludGVyVXAoIGU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUb3VjaEV2ZW50IHwgTW91c2VFdmVudCApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUuaXMoIERSQUdHSU5HICkgKSB7XFxyXFxuICAgICAgc3RhdGUuc2V0KCBJRExFICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX0RSQUdHRUQgKTtcXHJcXG4gICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgaWYgKCBkcmFnZ2luZyApIHtcXHJcXG4gICAgICBtb3ZlKCBlICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHByZXZlbnQoIGUgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5iaW5kKCB0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIHVuYmluZCggdGFyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25QbycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlclVwICk7XFxyXFxuICAgIGRyYWdnaW5nID0gZmFsc2U7XFxyXFxuICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdHJhY2sgZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaXMgY2xpY2tlZC5cXHJcXG4gICAqIERpc2FibGVzIGNsaWNrIGFueSBlbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgaW5zaWRlIGl0IHdoaWxlIGRyYWdnaW5nLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gZSAtIEEgTW91c2VFdmVudCBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvbkNsaWNrKCBlOiBNb3VzZUV2ZW50ICk6IHZvaWQge1xcclxcbiAgICBpZiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgYichIGRpc2FibGVkICYmIGNsaWNrUHJldmVudGVkICkge1xcclxcbiAgICAgIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBlLCB0cnVlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIFNhdmVzIGRhdGEgYXQgdGhlIHNwZWNpZmljIG1vbWVudC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzYXZlKCBlOiBUb3VjaEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCB8IE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIHByZXZCYXNlRXZlbnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgYmFzZUV2ZW50O1xcclxcbiAgICBiYXNlRXZlbnQgICAgID0gZTtcXHJcXG4gICAgYmFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VQb3NpdGlvbiAgPSBnZXRQb3NpdGlvbigpO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ2FsY3VsYXRlcyB0aGUgZGVzdGluYXRpb24gYnkgdGhlIGRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnIHZlbG9jaXR5IGFuZCBtb3ZlcyB0aGUgY2Fyb3VzZWwuXFxyXFxuICAgKiBJZiBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290aW9uIGlzIHJlZHVjZWQsIHJlc3RvcmVzIHRyYW5zaXRpb24gc3BlZWQgdG8gdGhlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbml0aWFsIHZhbHVlXFxyXFxuICAgKiBiZWNhdXNlIGl0XCdzIFxcImVzc2VudGlhbFxcIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW90aW9uIGZvciB0aGUgdXNlciB0byByZWNvZ25pemUgd2hhdCBoYXBwZW5zIG9uIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWwuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZSggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCB2ZWxvY2l0eSAgICA9IGNvbXB1dGVWZWxvY2l0eSggZSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgZGVzdGluYXRpb24gPSBjb21wdXRlRGVzdGluYXRpb24oIHZlbG9jaXR5ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICBjb25zdCByZXdpbmQgICAgICA9IG9wdGlvbnMucmV3aW5kICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLnJld2luZEJ5RHJhZztcXHJcXG5cXHJcXG4gICAgcmVkdWNlKCBmYWxzZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gICAgaWYgKCBpc0ZyZWUgKSB7XFxyXFxuICAgICAgQ29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZXIuc2Nyb2xsKCBkZXN0aW5hdGlvbiwgMCwgb3B0aW9ucy5zbmFwICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKCBTcGxpZGUuaXMoIEZBREUgKSApIHtcXHJcXG4gICAgICBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udHJvbGxlci5nbyggb3JpZW50KCBzaWduKCB2ZWxvY2l0eSApICkgPCAwID8gKCByZXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5kID8gJzwnIDogJy0nICkgOiAoIHJld2luZCA/ICc+JyA6ICcrJyApICk7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICB9IGVsc2UgaWYgKCBTcGxpZGUuaXMoIFNMSURFICkgJiYgZXhjZWVkZWQgJiYgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidld2luZCApIHtcXHJcXG4gICAgICBDb250cm9sbGVyLmdvKCBleGNlZWRlZExpbWl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdHJ1ZSApID8gJz4nIDogJzwnICk7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRyb2xsZXIuZ28oIENvbnRyb2xsZXIudG9EZXN0KCBkZXN0aW5hdGlvbiApLCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJlZHVjZSggdHJ1ZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBkcmFnICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXN0YW5jZSBleGNlZWRzIHRoZSBkZWZpbmVkIHRocmVzaG9sZC5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBkaXN0YW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXhjZWVkcyB0aGUgdGhyZXNob2xkLCBvciBgZmFsc2VgIGlmIG5vdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIHNob3VsZFN0YXJ0KCBlOiBUb3VjaEV2ZW50IHwgTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlRXZlbnQgKTogYm9vbGVhbiB7XFxyXFxuICAgIGNvbnN0IHsgZHJhZ01pblRocicKICAgICAgICAgICAgICAgICAgICAgICAgYidlc2hvbGQ6IHRocmVzaG9sZHMgfSA9IG9wdGlvbnM7XFxyXFxuICAgIGNvbnN0IGlzTycKICAgICAgICAgICAgICAgICAgICAgICAgYidiaiA9IGlzT2JqZWN0KCB0aHJlc2hvbGRzICk7XFxyXFxuICAgIGNvbnN0IG1vdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGlzT2JqICYmIHRocmVzaG9sZHMubW91c2UgfHwgMDtcXHJcXG4gICAgY29uc3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdWNoID0gKCBpc09iaiA/IHRocmVzaG9sZHMudG91Y2ggOiArdGhyZXNob2xkcyApIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxMDtcXHJcXG4gICAgcmV0dXJuIGFicyggZGlmZkNvb3JkKCBlICkgKSA+ICggaXNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hFdmVudCggZSApID8gdG91Y2ggOiBtb3VzZSApO1xcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIHdoZXRoZXIgZHJhZ2dpbmcgdG93YXJkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgdGhlIHNsaWRlciBvciB0aGUgc2Nyb2xsIGRpcmVjdGlvbi5cXHJcXG4gICAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgZHJhZ2dpbmcgdG93YXJkcyB0aGUgc2xpZGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXJlY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gZSAtIEEgVG91Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gaXNTbGlkZXJEaXJlY3Rpb24oIGU6IFRvdWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50IHwgTW91c2VFdmVudCApOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIGFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoIGRpZmZDb29yZCggZSApICkgPiBhYnMoIGRpZmZDb29yZCggZSwgdHJ1ZSApICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb21wdXRlcyB0aGUgZHJhZycKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmVsb2NpdHkuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGRyYWcgdmVsb2NpdHkuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlVmVsb2NpdHkoIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBpZiAoIFNwbGlkZS5pcyggTE9PUCApIHx8ICEgZXhjZWVkZWQgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIGNvbnN0IHRpbWUgPSBkaWZmVGltZSggZSApO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBpZiAoIHRpbWUgJiYgdGltZSA8IExPR19JTlRFUlZBTCApIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICByZXR1cm4gZGlmZkNvb3JkKCBlICkgLyB0aW1lO1xcclxcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIDA7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb21wdXRlcyB0aGUgZGVzdGluYXRpb24gYnkgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB2ZWxvY2l0eSBhbmQgdGhlIGBmbGlja1Bvd2VyYCBvcHRpb24uXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSB2ZWxvY2l0eSAtIFRoZSBkcmFnIHZlbG9jaXR5LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBkZXN0aW5hdGlvbi5cXHJcXG4gICAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGZ1bmN0aW9uIGNvbXB1dGVEZXN0aW5hdGlvbiggdmVsb2NpdHk6IG51bWJlciApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCkgKyBzaWduKCB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vsb2NpdHkgKSAqIG1pbihcXHJcXG4gICAgICBhYnMoIHZlbG9jaXR5ICkgKiAoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmZsaWNrUG93ZXIgfHwgNjAwICksXFxyXFxuICAgICAgaXNGcmVlID8gSW5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXR5IDogQ29tcG9uZW50cy5MYXlvdXQubGlzdFNpemUoKSAqICggb3B0aW9ucy5mbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2tNYXhQYWdlcyB8fCAxIClcXHJcXG4gICAgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGNvb3JkIGRpZmZlcmVuY2UgYmV0d2VlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHByb3ZpZGVkIGFuZCBiYXNlIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGUgICAgICAgICAgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICogQHBhcmFtIG9ydGhvZ29uYWwgLSBPcHRpb25hbC4gSWYgYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCwgcmV0dXJucyB0aGUgY29vcmQgb2YgdGhlIG9ydGhvZ29uYWwgYXhpcyBhZ2FpbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgZHJhZyBvbmUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgZGlmZmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VuY2Ugb2YgdGhlIGNvb3JkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkaWZmQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JkKCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCwgb3J0aG9nb25hbD86IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduICk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBjb29yZE9mKCBlLCBvcnRob2dvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbCApIC0gY29vcmRPZiggZ2V0QmFzZUV2ZW50KCBlICksIG9ydGhvZ29uYWwgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGVsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwc2VkIHRpbWUgZnJvbSB0aGUgYmFzZSBldmVudCB0byBgZWAuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBlbGFwc2VkIHRpbWUgaW4gbWlsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2Vjb25kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGlmZlRpbWUoIGU6IFRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjaEV2ZW50IHwgTW91c2VFdmVudCApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpbWVPZiggZSApIC0gdGltZU9mKCBnZXRCYXNlRXZlbnQoIGUgKSApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgYmFzZSBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKiBJZiB0aGUgYmFzZSBldmVudCBpcyBzYW1lIHdpdGggYGVgLCByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJucyBwcmV2aW91cyBvbmUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIEEgYmFzZSBldmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEJhc2VFdmVudCggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQgKTogVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgfCBNb3VzZUV2ZW50IHtcXHJcXG4gICAgcmV0dXJuIGJhc2VFdmVudCA9PT0gZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcHJldkJhc2VFdmVudCB8fCBiYXNlRXZlbnQ7XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBgcGFnZVhgIGFuZCBgcGFnZVlgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb29yZGluYXRlcyBwcm92aWRlZCBieSB0aGUgZXZlbnQuXFxyXFxuICAgKiBCZSBhd2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmUgdGhhdCBJRSBkb2VzIG5vdCBzdXBwb3J0IGJvdGggVG91Y2hFdmVudCBhbmQgTW91cycKICAgICAgICAgICAgICAgICAgICAgICAgYidlRXZlbnQgY29uc3RydWN0b3JzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAtIEEgVG91Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gb3J0aG9nb25hbCAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIHJldHVybnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBjb29yZCBvZiB0aGUgb3J0aG9nb25hbCBheGlzIGFnYWluc3QgdGhlIGRyYWcgbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgcGFnZVggb3IgcGFnZVkgY29vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JkaW5hdGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvb3JkT2YoIGU6IFRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaEV2ZW50IHwgTW91c2VFdmVudCwgb3J0aG9nb25hbD86IGJvb2xlYW4gKTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHJldHVybiAoIGlzVG91Y2hFdmVudCggZSApID8gZS5jaGFuZ2VkVCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJvdWNoZXNbIDAgXSA6IGUgKVsgYHBhZ2UkeyByZXNvbHZlKCBvcnRob2dvbmFsID8gJ1knIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA6ICdYJyApIH1gIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWR1Y2VzIHRoZSBkaXN0YW5jZSB0byBtb3ZlIGJ5IHRoZSBwcmVkZWZpbmVkIGZyaWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5cXHJcXG4gICAqIFRoaXMgZG9lcyBub3RoaW5nIHdoZW4gdGhlIHNsaWRlciB0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZSBpcyBub3QgYHNsaWRlYCwgb3IgdGhlIHBvc2l0aW9uIGlzIGluc2lkZSBib3JkZXJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGlmZiAtIERpZmYgdG8gY29uc3RyYWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBjb25zdHJhaW5lZCBkaWZmLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY29uc3RyYWluKCBkaWZmOiBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBkaWZmIC8gKCBleGNlZWRlZCAmJiBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlLmlzKCBTTElERSApID8gRlJJQ1RJT04gOiAxICk7XFxyXFxuICB9XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdXNlciBjYW4gZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWcgdGhlIHRhcmdldC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FuIGV2ZW50IHRhcmdldC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIHRhcmdldCBpcyBkcmFnZ2FibGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBpc0RyYWdnYWJsZSggdGFyZ2V0OiBFdmVudFRhcmdldCApOiBib29sZWFuIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IHsgbm9EcmFnIH0gPSBvcHRpb25zO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuICEgbWF0Y2hlcyggdGFyZ2V0LCBgLiR7IENMQVNTX1BBR0lOQVRJT05fUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBR0UgfSwgLiR7IENMQVNTX0FSUk9XIH1gIClcXHJcXG4gICAgICAmJiAoICEgbm9EcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhZyB8fCAhIG1hdGNoZXMoIHRhcmdldCwgbm9EcmFnICkgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgZXZlbnQgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIGUgLSBBbiBldmVudCB0byBjaGVjay5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBgdHJ1ZWAgaWYgdGhlIGBlYCBpcyBUb3VjaEV2ZW50LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gaXNUb3VjaEV2ZW50KCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCApOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZSBpcyBUb3VjaEV2ZW50IHtcXHJcXG4gICAgcmV0dXJuIHR5cGVvZiBUb3VjaEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZSBpbnN0YW5jZW9mIFRvdWNoRXZlbnQ7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgbm93IHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgZHJhZ2dpbmcgdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc0RyYWdnaW5nKCk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gZHJhZ2dpbmc7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEaXNhYmxlcyB0aGUgY29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgLSBTZXQgYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB0byBkaXNhYmxlIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBkaXNhYmxlKCB2YWx1ZTogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgZGlzYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGVkID0gdmFsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgbW91bnQsXFxyXFxuICAgIGRpc2FibGUsXFxyXFxuICAgIGlzRHJhZ2dpbmcsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQ0xBU1NfTE9BRElORyB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRSIKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9MQVpZTE9BRF9MT0FERUQsXFxyXFxuICBFVkVOVF9NT1ZFRCxcXHJcXG4gIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19SRUZSRVNILFxcclxcbiAgRVZFTlRfUkVTSVpFLFxcclxcbiAgRVZFTlRfU0NST0xMRUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLFxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIGFkZENsYXNzLFxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGFwcGx5LFxcclxcbiAgY2hpbGQsXFxyXFxuICBjcmVhdGUsXFxyXFxuICBkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheSxcXHJcXG4gIGVtcHR5LFxcclxcbiAgZ2V0QXR0cmlidXRlLFxcclxcbiAgcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXJ5QWxsLFxcclxcbiAgcmVtb3ZlLFxcclxcbiAgcmVtb3ZlQXR0cmlidXRlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbiAgc2V0QXR0cmlidXRlLFxcclxcbn0gZnJvbSAnIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBTbGlkZUNvbXBvbmVudCB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi9TbGlkZXMvU2xpZGUnO1xcclxcbmltcG9ydCB7IElNQUdFX1NFTEVDVE9SLCBTIgogICAgICAgICAgICAgICAgICAgICAgICBiIlJDX0RBVEFfQVRUUklCVVRFLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUgfSBmcm9tICcuL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhYyIKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGZvciB0aGUgTGF6eUxvYWQgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgTGF6eUxvYWRDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICAvKiogQGludGVybmFsIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgY2hlY2soKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIFRoZSB0eXBlIGZvciBlYWNoIGVudHJ5LlxcclxcbiAqIFVzZSBhIHR1cGxlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYmV0dGVyIGNvbXByZXNzaW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbnR5cGUgTGF6eUxvYWRFbnRyeSA9IFsgSFRNTEltYWdlRWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIFNsaWRlQ29tcG9uZW50LCBIVE1MU3BhbkVsZW1lbnQgXTtcXHJcXG5cXHJcXG4vKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgbGF6aWx5IGxvYWRpbmcgaW1hZ2VzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xhenlMb2FkIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBMYXp5TG9hZCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBvcHRpb25zOiBPcHRpb25zICk6IExhenlMb2FkQ29tcG9uZW50IHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB7IG9uLCBvZmYsIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICk7XFxyXFxuICBjb25zdCBpc1NlcXVlbnRpYWwgPSBvcHRpb25zLmxhenlMb2FkJwogICAgICAgICAgICAgICAgICAgICAgICBiIiA9PT0gJ3NlcXVlbnRpYWwnO1xcclxcbiAgY29uc3QgZXZlbnRzICAgICAgID0gWyBFIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEIF07XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBTdG9yZXMgZGF0YSBvZiBpbWFnZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cmllczogTGF6eUxvYWRFbnRyeVtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5sYXp5TG9hZCApIHtcXHJcXG4gICAgICBpbml0KCk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKCBFVkVOVF9SRUZSRVNILCBpbml0ICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCBzdGFydCBsb2FkaW5nIGltYWdlcy5cXHJcXG4gICAqIEJlIGF3YXJlIHRoYXQgYHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZyZXNoYCBhbHNvIGNhbGxzIHRoaXMgbWV0aG9kLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaW5pdCgpIHtcXHJcXG4gICAgZW1wdHkoIGVudHJpZXMgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZ2lzdGVyKCk7XFxyXFxuXFxyXFxuICAgIGlmICggaXNTZXF1ZW50aWFsICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBsb2FkTmV4dCgpO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvZmYoIGV2ZW50cyApO1xcclxcbiAgICAgIG9uKCBldmVudHMsIGNoZWNrICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNoZWNrKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIEZpbmRzIGltYWdlcyBhbmQgcmVnaXN0ZXIgdGhlbSBhcyBlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmllcyB3aXRoIGNyZWF0aW5nIHNwaW5uZXIgZWxlbWVudHMuXFxyXFxuICAgKiBOb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0aGF0IHNwaW5uZXIgY2FuIGJlIGFscmVhZHkgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgYCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWZyZXNoKClgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiByZWdpc3RlcigpOiB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pZCB7XFxyXFxuICAgIENvbXBvbmVudHMuU2xpZGVzLmZvckVhY2goIFNsaWRlID0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgcXVlcnlBbGw8SFRNTEltYWdlRWxlbWVudD4oIFNsaWRlLnNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgSU1BR0VfU0VMRUNUT1IgKS5mb3JFYWNoKCBpbWcgPT4ge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGNvbnN0IHNyYyAgICA9IGdldEF0dHJpYnV0ZSggaW1nLCBTUkNfREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFICk7XFxyXFxuICAgICAgICBjb25zdCBzcmNzZXQgPSBnZXRBdHRyaWJ1dGUoIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSApO1xcclxcblxcclxcbiAgICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3JjICE9PSBpbWcuc3JjIHx8IHNyY3NldCAhPT0gaW1nLnNyY3NldCApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3Nlcy5zcGlubmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICAgICAgY29uc3QgcGFyZW50ICAgID0gaW1nLnBhcmVudEVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250O1xcclxcbiAgICAgICAgICBjb25zdCBzcGlubmVyICAgPSBjaGlsZCggcGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiIiwgYC4keyBjbGFzc05hbWUgfWAgKSB8fCBjcmVhdGUoICdzcGFuJywgY2xhc3NOYW1lLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyZW50ICk7XFxyXFxuXFxyXFxuICAgICAgICAgIGVudHJpZXMucHVzaCggWyBpbWcsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZSwgc3Bpbm5lciBdICk7XFxyXFxuICAgICAgICAgIGltZy5zcmMgfHwgZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXkoIGltZywgJ25vbmUnICk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfSApO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVjaycKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGhvdyBjbG9zZSBlYWNoIGltYWdlIGlzIGZyb20gdGhlIGFjdGl2ZSBzbGlkZSwgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gc3RhcnQgbG9hZGluZyBvciBub3QuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVGhlIGxhc3QgYCsxYCBpcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNoZWNrKCk6IHZvaWQge1xcclxcbiAgICBlbnRyaWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IGVudHJpZXMuZmlsdGVyKCBkYXRhID0+IHtcXHJcXG4gICAgICBjb25zdCBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgKiAoICggb3B0aW9ucy5wcmVsb2FkUGFnZXMgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IDEgKSArIDEgKSAtIDE7XFxyXFxuICAgICAgcmV0dXJuIGRhdGFbIDEgXS5pc1dpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaW4oIFNwbGlkZS5pbmRleCwgZGlzdGFuY2UgKSA/IGxvYWQoIGRhdGEgKSA6IHRydWU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIGVudHJpZXMubGVuZ3RoIHx8IG9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YoIGV2ZW50cyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzIGxvYWRpbmcgdGhlIGltYWdlIGluIHRoZSBwcm92aWRlZCBkYXRhLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gZGF0YSAtIEEgTGF6eUxvYWRFbnRyeSBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsb2FkKCBkYXRhOiBMYXp5TG9hZEVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyeSApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgWyBpbWcgXSA9IGRhdGE7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICBhZGRDbGFzcyggZGF0YVsgMSBdLnNsaWRlLCBDTEFTU19MT0FESU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiRyApO1xcclxcbiAgICBiaW5kKCBpbWcsICdsb2FkIGVycm9yJywgYXBwbHkoIG9uTG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYWQsIGRhdGEgKSApO1xcclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIGltZywgJ3NyYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiInLCBnZXRBdHRyaWJ1dGUoIGltZywgU1JDX0RBVEFfQVRUUklCVVRFICkgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuICAgIHNldEF0dHJpYnV0ZSggaW1nLCAnc3Jjc2V0JywgZ2V0QXR0cmlidXRlKCBpbWcsIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBTUkNTRVRfREFUQV9BVFRSSUJVVEUgKSApO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKCBpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSApO1xcclxcbiAgICByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKCBpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGlzIGxvYWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgYW55IGVycm9yIG9jY3Vycy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EgLSBBIExhenlMb2FkRW50cnkgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIGUgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gRXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbkxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBkYXRhOiBMYXp5TG9hZEVudHJ5LCBlOiBFdmVudCApOiB2b2lkIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IFsgaW1nLCBTbGlkZSBdID0gZGF0YTtcXHJcXG5cXHJcXG4gICAgcmVtb3ZlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKCBTbGlkZS5zbGlkZSwgQ0xBU1NfTE9BRElORyApO1xcclxcblxcclxcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiImYgKCBlLnR5cGUgIT09ICdlcnJvcicgKSB7XFxyXFxuICAgICAgcmVtb3ZlKCBkYXRhIgogICAgICAgICAgICAgICAgICAgICAgICBiIlsgMiBdICk7XFxyXFxuICAgICAgZGlzcGxheSggaW1nLCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGltZywgU2xpZGUgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCggRVZFTlRfUkVTSVpFICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzU2VxdWVudGlhbCAmJiBsb2FkTmV4dCgpO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogU3RhcnRzIGxvYWRpbmcgYSBuZXh0IGltYWdlLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gbG9hZE5leHQoKTogdm9pZCB7XFxyXFxuICAgIGVudHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmxlbmd0aCAmJiBsb2FkKCBlbnRyaWVzLnNoaWZ0KCkgKTtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGx5KCBlbXB0eSwgZW50cmllcyApLFxcclxcbiAgICBjaGVjayxcXHJcXG4gIH07XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBUlJPV19MRUZULCBBUlJPV19SSUdIVCB9IGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi9jb25zdGFudHMvYXJyb3dzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgQVIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQ09OVFJPTFMsXFxyXFxuICBBUklBX0xBQkVMLFxcclxcbiAgQVJJQV9PUklFTlRBVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT04sXFxyXFxuICBBUklBX1NFTEVDVEVELFxcclxcbiAgUk9MRSxcXHJcXG4gIFRBQicKICAgICAgICAgICAgICAgICAgICAgICAgYiJfSU5ERVgsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IENMQVNTX0FDVElWRSwgQ0xBU1NfUEFHSU5BVElPTiB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHsgVFRCIH0gZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4uLy4uL2NvbnN0YW50cy9kaXJlY3Rpb25zJztcXHJcXG5pbXBvcnQge1xcclxcbiAgRSIKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX0VORF9JTkRFWF9DSEFOR0VELFxcclxcbiAgRVZFTlRfTU9WRSxcXHJcXG4gIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9QQUdJTkFUSU9OX01PVU5URUQsXFxyXFxuICBFVkVOVF9QQUdJTkFUSU9OX1VQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEVELFxcclxcbiAgRVZFTlRfUkVGUkVTSCxcXHJcXG4gIEVWRU5UX1NDUk9MTCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXHJcXG4gIEVWRU5UX1VQREFURUQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIGFkZENsYXNzLCIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGFwcGx5LFxcclxcbiAgY2VpbCxcXHJcXG4gIGNyZWF0ZSxcXHJcXG4gIGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5LFxcclxcbiAgZW1wdHksXFxyXFxuICBmb2N1cyxcXHJcXG4gIGZvcm1hdCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBwcmV2ZW50LFxcclxcbiAgcmVtb3ZlLFxcclxcbiAgcmVtb3ZlQXR0cmlidXRlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbiAgc2V0QXR0cmlidXRlLFxcclxcbiAgcycKICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWNlLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IG5vcm1hIgogICAgICAgICAgICAgICAgICAgICAgICBiImxpemVLZXkgfSBmcm9tICcuLi8uLi91dGlscy9kb20vbm9ybWFsaXplS2V5L25vcm1hbGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiemVLZXknO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgUGFnaW5hdGlvbiBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgaXRlbXM6IFBhZ2luYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uSXRlbVtdO1xcclxcbiAgZ2V0QXQoIGluZGV4OiBudW1iZXIgKTogUGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25JdGVtO1xcclxcbiAgdXBkYXRlKCk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBkYXRhIG9mIHRoZSBwYWdpbmF0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlIFBhZ2luYXRpb25EYXRhIHtcXHJcXG4gIGxpc3Q6IEhUTUxVTGlzdEVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50O1xcclxcbiAgaXRlbXM6IFBhZ2luYXRpb25JdGVtW107XFxyXFxufVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBlYWNoIHBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGl0ZW0uXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uSXRlbSB7XFxyXFxuICBsaTogSFRNTExJRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQ7XFxyXFxuICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xcclxcbiAgcGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IG51bWJlcjtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgZm9yIHRoZSBwYWdpbmF0aW9uIFVJIChhIHNsaWRlIHBpY2tlcikuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjEvTk9URS13YWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWFyaWEtcHJhY3RpY2VzLTEuMi0yMDIxMTEyOS8jZ3JvdXBlZC1jYXJvdXNlbC1lbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHNcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb24gY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIFBhZ2luYXRpb24oIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cywgb3B0aW9uczogT3B0aW9ucyApOiBQYWdpbmF0aW9uQ29tcG9uZW50IHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBjb25zdCBldmVudCA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB7IG9uLCBlbWl0LCBiaW5kIH0gPSBldmVudDtcXHJcXG4gIGNvbnN0IHsgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcywgRWxlbWVudHMsIENvbnRyb2xsZXIgfSA9IENvbXBvbmVudHM7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBoYXNGb2N1cywgZ2V0SW5kZXgsIGdvIH0gPSBDb250cm9sbGVyO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGNvbnN0IHsgcmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgY29uc3QgeyBwYWdpbmF0aW9uOiBwbGFjZWhvbGRlciB9ID0gRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGl0ZW1zLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBpdGVtczogUGFnaW5hdGlvbkl0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtW10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0OiBIVE1MVUxpc3RFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB8IG51bGw7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2llciBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgcGFnaW5hdGlvbkNsYXNzZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveSgpO1xcclxcbiAgICBvbiggWyBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF0sIG1vdW50ICk7XFxyXFxuXFxyXFxuICAgIGNvbnN0IGVuYWJsZWQgPSBvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uO1xcclxcbiAgICBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KCBwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJob2xkZXIsIGVuYWJsZWQgPyAnJyA6ICdub25lJyApO1xcclxcblxcclxcbiAgICBpZiAoIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbmFibGVkICkge1xcclxcbiAgICAgIG9uKCBbIEVWRU5UX01PVkUsIEVWRU5UX1NDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPTEwsIEVWRU5UX1NDUk9MTEVEIF0sIHVwZGF0ZSApO1xcclxcbiAgICAgIGNyZWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VQYWdpbmF0aW9uKCk7XFxyXFxuICAgICAgdXBkYXRlKCk7XFxyXFxuICAgICAgZW1pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwgeyBsaXN0LCBpdGVtcyB9LCBnZXRBdCggUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZS5pbmRleCApICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIERlc3Ryb3lzIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xcclxcbiAgICBpZiAoIGxpc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIHJlbW92ZSggcGxhY2Vob2xkZXIgPyBzbGljZSggbGlzdC5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW4gKSA6IGxpc3QgKTtcXHJcXG4gICAgICByZW1vdmVDbGFzcyggbGlzdCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25DbGFzc2VzICk7XFxyXFxuICAgICAgZW1wdHkoIGl0ZW1zICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIGxpc3QgPSBudWxsO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5kZXN0cm95KCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVzIHRoZSBwYWdpbmF0aW9uIGVsZW1lbnQgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhZ2luYXRpb24oKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gU3BsaWRlO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBjbGFzc2VzLCBpMThuLCBwZXJQYWdlIH0gPSBvcHRpb25zO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY29uc3QgbWF4ID0gaGFzRm9jdXMoKSA/IENvbnRyb2xsZXIuZ2V0RW5kKCkgKyAxJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA6IGNlaWwoIGxlbmd0aCAvIHBlclBhZ2UgKTtcXHJcXG5cXHJcXG4gICAgbGlzdCA9IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGFjZWhvbGRlciB8fCBjcmVhdGUoICd1bCcsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbSIKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLnRyYWNrLnBhcmVudEVsZW1lbnQgKTtcXHJcXG5cXHJcXG4gICAgYWRkQ2xhc3MoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBsaXN0LCAoIHBhZ2luYXRpb25DbGFzc2VzID0gYCR7IENMQVNTX1BBR0lOQVRJT04gfS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSR7IGdldERpcmVjdGlvbigpIH1gICkgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGlzdCwgUk9MRSwgJ3RhYmxpc3QnICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSggbGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0ICk7XFxyXFxuICAgIHNldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoIGxpc3QsIEFSSUFfT1JJRU5UQVRJT04sIGdldERpcmVjdGlvbigpID09PSBUVEIgPycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3ZlcnRpY2FsJyA6ICcnICk7XFxyXFxuXFxyXFxuICAgIGZvciAoIGxldCBpID0gMDsgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2kgPCBtYXg7IGkrKyApIHtcXHJcXG4gICAgICBjb25zdCBsaSAgICAgICA9IGNyZWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiImUoICdsaScsIG51bGwsIGxpc3QgKTtcXHJcXG4gICAgICBjb25zdCBidXR0b24gICA9IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBjcmVhdGUoICdidXR0b24nLCB7IGNsYXNzOiBjbGFzc2VzLnBhZ2UsIHR5cGU6ICdidXQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG9uJyB9LCBsaSApO1xcclxcbiAgICAgIGNvbnN0IGNvbnRyb2xzID0gU2xpZGVzLmciCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRJbiggaSApLm1hcCggU2xpZGUgPT4gU2xpZGUuc2xpZGUuaWQgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgdGV4dCAgICAgPSAhIGhhc0ZvY3VzKCkgJiYgcGVyUGFnZSA+IDEgPyBpMScKICAgICAgICAgICAgICAgICAgICAgICAgYic4bi5wYWdlWCA6IGkxOG4uc2xpZGVYO1xcclxcblxcclxcbiAgICAgIGJpbmQoIGJ1dHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm4sICdjbGljaycsIGFwcGx5KCBvbkNsaWNrLCBpICkgKTtcXHJcXG5cXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCBvcHRpb25zLnBhZ2luYXRpb25LZXlib2FyZCApIHtcXHJcXG4gICAgICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5kKCBidXR0b24sICdrZXlkb3duJywgYXBwbHkoIG9uS2V5ZG93biwgaSApICk7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGxpLCBSJwogICAgICAgICAgICAgICAgICAgICAgICBiIk9MRSwgJ3ByZXNlbnRhdGlvbicgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGJ1IgogICAgICAgICAgICAgICAgICAgICAgICBiInR0b24sIFJPTEUsICd0YWInICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBidXR0IgogICAgICAgICAgICAgICAgICAgICAgICBiIm9uLCBBUklBX0NPTlRST0xTLCBjb250cm9scy5qb2luKCAnICcgKSApO1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzZXRBdHRyaWJ1dGUoIGJ1dHRvbiwgQVJJQV9MQUJFTCwgZm9ybWF0KCB0ZXh0LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSArIDEgKSApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBUQUJfSU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInREVYLCAtMSApO1xcclxcblxcclxcbiAgICAgIGl0ZW1zLnB1c2goIHsgbGksIGJ1dHRvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHBhZ2U6IGkgfSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgZWFjaCBwYWdpbmF0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkb3QuXFxyXFxuICAgKiBNb3ZlcyB0aGUgZm9jdXMgdG8gdGhlIGFjdGl2ZSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIGFjY2Vzc2liaWxpdHkuXFxyXFxuICAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6JwogICAgICAgICAgICAgICAgICAgICAgICBiJy8vd3d3LnczLm9yZy9XQUkvdHV0b3JpYWxzL2Nhcm91c2Vscy9mdW5jdGlvbmFsaXR5L1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcGFnZSAtIEEgY2xpY2tlZCBwYWdlIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25DbGljayggcGFnZTogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApOiB2b2lkIHtcXHJcXG4gICAgZ28oIGA+JHsgcGFnZSB9YCwgdHJ1ZSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gYW55IGtleSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgcHJlc3NlZCBvbiB0aGUgcGFnaW5hdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjEvTk9URS13YWktYXJpYS1wcmFjdGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLTEuMi0yMDIxMTEyOS8ja2V5Ym9hcmQtaW50ZXJhY3Rpb24tMjFcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIHBhZ2UgLSBBIHBhZ2UgaW5kZXguXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGUgICAgLSBBIEtleWJvYXJkRXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gb25LZXlkb3duKCBwYWdlOiBudW1iZXIsIGU6IEtleWJvYXJkRXZlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gaXRlbXM7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoIGUgKTtcXHJcXG4gICAgY29uc3QgZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInciA9IGdldERpcmVjdGlvbigpO1xcclxcblxcclxcbiAgICBsZXQgbmV4dFBhZ2UgPSAtMScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAgIGlmICgga2V5ID09PSByZXNvbHZlKCBBUlJPV19SSUdIVCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhbHNlLCBkaXIgKSApIHtcXHJcXG4gICAgICBuZXh0UGFnZSA9ICsrcGFnZSAlIGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGg7XFxyXFxuICAgIH0gZWxzZSBpZiAoIGtleSA9PT0gcmVzb2x2ZSggQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQsIGZhbHNlLCBkaXIgKSApIHtcXHJcXG4gICAgICBuZXh0UGFnZSA9ICggLS1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSArIGxlbmd0aCApICUgbGVuZ3RoO1xcclxcbiAgICB9IGVsc2UgaWYgKCBrZXkgJwogICAgICAgICAgICAgICAgICAgICAgICBiIj09PSAnSG9tZScgKSB7XFxyXFxuICAgICAgbmV4dFBhZ2UgPSAwO1xcclxcbiAgICB9IGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibHNlIGlmICgga2V5ID09PSAnRW5kJyApIHtcXHJcXG4gICAgICBuZXh0UGFnZSA9IGwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5ndGggLSAxO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGNvbnN0IGl0ZW0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRlbXNbIG5leHRQYWdlIF07XFxyXFxuXFxyXFxuICAgIGlmICggaXRlbSApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgZm9jdXMoIGl0ZW0uYnV0dG9uICk7XFxyXFxuICAgICAgZ28oIGA+JHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5leHRQYWdlIH1gICk7XFxyXFxuICAgICAgcHJldmVudCggZSwgdHJ1ZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgbGF0ZXN0IGRpcmVjdGlvbiBmb3IgcGFnaW5hdGlvbi5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZ1bmN0aW9uIGdldERpcmVjdGlvbigpOiBPcHRpb25zWydkaXJlY3Rpb24nXSB7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gb3B0aW9ucy5wYWdpbmF0aW9uRGlyZWN0aW9uIHx8IG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmRpcmVjdGlvbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFJldHVybnMgdGhlIHBhZ2luYXRpb24gaXRlbSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiBpbmRleC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHJldHVybiBBIHBhZ2luYXRpb24gaXRlbSBvYmplY3QgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIGF2YWlsYWJsZSwgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gZ2V0QXQoIGluZGV4OiBudW1iZXIgKTogUGFnaW5hdGlvbkl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgdW5kZWZpbmVkIHtcXHJcXG4gICAgcmV0dXJuIGl0ZW1zWyBDb250cm9sbGVyLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb1BhZ2UoIGluZGV4ICkgXTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIFVwZGF0ZXMgdGhlIHBhZ2luYXRpb24gc3RhdHVzLlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBjb25zdCBwcmV2ID0gZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0KCBnZXRJbmRleCggdHJ1ZSApICk7XFxyXFxuICAgIGNvbnN0IGN1cnIgPSBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIGdldEluZGV4KCkgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBwcmV2ICkge1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICBjb25zdCB7IGJ1dHRvbiB9ID0gcHJldjtcXHJcXG4gICAgICByZW1vdmVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3MoIGJ1dHRvbiwgQ0xBU1NfQUNUSVZFICk7XFxyXFxuICAgICAgcmVtb3ZlQXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZSggYnV0dG9uLCBBUklBX1NFTEVDVEVEICk7XFxyXFxuICAgICAgc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZSggYnV0dG9uLCBUQUJfSU5ERVgsIC0xICk7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIGlmICggY3VyciApIHtcXHJcXG4gICAgICBjb25zdCB7IGJ1dHRvbiB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGN1cnI7XFxyXFxuICAgICAgYWRkQ2xhc3MoIGJ1dHRvbiwgQ0xBU1NfQUNUSVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBBUklBX1NFTEVDVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBUQUJfSU5EJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVYLCAnJyApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGVtaXQoIEVWRU5UX1BBIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0dJTkFUSU9OX1VQREFURUQsIHsgbGlzdCwgaXRlbXMgfSwgcHJldiwgY3VyciApOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIGl0ZW1zLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIGdldEF0LFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgdXBkYXRlLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgUycKICAgICAgICAgICAgICAgICAgICAgICAgYiJDUk9MTF9MSVNURU5FUl9PUFRJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2xpc3RlIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5lci1vcHRpb25zJztcXHJcXG5pbXBvcnQgeyBNT1ZJTkcgfSBmcm9tICcuLi8uLi9jIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9uc3RhbnRzL3N0YXRlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlIgogICAgICAgICAgICAgICAgICAgICAgICBiIkNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgYWJzLCBwcmV2ZW50LCB0aW1lT2YgfSBmcm9tICcuLi8uLi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgV2hlZWwgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgV2hlZWxDb21wb25lbnQgZXh0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50IGZvciBvYnNlcnZpbmcgdGhlIG1vdXNlIHdoZWVsIGFuZCBtb3ZpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHJldHVybiBBIFdoZWVsIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBmdW5jdGlvbiBXaGVlbCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IFdoZWVsQ29tcG9uZW50IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBjb25zdCB7IGJpbmQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBsYXN0IHRpbWUgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gdGhlIHdoZWVsIG1vdmVzIHRoZSBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGxldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbGFzdFRpbWUgPSAwO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgdycKICAgICAgICAgICAgICAgICAgICAgICAgYidoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGlmICggb3B0aW9ucy53aGVlbCApJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB7XFxyXFxuICAgICAgYmluZCggQ29tcG9uZW50cy5FbGVtZW50cy50cmFjaywgJ3doIgogICAgICAgICAgICAgICAgICAgICAgICBiImVlbCcsIG9uV2hlZWwsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TICk7XFxyXFxuICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgdXNlciByb3RhdGVzIHRoZSBtb3VzZSB3aGVlbCBvbiB0aGUgc2xpZGVyLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgV2hlZWxFdmVudCBvYmplY3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbldoZWVsKCBlOiBXaGVlbEV2ZW50ICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2b2lkIHtcXHJcXG4gICAgaWYgKCBlLmNhbmNlbGFibGUgKSB7XFxyXFxuICAgICAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgZGVsdGFZIH0gPSBlO1xcclxcbiAgICAgIGNvbnN0IGJhY2t3YXJkcyA9IGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0YVkgPCAwO1xcclxcbiAgICAgIGNvbnN0IHRpbWVTdGFtcCA9IHRpbWVPZiggZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICBjb25zdCBtaW4gICAgICAgPSBvcHRpb25zLndoZWVsTWluVGhyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzaG9sZCB8fCAwO1xcclxcbiAgICAgIGNvbnN0IHNsZWVwICAgICA9IG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3doZWVsU2xlZXAgfHwgMDtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGFicyggZGVsdGFZICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID4gbWluICYmIHRpbWVTdGFtcCAtIGxhc3RUaW1lID4gc2xlZXAgKSB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgU3BsaWRlLmdvKCBiYWNrd2FyZHMgPyAnPCcgOiAnPicgKTtcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBsYXN0VGltZSA9IHRpbWVTdGFtcDtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHNob3VsZFByZXZlbnQoIGJhY2t3YXJkcyApICYmIHByZXZlbnQoIGUgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIHByZXZlbnQgdGhlIGRlZmF1bHQgYWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvZiB0aGUgd2hlZWwgZXZlbnQgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gYmFja3dhcmRzIC0gU2V0IHRoaXMgdG8gYHRydWVgIGZvciBiYWNrd2FyZHMgZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBzaG91bGQgYmUgcHJldmVudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gc2hvdWxkUHJldmVudCggYmFja3dhcmRzOiBib29sZWFuICk6IGJvb2xlYW4geycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuICEgb3B0aW9ucy5yZWxlYXNlV2hlZWxcXHJcXG4gICAgICB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgU3BsaWRlLnN0YXRlLmlzKCBNT1ZJTkcgKVxcclxcbiAgICAgIHx8IENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLkNvbnRyb2xsZXIuZ2V0QWRqYWNlbnQoIGJhY2t3YXJkcyApICE9PSAtMTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBUklBX0FUT01JQywgQVJJQV9CVVNZLCBBUicKICAgICAgICAgICAgICAgICAgICAgICAgYiJJQV9MSVZFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dHJpYnV0ZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpbXBvcnQgeyBDTEFTU19TUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuaW1wb3J0IHsgRVZFTlRfQVVUT1BMQVlfUEFVU0UsIEVWRU5UX0FVVE9QTEFZX1BMQScKICAgICAgICAgICAgICAgICAgICAgICAgYiJZLCBFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRUQgfSBmcm9tICcuLi8uLi9jb25zdGFuIgogICAgICAgICAgICAgICAgICAgICAgICBiInRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UsIFJlcXVlc3RJIgogICAgICAgICAgICAgICAgICAgICAgICBiIm50ZXJ2YWwgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltIgogICAgICAgICAgICAgICAgICAgICAgICBiInBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhcHBlbmQsIGFwcGx5LCBjcmVhdGUsIHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW1vdmUsIHJlbW92ZUF0dHJpYnV0ZSwgc2V0QXR0cmlidXRlIH0gZnJvbSAnLi4vLi4vdSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIExpdmUgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUNvbXBvbmVudCBleHRlbmRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidCYXNlQ29tcG9uZW50IHtcXHJcXG4gIGRpc2FibGUoIGRpc2FibGVkOiBib29sZWFuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBEZWxheSBpbiBtaWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzZWNvbmRzIGJlZm9yZSByZW1vdmluZyB0aGUgU1IgZmllbGQgZm9yIFdpbmRvd3MgTmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJhdG9yLlxcclxcbiAqL1xcclxcbmNvbnN0IFNSX1JFTU9WQUxfREVMQVkgPSA5MDtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgaW1wbGVtZW50aW5nIEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlIFJlZ2lvbiB0byB0aGUgc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQGxpbmsgaHR0cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5L0FSSUEvQVJJQV9MaXZlX1JlZ2lvbnNcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSA0LjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgTGl2ZSBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gTGl2ZSggU3BsaWRlOiBTcGxpZGUsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IExpdmVDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHtcXHJcXG4gIGNvbnN0IHsgb24gfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBjb25zdCB7IHRyYWNrIH0gPSBDb21wb25lbnRzLkVsZW1lbnRzO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpdmUgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2lvbiBpcyBlbmFibGVkIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgZW5hYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPSBvcHRpb25zLmxpdmUgJiYgISBvcHRpb25zLmlzTmF2aWdhdGlvbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBzcGFuIGVsZW1lbnQgZm9yIHRoZSBTUiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm5seSB0ZXh0LlxcclxcbiAgICovXFxyXFxuICBjb25zdCBzciA9IGNyZWF0ZSggJ3NwYW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJywgQ0xBU1NfU1IgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBSZXF1ZXN0SW50ZXJ2YWwgaW5zdGFuY2UuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbCggU1JfUkVNT1ZBTF9ERUxBWSwgYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0b2dnbGUsIGZhbHNlICkgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqIC0gSkFXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MgbmVlZHMgYGFyaWEtYXRvbWljYCB0byBtYWtlIHRoZSBgYXJpYS1idXN5YCB3b3JrLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIC0gSW1tZWRpYXRlbHkgcmVtb3ZpbmcgdGhlIFNSIG1ha2VzIFdpbmRvd3MgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05hcnJhdG9yIHNpbGVudCwgaGVuY2UgcmVxdWlyZXMgdGhlIGRlbGF5IGFyb3VuZCA1MG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBpZiAoIGVuYWJsZWQgKSB7XFxyXFxuICAgICAgZGlzYWJsZSggISBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5BdXRvcGxheS5pc1BhdXNlZCgpICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSggdHJhY2ssIEFSSUFfQVRPTUlDLCB0cnVlICk7XFxyXFxuICAgICAgc3IudGV4dEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib250ZW50ID0gJ1x4ZTJceDgwXHhhNic7XFxyXFxuXFxyXFxuICAgICAgb24oIEVWRU5UX0EiCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVRPUExBWV9QTEFZLCBhcHBseSggZGlzYWJsZSwgdHJ1ZSApICk7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKCBFVkVOVF9BVVRPUExBWV9QQVVTRSwgYXBwbHkoIGRpc2FibGUsIGZhbHNlICkgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgb24oIFsgRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEIF0sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseSggdG9nZ2xlLCB0cnVlICkgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogVG9nZ2xlcyB0aGUgU1IgZmllbGQgYW5kIGBhcmlhJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1idXN5YC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gYWN0aXZlIC0gRGV0ZXJtaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgd2hldGhlciB0byBhY3RpdmF0ZSB0aGUgZmllbGQgb3Igbm90LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZnVuY3Rpb24gdG9nZ2xlKCBhY3RpdmU6IGJvb2xlYW4gKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHRyYWNrLCBBUklBX0JVU1ksIGFjdGl2ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBhY3RpdmUgKSB7XFxyXFxuICAgICAgYXBwZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCggdHJhY2ssIHNyICk7XFxyXFxuICAgICAgaW50ZXJ2YWwuc3RhcnQoKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0gZWxzZSB7XFxyXFxuICAgICAgcmVtb3ZlKCBzciApO1xcclxcbiAgICAgIGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbC5jYW5jZWwoKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZUF0dHJpYnV0ZSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrLCBbIEFSSUFfTElWRSwgQVJJQV9BVE9NSUMsIEFSSUFfQlVTWSBdICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICByZW1vdmUoIHNyICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBEaXNhYmxlcy9lbmFibGVzIHRoZSBsaXZlIHJlZ2lvbi5cXHJcXG4gICAqIEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2VzIG5vdGhpbmcgd2hlbiB0aGUgYGxpdmVgIG9wdGlvbiBpcyBub3QgZW5hYmxlZC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGRpc2FibGVkIC0gYHRydWVgIHRvIGRpc2FiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlIHRoZSBsaXZlIHJlZ2lvbiBvciBgZmFsc2VgIHRvIGVuYWJsZSBpdCBhZ2FpbicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRpc2FibGUoIGRpc2FibGVkOiBib29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhbiApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBlbmFibGVkICkge1xcclxcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXRBdHRyaWJ1dGUoIHRyYWNrLCBBUklBX0xJVkUsIGRpc2FibGVkID8gJ29mZicgOiAncCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbGl0ZScgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIG1vdW50LFxcclxcbiAgICBkaXNhYmxlLFxcclxcbiAgICBkZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIH07XFxyXFxufSIsImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwnLi4vdHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiImVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU0VTIH0gZnJvbSAnLi9jbGFzc2VzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4vaTE4bic7XFxyXFxuXFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGRlZmF1bHQgb3B0aW9ucy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgTm90ZSB0aGF0IHRoaXMgY29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluIGFsbCBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnQgY29uc3QgREVGQVVMVFM6IE9wdGlvbnMgPSB7XFxyXFxuICB0eXBlICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgOiAnc2xpZGUnLFxcclxcbiAgcm9sZSAgICAgICAgICAgICAgOiAncmVnaW8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibicsXFxyXFxuICBzcGVlZCAgICAgICAgICAgICA6IDQwMCxcXHJcXG4gIHBlclBhZ2UgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICA6IDEsXFxyXFxuICBjbG9uZVN0YXR1cyAgICAgICA6IHRydWUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgYXJyb3dzICAgICAgICAgICAgOiB0cnVlLFxcclxcbiAgcGFnaW5hdGlvbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIDogdHJ1ZSxcXHJcXG4gIHBhZ2luYXRpb25LZXlib2FyZDogdHJ1ZSxcXHJcXG4gIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbCAgICAgICAgICA6IDUwMDAsXFxyXFxuICBwYXVzZU9uSG92ZXIgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiB0cnVlLFxcclxcbiAgcGF1c2VPbkZvY3VzICAgICAgOiB0cnVlLFxcclxcbiAgcmVzZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0UHJvZ3Jlc3MgICAgIDogdHJ1ZSxcXHJcXG4gIGVhc2luZyAgICAgICAgICAgIDogJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAxKScsXFxyXFxuICBkcmFnICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgOiB0cnVlLFxcclxcbiAgZGlyZWN0aW9uICAgICAgICAgOiAnbHRyJyxcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB0cmltU3BhY2UgICAgICAgICA6IHRydWUsXFxyXFxuICBmb2N1c2FibGVOb2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiInMgICAgOiAnYSwgYnV0dG9uLCB0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdCwgaWZyYW1lJywiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsaXZlICAgICAgICAgICAgICA6IHRydWUsXFxyXFxuICBjbGFzc2VzICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgOiBDTEFTU0VTLFxcclxcbiAgaTE4biAgICAgICAgICAgICAgOiBJMThOLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJlZHVjZWRNb3Rpb246IHtcXHJcXG4gICAgc3BlZWQgICAgICA6IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLFxcclxcbiAgICByZXdpbmRTcGVlZDogMCxcXHJcXG4gICAgYXV0b3BsYXkgICA6ICdwYSIKICAgICAgICAgICAgICAgICAgICAgICAgYid1c2VcJyxcXHJcXG4gIH0sXFxyXFxufTsiLCIvKipcXHJcXG4gKiBUaGUgY29sbGVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gb2YgaTE4biBzdHJpbmdzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJMThOID0ge1xcclxcbiAgcHJldiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICA6ICdQcmV2aW91cyBzbGlkZScsXFxyXFxuICBuZXh0ICAgICAgOiAnTmV4dCBzIgogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGUnLFxcclxcbiAgZmlyc3QgICAgIDogJ0dvIHRvIGZpcnN0IHNsaWRlJyxcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICBsYXN0ICAgICAgOiAnR28gdG8gbGFzdCBzbGlkZScsXFxyXFxuICBzbGlkZVggICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIDogJ0dvIHRvIHNsaWRlICVzJyxcXHJcXG4gIHBhZ2VYICAgICA6ICdHbyB0byBwYWciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSAlcycsXFxyXFxuICBwbGF5ICAgICAgOiAnU3RhcnQgYXV0b3BsYXknLFxcclxcbiAgcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhdXNlICAgICA6ICdQYXVzZSBhdXRvcGxheScsXFxyXFxuICBjYXJvdXNlbCAgOiAnYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhcm91c2VsJyxcXHJcXG4gIHNsaWRlICAgICA6ICdzbGlkZScsXFxyXFxuICBzZWxlY3QgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgIDogJ1NlbGVjdCBhIHNsaWRlIHRvIHNob3cnLFxcclxcbiAgc2xpZGVMYWJlbDogIgogICAgICAgICAgICAgICAgICAgICAgICBiIiclcyBvZiAlcycsIC8vIFsgc2xpZGUgbnVtYmVyIF0gLyBbIHNsaWRlIHNpemUgXSIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59O1xcclxcbiIsImltcG9ydCB7IEVWRU5UX01PVU5URUQsIEVWRU5UX1JFRlJFJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNIIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgIgogICAgICAgICAgICAgICAgICAgICAgICBiIkV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJyIKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuaW1wb3J0IHsgQ29tcG9uZW50cywgT3B0aW9ucywgVHJhbnNpdGlvbkNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb25lbnQgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgbmV4dFRpYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJrLCBub29wIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciB0aGUgZmFkZSB0cmFuc2l0aW9uLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBUcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNpdGlvbiBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gRmFkZSggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zOiBPcHRpb25zICk6IFRyYW5zaXRpb25Db21wb25lbnQge1xcclxcbiAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgU2xpZGVzIH0gPSBDb21wb25lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIEV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZSggU3BsaWRlICkub24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVGUkVTSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgXSwgaW5pdCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lhbGl6ZXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqIE9mZnNldHMgYWxsIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgZm9yIHN0YWNraW5nIHRoZW0gb250byB0aGUgaGVhZCBvZiB0aGUgbGlzdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBUaGUgYG5leHRUaWNrYCBkaXNhYmxlcyB0aGUgaW5pdGlhbCBmYWRlIHRyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uIG9mIHRoZSBmaXJzdCBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGluaXQoKTogdm9pZCB7XFxyXFxuICAgIFNsaWRlcy5mb3JFYWNoKCBTbGlkZSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgYiIge1xcclxcbiAgICAgIFNsaWRlLnN0eWxlKCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidYKC0keyAxMDAgKiBTbGlkZS5pbmRleCB9JSlgICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0YXJ0cyB0aGUgdHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQSBzbGlkZSBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gYmUgYWN0aXZlLlxcclxcbiAgICogQHBhcmFtIGRvbmUgIC0gVGhlIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cmFuc2l0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdGFydCggaW5kZXg6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIGRvbmU6ICgpID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuICAgIFNsaWRlcy5zdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiImUoICd0cmFuc2l0aW9uJywgYG9wYWNpdHkgJHsgb3B0aW9ucy5zcGVlZCB9bXMgJHsgb3AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuZWFzaW5nIH1gICk7XFxyXFxuICAgIG5leHRUaWNrKCBkb25lICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FydCxcXHJcXG4gICAgY2FuY2VsOiBub29wLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImltcG9ydCB7IFNMSURFIH0gZnJvbSBcJy4uLy4uL2NvbnN0YW50cy90eXBlc1wnO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9yIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9TcGxpZGUnO1xcclxcbmltcG9ydCB7IENvbXBvbmVudHMsIE9wdGlvbnMsIFRyYW5zIgogICAgICAgICAgICAgICAgICAgICAgICBiIml0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBhYnMsIGFwcGx5LCBzdHlsZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgdGhlIHNsaWRlIHRyYW5zaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gQSBUcmFuc2l0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBmdW5jdGlvbiBTbGlkZSggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IFRyYW5zaXRpb25Db21wb25lbnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGNvbnN0IHsgTW92ZSwgQ29udHJvbGxlciwgU2Nyb2xsIH0gPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cztcXHJcXG4gIGNvbnN0IHsgbGlzdCB9ID0gQ29tcG9uZW50cy5FbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuICBjb25zdCB0cmFuc2l0aW9uID0gYXBwbHkoIHN0eWxlLCBsaXN0LCAndCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyYW5zaXRpb24nICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgYGRvbmVgIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgICovXFxyXFxuICBsZXQgZW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIEV2ZW50SW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSggU3BsaWRlICkuYmluZCggbGlzdCwgJ3RyYW5zaXRpb25lbmQnLCBlID0+IHtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgaWYgKCBlLnRhcmdldCA9PT0gbGlzdCAmJiBlbmRDYWxsYmFjayApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICBjYW5jZWwoKTtcXHJcXG4gICAgICAgIGVuZENhbGxiYWNrKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogU3RhcnRzIHRoZSB0cmFuc2l0aW9uLlxcclxcbiAgICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlIGNvbXBvbmVudCBjYWxscyB0aGlzIG1ldGhvZCBqdXN0IGJlZm9yZSB0aGUgc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciBtb3Zlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5hdGlvbiBpbmRleC5cXHJcXG4gICAqIEBwYXJhbSBkb25lICAtIFRoZSBjYWxsYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2sgZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZW5kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc3RhcnQoIGluZGV4OiBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLCBkb25lOiAoKSA9PiB2b2lkICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb24gPSBNb3ZlLnRvUG9zaXRpb24oIGluZGV4LCB0cnVlICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBwb3NpdGlvbiAgICA9IE1vdmUuZ2V0UG9zaXRpb24oKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHNwZWVkICAgICAgID0gZ2V0U3BlZWQoIGluZGV4ICk7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIGFicyggZGVzdGluYXRpb24gLSBwb3NpdGlvbiApID49IDEgJiYgc3BlZWQgPicKICAgICAgICAgICAgICAgICAgICAgICAgYic9IDEgKSB7XFxyXFxuICAgICAgaWYgKCBvcHRpb25zLnVzZVNjcm9sbCApIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBTY3JvbGwuc2Nyb2xsKCBkZXN0aW5hdGlvbiwgc3BlZWQsIGZhbHNlLCBkb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSApO1xcclxcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICB0cmFuc2l0aW9uKCBgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zZm9ybSAkeyBzcGVlZCB9bXMgJHsgb3B0aW9ucy5lYXNpbmcgfWAgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICBNb3ZlLnRyYW5zbGF0ZSggZGVzdGluYXRpb24sIHRydWUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XFxyXFxuICAgICAgfVxcclxcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbHNlIHtcXHJcXG4gICAgICBNb3ZlLmp1bXAoIGluZGV4ICk7XFxyXFxuICAgICAgZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmUoKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQ2FuY2VscyB0aGUgdHJhbnNpdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJuIGNhbmNlbCgpOiB2b2lkIHtcXHJcXG4gICAgdHJhbnNpdGlvbiggJycgKTtcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIFNjcm9sbC5jYW5jZWwoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFJldHVybnMgdGhlIHRyYW5zaXRpb24gc3BlZWQuXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBpbmRleCAtIEEgZGVzdGluYXRpb24gaW5kZXguXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBnZXRTcGVlZCggaW5kZXg6IG51bWJlciApOiBudW1iZXIgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgY29uc3QgeyByZXdpbmRTcGVlZCB9ID0gb3B0aW9ucztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBTTElERSApICYmIHJld2luZFNwZWVkICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBjb25zdCBwcmV2ID0gQ29udHJvbGxlci5nZXRJbmRleCggdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgKTtcXHJcXG4gICAgICBjb25zdCBlbmQgID0gQ29udHJvbGxlci5nZXRFbmQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCAoIHByZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHx8ICggcHJldiA+PSBlbmQgJiYgaW5kZXggPT09IDAgKSApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gcmV3aW5kU3BlZWQ7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICByZXR1cm4gb3B0aW9ucy5zcGVlZDtcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gICAgc3RhcnQsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjYW5jZWwsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgKiBhcyBDJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9tcG9uZW50Q29uc3RydWN0b3JzIGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5pbXBvcnQgeyBTbGlkZU1hdGNoZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1NsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMvU2xpZGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU19JTklUSUFMSVpFRCB9IGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHsgREVGQVVMVFMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfREVTVFJPWSwgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVBRFksIEVWRU5UX1JFRicKICAgICAgICAgICAgICAgICAgICAgICAgYiJSRVNIIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IERBVEFfQVRUUklCVVRFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5pbXBvcnQgeyBDUkVBVEVELCBERVNUUk9ZRUQsIElETEUsIFNUQVRFUyB9IGZyb20gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFIH0gZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlciIKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlLCBFdmVudEludGVyZmFjZU9iamVjdCwgU3RhdGUsIFN0YXRlT2JqZWN0IH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgRmFkZSwgU2xpZGUgIgogICAgICAgICAgICAgICAgICAgICAgICBiIn0gZnJvbSAnLi4vLi4vdHJhbnNpdGlvbnMnO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgQ29tcG9uZW50Q29uc3RydWN0b3IsIENvbXBvbmVudHMsIEV2ZW50TWFwLCBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW9ucywgU3luY1RhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHsgYWRkQ2xhc3MsIGFzc2VydCwgYXNzaWduLCBlbXB0eSwgZm9yT3duLCBnZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJidXRlLCBpc1N0cmluZywgbWVyZ2UsIHF1ZXJ5LCBzbGljZSB9IGZyb20gJy4uLy4uL3V0IgogICAgICAgICAgICAgICAgICAgICAgICBiImlscyc7XFxyXFxuaW1wb3J0IHsgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZIH0gIgogICAgICAgICAgICAgICAgICAgICAgICBiImZyb20gJy4uLy4uL2NvbnN0YW50cy9hdHRyaWJ1dGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGZyb250ZW5kIGNsYXNzIGZvciB0aGUgU3BsaWRlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGNsYXNzIFNwbGlkZSB7XFxyXFxuICAvKipcXHJcXG4gICAqIENoYW5nZXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWZhdWx0IG9wdGlvbnMgZm9yIGFsbCBTcGxpZGUgaW5zdGFuY2VzLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgc3RhdGljIGRlZmF1bHRzOiBPcHRpb25zID0ge307XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBzdGF0ZSBudW1iZXJzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRFUyA9IFNUQVRFUztcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSByb290IGVsZW1lbnQgd2hlcmUgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUgaXMgYXBwbGllZC5cXHJcXG4gICAqL1xcclxcbiAgcmVhZG9ubHkgcm9vdDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hUTUxFbGVtZW50O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgRXZlbnRCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzT2JqZWN0IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgcmVhZG9ubHkgZXZlbnQ6IEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZU9iamVjdCA9IEV2ZW50SW50ZXJmYWNlKCk7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBhbGwgY29tcG9uZW50IG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RzLlxcclxcbiAgICovXFxyXFxuICByZWFkb25seSBDb21wb25lbnRzOiBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyA9IHt9IGFzIENvbXBvbmVudHM7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgU3RhdGVPYmplY3Qgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICByZWFkb25seSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGU6IFN0YXRlT2JqZWN0ID0gU3RhdGUoIENSRUFURUQgKTtcXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEFuIGFycmF5IHdpdGggU3luY1RhcmdldCBvYmplY3RzIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3BsaWRlIGluc3RhbmNlcyB0byBzeW5jIHdpdGguXFxyXFxuICAgKi9cXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fkb25seSBzcGxpZGVzOiBTeW5jVGFyZ2V0W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSBjdXJyZW50IG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIHJlYWRvbmx5IF9vOiBPcHRpb25zID0ge307XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBhbGwgY29tcG9uZW50cy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIHByaXZhdGUgX0M6IENvbXBvbmVudHM7XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBleHRlbnNpb25zLlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcHJpdmF0ZSBfRTogUmVjb3JkPHN0cmluZywgQ29tcG9uZW50Q29uc3RydWN0b3I+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHt9O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgVHJhbnNpdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIF9UOiBDb21wb25lbnRDb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RydWN0b3I7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBTcGxpZGUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0cnVjdG9yLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXQgIC0gVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciBmb3IgdGhlIHRhcmdldCBlbGVtZW50LCBvciB0aGUgZWxlbWVudCBpdHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xmLlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQW4gb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB3aXRoIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0cnVjdG9yKCB0YXJnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcgfCBIVE1MRWxlbWVudCwgb3B0aW9ucz86IE9wdGlvbnMgKSB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBjb25zdCByb290ID0gaXNTdHJpbmcoIHRhcmdldCApID8gcXVlcnk8SFRNTEVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50PiggZG9jdW1lbnQsIHRhcmdldCApIDogdGFyZ2V0O1xcclxcbiAgICBhc3NlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCByb290LCBgJHsgcm9vdCB9IGlzIGludmFsaWQuYCApO1xcclxcblxcclxcbiAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5yb290ID0gcm9vdDtcXHJcXG5cXHJcXG4gICAgb3B0aW9ucyA9IG1lcmdlKCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGxhYmVsICAgICA6IGdldEF0dHJpYnV0ZSggcm9vdCwgQVJJQV9MQUJFTCApJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB8fCAnJyxcXHJcXG4gICAgICBsYWJlbGxlZGJ5OiBnZXRBdHRyaWJ1dGUoIHJvb3QsIgogICAgICAgICAgICAgICAgICAgICAgICBiIiBBUklBX0xBQkVMTEVEQlkgKSB8fCAnJyxcXHJcXG4gICAgfSwgREVGQVVMVFMsIFNwIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30gKTtcXHJcXG5cXHJcXG4gICAgdHJ5IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgbWVyZ2UoIG9wdGlvbnMsIEpTT04ucGFyc2UoIGdldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoIHJvb3QsIERBVEFfQVRUUklCVVRFICkgKSApO1xcclxcbiAgICB9IGNhdGNoICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGUgKSB7XFxyXFxuICAgICAgYXNzZXJ0KCBmYWxzZSwgJ0ludmFsaWQgSlNPTicgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgdGhpcy5fbyA9IE9iamVjdC5jcmVhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBtZXJnZSgge30sIG9wdGlvbnMgKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gRXh0ZW5zaW9ucyAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXh0ZW5zaW9ucy5cXHJcXG4gICAqIEBwYXJhbSBUcmFuc2l0aW9uIC0gT3B0aW9uYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsLiBBIFRyYW5zaXRpb24gY29tcG9uZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICBtb3VudCggRXh0ZW5zaW9ucz86IFJlY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmQ8c3RyaW5nLCBDb21wb25lbnRDb25zdHJ1Y3Rvcj4sIFRyYW5zaXRpb24/OiBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50Q29uc3RydWN0b3IgKTogdGhpcyB7XFxyXFxuICAgIGNvbnN0IHsgc3RhdGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzIH0gPSB0aGlzO1xcclxcbiAgICBhc3NlcnQoIHN0YXRlLmlzKCBbICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJDUkVBVEVELCBERVNUUk9ZRUQgXSApLCAnQWxyZWFkeSBtb3VudGVkIScgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIHN0YXRlLnNldCggQ1JFQVRFRCApO1xcclxcblxcclxcbiAgICB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5fQyA9IENvbXBvbmVudHM7XFxyXFxuICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCB0aGlzLl9UIHx8ICggdGhpcy5pcyggRkFERSApID8gRmFkZSA6IFNsaWRlICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICB0aGlzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgY29uc3QgQ29uc3RydWN0b3JzID0gYXNzaWduKCB7fSwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudENvbnN0cnVjdG9ycywgdGhpcy5fRSwgeyBUcmFuc2l0aW9uOiB0aGlzLl9UIH0gKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIGZvck93biggQ29uc3RydWN0b3JzLCAoIENvbXBvbmVudCwgaycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSApID0+IHtcXHJcXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBDb21wb25lbnQoICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLCBDb21wb25lbnRzLCB0aGlzLl9vICk7XFxyXFxuICAgICAgQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYidbIGtleSBdID0gY29tcG9uZW50O1xcclxcbiAgICAgIGNvbXBvbmVudC5zZXR1cCAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50LnNldHVwKCk7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvck93biggQ29tcG9uZW50cywgY29tcG9uZW50ID0+IHtcXHJcXG4gICAgICBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50Lm1vdW50ICYmIGNvbXBvbmVudC5tb3VudCgpO1xcclxcbiAgICB9ICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLmVtaXQoIEVWRU5UX01PVU5URUQgKTtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGFkZENsYXNzKCB0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBzdGF0ZS5zZXQoIElETEUgKTtcXHJcXG4gICAgdGhpcy5lbWl0KCBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVBRFkgKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTeW5jcyB0aGUgc2xpZGVyIHdpdGggdGhlIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlZCBvbmUuXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vmb3JlIHRoZSBgbW91bnQoKWAuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW1wbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHByaW1hcnkgICA9IG5ldyBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKCk7XFxyXFxuICAgKiB2YXIgc2Vjb25kYXJ5ID0gbmV3IFNwbGlkZSgpO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBwcmltYXJ5LnN5bmMoIHNlY29uZGFyeSApO1xcclxcbiAgICogcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaW1hcnkubW91bnQoKTtcXHJcXG4gICAqIHNlY29uZGFyeS5tb3VudCgpO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIGBgYFxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBzcGxpZGUgLSBBIFNwbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzYFxcclxcbiAgICovXFxyXFxuICBzeW5jKCBzcGxpZGU6IFNwbGlkZSApOiB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIHRoaXMuc3BsaWRlcy5wdXNoKCB7IHNwbGlkZSB9ICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuc3BsaWRlcy5wdXNoKCB7IHNwbGlkZTogdGhpcywgaXNQYXJlbnQ6IHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlIH0gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGlzLnN0YXRlLmlzKCBJRExFICkgKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHRoaXMuX0MuU3luYy5yZW1vdW50KCk7XFxyXFxuICAgICAgc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpO1xcclxcbiAgICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIE1vdmVzIHRoZSBzbGlkZXIgd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRyb2wgcGF0dGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogfCBQYXR0ZXJuIHwgRGVzY3JpcHRpb24gfCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIHwtLS18LS0tfFxcclxcbiAgICogfCBgaWAgfCBHb2VzIHRvIHRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGUgYGlgIHxcXHJcXG4gICAqIHwgYCcrJHtpfSdgIHwgSW5jcmVtZW50cyB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICBiInNsaWRlIGluZGV4IGJ5IGBpYCB8XFxyXFxuICAgKiB8IGAnLSR7aX0nYCB8IERlY3JlIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1lbnRzIHRoZSBzbGlkZSBpbmRleCBieSBgaWAgfFxcclxcbiAgICogfCBgJz4nYCB8IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgfFxcclxcbiAgICogfCBgJzwnYCB8IEdvZXMgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIHRoZSBwcmV2aW91cyBwYWdlIHxcXHJcXG4gICAqIHwgYD4ke2l9YCB8IEdvZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIHRoZSBwYWdlIGBpYCB8XFxyXFxuICAgKlxcclxcbiAgICogSW4gbW9zdCBjYXNlcywnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGAnPidgIGFuZCBgJzwnYCBub3RhdGlvbnMgYXJlIGVub3VnaCB0byBjb250cm9sIHRoZSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyXFxyXFxuICAgKiBiZWNhdXNlIHRoZXkgcmVzcGVjdCBgcGVyUGFnZWAgYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZCBgcGVyTW92ZWAgb3B0aW9ucy5cXHJcXG4gICAqXFxyXFxuICAgKiBAZXhhbXBsZVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIGBgYHRzXFxyXFxuICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiAvLyBHb2VzIHRvIHRoZSBzbGlkZSAxOlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZS5nbyggMSApO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIEluY3JlbWVudHMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSBpbmRleDpcXHJcXG4gICAqIHNwbGlkZS5nbyggJysyJyApO1xcclxcbiAgICpcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiAvLyBHb2VzIHRvIHRoZSBuZXh0IHBhZ2U6XFxyXFxuICAgKiBzcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLmdvKCAnPicgKTtcXHJcXG4gICAqXFxyXFxuICAgKiAvLyBHb2VzIHRvIHRoZSBwYWdlICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIyOlxcclxcbiAgICogc3BsaWRlLmdvKCAnPjInICk7XFxyXFxuICAgKiBgYGBcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBIGNvbnRyb2wgcGF0dGVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGdvKCBjb250cm9sOiBudW1iZXIgfCBzdHJpbmcgKTogdGhpcyB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLl9DLkNvbnRyb2xsZXIuZ28oIGNvbnRyb2wgKTtcXHJcXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuIGV2ZW50IGhhbmRsZXIuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW1wbGVcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHNwbGlkZSA9IG5ldyBTcGxpZGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogLy8gTGlzdGVucyB0byBhIHNpbmdsZSBldmVudDpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgKiBzcGxpZGUub24oICdtb3ZlJywgZnVuY3Rpb24oKSB7fSApO1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiAvLyBMaXN0ZW5zIHRvIG11bHRpcGxlIGV2ZW50czpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKiBzcGxpZGUub24oICdtb3ZlIHJlc2l6ZScsIGZ1bmN0aW9uKCkge30gKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogLy8gQXBwZW5kcyBhIG5hbWVzcGFjZTpcXHJcXG4gICAqIHNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUub24oICdtb3ZlLm15TmFtZXNwYWNlIHJlc2l6ZS5teU5hbWVzcGFjZScsIGZ1bmN0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbigpIHt9ICk7XFxyXFxuICAgKiBgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGV2ZW50cyAgIC0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlcy4gVXNlIGEgZG90KC4pIHRvIGFwcGVuZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICBvbjxLIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOiBLLCBjYWxsYmFjazogRXZlbnRNYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwWyBLIF0gKTogdGhpcztcXHJcXG4gIG9uKCBldmVudHM6IHN0cmluZyB8IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgYidbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6IHRoaXM7XFxyXFxuICBvbiggZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIHRoaXMuZXZlbnQub24oIGV2ZW50cywgY2FsbGJhY2sgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBhbGwgaGFuZGxlcnMgZm9yIHRoZSBzcGVjaWZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGV2ZW50IG9yIGV2ZW50cy5cXHJcXG4gICAqIElmIHlvdSB3YW50IHRvIG9ubHkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZSBhIHBhcnRpY3VsYXIgaGFuZGxlciwgdXNlIG5hbWVzcGFjZSB0byBpZGVudGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnkgaXQuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW1wbGVcXHJcXG4gICAqIGBgYHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1xcclxcbiAgICogdmFyIHNwbGlkZSA9IG5ldyBTcGxpZGUoKTtcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogLy8gUmVtb3ZlcyBhbGwgaGFuZGxlcnMgYXNzaWduZWQgdG8gXFwibScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVcXCI6XFxyXFxuICAgKiBzcGxpZGUub2ZmKCBcJ21vdmVcJyApO1xcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiAvLyBPbmx5IHJlbW92ZXMgaGFuZGxlcnMgdGhhdCBiZWxvbmcgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlOlxcclxcbiAgICogc3BsaWRlLm9mZiggJ20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3ZlLm15TmFtZXNwYWNlJyApO1xcclxcbiAgICogYGBgXFxyXFxuICAgKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEBwYXJhbSBldmVudHMgLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzIHNlcGFyYXRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYnkgc3BhY2VzLiBVc2UgYSBkb3QoLikgdG8gYXBwZW5kIGEgbmFtZXNwYWNlLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50czogSyB8IEtbXSB8IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcgfCBzdHJpbmdbXSApOiB0aGlzIHtcXHJcXG4gICAgdGhpcy5ldmVudC5vZmYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudHMgKTtcXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBFbWl0cyBhbiBldmVudCBhbmQgdHJpZ2dlcnMgcmVnaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZWQgaGFuZGxlcnMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGV2ZW50IC0gQScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGV2ZW50IG5hbWUgdG8gZW1pdC5cXHJcXG4gICAqIEBwYXJhbSBhcmdzICAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25hbC4gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byBoYW5kbGVycy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssIC4uLmFyZ3M6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidQYXJhbWV0ZXJzPEV2ZW50TWFwWyBLIF0+ICk6IHRoaXM7XFxyXFxuICBlbWl0KCBldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10gKTogdGhpcztcXHJcXG4gIGVtaXQoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudDogc3RyaW5nICk6IHRoaXMge1xcclxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYictbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtcywgcHJlZmVyLXNwcmVhZFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5ldmVudC5lbWl0KCBldmVudCwgLi4uc2xpY2UoIGFyZ3VtZW50cywgMSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEluc2VydHMgYSBzbGlkZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAZXhhbXBsZVxcclxcbiAgICogYGBgdHNcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xcclxcbiAgICogc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudCgpO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIEFkZHMgdGhlIHNsaWRlIGJ5IHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiImUgSFRNTDpcXHJcXG4gICAqIHNwbGlkZS5hZGQoICc8bGk+PC9saT4gKTtcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogLy8gb3IgYWRkcyB0aGUgZWxlbWVudDpcXHJcXG4gICAqIHNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIuYWRkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGknICkgKTtcXHJcXG4gICAqICIKICAgICAgICAgICAgICAgICAgICAgICAgYidgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc2xpZGVzIC0gQSBzbGlkZSBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCwgYW4gSFRNTCBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgc2xpZGUsIG9yIGFuIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheSB3aXRoIHRoZW0uXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggIC0gT3B0aW9uYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiBBbiBpbmRleCB0byBpbnNlcnQgYSBzbGlkZSBhdC5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcbiAgYWRkKCBzbGlkZXM6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50PiwgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPzogbnVtYmVyICk6IHRoaXMge1xcclxcbiAgICB0aGlzLl9DLlNsaWRlcy5hZGQoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMsIGluZGV4ICk7XFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyBzbGlkZXMgdGhhdCBtYXRjaCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIG1hdGNoZXJcXHJcXG4gICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGFuIGl0ZXJhdGVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgcmVtb3ZlKCBtYXRjaGVyOiBTbGlkZU1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVyICk6IHRoaXMge1xcclxcbiAgICB0aGlzLl9DLlNsaWRlcy5yZW1vdmUoIG1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVyICk7XFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogQ2hlY2tzIHRoZSBzbGlkZXIgdHlwZS5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIHR5cGUgLSBBIHR5cGUgdG8gdGVzdC5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgY3VycmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgb25lLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgaXMoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlOiBzdHJpbmcgKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiB0aGlzLl9vLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlID09PSB0eXBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmcmVzaGVzIHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NgXFxyXFxuICAgKi9cXHJcXG4gIHJlZnJlc2goKTogdGhpcyB7XFxyXFxuICAgIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmVtaXQoIEVWRU5UX1JFRlJFU0ggKTtcXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEZXN0cm95cyB0aGUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29tcGxldGVseSAtIE9wdGlvbmFsLicKICAgICAgICAgICAgICAgICAgICAgICAgYicgSWYgYHRydWVgLCBTcGxpZGUgd2lsbCBub3QgcmVtb3VudCB0aGUgc2xpZGVyIGJ5IGJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZGVzdHJveSggY29tcGxldGVseSA9IHRydWUgKTogdGhpcyB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCB7IGV2ZW50LCBzdGF0ZSB9ID0gdGhpcztcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggc3RhdGUuaXMoIENSRUFURUQgKSApIHtcXHJcXG4gICAgICAvLyBQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zdHBvbmVzIGRlc3RydWN0aW9uIHJlcXVlc3RlZCBiZWZvcmUgdGhlIHNsaWRlciBiZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21lcyByZWFkeS5cXHJcXG4gICAgICBFdmVudEludGVyZmFjZSggdGhpcyApLm9uKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfUkVBRFksIHRoaXMuZGVzdHJveS5iaW5kKCB0aGlzLCBjb21wbGV0ZWx5ICkgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZm9yT3duKCB0aGlzLl9DLCBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50ID0+IHtcXHJcXG4gICAgICAgIGNvbXBvbmVudC5kZXN0cm95ICYmIGNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQuZGVzdHJveSggY29tcGxldGVseSApO1xcclxcbiAgICAgIH0sIHRydWUgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAgICAgZXZlbnQuZW1pdCggRVZFTlRfREVTVFJPWSApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBldmVudC5kZXN0cm95KCk7XFxyXFxuICAgICAgY29tcGxldGVseSAmJiBlbXB0eScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHRoaXMuc3BsaWRlcyApO1xcclxcbiAgICAgIHN0YXRlLnNldCggREVTVFJPWUVEICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBvcHRpb25zLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcmV0dXJuIEFuIG9iamVjdCB3aXRoIHRoZSBsYXRlc3Qgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuXFxyXFxuICAgKi9cXHJcXG4gIGdldCBvcHRpb25zKCk6IE9wdGlvbnMge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIHRoaXMuX287XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBNZXJnZXMgb3B0aW9ucyB0byB0aGUgY3VycmVudCBvcHRpb25zIGFuZCBlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYHVwZGF0ZWRgIGV2ZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyAtIEFuIG9iamVjdCB3aXRoIG5ldyBvcHRpb25zLlxcclxcbiAgICovXFxyXFxuICBzZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9wdGlvbnMoIG9wdGlvbnM6IE9wdGlvbnMgKSB7XFxyXFxuICAgIHRoaXMuX0MuTScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZGlhLnNldCggb3B0aW9ucywgdHJ1ZSwgdHJ1ZSApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB3aScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aG91dCBjbG9uZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiB0aGlzLl9DLlNsaWRlcy5nZXRMZW5ndGgoIHRydWUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGFjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUgc2xpZGUgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgYWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZSBzbGlkZSBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZ2V0IGluZGV4KCk6IG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIge1xcclxcbiAgICByZXR1cm4gdGhpcy5fQy5Db250cm9sbGVyLmdldEluZGV4KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iXSwibmFtZXMiOlsiTUVESUFfUFJFRkVSU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVEVUNFRF9NT1RJT04iLCJNT1ZJTkciLCJTQ1JPTExJTkciLCJTVEFURVMiLCJDUkVBVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFRCIsIk1PVU5URUQiLCJJRExFIiwiRFJBR0dJTkciLCJERVNUUk9ZRUQiLCJlbXB0eSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJhcnJheSIsImxlbmd0aCIsInNsaWNlIiwiYXJyYXlMaWtlIiwic3RhcnQiLCJlbmQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXBwbHkiLCJmdW5jIiwiYmluZCIsImFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWVudHMiLCJub29wIiwibmV4dFRpY2siLCJzZXRUaW1lb3V0IiwicmFmIiwicmVxdWVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RBbmltYXRpb25GcmFtZSIsInR5cGVPZiIsInR5cGUiLCJzdWJqZWN0IiwiaXNPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaXNOdWxsIiwiaXNBcnJheSIsImlzRnVuY3Rpb24iLCJpc1N0cmluZyIsImlzVW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5lZCIsImlzSFRNTEVsZW1lbnQiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciJwogICAgICAgICAgICAgICAgICAgICAgICBiJywid2luZG93IiwiSFRNTEVsZW1lbnQiLCJlIiwidG9BcnJheSIsInZhbHVlIiwiZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2giLCJ2YWx1ZXMiLCJpdGVyYXRlZSIsImluY2x1ZGVzIiwiaW5kZXhPZiIsInB1c2giLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciaXRlbXMiLCJ0b2dnbGVDbGFzcyIsImVsbSIsImNsYXNzZXMiLCJhZGQiLCJuYW1lIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzTGlzdCIsImFkZENsYXNzIiwic3BsaXQiLCJhcHBlbmQiLCJwYXJlbnQiLCJjaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGRyZW4iLCJhcHBlbmRDaGlsZCIsImJlZm9yZSIsIm5vZGVzIiwicmVmIiwibm9kZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibWF0Y2hlcyIsInNlbGVjdG9yIiwiZmlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlciIsImNoaWxkIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJvd25LZXlzIiwiT2JqZWN0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImtleXMiLCJmb3JPd24iLCJvYmplY3QiLCJyaWdodCIsInJldmVyc2UiLCJrZXkiLCJhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzaWduIiwic291cmNlIiwibWVyZ2UiLCJvbWl0IiwicmVtb3ZlQXR0cmlidXRlIiwiZWxtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MiLCJhdHRycyIsImF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJjcmVhdGUiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFnIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJwcm9wIiwiZ2V0QycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwiZm9jdXMiLCJwcmV2ZW50U2Nyb2xsIiwiZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZSIsImhhc0NsYXNzIiwiY2xhc3NOYW1lIiwiY29udGFpbnMiLCJyZWN0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInInRhcmdldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJlbW92ZSIsInJlbW92ZUNoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZCIsInBhcnNlSHRtbCIsImh0bWwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiYm9keSIsInByZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJxdWVyeSIsInF1ZXJ5U2VsZWN0b3IiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicXVlcnlBbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVtb3ZlQ2xhc3MiLCJ0aW1lT2YiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywidGltZVN0YW1wIiwidW5pdCIsIlBST0pFQ1RfQ09ERSIsIkRBVEFfQVRUUklCVVRFIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImFzc2VydCIsImNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJFcnJvciIsIm1pbiIsIk1hdGgiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicibWF4IiwiZmxvb3IiLCJjZWlsIiwiYWJzIiwiYXBwcm94aW1hdGVseUVxdWFsIiwieCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ5IiwiZXBzaWxvbiIsImJldHdlZW4iLCJudW1iZXIiLCJleGNsdXNpdmUiLCJtaW5pbXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSIsIm1heGltdW0iLCJjbGFtcCIsInNpZ24iLCJmb3JtYXQiLCJzdHJpbmciLCJyZXBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW1lbnRzIiwicmVwbGFjZW1lbnQiLCJyZXBsYWNlIiwicGFkIiwiaWRzIiwiRXZlbnRCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGVyIiwibGlzdGVuZXJzIiwiZm9yRWFjaEV2ZW50IiwidGFyZ2V0cyIsImV2ZW50cyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJldmVudE5TIiwiZnJhZ21lbnQiLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJldmVudCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1lc3BhY2UiLCJpc0V2ZW50VGFyZ2V0IiwicmVtb3ZlciIsInJlbW92ZUV2ZW50TGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInVuYmluZCIsImxpc3RlbmVyIiwiZGlzcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY3JlYXRlRXZlbnQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciaW5pdEN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImRlc3Ryb3kiLCJkYXRhIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX01PVU5URUQiLCJFVkVOVF9NT1ZFIiwiRVZFTlRfTU9WRUQiLCJFVkVOVF9DTEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0siLCJFVkVOVF9BQ1RJVkUiLCJFVkVOVF9JTkFDVElWRSIsIkVWRU5UX1ZJU0lCTEUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciRVZFTlRfSElEREVOIiwiRVZFTlRfUkVGUkVTSCIsIkVWRU5UX1VQREFURUQiLCJFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVTSVpFIiwiRVZFTlRfUkVTSVpFRCIsIkVWRU5UX1NDUk9MTCIsIkVWRU5UX1NDUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTExFRCIsIkVWRU5UX0RFU1RST1kiLCJFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQiLCJFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfQVVUT1BMQVlfUExBWSIsIkVWRU5UX0FVVE9QTEFZX1BBVVNFIiwiRVZFTlRfTEFaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1lMT0FEX0xPQURFRCIsIkVWRU5UX1NMSURFX0tFWURPV04iLCJFVkVOVF9TSElGVEVEIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIkV2ZW50SW50ZXJmYWNlIiwiU3BsaWRlIiwiYnVzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQiLCJiaW5kZXIiLCJvbiIsImpvaW4iLCJvZmYiLCJlbWl0IiwiUmVxdWVzdEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbCIsImludGVydmFsIiwib25JbnRlcnZhbCIsIm9uVXBkYXRlIiwibGltaXQiLCJzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRUaW1lIiwiaWQiLCJub3ciLCJEYXRlIiwicmF0ZSIsInBhdXNlZCIsImNvdW50IiwidScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSIsInBhdXNlIiwiY2FuY2VsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lIiwicmV3aW5kIiwic2V0IiwidGltZSIsImlzUGF1c2VkIiwiU3RhdGUiLCJpbml0aWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbFN0YXRlIiwic3RhdGUiLCJpcyIsInN0YXRlcyIsIkFSUk9XIiwiQVJST1dfTEVGVCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19SSUdIVCIsIkFSUk9XX1VQIiwiQVJST1dfRE9XTiIsIlRUQiIsIk9SSUVOVEFUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTl9NQVAiLCJ3aWR0aCIsImxlZnQiLCJYIiwiWSIsIkFycm93TGVmdCIsIkFycm93UmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0IiwiUk9MRSIsIlRBQl9JTkRFWCIsIkFSSUFfUFJFRklYIiwiQVJJQV9DT05UUk9MUycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJBUklBX0NVUlJFTlQiLCJBUklBX1NFTEVDVEVEIiwiQVJJQV9MQUJFTCIsIkFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMTEVEQlkiLCJBUklBX0hJRERFTiIsIkFSSUFfT1JJRU5UQVRJT04iLCJBUklBX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0xFREVTQ1JJUFRJT04iLCJBUklBX0xJVkUiLCJBUklBX0JVU1kiLCJBUklBX0FUT01JQycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJBTExfQVRUUklCVVRFUyIsIkNMQVNTX1BSRUZJWCIsIkNMQVNTX1JPT1QiLCJDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfVFJBQ0siLCJDTEFTU19MSVNUIiwiQ0xBU1NfU0xJREUiLCJDTEFTU19DTE9ORSIsIkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19DT05UQUlORVIiLCJDTEFTU19BUlJPV1MiLCJDTEFTU19BUlJPVyIsIkNMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19QUkVWIiwiQ0xBU1NfQVJST1dfTkVYVCIsIkNMQVNTX1BBR0lOQVRJT04iLCJDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUEFHSU5BVElPTl9QQUdFIiwiQ0xBU1NfUFJPR1JFU1NfQkFSIiwiQ0xBU1NfVE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0dMRSIsIkNMQVNTX1NSIiwiQ0xBU1NfQUNUSVZFIiwiU1RBVFVTX0NMQVNTX1BSRUZJWCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJDTEFTU19QUkVWIiwiQ0xBU1NfTkVYVCIsIkNMQVNTX1ZJU0lCTEUiLCJDTEFTU19MJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BRElORyIsIkNMQVNTX0ZPQ1VTX0lOIiwiQ0xBU1NfT1ZFUkZMT1ciLCJTVEFUVVNfQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTRVMiLCJQT0lOVEVSX0RPV05fRVZFTlRTIiwiUE9JTlRFUl9NT1ZFX0VWRU5UUyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidQT0lOVEVSX1VQX0VWRU5UUyIsIlNMSURFIiwiTE9PUCIsIkZBREUiLCJTbGlkZSIsImluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCIsInNsaWRlSW5kZXgiLCJzbGlkZSIsImRlc3Ryb3llZCIsIkNvbXBvbmVudHMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCIsImlzTmF2aWdhdGlvbiIsInVwZGF0ZU9uTW92ZSIsImkxOG4iLCJwYWdpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiIsInNsaWRlRm9jdXMiLCJyZXNvbHZlIiwiRGlyZWN0aW9uIiwic3R5bGVzIiwibGFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIiwiaXNDbG9uZSIsImNvbnRhaW5lciIsImluaXROYXZpZ2F0aW9uIiwiY29udHJvbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwic3BsaWRlcyIsIm1hcCIsInNwbGlkZSIsIlNsaWRlcyIsImdldEF0Iiwic2xpZGVYIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIm9uTW92ZSIsImN1cnIiLCJoaWRkZW4iLCJhY3RpdmUiLCJpc0FjdGl2ZSIsInNlbGYiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywidmlzaWJsZSIsInRyYWNrUmVjdCIsIkVsZW1lbnRzIiwidHJhY2siLCJzbGlkZVJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiZm9jdXNhYmxlTm9kZXMiLCJhY3RpdmVFbGVtZW50IiwiY2xvbmVTdGF0dXMiLCJtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQiLCJzbGlkZUxhYmVsIiwidXNlQ29udGFpbmVyIiwiX3N0eWxlIiwiaXNXaXRoaW4iJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiZnJvbSIsImRpc3RhbmNlIiwiZGlmZiIsIklOVEVSVkFMX0RBVEFfQVRUUklCVVRFIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlNDUk9MTF9MSVNURU5FUl9PUFRJT05TIiwicGFzc2l2ZSIsImNhcHR1cmUiLCJOT1JNQScKICAgICAgICAgICAgICAgICAgICAgICAgYidMSVpBVElPTl9NQVAiLCJTcGFjZWJhciIsIlJpZ2h0IiwiTGVmdCIsIlVwIiwiRG93biIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJub3JtYWxpemVLZXkiLCJLRVlCT0FSRF9FVkVOVCIsIlNSQ19EQVRBX0FUVFJJQlVURSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJTUkNTRVRfREFUQV9BVFRSSUJVVEUiLCJJTUFHRV9TRUxFQ1RPUiIsIlRSSUdHRVJfSycKICAgICAgICAgICAgICAgICAgICAgICAgYidFWVMiLCJicmVha3BvaW50cyIsInJlZHVjZWRNb3Rpb24iLCJxdWVyaWVzIiwiY29tcGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbHkiLCJyZWdpc3RlciIsInF1ZXJ5TGlzdCIsIm1hdGNoTWVkaWEiLCJkaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwibWVyZ2VkIiwicmVkdWNlIiwiZW50cnkiLCJyZWZyZXNoIiwib3B0cyIsImJhc2UiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicibm90aWZ5IiwiZ2V0UHJvdG90eXBlT2YiLCJzZXR1cCIsImlzTWluIiwibWVkaWFRdWVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3kiLCJzb3J0IiwibiIsIm0iLCJlbmFibGUiLCJheGlzT25seSIsIm1hdGNoIiwib2Zmc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsInRvTG93ZXJDYXNlIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJvcmllbnQiLCJsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCIsImlzVXNpbmdLZXkiLCJlbGVtZW50cyIsInNsaWRlcyIsInJvb3RDbGFzc2VzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrQ2xhc3NlcyIsImZpbmQiLCJhcnJvd3MiLCJwcmV2IiwibmV4dCIsImJhciIsInQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2dnbGUiLCJwcmVmaXgiLCJyb2xlIiwidGFnTmFtZSIsImNhcm91c2VsIiwiY29uY2F0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImdldENsYXNzZXMiLCJsYWJlbGxlZGJ5IiwiY2xvc2VzdCIsIm5vZGVUeXBlIiwicGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEVsZW1lbnQiLCJkcmFnIiwiaW5pdCIsIlNsaWRlMSIsIlNsaWRlMiIsImdldCIsImUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdWRlQ2xvbmVzIiwibWF0Y2hlciIsImdldEluIiwicGFnZSIsIkNvbnRyb2xsZXIiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicidG9JbmRleCIsImhhc0ZvY3VzIiwicGVyUGFnZSIsImZvckVhY2hJdGVtIiwiaW1hZ2VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImltZyIsInJlbW92ZU5vZGUiLCJnZXRMZW5ndGgiLCJpc0Vub3VnaCIsInZlcnRpY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCIsInJvb3RSZWN0Iiwib3ZlcmZsb3ciLCJzdHlsZVNsaWRlcyIsImNzc1BhZGRpbmciLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicmVzaXplIiwiZm9yY2UiLCJuZXdSZWN0IiwiaGVpZ2h0IiwiY3NzSGVpZ2h0IiwiZ2FwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImF1dG9XaWR0aCIsImZpeGVkV2lkdGgiLCJjc3NTbGlkZVNpemUiLCJmaXhlZEhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHQiLCJhdXRvSGVpZ2h0IiwiaXNPdmVyZmxvdyIsInBhZGRpbmciLCJoZWlnaHRSYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJsaXN0U2l6ZSIsInNsaWRlU2l6ZSIsIndpdGhvdXRHYXAiLCJnZXRHYXAiLCJ0b3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xTaXplIiwic2xpZGVyU2l6ZSIsInBhcnNlRmxvYXQiLCJkdXJhdGlvbiIsImdldFBhZGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIiwiY2xvbmVDb3VudCIsImNsb25lcyIsInJlbW91bnQiLCJvYnNlcnZlIiwiY29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVDbG9uZUNvdW50IiwiZ2VuZXJhdGUiLCJpc0hlYWQiLCJjbG9uZSIsImNsb25lTm9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiLCJMYXlvdXQiLCJmaXhlZFNpemUiLCJUcmFuc2l0aW9uIiwicmVwb3NpdGlvbiIsImknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0J1c3kiLCJTY3JvbGwiLCJqdW1wIiwidHJhbnNsYXRlIiwidG9Qb3NpdGlvbiIsInBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiIsInByZXZlbnRMb29wIiwiZGVzdGluYXRpb24iLCJleGNlZWRlZE1heCIsImdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RFbmQiLCJzaGlmdCIsImJhY2t3YXJkcyIsImV4Y2VzcyIsImdldExpbWl0Iiwic2l6ZSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJnZXRQb3NpdGlvbiIsIm1pbkRpc3RhbmNlIiwiSW5maW5pdHkiLCJpIiwidHJpbW1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnIiwidHJpbVNwYWNlIiwibW92ZSIsImRlc3QiLCJzaGlmdGVkIiwiZXhjZWVkZWRMaW1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCJleGNlZWRlZE1pbiIsImVuZEluZGV4Iiwic2xpZGVDb3VudCIsInBlck1vdmUiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZSIsIm9taXRFbmQiLCJpc0xvb3AiLCJpc1NsaWRlIiwiZ2V0TmV4dCIsImdldEFkaicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2VudCIsImdldFByZXYiLCJjdXJySW5kZXgiLCJwcmV2SW5kZXgiLCJvblJlc2l6ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiY29tcHV0ZURlc3RJbmRleCIsImxvb3AiLCJzbmFwUGFnZSIsInRvUGFnZSIsInNldEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCIsIndhaXRGb3JUcmFuc2l0aW9uIiwiZ28iLCJjb250cm9sIiwiYWxsb3dTYW1lSScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4IiwiaW5kaWNhdG9yIiwiX3JlZiIsInNjcm9sbCIsInNuYXAiLCJnZXRJbmRleCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ0b0Rlc3QiLCJjcmVhdGVkIiwid3JhcHBlckNsYXNzZXMiLCJwbGFjZWhvbGRlciIsIncnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFwcGVyIiwiZW5hYmxlZCIsImNyZWF0ZUFycm93IiwiYXJyb3ciLCJhcnJvd1BhdGgiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicibmV4dEluZGV4IiwicHJldkxhYmVsIiwibmV4dExhYmVsIiwibGFzdCIsImZpcnN0IiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc2FibGVkIiwiaG92ZXJlZCIsImZvY3VzZWQiLCJhdXRvcGxheSIsInN0b3BwZWQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheSIsInJlc2V0UHJvZ3Jlc3MiLCJzdG9wIiwiYXV0b1RvZ2dsZSIsInBhdXNlT25IbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIiLCJwYXVzZU9uRm9jdXMiLCJjb3ZlciIsInNyYyIsImZyaWN0aW9uIiwib25TY3JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZWQiLCJub0NvbnN0cmFpbiIsIm5vRGlzdGFuY2UiLCJjbGVhciIsIm9uRW5kIiwidG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwidCIsImVhc2luZ0Z1bmMiLCJwb3ciLCJiYXNlUG9zaXRpb24iLCJiYXNlRXZlbnQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicHJldkJhc2VFdmVudCIsImlzRnJlZSIsImRyYWdnaW5nIiwiY2xpY2tQcmV2ZW50ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiTWVkaWEiLCJleGNlZWRlZCIsImRpc2FibGUiLCJvblBvaW50ZXJEb3duIiwiaXNUb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2giLCJub0RyYWciLCJpc1RvdWNoRXZlbnQiLCJidXR0b24iLCJvblBvaW50ZXJNb3ZlIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIm9uUG9pbnRlclVwIiwic2F2ZSIsInRocmVzaG9sZHMiLCJpc09iaiIsIm1vdXNlIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbmNlbGFibGUiLCJkaWZmQ29vcmQiLCJleHBpcmVkIiwiZGlmZlRpbWUiLCJoYXNFeGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWQiLCJkcmFnTWluVGhyZXNob2xkIiwidG91Y2giLCJ2ZWxvY2l0eSIsImZsaWNrUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd2VyIiwiZmxpY2tNYXhQYWdlcyIsInJld2luZEJ5RHJhZyIsIm9uQ2xpY2siLCJvcnRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29nb25hbCIsImNvb3JkT2YiLCJnZXRCYXNlRXZlbnQiLCJjaGFuZ2VkVG91Y2hlcyIsIlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VjaEV2ZW50IiwiaXNEcmFnZ2luZyIsImtleWJvYXJkIiwib25LZXlkb3duIiwiX2RpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlZCIsImlzU2VxdWVudGlhbCIsImxhenlMb2FkIiwiZW50cmllcyIsInNyY3NldCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJzcGlubmVyIiwibG9hZE5leHQiLCJjaGVjayIsInByZWxvYWRQYWdlcyIsImxvYWQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25Mb2FkIiwicGFnaW5hdGlvbkNsYXNzZXMiLCJkaXIiLCJnZXREaXJlY3Rpb24iLCJuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dFBhZ2UiLCJpdGVtIiwicGFnaW5hdGlvbkRpcmVjdGlvbiIsInNlbGVjdCIsImxpIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzIiwidGV4dCIsInBhZ2VYIiwicGFnaW5hdGlvbktleWJvYXJkIiwiaXNQYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwic3luYyIsImxhc3RUaW1lIiwib25XaGVlbCIsInNsZWVwIiwiZGVsdGFZIiwid2hlZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsTWluVGhyZXNob2xkIiwid2hlZWxTbGVlcCIsInJlbGVhc2VXaGVlbCIsIndoZWVsIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpdmUiLCJzciIsIkF1dG9wbGF5IiwidGV4dENvbnRlbnQiLCJERUZBVUxUUyIsInNwZWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCIsImVhc2luZyIsInJld2luZFNwZWVkIiwiRmFkZSIsImRvbmUiLCJlbmRDYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJ0cmFuc2l0aW9uIiwidXNlU2Nyb2xsIiwidGhpcyIsIl9vIiwiX0UiLCJfU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImRlZmF1bHRzIiwiSlNPTiIsInBhcnNlIiwiRXh0ZW5zaW9ucyIsIl90aGlzIiwiX0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiX1QiLCJDb21wb25lbnRDb25zdHJ1Y3RvcnMiLCJDb21wb25lbnQiLCJjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiU3luYyIsIl90aGlzJGV2ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O3lDQUtPLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNQSxFQUErQixtQ0NhL0JDLEVBQVMsRUFLVEMsR0FBWSxFQWlCWkMsRUFBUyxDQUNwQkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBdENxQixFQXVDckJDLFFBbENxQixFQW1DckJDLEtBOUJrQixFQStCbEJMLE9BQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNBQyxVQUFBQSxHQUNBSyxTQWxCc0IsRUFtQnRCQyxVQWR1QixDQU9ILEVDbkNmLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTQyxFQUFPQyxHQUNyQkEsRUFBTUMsT0FBUyxDQUNqQixDQ0VnQixTQUFBQyxFQUFVQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBeUJDLEVBQWdCQyxHQUNqRSxPQUFPQyxNQUFNQyxVQUFVTCxNQUFNTSxLQUFNTCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBV0MsRUFBT0MsQ0FBOUMsQ0FDVCxDQ2FPLFNBQVNJLEVBQU9DLEdBRXJCLE9BQU9BLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLQyxLQUFMRixNQUFBQyxFQUFXLENBQUEsTUFBU1IsT0FBQUEsRUFBT1UsVUFBVyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWCxFQUFsQyxDQUNGLENDeEJvQixTQUFQQyxNQ0tOLElBQU1DLEVBQXVFQyxXQ0w3RSxTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU0MsRUFBS04sR0FDbkIsT0FBT08sc0JBQXVCUCxFQUNoQyxDQ09BLFNBQVNRLEVBQVFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFjQyxHQUM3QixPQUFPLE9BQU9BLElBQVlELENBQzVCLENBU08sU0FBU0UsR0FBVUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ3hCLE1BQU8sQ0FBRUUsRUFBUUYsQ0FBQSxHQUFhRixFQUFRLFNBQVVFLENBQWxCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUNoQyxDQVNPLElBQU1HLEVBQXFEakIsTUFBTWlCLFFBUzNEQyxFQUE2RGYsRUFBT1MsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVEsVUFBUixFQVNwRU8sRUFBc0RoQixFQUFPUyxFQUFRLFFBQVIsRUFTN0RRLEdBQTQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGpCLEVBQU9TLEVBQVEsV0FBUixFQVN6RSxTQUFTSSxFQUFRRixHQUN0QixPQUFtQixPQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWkEsQ0FDVCxDQVVPLFNBQVNPLEVBQWVQLEdBQ3pCLElBQ0YsT0FBT0EsYUFBdUJBLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FrQlEsY0FBY0MsYUFBZUMsUUFBU0MsV0FHeEYsT0FGVUMsR0FDRCxNQUFBLENBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1QsQ0FDRixDQzlFTyxTQUFTQyxFQUFZQyxHQUMxQixPQUFPWCxFQUFTVyxDQUFBLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVQSxFQUFRLENBQUVBLEVBQ3RDLENDSGdCLFNBQUFDLEVBQVlDLEVBQWlCQyxHQUNsQ0osJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUFHLENBQUEsRUFBU0QsUUFBU0UsQ0FBbEIsQ0FDWCxDQ0ZnQixTQUFBQyxFQUFhdEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVlrQyxHQUNoQyxNQUF5QixDQUFBLEVBQXpCbEMsRUFBTXVDLFFBQVNMLENBQWYsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1QsQ0NBZ0IsU0FBQU0sRUFBU3hDLEVBQVl5QyxHQUU1QixPQURQekMsRUFBTXdDLEtBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FOeEMsTUFBQUEsRUFBZWlDLEVBQVNRLENBQUEsQ0FBeEIsRUFDT3pDLENBQ1QsQ0NKZ0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQUEwQyxFQUFhQyxFQUFjQyxFQUE0QkMsR0FDaEVGLEdBQ0hSLEVBQVNTLEVBQVMsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVFFLEdBQ25CQSxHQUNISCxFQUFJSSxVQUFXRixFQUFNLE1BQVEsVUFBWUMsQ0FBekMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBRUYsQ0FKRixDQU1KLENDUmdCLFNBQUFFLEVBQVVMLEVBQWNDLEdBQ3pCRixFQUFBQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBS2xCLEVBQVVtQixHQUFZQSxFQUFRSyxNQUFPLEdBQWYsRUFBdUJMLEVBQVMsQ0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBM0QsQ0FDZixDQ0hnQixTQUFBTSxFQUFRQyxFQUFpQkMsR0FDdkNqQixFQUFTaUIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVVELEVBQU9FLFlBQVkxQyxLQUFNd0MsQ0FBekIsQ0FBbkIsQ0FDRixDQ0ZnQixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUcsRUFBUUMsRUFBc0JDLEdBQzVDckIsRUFBU29CLEVBQU8sU0FBUUUsR0FDaEIsSUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidOLEdBQVdLLEdBQU9DLEdBQU9DLFdBRTFCUCxHQUNJQSxFQUFBUSxhQUFjRixFQUFNRCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBcEIsQ0FFVCxDQU5GLENBT0YsQ0NOZ0IsU0FBQUksR0FBU2pCLEVBQTRCa0IsR0FDNUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQUFsQyxFQUFlZ0IsQ0FBZixJQUEwQkEsRUFBQSxtQkFBOEJBLEVBQUlpQixTQUFVcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidELEtBQU1tQyxFQUFLa0IsQ0FBdkQsQ0FDbkMsQ0NEZ0IsU0FBQVQsRUFBaUNELEVBQXFCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1UsR0FDOURULEVBQVdELEVBQVNqRCxFQUFPaUQsRUFBT0MsUUFBZCxFQUFrQyxHQUNyRCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBQVMsRUFBV1QsRUFBU1UsT0FBUSxTQUFBQyxHQUFBLE9BQVNILEdBQVNHLEVBQU9GLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUF6QixDQUFqQlQsRUFBeURBLENBQzdFLENDSmdCLFNBQUFXLEdBQThCWixFQUFxQlUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ2pFLE9BQU9BLEVBQVdULEVBQWFELEVBQVFVLENBQVIsRUFBb0IsR0FBTVYsRUFBT2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGlCQUNsRSxDQ1ZPLElBQU1DLEVBQVVDLE9BQU9DLEtDU2QsU0FBQUMsRUFDZEMsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidoQyxFQUNBaUMsR0FFS0QsSUFDREMsRUFBUUwsRUFBU0ksQ0FBQSxFQUFTRSxRQUFsQixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBOEJOLEVBQVNJLENBQUEsR0FBV2xDLFFBQVMsU0FBT3FDLEdBQ2xFLGNBQVJBLEdBQXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQm5DLEVBQVVnQyxFQUFRRyxHQUFPQSxDQUF6QixDQUN2QixDQUZBLENBTU4sQ0NrQk8sUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNDLEdBQTBCSixHQVFqQyxPQU5QbkUsRUFBT1UsVUFBVyxDQUFsQixFQUFzQnVCLFFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTLFNBQVV1QyxHQUMvQk4sRUFBQU0sRUFBUSxTQUFFeEMsRUFBT3NDLEdBQ3ZCSCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUcsR0FBUUUsRUFBUUYsRUFDeEIsQ0FGTSxDQUdSLENBSkYsRUFNT0gsQ0FDVCxDQ0NPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFTTSxFQUF5Qk4sR0FjaEMsT0FaUG5FLEVBQU9VLFVBQVcsQ0FBbEIsRUFBc0J1QixRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUyxTQUFVdUMsR0FDL0JOLEVBQUFNLEVBQVEsU0FBRXhDLEVBQU9zQyxHQUNsQmpELEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTVyxDQUFULEVBQ0ttQyxFQUFBRyxHQUFRdEMsRUFBTWhDLE1BQWQsRUFDRW1CLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVYSxDQUFBLEVBQ3BCbUMsRUFBUUcsR0FBUUcsRUFBTyxHQUFJdEQsR0FBVWdELEVBQVFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFSLEVBQWtCSCxFQUFRRyxHQUFRLEdBQUl0QyxDQUEzRCxFQUVoQm1DLEVBQVFHLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRdEMsQ0FFbEIsQ0FSTSxDQVNSLENBVkYsRUFZT21DLENBQ1QsQ0N6RGdCLFNBQUFPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFNUCxFQUFnQkYsR0FDcENoQyxFQUFTZ0MsR0FBUUYsRUFBU0ksQ0FBVCxFQUFtQixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT0csR0FDekMsT0FBT0gsRUFBUUcsRUFDZixDQUZGLENBR0YsQ0NMZ0IsU0FBQUssRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCQyxFQUEyQkMsR0FDMUQ1QyxFQUFTMkMsRUFBTSxTQUFPbkMsR0FDcEJSLEVBQVM0QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTyxTQUFRQyxHQUNmckMsR0FBQUEsRUFBSWtDLGdCQUFpQkcsQ0FBckIsQ0FDUCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FGRixDQUdBLENBSkYsQ0FLRixDQ0VnQixTQUFBQyxFQUNkSCxFQUNBQyxFQUNBN0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUtiLEdBQVUwRCxDQUFWLEVBQ0tYLEVBQUFXLEVBQU8sU0FBRTdDLEVBQU9ZLEdBQ1JtQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQUgsRUFBTWhDLEVBQU1aLENBQVosQ0FDZCxDQUZNLEVBSVJDLEVBQVMyQyxFQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFPbkMsR0FDcEJyQixFQUFRWSxDQUFSLEdBQTZCLEtBQVZBLEVBQWUyQyxFQUFpQmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUFLb0MsQ0FBTCxFQUFlcEMsRUFBSXNDLGFBQWNGLEVBQU9HLE9BQVFoRCxDQUFSLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUF6QixDQUNsRSxDQUZGLENBSUosQ0NOZ0IsU0FBQWlELEVBQ2RDLEVBQ0FMLEVBQ0E1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsR0FFTVIsRUFBTTBDLFNBQVNDLGNBQWVGLENBQXhCLEVBUUwsT0FORkwsSUFDT3RELEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBc0QsQ0FBQSxFQUFVL0IsRUFBeUJpQyxHQUFmdEMsRUFBS29DLENBQUwsRUFHdEI1QicKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBQUQsRUFBUUMsRUFBUVIsQ0FBaEIsRUFFSEEsQ0FDVCxDQ1pnQixTQUFBNEMsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q1QyxFQUNBNkMsRUFDQXRELEdBRUssR0FBQVIsR0FBYVEsQ0FBYixFQUNJLE9BQUF1RCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUJBQWtCOUMsQ0FBbEIsRUFBeUI2QyxHQUczQmxFLEVBQVFZLENBQUEsSUFDVFMsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYic0QyxNQUFPQyxNQUFhdEQsRUFFNUIsQ0M5QmdCLFNBQUF3RCxHQUFTL0MsRUFBa0IrQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDbENILEVBQUE1QyxFQUFLLFVBQVcrQyxDQUFoQixDQUNULENDTk8sU0FBU0MsR0FBT2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxHQUNoQkEsRUFBQSxXQUFpQkEsWUFBakIsR0FBeUNBLEVBQUlnRCxNQUFPLENBQUVDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjQUFlLENBQUEsQ0FBakIsQ0FBWCxDQUNoRCxDQ0RnQixTQUFBQyxFQUFjbEQsRUFBY3FDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNuQyxPQUFBckMsRUFBSWtELGFBQWNiLENBQWxCLENBQ1QsQ0NBZ0IsU0FBQWMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVuRCxFQUFjb0QsR0FDdEMsT0FBT3BELEdBQU9BLEVBQUlJLFVBQVVpRCxTQUFVRCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBeEIsQ0FDaEIsQ0NMTyxTQUFTRSxFQUFNQyxHQUNwQixPQUFPQSxFQUFPQyxzQkFBZCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRixDQ0NPLFNBQVNDLEVBQVE3QyxHQUN0QnBCLEVBQVNvQixFQUFPLFNBQVFFLEdBQ2onCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkEsR0FBUUEsRUFBS0MsWUFDWEQsRUFBQUMsV0FBVzJDLFlBQWE1QyxDQUF4QixDQUVQLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUpGLENBS0YsQ0NKTyxTQUFTNkMsR0FBa0NDLEdBQ3pDLE9BQUF4QyxJQUFVLElBQUl5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsV0FBWUMsZ0JBQWlCRixFQUFNLFdBQXZDLEVBQXFERyxJQUEvRCxDQUNULENDTmdCLFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQyxFQUFTM0UsRUFBVTRFLEdBQ2pDNUUsRUFBRTZFLGVBQUYsRUFFS0QsSUFDSDVFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFFNEUsZ0JBQUYsRUFDQTVFLEVBQUU4RSx5QkFBRixFQUVKLENDTGdCLFNBQUFDLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FvQzVELEVBQTRCVSxHQUN2RSxPQUFBVixHQUFVQSxFQUFPNkQsY0FBZW5ELENBQXRCLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNuQixDQ0NnQixTQUFBb0QsR0FBdUM5RCxFQUE0QlUsR0FDakYsT0FBT0EsRUFBVzNELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVaUQsRUFBTytELGlCQUFrQnJELENBQXpCLENBQUEsRUFBd0MsRUFDdEUsQ0NKZ0IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQUFzRCxFQUFheEUsRUFBY0MsR0FDNUJGLEVBQUFDLEVBQUtDLEVBQVMsQ0FBQSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCxDQUNmLENDTk8sU0FBU3dFLEdBQVFwRixHQUN0QixPQUFPQSxFQUFFcUYsU0FDWCxDQycKICAgICAgICAgICAgICAgICAgICAgICAgYidJTyxTQUFTQyxFQUFNcEYsR0FDcEIsT0FBT1QsRUFBVVMsR0FBVUEsRUFBUUEsRUFBWUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVosS0FBeUIsRUFDOUQsQ0NSTyxJQUFNcUYsR0FBZSxTQU9mQyxVQUEwQkQsR0NIdkInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQUFFLEdBQVFDLEVBQWdCQyxHQUN0QyxHQUFLLENBQUVELEVBQ0wsTUFBTSxJQUFJRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBWUwsSUFBQUEsU0FBbUJJLEdBQVcsR0FBcEQsQ0FFSixDQ2JPLElBQVFFLEVBQStCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsS0FBL0JELElBQUtFLEdBQTBCRCxLQUExQkMsSUFBS0MsR0FBcUJGLEtBQXJCRSxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0MsR0FBY0gsS0FBZEcsS0FBTUMsRUFBUUosS0FBUkksSUNZdEIsU0FBQUMsR0FBb0JDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFXQyxFQUFXQyxHQUNqRCxPQUFBSixFQUFLRSxFQUFJQyxDQUFULEVBQWVDLENBQ3hCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQ0hPLFNBQVNDLEdBQVNDLEVBQWdCSixFQUFXQyxFQUFXSSxHQUN2RCxJQUFBQyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVWIsRUFBS08sRUFBR0MsQ0FBSCxFQUNmTSxFQUFVWixHQUFLSyxFQUFHQyxDQUFILEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidyQixPQUFPSSxFQUNIQyxFQUFVRixHQUFVQSxFQUFTRyxFQUM3QkQsR0FBV0YsR0FBVUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQVVHLENBQ3JDLENDTGdCLFNBQUFDLEVBQU9KLEVBQWdCSixFQUFXQyxHQUMxQyxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUssRUFBVWIsRUFBS08sRUFBR0MsQ0FBSCxFQUNmTSxFQUFVWixHQUFLSyxFQUFHQyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBSCxFQUNyQixPQUFPUixFQUFLRSxHQUFLVyxFQUFTRixDQUFkLEVBQXdCRyxDQUF4QixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDZCxDQ1RPLFNBQVNFLEdBQU1ULEdBQ3BCLE9BQWMsRUFBSkEsSUFBYUEsRUFBSSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0IsQ0NFZ0IsU0FBQVUsR0FBUUMsRUFBZ0JDLEdBSy9CLE9BSlA3RyxFQUFTNkcsRUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBZUMsR0FDcENGLEVBQVNBLEVBQU9HLFFBQVMsS0FBaEIsR0FBMEJELENBQTFCLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NULENBRkYsRUFJT0YsQ0FDVCxDQ1ZPLFNBQVNJLEdBQUtYLEdBQ25CLE9BQU9BLEVBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVVBLElBQUFBLEtBQWdCQSxDQUM1QyxDQ0RBLElBQU1ZLEdBQThCLEdDdUI3QixTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU0MsS0FLZCxJQUFJQyxFQUFvRixHQXVGL0UsU0FBQUMsRUFDUEMsRUFDQUMsRUFDQXBIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUVBRixFQUFTcUgsRUFBUyxTQUFVdEQsR0FDaEJBLEdBQUEvRCxFQUFTc0gsRUFBUSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBQUEsR0FDekJBLEVBQU94RyxNQUFPLEdBQWR3RyxFQUFvQnRILFFBQVMsU0FBV3VILCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNoQ0MsRUFBV0QsRUFBUXpHLE1BQU8sR0FBZixFQUNqQlosRUFBVTZELEVBQVF5RCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxHQUFLQSxFQUFVLEVBQTNDLENBQ0EsQ0FIRkYsQ0FJQSxDQUxRLENBTVYsQ0FQRiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FRRixDQVVPLE1BQUEsQ0FDTDlJLEtBaEdGLFNBQ0U2SSxFQUNBQyxFQUNBRyxFQUNBQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FFQU4sRUFBY0MsRUFBU0MsRUFBUSxTQUFFdkQsRUFBUTRELEVBQU9DLEdBQzlDLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNQyxFQUFnQixxQkFBc0I5RCxFQUN0QytELEVBQVVELEVBQ1o5RCxFQUFPZ0Usb0JBQW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQnZKLEtBQU11RixFQUFRNEQsRUFBT0YsRUFBVUMsQ0FBMUQsRUFDQTNELEVBQUEsZUFBMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCdkYsS0FBTXVGLEVBQVEwRCxDQUF6QyxFQUVZSSxFQUFBOUQsRUFBT2lFLGlCQUFrQkwsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9GLEVBQVVDLENBQTFDLEVBQXNEM0QsRUFBQSxZQUF5QjBELENBQXpCLEVBQ3RFTiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBVTlHLEtBQU0sQ0FBRTBELEVBQVE0RCxFQUFPQyxFQUFXSCxFQUFVSyxFQUF0RCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDQSxDQVJGLENBU0YsRUFrRkVHLE9BekVPLFNBQVFaLEVBQXVCQyxFQUEyQkcsR0FDakVMJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFjQyxFQUFTQyxFQUFRLFNBQUV2RCxFQUFRNEQsRUFBT0MsR0FDbENULEVBQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVeEYsT0FBUSxTQUFZdUcsR0FDeEMsTUFBS0EsQ0FBQUEsRUFBQUEsRUFBVSxLQUFRbicKICAgICAgICAgICAgICAgICAgICAgICAgYidFLEdBQ2xCbUUsRUFBVSxLQUFRUCxHQUNsQk8sRUFBVSxLQUFRTixHQUNkSCxHQUFZUyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxLQUFRVCxLQUVyQ1MsRUFBVSxHQUFWLEVBQ08sQ0FBQSxFQUlULENBWFUsQ0FZWiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FiRixDQWNGLEVBMkRFQyxTQWhETyxTQUFhcEUsRUFBcUIvRSxFQUFjb0osR0FDbkQsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUF2SSxFQVdHLE1BUnFCLFlBQXZCLE9BQU93SSxZQUNWeEksRUFBSSxJQUFJd0ksWUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FySixFQUFNLENBQUVzSixRQUhmLENBQUEsRUFHd0JGLE9BQUFBLENBQVgsQ0FBdkIsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUF2SSxFQUFBcUQsU0FBU3FGLFlBQWEsYUFBdEIsR0FDRkMsZ0JBQWlCeEosRUFOTCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQU1vQixDQUFBLEVBQU9vSixDQUF6QyxFQUdGckUsRUFBTzBFLGNBQWU1SSxDQUF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFDT0EsQ0FDVCxFQW9DRTZJLFFBVEYsV0FDRXZCLEVBQVVuSCxRQUFTLFNBQVEySSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBRUEsRUFBTSxHQUFOLENBQWMsQ0FBM0MsRUFDQS9LLEVBQU91SixDQUFQLENBQ0YsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBRU8sQ0FNVCxDQ3hKTyxJQUFNeUIsRUFBMkIsVUFFM0JDLEVBQTJCLE9BQzNCQyxHQUEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsUUFDM0JDLEdBQTJCLFFBQzNCQyxHQUEyQixTQUMzQkMsR0FBMkIsV0FDM0JDLEdBQTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixVQUMzQkMsR0FBMkIsU0FDM0JDLEVBQTJCLFVBQzNCQyxFQUEyQixVQUMzQkMsR0FBMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLFNBQzNCQyxHQUEyQixVQUkzQkMsR0FBMkIsU0FDM0JDLEVBQTJCLFdBRTNCQyxFQUEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsVUFLM0JDLEdBQTJCLHFCQUMzQkMsR0FBMkIsZ0JBRTNCQyxHQUEyQixpQkFDM0JDLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEyQixrQkFHM0JDLEdBQTBCLEtBQzFCQyxHQUEwQixLQ0NoQyxTQUFTQyxFQUFnQkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBSzlCLElBQU1DLEVBQU1ELEVBQVNBLEVBQU92QyxNQUFNd0MsSUFBTWpILFNBQVNrSCx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JBQWpELEVBS01DLEVBQVNuRCxHQUFmLEVBNkJBLE9BSktnRCxHQUNIQSxFQUFPdkMsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU0yQyxHQUFJWixFQUFlVyxFQUFPM0IsT0FBdkN3QixFQUdLNUgsR0FBUStILEVBQVEsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3JCRixJQUFBQSxFQUNBRyxHQXZCTyxTQUFJaEQsRUFBMkJHLEdBQy9CNEMsRUFBQTdMJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFNMkwsRUFBS3JLLEVBQVN3SCxDQUFBLEVBQVNpRCxLQUFNLEdBQXhCLEVBQStCLFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLMUssR0FDM0M0SCxFQUFBbkosTUFBT21KLEVBQVVySSxFQUFTUyxFQUFFdUksTUFBRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBYXZJLEVBQUV1SSxPQUFTLEVBQWxELENBQ1QsQ0FGSyxDQUdULEVBb0JFb0MsSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tsTSxFQUFPK0wsRUFBT3BDLE9BQVFrQyxDQUF0QixFQUNMTSxLQWJGLFNBQWU5QyxHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYjBDLEVBQU9sQyxTQUFVZ0MsRUFBS3hDLEVBQU81SixFQUFPVSxVQUFXLENBQVgsQ0FBcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDLENBQ0YsQ0FNdUIsRUFNekIsQ0NuRE8sU0FBU2lNLEdBQ2RDLEVBQ0FDLEVBQ0FDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQyxHQUVNLElBS0ZDLEVBVUFDLEVBZklDLEVBQVFDLEtBQVJELElBVUpFLEVBQU8sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVBDLEVBQVMsQ0FBQSxFQUtUQyxFQUFRLEVBS1osU0FBU0MsSUFDUCxHQUFLLENBQUVGLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFTLENBSWQsR0FIQUQsRUFBT1IsRUFBV2pGLEdBQU91RixFQUFRRixFQUFBQSxHQUFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBVSxDQUFoQyxFQUFzQyxFQUMvREUsR0FBWUEsRUFBVU0sR0FFVCxHQUFSQSxJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUVAsRUFBQSxFQUNYRyxFQUFZRSxFQUFaLEVBRUtILEdBQVMsRUFBRU8sR0FBU1AsR0FDdicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BQU9TLEVBQVAsRUFJSlAsRUFBS25NLEVBQUt5TSxFQUNaLENBQ0YsQ0FpQkEsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NDLElBQ0VILEVBQUEsQ0FBQSxDQUNYLENBaUJBLFNBQVNJLElBQ1BSLEdBQU1TLHFCQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0JULEdBR25CSSxFQUFBLEVBREFKLEVBREFHLEVBQUEsRUFHWCxDQW9CTyxNQUFBLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMbE4sTUF2REYsU0FBZ0J5TixHQUNkQSxHQUFVRixFQUFWLEVBQ0FULEVBQVlFLEVBQUksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQU1TLEVBQVNQLEVBQU9SLEVBQVcsR0FDckNTLEVBQUEsQ0FBQSxFQUNaSixFQUFZbk0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUt5TSxFQUNuQixFQW1ERUssT0F2Q0YsV0FDRVosRUFBWUUsRUFBWixFQUNZRSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQUVQTixHQUNIQSxFQUFVTSxDQUFWLENBRUosRUFpQ0VJLE1BQUFBLEVBQ0FDLE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUNBSSxJQWxCRixTQUFjQyxHQUNEbEIsRUFBQWtCLENBQ2IsRUFpQkVDLFNBVkYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQ1MsT0FBQVYsQ0FDVCxDQUVPLENBUVQsQ0NsSU8sU0FBU1csRUFBT0MsR0FJckIsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUlDLEVBQVFELEVBc0JMLE1BQUEsQ0FBRUosSUFmVCxTQUFjN0wsR0FDSmtNLEVBQUFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ00sQ0FDVixFQWFjbU0sR0FKZCxTQUFhQyxHQUNYLE9BQU9oTSxFQUFVTCxFQUFTcU0sQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVQsRUFBbUJGLENBQW5CLENBQ25CLENBRU8sQ0FDVCxDQzdDQSxJQUFNRyxFQUFRLFFBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidEQyxHQUFrQkQsRUFBeEIsT0FDTUUsR0FBa0JGLEVBQXhCLFFBQ01HLEVBQWtCSCxFQUF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsS0FDTUksRUFBa0JKLEVBQXhCLE9DU01LLEdBQU0sTUNRTkMsRUFBa0IsQ0FDN0JDLE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFZLENBQUUsVUFDZEMsS0FBWSxDQUFFLE1BQU8sU0FDckJ6SyxNQUFZLENBQUUsU0FBVScKICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFDeEI4RCxFQUFZLENBQUUsS0FDZDRHLEVBQVksQ0FBRSxLQUNkQyxFQUFZLENBQUUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQ2RDLFVBQVksQ0FBRVIsRUFBVUQsSUFDeEJVLFdBQVksQ0FBRVIsRUFBWUgsR0FSRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUNyQnhCLElBQU1ZLEVBQVksT0FDWkMsRUFBWSxXQUdaQyxFQUF1QixRQUN2QkMsR0FBMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCRCxFQUFqQyxXQUNNRSxHQUEyQkYsRUFBakMsVUFDTUcsR0FBMkJILEVBQWpDLFdBQ01JJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUEyQkosRUFBakMsUUFDTUssR0FBMkJMLEVBQWpDLGFBQ01NLEdBQTJCTixFQUFqQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FDTU8sR0FBMkJQLEVBQWpDLGNBQ01RLEdBQTJCUixFQUFqQyxrQkFDTVMsR0FBMkJULCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFqQyxPQUNNVSxHQUEyQlYsRUFBakMsT0FDTVcsR0FBMkJYLEVBQWpDLFNBU01ZLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQixDQUM1QmQsRUFDQUMsRUF4QnVCLFdBMEJ2QkUsR0FDQUMsR0FDQUUsR0FDQUMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDLEdBQ0FDLEdBQ0FDLElDM0JJSyxFQUFtQjVJLEdBQXpCLEtBWWE2SSxHQUF3QjdJLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUN4QjhJLEdBQTRCRixFQUFsQyxRQUNNRyxHQUE0QkgsRUFBbEMsT0FDTUksR0FBNEJKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFsQyxRQUNNSyxHQUE0QkQsR0FBbEMsVUFDTUUsR0FBNEJGLEdBQWxDLGNBQ01HLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUE0QlAsRUFBbEMsU0FDTVEsR0FBNEJSLEVBQWxDLFFBQ01TLEdBQTRCRCxHQUFsQyxTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTUUsR0FBNEJGLEdBQWxDLFNBQ01HLEdBQTRCWCxFQUFsQyxhQUNNWSxHQUE0QkQsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xDLFNBRU1FLEdBRDRCYixFQUFsQyxXQUNBLFFBQ01jLEdBQTRCZCxFQUFsQyxTQUlNZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBNEJmLEVBQWxDLEtBRU1nQixHQUE0QkMsWUFDNUJDLEdBQTRCRCxVQUM1QkUsR0FBNCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCRixVQUM1QkcsR0FBNEJILGFBQzVCSSxHQUE0QkosYUFDNUJLLEdBQTRCTCxjQUM1Qk0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQTRCTixjQU81Qk8sR0FBaUIsQ0FDNUJSLEdBQ0FJLEdBQ0FGLEdBQ0FDLEdBQ0FFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBQyxHQUNBQyxJQ3RESyxJQWNNRSxHQUFzQix1QkFPdEJDLEdBQXNCLHNCQVF0QkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQW9CLHFDQzdCMUIsSUFBTUMsR0FBUSxRQU9SQyxHQUFPLE9BT1BDLEdBQU8sT0NtRWIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVNDLEdBQU83RixFQUFnQjhGLEVBQWVDLEVBQW9CQyxHQUNsRSxJQWFGQyxFQWJFeEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRUFBbkIyQyxHQUFJRyxFQUFlOUMsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWY4QyxLQUFNak0sRUFBU21KLEVBQVRuSixLQUNWNFIsRUFBOEJsRyxFQUE5QmtHLFdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FZQyxFQUFrQm5HLEVBQWxCbUcsS0FBTTNJLEVBQVl3QyxFQUFaeEMsUUFDbEI0SSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkQ1SSxFQUE3RDRJLGFBQWNDLEVBQStDN0ksRUFBL0M2SSxhQUFjQyxFQUFpQzlJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidqQzhJLEtBQU1DLEVBQTJCL0ksRUFBM0IrSSxXQUFZQyxFQUFlaEosRUFBZmdKLFdBQzlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsRUFBWVAsRUFBV1EsVUFBdkJELFFBQ0ZFLEVBQVluTixFQUFjd00sRUFBTyxPQUFQLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUMxQlksRUFBWXBOLEVBQWN3TSxFQUFPM0MsRUFBUCxFQUMxQndELEVBQXlCLENBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWJkLEVBQ1plLEVBQVlwUCxHQUFPc08sRUFBUCxJQUFtQjVCLEVBQW5CLEVBa0RsQixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUzJDLElBQ1AsSUFBTUMsRUFBV2hILEVBQU9pSCxRQUFRQyxJQUFLLFNBQVVyTixHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndkNnTSxFQUFRaE0sRUFBT3NOLE9BQU9qQixXQUFXa0IsT0FBT0MsTUFBT3ZCLENBQXZDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNQRCxPQUFBQSxFQUFRQSxFQUFNRyxNQUFNbEYsR0FBSyxFQUNoQyxDQUhlZCxFQUdiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ssS0FBTSxHQUhPTCxFQUtIcEgsRUFBQW9OLEVBQU8zQyxHQUFZNUcsR0FBUTZKLEVBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0IsUUFBVVQsRUFBVWQsRUFBYUQsR0FBVSxDQUFoRCxDQUEzQixFQUNBbE4sRUFBQW9OLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPOUMsR0FBZThELENBQXRCLEVBQ2RwTyxFQUFjb04sRUFBT2pELEVBQU15RCxFQUFhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFXLEVBQW5ELEVBQ2NBLEdBQUFoTyxFQUFpQndOLEVBQU92QyxFQUF4QixDQUNoQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FLQSxTQUFTOEQsSUFDQXRCLEdBQ0U3RSxFQUFBLENBRVgsQ0FLQSxTQUFTQSxJQUNQLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQUNpQm9HLEVBNkJYQyxFQWhCQUMsRUFkQ3pCLElBQ1V1QixFQUFTeEgsRUFBaEI4RixPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FhSjRCLEVBQVNDLEVBQWYsS0FFZ0JsTyxHQUFVdU0sRUFBT2xCLEVBQWpCLElBQ0R6TywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQTJQLEVBQU9sQixHQUFjNEMsQ0FBckIsRUFDYjlPLEVBQWNvTixFQUFPN0MsR0FBYycKICAgICAgICAgICAgICAgICAgICAgICAgYidpRCxHQUFnQnNCLEdBQVUsRUFBN0QsRUFDTW5ILEVBQUFtSCxFQUFTNUksR0FBZUMsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dCNkksQ0FBeEMsR0FVRkMsRUFnRFIsV0FDTzdILEdBQUFBLEVBQU9nQyxHQUFJNEQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVg1RixFQUNILE9BQU8ySCxFQUFQLEVBR0YsSUFBTUcsRUFBWWxPLEVBQU1zTSxFQUFXNicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLFNBQVNDLEtBQTFCLEVBQ1pDLEVBQVlyTyxFQUFNb00sR0FDbEJ0RCxFQUFZK0QsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MsT0FBUSxDQUFBLENBQVIsRUFDckJ4TyxFQUFZd08sRUFBUyxRQUFTLENBQUEsQ0FBVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFFM0IsT0FBTzlLLEdBQU9tTSxFQUFXcEYsRUFBWCxHQUF1QjlHLEdBQU1xTSxFQUFXdicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBQ2pEL0csR0FBT3NNLEVBQVdoUSxFQUFsQixHQUErQjJELEdBQU1rTSxFQUFXN1AsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWpCLENBQ3RDLEVBNURFLEVBQ013UCxFQUFTLENBQUVJLElBQWEsQ0FBRUYsS0FBY2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBRXZDN0csRUFBTytCLE1BQU1DLEdBQUksQ0FBRTlPLEVBQVFDLEdBQTNCNk0sR0FDUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwSCxFQUFBb04sRUFBT3pDLEdBQWFrRSxHQUFVLEVBQTlCLEVBR0Y3TyxFQUFBZ0MsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VvTCxFQUFPeEksRUFBUTBLLGdCQUFrQixFQUEzQyxFQUFpRGxGLEVBQVd5RSxFQUFTLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEVBQUssRUFBMUUsRUFFVGpCLEdBQ0g1TixFQUFjb04sRUFBT2hELEVBQVd5RSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUyxDQUFBLEVBQUssQ0FBOUMsRUFHR0ksSUFBWXBPLEdBQVV1TSxFQUFPZCxFQUFqQixJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRjdPLEVBQUEyUCxFQUFPZCxHQUFlMkMsQ0FBdEIsRUFDUHRILEVBQUFzSCxFQUFVN0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQWdCQyxHQUFjMkksQ0FBeEMsR0FHREMsR0FBVzdPLFNBQVNtUCxnQkFBa0JuQyxJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDckNILEVBQVFLLEVBQVdrQixPQUFPQyxNQUFPckgsRUFBTzhGLEtBQWhDLElBQ0x4TSxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3VNLEVBQU1HLEtBQU5ILEVBNUNoQnhQLEVBQWEyUCxFQUFPaEIsR0FBWWMsSUFBVTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFPLENBQWpELEVBQ0FuUixFQUFhMlAsRUFBT2YsR0FBWWEsSUFBVTBCLEVBQU8sQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWpELEVBRUosQ0E2REEsU0FBU0csSUFDRCxJQUFTSCxFQUFTeEgsRUFBaEI4RixNQUNSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUFPMEIsSUFBUzFCLEdBQVd0SSxFQUFRNEssYUFBZVosSUFBU3pCLENBQzdELENBc0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxJQUFNNkIsRUFBTyxDQUNYOUIsTUFBQUEsRUFDQUMsV0FBQUEsRUFDQUMsTUFBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0FjLFVBQUFBLEVBQ0FELFFBQUFBLEVBQ0F3QixNQXJMRixXQUNTeEIsSUFDTGIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01sRixHQUFTcUYsRUFBS3JGLEdBQWFoRSxTQUFBQSxHQUFLZ0osRUFBUSxDQUFiLEVBQ2onCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xOLEVBQWNvTixFQUFPakQsRUFBTXdELEVBQWEsV0FBYSxPQUFyRCxFQUNjM04sRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidvTixFQUFPdkMsR0FBc0I2QyxFQUFLTixLQUFsQyxFQUNkcE4sRUFBY29OLEVBQU8zQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBWXVELEdBQVNuSyxHQUFRNkosRUFBS2dDLFdBQVksQ0FBRXhDLEVBQVEsRUFBRzlGLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPcE0sT0FBN0MsQ0FBMUMsR0FVRlUsRUFBTTBSLEVBQU8sUUFBUzVSLEVBQU9tTSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTTFCLEdBQWErSSxDQUExQixDQUF0QixFQUNBdFQsRUFBTTBSLEVBQU8sVUFBVzVSLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPbU0sRUFBTVYsR0FBcUIrSCxDQUFsQyxDQUF4QixFQUNBeEgsRUFBSSxDQUFFeEIsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWFrQixHQUFlUCxHQUFrQjZCLENBQXBELEVBQ0FoQixFQUFJWCxHQUEwQnNILENBQTlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUVLVixHQUNIakcsRUFBSXpCLEVBQVk0SSxDQUFoQixDQVpKLEVBNktFL0ksUUExSkYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dBQ2N5SCxFQUFBLENBQUEsRUFDWnhJLEVBQU1lLFFBQU4sRUFDQTFELEVBQWFrTCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1YsRUFBcEIsRUFDQTlNLEVBQWlCd04sRUFBT25DLEVBQXhCLEVBQ2NqTCxFQUFBb04sRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU8sUUFBU1csQ0FBaEIsRUFDQS9OLEVBQUFvTixFQUFPM0MsR0FBWXVELEdBQVMsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzVCLENBQ2hCLEVBb0pFeEYsT0FBQUEsRUFBQWxJLE1BMURPLFNBQU9DLEVBQWN0RCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd0IwUyxHQUNwREMsRUFBVUQsR0FBZ0J6QixHQUFlZCxFQUFPN00sRUFBTXRELENBQXRELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUNGLEVBMERFNFMsU0FwQk8sU0FBVUMsRUFBY0MsR0FPL0IsT0FOSUMsRUFBTy9NLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLNk0sRUFBTzVDLENBQVAsR0FHZDhDLEVBREsvQixHQUFhckosQ0FBQUEsRUFBUWlFLFEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVekIsQ0FBQUEsRUFBT2dDLEdBQUkyRCxFQUFYM0YsRUFJL0I0SSxFQUhFcE4sRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidvTixFQUFNNUksRUFBT3BNLE9BQVNnVixDQUF0QixJQUdDRCxDQUNqQixDQUVhLEVBYU4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BQUFmLENBQ1QsQ0M5Uk8sSUFBTWlCLEdBQThCMU4sRUFBcEMsWUNIQSxJQUFNMk4sR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTBCLENBQUVDLFFBQVMsQ0FBQSxFQUFPQyxRQUFTLENBQUEsQ0FBM0IsRUNJaEMsSUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEdBQW9CLENBQy9CQyxTQUFVLElBQ1ZDLE1BQVUvRyxHQUNWZ0gsS0FBVWpILEdBQ1ZrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsR0FBVWhILEVBQ1ZpSCxLQUFVaEgsQ0FMcUIsRUFlMUIsU0FBU2lILEdBQWNwUixHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUIsT0FEQUEsRUFBTS9DLEVBQVUrQyxDQUFBLEVBQVFBLEVBQU1BLEVBQUlBLElBQzNCOCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRLEdBQW1COVEsSUFBU0EsQ0FDckMsQ0NKQSxJQUFNcVIsR0FBaUIsVUNmaEIsSUFBTUMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQXlCdE8sRUFBL0IsUUFPTXVPLEdBQTRCRCxHQUFsQyxVQU9NRSxHQUFBLElBQXNCRiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBdEIsT0FBaURDLEdBQWpELElDV2IsSUFBTUUsR0FBZSxDQUFFLElBQUssb0RDRFosUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU81SixFQUFnQmtHLEVBQXdCMUksR0FDdkQsSUFBRXVFLEVBQVUvQixFQUFWK0IsTUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Y4SCxFQUFnQnJNLEVBQVFxTSxhQUFlLEdBQ3ZDQyxFQUFnQnRNLEVBQVFzTSxlQUFpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDekMzSixFQUFnQm5ELEdBQXRCLEVBS00rTSxFQUE4QyxHQXVCcEQsU0FBU3ZMLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTd0wsR0FDWEEsR0FDSDdKLEVBQU8zQixRQUFQLENBRUosQ0FRUyxTQUFBeUwsRUFBVXpNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFrQjlDLEdBQzdCd1AsRUFBWUMsV0FBWXpQLEdBQ3ZCeUYsRUFBQTdMLEtBQU00ViwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBVyxTQUFVOUksQ0FBM0IsRUFDUDJJLEVBQVE1VCxLQUFNLENBQUVxSCxFQUFTME0sRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXpCLENBQ0YsQ0FLQSxTQUFTOUksSUFDRCxJQUFBNkUsRUFBWWxFLEVBQU1DLEd0RXJEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsQ3NFcURILEVBQ1pvSSxFQUFZNU0sRUFBUTRNLFVBQ3BCQyxFQUFTTixFQUFRTyxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUIsU0FBRUQsRUFBUUUsR0FDekMsT0FBQWpTLEVBQU8rUixFQUFRRSxFQUFPLEdBQUloVCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFBVWdULEVBQU8sR0FBTSxFQUFqRCxDQUNULEVBQUcsRUFGWSxFQUlmaFMsR0FBTWlGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFOLEVBQ0FrRSxFQUFLMkksQ0FBTCxFQUVLN00sRUFBUWdCLFFBQ1h3QixFQUFPeEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBQTZCLGVBQXBCaEIsRUFBUWdCLE9BQXhCd0IsRUFDVWlHLEdBQ1Z6SCxFQUFTLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLENBQVQsRUFDQXdCLEVBQU9xSSxNQUFQckksR0FFY29LLElBQUE1TSxFQUFRNE0sV0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwSyxFQUFPd0ssUUFBNUIsQ0FFbEIsQ0EwQlMsU0FBQTlJLEVBQUsrSSxFQUFlQyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0JDLEdBQzNDclMsRUFBT2tGLEVBQVNpTixDQUFoQixFQUNBQyxHQUFRcFMsRUFBT1QsTycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU8rUyxlQUFnQnBOLENBQXZCLEVBQWtDaU4sQ0FBbEMsRUFFVkUsQ0FBQUEsR0FBWTVJJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNQyxHdEVsSUosQ3NFa0lGLEdBQ2ZoQyxFQUFPTyxLQUFNcEIsRUFBZTNCLENBQTUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQndDLENBRUosQ0FFTyxNQUFBLENBQ0w2SyxNQTdGRixXQUNRLElBQUFDLEVBQStCLFFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYid2QnROLEVBQVF1TixXQUV0Qm5ULEVBQVNpUyxDQUFULEVBQ0dtQixLQUFNLFNBQUVDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHQyxHQUFMLE9BQVlKLEVBQVEsQ0FBQ0csRUFBSSxDQUFDQyxFQUFJLENBQUNBLEVBQUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUNELENBQXBDLENBRFQsRUFFR25WLFFBQVMsU0FBT3FDLEdBQ2Y4UixFQUFVSixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYTFSLEdBQXZCLEtBQW1DMlMsRUFBUSxNQUFRLE9BQW5ELFVBQW9FM1MsRUFBcEUsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsQ0FDQSxDQUpKLEVBTUE4UixFQUFVSCxFQUFlN1csQ0FBekIsRUFDT21PLEVBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1QsRUFtRkU1QyxRQUFBQSxFQUNBOEwsT0E1QkYsU0FBaUJhLEdBQ1ZoQixXQUFZbFgsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVosRUFBMkNzRSxVQUNyQzRULEVBQUE3UyxFQUFPa0YsRUFBU3NNLENBQWhCLEVBQWtDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZSLEdBQU1pRixFQUFTNUYsRUFBU2tTLENBQVQsR0FFOUQsRUF5QkVwSSxJQUFBQSxDQUonCiAgICAgICAgICAgICAgICAgICAgICAgIGInSyxDQU1ULFlackdnQixTQUFXMUIsRUFBZ0JrRyxFQUF3QjFJLEdBOEIxRCxNQUFBLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMaUosUUF2Qk8sU0FBU3ROLEVBQWNpUyxFQUFvQmhCLEdBRTVDLElBQUF0RSxFRDdDUyxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0M0Q2ZzRSxFQUFZQSxHQUFhNU0sRUFBUTRNLFlBQ0lnQixFQUFlaEIsSUFBYzdILEdBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUksQ0FBQSxFQUE1QixFQUV6QyxPQUFBQyxFQUFpQnJKLElBQVVxSixFQUFpQnJKLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFRMk0sSUFDdEQzTSxFQUFLMEQsUUFBUyxvQkFBcUIsU0FBRXdPLEVBQU9DLEdBQ3ZDJwogICAgICAgICAgICAgICAgICAgICAgICBiJzFPLEVBQWM0RixFQUFpQjZJLEVBQU1FLFlBQU4sR0FBdUJ6RixJQUFXdUYsRUFDaEUsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsRUFBVEMsRUFBYTFPLEVBQVk0TyxPQUFRLENBQXBCLEVBQXdCQyxZQUF4QixFQUF3QycKICAgICAgICAgICAgICAgICAgICAgICAgYic3TyxFQUFZL0ksTUFBTyxDQUFuQixFQUF5QitJLENBQ3JGLENBSEMsQ0FJUCxFQWVFOE8sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BTkYsU0FBaUI3VixHQUNmLE9BQU9BLEdEOURRLFFDOERFMkgsRUFBUTRNLFVBQW9CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFJLENBQUEsRUFDbkQsQ0FFTyxDQUlULFdhRWdCLFNBQVVwSyxFQUFnQmtHLEVBQXdCMScKICAgICAgICAgICAgICAgICAgICAgICAgYidJLEdBQ2hFLElBdUJJd0ssRUFLQTJELEVBS0FDLEVBakNpQjdMLEVBQUFBLEVBQWdCQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBN0JJLElBQUFBLEdBQUk5TCxJQUFBQSxLQUNKNlIsRUFBU25HLEVBQVRtRyxLQUNBRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUzlJLEVBQVQ4SSxLQUNGdUYsRUFBOEIsR0FLOUJDLEVBQXdCLEdBSzFCQyxFQUF3QicKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FLeEJDLEVBQXlCLEdBb0I3QixTQUFTbkIsSUEyREM3QyxFQUFBaUUsRUFBV2pJLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUFYLEVBQ0EySCxFQUFBalUsR0FBT3NRLEVBQVAsSUFBbUIvRCxFQUFuQixFQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTdJLEdBQUE0TSxHQUFTMkQsRUFBTSxrQ0FBZixFQUNSeFYsRUFBTTJWLEVBQVEvVSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVTRVLEVBQUEsSUFBV3pILEdBQVgsU0FBaUNDLEdBQWpDLEdBQUEsQ0FBeEIsRUFFUXBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBLENBQ05tVSxPQUFZN0gsR0FDWmtDLFdBQVk5QixHQUNaMEgsS0FBWTVILEdBQ1onCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkgsS0FBWTVILEdBQ1o2SCxJQUFZMUgsR0FDWjJILE9BQVkxSCxFQU5OLEVBT0wsU0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsTCxFQUFXdkIsR0FDSjBULEVBQUExVCxHQUFROFQsRUFBTSxJQUFLdlMsQ0FBTCxDQUN4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FUTSxFQVdSdEIsR0FBUXlULEVBQVUsQ0FBRTFGLEtBQUFBLEVBQU02QixNQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTzJELEtBQUFBLEVBQU1HLE9BQUFBLENBQXJCLENBQWxCLEVBU0EsSUFBTWhMLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPcUYsRUFBS3JGLElyQjVMZixTQUFtQnlMLEdBQ2pCLE1BQUEsR0FBSUEsRUFBV3pQLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPQyxHQUFLd1AsSUFBYXhQLEdBQUt3UCxJQUFZLEdBQU0sQ0FBekMsQ0FDL0IsRXFCMEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0NyUixFQUFWLEVBQ2xCc1IsRUFBT2hQLEVBQVFnUCxLQUVyQnJHLEVBQUtyRixHQUFNQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDTGtILEVBQUFsSCxHQUFLa0gsRUFBTWxILElBQVVBLEVBQXJCLFNBQ0Q2SyxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdLLEdBQU02SyxFQUFLN0ssSUFBVUEsRUFBckIsUUFFQSxDQUFFdEgsRUFBYzJNLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncEQsSUFBMkIsWUFBakJvRCxFQUFLc0csU0FBeUJELEdBQ25ENVQsRUFBQXVOLEVBQU1wRCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTXlKLENBQVosRUFHRjVULEVBQUF1TixFQUFNMUMsR0FBc0I2QyxFQUFLb0csUUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pDLEVBQ0E5VCxFQUFBK1MsRUFBTTVJLEVBQU0sY0FBWixFQTlGUDNCLEVBQUEsQ0FDVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0F3QkEsU0FBUzVDLEVBQVN3TCxHQUNWLElBQUF0UixFQUFRbUwsR0FBZThJLE9BQVEsTycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXZCLEVBRWRqWixFQUFPb1ksQ0FBUCxFQUNBaFIsRUFBYXFMLEVBQU00RixDQUFuQixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQWpSLEVBQWFrTixFQUFPZ0UsQ0FBcEIsRUFDQXhULEVBQWlCLENBQUV3UCxFQUFPMkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVFqVCxDQUFsQyxFQUNBRixFQUFpQjJOLEVBQU02RCxFQUFhdFIsRUFBUSxDQUFFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFTK0ssR0FBdkQsQ0FDRixDQUtBLFNBQVNyQyxJQUNQdEcsRUFBYXFMLEVBQU00RixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbkIsRUFDQWpSLEVBQWFrTixFQUFPZ0UsQ0FBcEIsRUFFQUQsRUFBZWEsRUFBWTdJLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUMzQmlJLEVBQWVZLEVBQVk1SSxJQUUzQnJOLEVBQVV3UCxFQUFNNEYsQ0FBaEIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidwVixFQUFVcVIsRUFBT2dFLENBQWpCLEVBRWNwVCxFQUFBdU4sRUFBTTlDLEdBQVk3RixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUW9KLEtBQTFCLEVBQ0FoTyxFQUFBdU4sRUFBTTdDLEdBQWlCOUYsRUFBUXFQLFVBQS8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixDQUNoQixDQW9EQSxTQUFTWixFQUFNelUsR0FDUGxCLEVBQU1vRSxHQUFvQnlMLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNM08sQ0FBTixFQUNoQyxPQUFPbEIsR0NyTkssU0FBU29TLEVBQW1CbFIsR0FDckMsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FyQyxFQUFZdVQsRUFBS29FLE9BQWpCLEVBQ0ksT0FBQXBFLEVBQUtvRSxRQUFTdFYsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWQsRUFLRCxJQUZSLElBQUlsQixFQUEwQm9TLEVBRXRCcFMsR0FBd0IsSUFBakJBLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidJeVcsVUFDWnhWLENBQUFBLEdBQVNqQixFQUFLa0IsQ0FBZCxHQUlMbEIsRUFBTUEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0kwVyxjQUdMLE9BQUExVyxDQUNULEVEcU0yQkEsRUFBVXlOLElBQUFBLEVBQVYsSUFBOEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb0MsRUFBTzdQLEVBQU0sS0FBQSxDQUNwRSxDQVNBLFNBQVNzVyxFQUFZbEMsR0FDWixNQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUNEQSxFQUFXbE4sS0FBQUEsRUFBUTFJLEtBQ25CNFYsRUFGQyxLQUVVbE4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1E0TSxVQUN2QjVNLEVBQVF5UCxNQUFZdkMsRUFIZixjQUlMbE4sRUFBUTRJLGNBQW9Cc0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBSnZCLFFBS0xBLElBQVMzRyxJQUFjZSxHQUUzQixDQUVBLE9BQU8xTSxHQUFReVQsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVUsQ0FDdkJoQixNQUFBQSxFQUNBeEMsTUF4SEYsV0FDRWpJLEVBQUlsQixFQUFlVixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbkIsRUFDQTRCLEVBQUlsQixFQUFlMkwsQ0FBbkIsRUFDQXpLLEVBQUlqQixFQUFlaUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQW5CLEVBRU05TSxFQUFBMEUsU0FBY3VNLEdBQWdDLFdBQUEsU0FBSzVQLEdBQ3ZEaScKICAgICAgICAgICAgICAgICAgICAgICAgYidXLEVBQXdCLFlBQVhqVyxFQUFFYixJQUNkLEVBQUEsQ0FBRWtVLFFBQVMsQ0FBQSxDQUFYJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUZHLEVBSUExVSxFQUFBNlIsRUFBTSxVQUFXLFdBQ3JCOVAsRUFBYThQLEVBQU1mLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFnQixDQUFDLENBQUV3RyxDQUF0QyxDQUNBLENBRkksQ0FHUixFQTZHRXBOLFFBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUh1QixFQUszQixTRTdLZ0IsU0FBUXdCLEVBQWdCa0csRUFBd0IxSSxHQUM5RCxJQUEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0J1QyxFQUFBQSxFQUFnQkMsR0FBbkNJLElBQUFBLEdBQUlHLElBQUFBLEtBQU1qTSxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsS0FDVndYLEtBQWlCNUYsRUFBVzZCLFVBQTVCK0QsT0FBUUgsSUFBQUEsS0FLVnZFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEyQixHQWNqQyxTQUFTOEYsSUFDQXBCLEVBQUFoVyxRQUFTLFNBQUVrUSxFQUFPRixHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdUJtRSxFQUFBakUsRUFBT0YsRUFBTyxDQUFHLENBQWpCLENBQXFCLENBQTlELENBQ1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBS0EsU0FBU3RILElBQ1AxSSxFQUFTLFNBQUErUCxHQUFXQSxFQUFNckgsUUFBTnFILCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFrQixDQUF0QyxFQUNBblMsRUFBTzBULENBQVAsQ0FDRixDQWlCUyxTQUFBNkMsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VqRSxFQUFvQkYsRUFBZUMsR0FDOUMvTixFQUFTNk4sR0FBTzdGLEVBQVE4RixFQUFPQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBWUMsQ0FBbEMsRUFDZmhPLEVBQU9xUSxNQUFQLEVBQ0FqQixFQUFPalIsS0FBTTZCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFib1AsRUFDQUEsRUFBTzRELEtBQU0sU0FBRW1DLEVBQVFDLEdBQVYsT0FBc0JELEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPckgsTUFBUXNILEVBQU90SCxLQUE1QyxDQUFic0IsQ0FDRixDQVNBLFNBQVNpRyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0MsR0FDWixPQUFPQSxFQUFnQjdWLEVBQVEsU0FBQW9PLEdBQUEsTUFBUyxDQUFFQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTWdCLE9BQWpCLENBQUEsRUFBNkJPLENBQzlELENBbUVTLFNBQUF0UixFQUFTRSxFQUEwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JzWCxHQUNyQ0QsRUFBQUMsQ0FBQSxFQUFnQnhYLFFBQVNFLENBQXpCLENBQ1AsQ0FVQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU3lCLEVBQVE4VixHQUNmLE9BQU9uRyxFQUFPM1AsT0FBUXRDLEVBQVlvWSxHQUM5QicKICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQ0EsU0FBQTFILEdBQUEsT0FBU3pRLEVBQVVtWSxHQUNqQmhXLEdBQVNzTyxFQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0csTUFBT3VILEdBQ3RCdFgsRUFBVUwsRUFBUzJYLEdBQVcxSCxFQUFNQyxLQUFwQyxDQUYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixDQUZHc0IsQ0FNVCxDQXdETyxNQUFBLENBQ0xpQixNQW5NRixXQUNPNkUsRUFBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTDlNLEVBQUlsQixFQUFlVixDQUFuQixFQUNBNEIsRUFBSWxCLEVBQWVnTyxDQUFuQixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRixFQWdNRTFPLFFBQUFBLEVBQ0E0QyxPQTdLRixXQUNFdEwsRUFBUyxTQUFBK1AsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVdBLEVBQU16RSxPQUFOeUUsQ0FBaUIsQ0FBckMsQ0FDRixFQTRLRW9FLFNBQUFBLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBb0QsSUFBQUEsRUFDQUcsTUEzSUYsU0FBZ0JDLEdBQ1IsSUFBRUMsRUFBZXhILEVBQWZ3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsV0FDRjVILEVBQVE0SCxFQUFXQyxRQUFTRixDQUFwQixFQUNSL1IsRUFBUWdTLEVBQVcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxXQUFhLEVBQUlwUSxFQUFRcVEsUUFDM0MsT0FBQXBXLEVBQVEsU0FBQW9PLEdBQUEsTycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMzSixHQUFTMkosRUFBTUMsTUFBT0EsRUFBT0EsRUFBUXBLLEVBQU0sQ0FBbENtSyxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbEIsQ0FBUixDQUNULEVBdUlFd0IsTUE5SEYsU0FBZ0J2QixHQUNQLE9BQUFyTyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUXFPLENBQVIsRUFBaUIsRUFDMUIsRUE2SEV0UCxJQXJITyxTQUFLSixFQUFtRDBQLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYicvRGdJLEVBQWExWCxFQUFPLFNBQVM0UCxHQUt0QixJQWtFZTFQLEVBQWNpSCxFQUU5QjNKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQXBFQzBCLEVBSEgwUSxFQURHNVEsRUFBVTRRLENBQVYsRUFDSy9MLEdBQVcrTCxHQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInREEsQ0FBZixLQUNHN08sRUFBTTJVLEVBQVFoRyxJQUNkN08sRUFBUStPLEVBQU83TyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUU4sRUFBUThVLEVBQU0zRixDQUFkLEVBQ25CclAsRUFBQXFQLEVBQU94SSxFQUFRakgsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQVF5UCxLQUF2QixFQStEUTFQLEVBOURIMFAsRUE4RGlCekksRUE5RFZuSixFQUFPbU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU1uQixFQUFiLEVBK0RwQjJPLEVBQVNuVCxHQUFVdEUsRUFBSyxLQUFMLEdBQ25CMScKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQVdtYSxFQUFYbmEsUUFHSm1hLEVBQU9qWSxRQUFTLFNBQU9rWSxHQUNmMVosRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EwWixFQUFLLGFBQWMsV0FDZHBhLEVBQUFBLEdBQ0UySixFQUFBLENBRVgsQ0FKSSxDQUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTixDQU5GLEVBUVNBLEVBQUEsRUF6RVQsQ0FYRixFQWFBZ0QsRUFBTXJCLENBQU4sQ0FDRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFzR0VuRixPQTlGRixTQUFpQndULEdBQ0hVLEVBQUF4VyxFQUFROFYsQ0FBUixFQUFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JyRyxJQUFLLFNBQUFyQixHQUFBLE9BQVNBLEVBQU1HLEtBQWYsQ0FBdkIsQ0FBQSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWnpGLEVBQU1yQixDQUFOLENBQ0YsRUE0RkVwSixRQUNBQSxFQUNBMkIsT0FBQUEsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYid5QixNQTNETyxTQUFPQyxFQUFjdEQsRUFBd0IwUyxHQUNwRHpTLEVBQVMsU0FBQStQLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FXQSxFQUFNM00sTUFBT0MsRUFBTXRELEVBQU8wUyxDQUExQjFDLENBQTJDLENBQS9ELEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNGLEVBMERFcUksVUExQkYsU0FBb0JaLEdBQ1gsT0FBQUEsRUFBZ0J4QixFQUFnQjFFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFUeFQsTUFDaEMsRUF5QkV1YSxTQWxCRixXQUNTL0csT0FBQUEsRUFBT3hULE9BQVM0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBUXFRLE9BQ2pDLENBRU8sQ0FnQlQsU0NyUWdCLFNBQVE3TixFQUFnQmtHLEVBQXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQjFJLEdBQzlELElBU0k0USxFQUtBQyxFQUtBQyxFQW5CSWxPLEtBQW1CTCxFQUFnQkMsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQW5DSSxHQUFJOUwsSUFBQUEsS0FBTWlNLElBQUFBLEtBQ1Y2RyxFQUFXbEIsRUFBWGtCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUNBWCxFQUFZUCxFQUFXUSxVQUF2QkQsUUFDQU4sS0FBc0JELEVBQVc2QixVQUFqQzUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixLQUFNNkIsSUFBQUEsTUFBTzJELElBQUFBLEtBQ2J0RSxFQUE4QkQsRUFBOUJDLE1BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidja0gsRUFBZ0JuSCxFQUF2QmxPLE1BK0JmLFNBQVNnVSxJQUNQa0IsRUFBVzVRLEVBQVE0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ00sWUFBYzdILEdBRWpDckosRUFBT2lOLEVBQU0sV0FBWWxMLEVBQU11QyxFQUFRaUYsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVIsQ0FBL0IsRUFDQXZKLEVBQU84TyxFQUFPdkIsRUFBUyxhQUFBLEVBQWlCK0gsRUFBWScKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBQSxDQUFaLENBQXhDLEVBQ0F0VixFQUFPOE8sRUFBT3ZCLEVBQVMsY0FBQSxFQUFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IrSCxFQUFZLENBQUEsQ0FBWixDQUF6QyxFQUVBQyxFQUFRLENBQUEsQ0FBUixDQUNGLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVFBLFNBQVNBLEVBQVFDLEdBQ1QsSUFBQUMsRUFBVS9VLEVBQU11TSxHQUVqQnVJLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxHQUFTTCxFQUFTNUwsUUFBVWtNLEVBQVFsTSxPQUFTNEwsRUFBU08sU0FBV0QsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FDLFNBQ3JFMVYsRUFBQThPLEVBQU8sU0FxQ2xCLFdBQ0UsSUFBSTRHLEVBQVMsR0FFUlInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBRUhoVCxHQURBd1QsRUFBU0MsRUFBVCxFQUNnQixtQ0FBaEIsRUFDQUQsRUFBa0JBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFBQSxFQUFjSixNQUFBQSxFQUFZLENBQUEsQ0FBWixFQUFoQyxNQUEyREEsRUFBWSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxHQUF2RSxLQUdLLE9BQUFJLENBQ1QsR0EvQ1csRUFFUEwsRUFBYTlILEVBQVMsZUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCeEwsRUFBTXVDLEVBQVFzUixHQUFSLENBQTdDLEVBQ2FQLEVBQUEsUUE2RFIvUSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUXVSLFVBQ1gsS0FDQTlULEVBQU11QyxFQUFRd1IsVUFBZCxJQUFnQ1osRUFBVyxHQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EsSUEvRHJDLEVBQ0FWLEVBQUEsU0F1RVJ0VCxFQUFNdUMsRUFBUTBSLFdBQWQsSUFDQWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWE1USxFQUFRMlIsV0FBYSxLQUFPRixJQUFtQkosS0F4RXhCLENBQUEsQ0FBNUIsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBRUZSLEVBQUFNLEVBQ1hwTyxFQUFNbEIsRUFBTixFQUVLaVAsS0FBZUEsRUFBV2MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsS0FDaEIvWSxFQUFBOFAsRUFBTWQsR0FBZ0JpSixDQUF0QixFQUNiL04sRXRCdkZnQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV3NCdUZWK04sQ0FBdEIsR0FHTixDQVVBLFNBQVNFLEVBQVl2VyxHQUNiLElBQUVvWCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWTdSLEVBQVo2UixRQUNGbFcsRUFBT3NOLEVBQVN4TyxFQUFRLFFBQVUsTUFBM0IsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04sT0FBQW9YLEdBQ0ZwVSxFQUFNb1UsRUFBU2xXLEtBQVluRSxHQUFVcWEsR0FBWSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUEsS0FDckQsS0FDUCxDQXdCQSxTQUFTUixJQUNBLE9BQUE1VCxFQUFNdUMsRUFBUW9SLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFVaFYsRUFBTStSLENBQU4sRUFBYWxKLE1BQVFqRixFQUFROFIsV0FBckQsQ0FDVCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E0QkEsU0FBU0wsSUFDRCxJQUFBSCxFQUFNN1QsRUFBTXVDLEVBQVFzUixHQUFSLEVBQ1gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQUEsY0FBY0EsU0FBY0EsR0FBNUIsTUFBeUN0UixFQUFRcVEsU0FBVyxJQUFNaUIsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWNBLEdBQWhGLEdBQ1QsQ0FPQSxTQUFTUyxJQUNQLE9BQU8zVixFQUFNK1IsQ0FBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUWxGLEVBQVMsT0FBVCxFQUN2QixDQVVTLFNBQUErSSxFQUFXMUosRUFBZ0IySixHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUI1SixFQUFRd0IsRUFBT3ZCLEdBQVMsQ0FBVCxFQUNkLE9BQUFELEVBQ0hqTSxFQUFNaScKICAgICAgICAgICAgICAgICAgICAgICAgYidNLEVBQU1HLEtBQU4sRUFBZVMsRUFBUyxPQUFBLElBQWdCZ0osRUFBYSxFQUFJQyxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUMvRCxDQUNOLENBV1MsU0FBQUMsRUFBVzdKLEVBQWUySixHQUMzQixJQUlFL00sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSkZtRCxFQUFRd0IsRUFBT3ZCLEdBRXJCLE9BQUtELEdBQ0c1TixFQUFRMkIsRUFBTWlNLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFNRyxLQUFOLEVBQWVTLEVBQVMsVUFDdEMvRCxFQUFROUksRUFBTStSLENBQU4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsRixFQUFTLFNBQzlCNUssRUFBSzVELEVBQVF5SyxJQUFXK00sRUFBYSxFQUFJQyxNQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInM0MsQ0FDVCxDQVVBLFNBQVNFLEVBQVlILEdBQ1osT0FBQUUsRUFBVzNQLEVBQU9wTSxPQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUyxDQUEzQixFQUFpQytiLEVBQVcsR0FBTUgsRUFBVyxFQUFHQyxDQUFILENBQ3RFLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BLFNBQVNDLElBQ0QsSUFBQTdKLEVBQVF3QixFQUFPLEdBQ2QsT0FBQXhCLEdBQVNnSywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV0FBWTNXLEVBQU8yTSxFQUFNRyxNQUFPUyxFQUFTLGFBQUEsQ0FBdEIsSUFBNkMsQ0FDbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGLENBb0JBLFNBQVMySSxJQUNQLE9BQU9wUCxFQUFPZ0MsR0FBSTRELEVBQVg1RixHQUFxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0I0UCxFQUFZLENBQUEsQ0FBQSxFQUFTTCxFQUFqRCxDQUNGLENBRU8sTUFBQSxDQUNMbEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BbE5GLFdDMUNjLElBQ2RoVSxFQUNBeWIsRUFFTXJQLEVEdUNDeU0sRUFBQSxFQUNMNScKICAgICAgICAgICAgICAgICAgICAgICAgYidZLEVBQU1tQixPQUFRLGVDM0NoQnBCLEVEMkN5Q0QsRUFBT21NLEVBQU1uQixJQ3hDaERxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBV0QsR0FBaUJzUCxHQUFZLEVBQUd6YixFQUFNLEtBQU0sQ0FBM0IsRUFFM0IsV0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0lvTSxFQUFBbUIsU0FBQSxHQUFjbkIsRUFBUzFNLE1BQXZCLENBQ1gsRURvQ0UsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidxTSxFQUFJLENBQUVqQixFQUFlRCxHQUFpQmdPLENBQXRDLEVBQ0E5TSxFQUFJaEIsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NxUCxDQUFsQixDQUNGLEVBOE1FQSxPQUFBQSxFQUNBYyxTQUFBQSxFQUNBQyxVQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQUksV0FBQUEsRUFDQUQsVUFBQUEsRUFDQUksV0FyQkYsU0FBcUI5WCxHQUNaLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNFgsV0FBWTNXLEVBQU84TyxFQUFPdkIsRUFBUyxXQUFXeE8sRUFBUSxRQUFVLFFBQTdDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFuQixHQUFtRixDQUM1RixFQW9CRW1YLFdBQUFBLENBUkssQ0FVVCxTRXhQZ0IsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVFwUCxFQUFnQmtHLEVBQXdCMUksR0FDeEQsSUFhRndTLEVBYkV2UyxFQUFRc0MsRUFBZycKICAgICAgICAgICAgICAgICAgICAgICAgYidCQyxHQUN0QkksRUFBTzNDLEVBQVAyQyxHQUNBMkgsRUFBcUI3QixFQUFyQjZCLFNBQVVYJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFXbEIsRUFBWGtCLE9BQ1ZYLEVBQVlQLEVBQVdRLFVBQXZCRCxRQUtGd0osRUFBd0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBVzlCLFNBQVM1SCxJQUlBLEdBSFBqSSxFQUFJbEIsRUFBZWdSLENBQW5CLEVBQ0E5UCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBSSxDQUFFakIsRUFBZUMsSUFBZ0IrUSxDQUFyQyxFQUVPSCxFQUFhSSxJQUF3QixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDMUNDLElBd0NlbFAsRUF4Q0w2TyxFQXlDTmxFLEVBQVMxRSxFQUFPaUcsSUFBUCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXhaLE1BQTVCLEVBQ1FELEVBQVdrWSxFQUFYbFksT0FFUixHQUFLQSxFQUFTLENBQ0osSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFrWSxFQUFPbFksT0FBU3VOLEdBQ3RCaEwsRUFBTTJWLEVBQVFBLENBQWQsRUFHRjNWJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNMlYsRUFBT2pZLE1BQU8sQ0FBQ3NOLENBQWYsRUFBd0IySyxFQUFPalksTUFBTywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBR3NOLENBQWpCLENBQTlCLEVBQXlEckwsUUFBUyxTQUFFK1AsRUFBT0MsR0FDekUsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU13SyxFQUFTeEssRUFBUTNFLEVBQ2pCb1AsRUFnQkgsU0FBV2phLEVBQWtCd1AsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICBiJzlCeUssRUFBUWphLEVBQUlrYSxVQUFXLENBQUEsQ0FBZixFQUdQLE9BRkc3WixFQUFBNFonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU8vUyxFQUFRakgsUUFBUWdhLEtBQXZCLEVBQ1ZBLEVBQU16UCxHQUFTZCxFQUFPbScKICAgICAgICAgICAgICAgICAgICAgICAgYidHLEtBQUtyRixHQUEzQixTQUF3Q2hFLEdBQUtnSixFQUFRLENBQWIsRUFDakN5SyxDQUNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQXJCZ0MxSyxFQUFNRyxNQUFPRixDQUF4QixFQUNOd0ssRUFBQXJaLEVBQVFzWixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT3pFLEVBQVEsR0FBSTlGLEtBQTNCLEVBQXFDblAsRUFBUWtSLEVBQVM0RCxLQUFNNEUsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXZCLEVBQzlDcGEsRUFBTThaLEVBQVFNLENBQWQsRUFDT25KLEVBQUE2QyxTQUFVc0csJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU96SyxFQUFRM0UsR0FBVW1QLEVBQVMsRUFBSTFjLEdBQVVpUyxFQUFNQyxLQUFoRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDUCxDQU5GLENBT0YsQ0F2REVJLEVBQVd1SyxPQUFPaEMsT0FBUSxDQUFBLENBQTFCdicKICAgICAgICAgICAgICAgICAgICAgICAgYidJLENBQ0YsQ0FDRixDQUtBLFNBQVNnSyxJQUNDMVIsRUFBQSxFQUNGNkosRUFBQSxDQUNSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUtBLFNBQVM3SixJQUNQekUsRUFBUWtXLENBQVIsRUFDQXZjLEVBQU91YyxDQUFQLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBeFMsRUFBTWUsUUFBTixDQUNGLENBS0EsU0FBUzJSLElBQ1AsSUFBTWhQLEVBQVFpUCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBZCxFQUVLSixJQUFlN08sSUFDYjZPLEVBQWE3TyxHQUFTLENBQUVBLElBQzNCMUQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU04QyxLQUFNckIsQ0FBWixDQUdOLENBK0NBLFNBQVNrUixJQUNILElBS0lNLEVBTEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxFQUFXelMsRUFBWHlTLE9BVUNBLE9BUkFqUSxFQUFPZ0MsR0FBSTJELEVBQVgzRixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFSzNLLEdBQWE0YSxDQUFBQSxJQUd2QkEsR0FGTVMsRUFBYWxULEVBQVNpSixFQUFTLFlBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLElBQW9CUCxFQUFXdUssT0FBT2pCLFVBQVcsQ0FBN0J0SixJQUN6QnRLLEdBQU1oQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTW1PLEVBQVNDLEtBQVQsRUFBa0J2QixFQUFTLE9BQVQsR0FBdUJpSyxDQUFyRCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDUGxULEVBQVNpSixFQUFTLFdBQVQsSUFBNEJ6RyxFQUFPcE0sUUE5SGpELEVBOEg2RDRKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRcVEsU0FKekZvQyxFQUFTLEVBT0pBLENBQ1QsQ0FFTyxNQUFBLENBQ0w1SCxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDQTdKLFFBQUFBLENBRkssQ0FJVCxPQzVHZ0IsU0FBTXdCLEVBQWdCa0csRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgYidCMUksR0FDNUQsSUFTSW1ULEVBVGlCNVEsRUFBQUEsRUFBZ0JDLEdBQTdCSSxJQUFBQSxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSUcsSUFBQUEsS0FDSm1CLEVBQVExQixFQUFPK0IsTUFBZkwsSUFDQThOLEtBQTJEdEonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVd1SyxRQUF0RWpCLFVBQVdPLElBQUFBLFdBQVlKLElBQUFBLFVBQVdKLElBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFVSyxJQUFBQSxXQUM1Q25KLEtBQW9CUCxFQUFXUSxXQUEvQkQsUUFBU2lGLElBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUNUQyxLQUFnQnpGLEVBQVc2QixVQUEzQjRELEtBQU0zRCxJQUFBQSxNQW9CZCxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUzRJLElBQ0ExSyxFQUFXd0gsV0FBV21ELFdBQzNCM0ssRUFBVzRLLE9BQU94UCxPQUFsQicKICAgICAgICAgICAgICAgICAgICAgICAgYic0RSxFQUNBNkssRUFBTS9RLEVBQU84RixLQUFiLEVBQ0FJLEVBQVdrQixPQUFPaEcsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCOEUsRUFFSixDQStCQSxTQUFTNkssRUFBTWpMLEdBQ0ZrTCxFQUFBQyxFQUFZbkwsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU8sQ0FBQSxDQUFuQixDQUFBLENBQ2IsQ0FRUyxTQUFBa0wsRUFBV0UsRUFBa0JDLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYic3Qm5SLEVBQU9nQyxHQUFJNEQsRUFBWDVGLElBQ0NvUixFQUFjRCxFQUFjRCxFQVd0QyxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZUEsR0FDUmxSLENBQUFBLElBQ0c4RixFQUNBdUwsRUFGSHJSLEVBQU9nQyxHQUFJMkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVgzRixJQUNHOEYsRUFBYzZILEVBQVN1RCxHQUN2QkcsRUFBY3ZMLEVBQVFJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidXd0gsV0FBVzRELE9BQWxELEdBQ29CeEwsRUFBUSxHQUVSdUwsS0FDUEgsRUFBQUssRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09MLEVBQVVHLENBQWpCLEdBRWYsQ0FFTyxPQUFBSCxDQUNULEVBdkJ1REEsQ0FBTixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0NoWSxFQUFPeVMsRUFBTSxZQUFiLFlBQXVDbEYsRUFBUyxHQUFBLEVBQVcySyxJQUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBM0QsS0FBQSxFQUNhRixJQUFBRSxHQUFlN1EsRUFBTVQsSUFFdEMsQ0E2QlMsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F5UixFQUFPTCxFQUFrQk0sR0FDMUIsSUFBQUMsRUFBU1AsRUFBV1EsRUFBVUYsQ0FBViwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDcEJHLEVBQVMvQixFQUFmLEVBRU8sT0FES3NCLEdBQUF4RixFQUFRaUcsR0FBUy9WLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFNQyxFQUFLNFYsQ0FBQSxFQUFXRSxDQUF0QixHQUFnQyxFQUFqRCxHQUEyREgsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ksRUFBSSxDQUFBLEVBRXpGLENBS0EsU0FBU2xRLElBQ0kwUCxFQUFBWSxFQUFBLEVBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsQ0FBZixFQUNYakIsRUFBV3JQLE9BQVgsQ0FDRixDQVNBLFNBQVNxTSxFQUFTdScKICAgICAgICAgICAgICAgICAgICAgICAgYidELEdBTWhCLElBTE0sSUFBQTlKLEVBQVNsQixFQUFXa0IsT0FBT2lHLElBQTNCLEVBRUZ2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsRUFBYyxFQUNkK0wsRUFBY0MsRUFBQUEsRUFFUkMsRUFBSSxFQUFHQSxFQUFJM0ssRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU94VCxPQUFRbWUsQ0FBTSxHQUFBLENBQ2xDLElBQUFoTSxFQUFhcUIsRUFBUTJLLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidJak0sTUFDekI2QyxFQUFhOU0sRUFBS29WLEVBQVlsTCxFQUFZLENBQUEsQ0FBeEIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lDbUwsQ0FBakMsRUFFeEIsR0FBS3ZJLEVBQUFBLEdBQVlrSixHQUlmLE1BSGNBLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbEosRUFDQTdDLEVBQUFDLENBSWxCLENBRU8sT0FBQUQsQ0FDVCxDQVVTLFNBQUFtTCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWW5MLEVBQWVrTSxHQUM1QixJQUFBZCxFQUFXeEYsRUFBUWlFLEVBQVc3SixFQUFRLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FSLEdBa0NyQkEsRUFsQzJDQSxFQW9DekMsWUFEVHhNLEVBQVVrRSxFQUFWbEUsUUFDc0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInaVcsRUFBYUMsRUFBQUEsRUFBVzFKLEVBQU8sQ0FBQSxDQUFQLEdBQWtCLEVBQUksQ0FBQycKICAgICAgICAgICAgICAgICAgICAgICAgYid4TSxFQUFRa1csRUFBVzFKLENBQVgsR0FBc0IsSUFuQ3BHa00sT0FBQUEsR0FvQk1kLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BCV0EsRUFzQlhBLEVBRFIxVCxFQUFReVUsV0FBYWpTLEVBQU9nQyxHQUFJMEQsRUFBWDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixFQUNiekQsRUFBTzJVLEVBQVUsRUFBR3hGLEVBQVFrRSxFQUFZLENBQUEsR0FBU0wsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsQ0FBdEMsQ0FBcEIsRUFHTjJCLEdBekI4QkEsQ0FDdkMsQ0FPQSxTQUFTVSxJQUNEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFBbFAsRUFBTytELEVBQVMsUUFDZixPQUFBN00sRUFBTStSLENBQU4sRUFBY2pKLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTOUksRUFBTW9PLENBQU4sRUFBZXRGLEdBQVNnSixFQUFRcUUsRUFBWSxDQUFBLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLENBQXBCLENBQ3hELENBa0NBLFNBQVMyQixFQUFVaFcsR0FDVixPQUFBdVYsRUFBWXZWJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNd0ssRUFBV3dILFdBQVc0RCxPQUF0QnBMLEVBQWlDLEVBQUcsQ0FBQyxDQUFFMUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVF5VSxTQUFqRSxDQUNULENBK0JPLE1BQUEsQ0FDTDVKLE1BaE9GLFdBQ0VzSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYXpLLEVBQVd5SyxXQUN4QnZRLEVBQUksQ0FBRTFCLEVBQWVXLEdBQWVGLEVBQWVELEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQjBSLENBQXBFLENBQ0YsRUE4TkVzQixLQXZNRixTQUFlQyxFQUFjck0sRUFBZXFHLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjNU8sR0ErSzFELElBQW1CaVUsRUFDWFksRUEvS0RELElBQVNyTSxJQThLRzBMLEVBOScKICAgICAgICAgICAgICAgICAgICAgICAgYidLdUJyRixFQUFQZ0csRUErSzNCQyxFQUFVMUcsRUFBUTZGLEVBQU9LLEVBQVAsRUFBc0JKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUF0QixDQUFBLEVBQ2pCQSxFQUNRLEdBQVhZLEVBQ0FBLEdBQVd6RyxFQUFNbEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsYUFBVCxHQUE2QjdNLEVBQU1vTyxDQUFBLEVBQVN2QixFQUFTLE9BQVQsTUFqTHhEbicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEVBQUEsRUFDUDBQLEVBQVdPLEVBQU9LLElBQXNCekYsRUFBUGdHLEdBQWUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBaEQsR0FHRnpRLEVBQUt4TyxDQUFMLEVBQ01xTixFQUFBNUIsRUFBWW1ILEVBQU9xRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTWdHLENBQXpCLEVBRUt4QixFQUFBNWMsTUFBTytSLEVBQU8sV0FDdkJwRSxFN0V2RicKICAgICAgICAgICAgICAgICAgICAgICAgYidjLEM2RXVGZCxFQUNNbkIsRUFBQTNCLEdBQWFrSCxFQUFPcUcsRUFBTWdHLENBQTFCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NONVUsR0FBWUEsRUFBWixDQUNBLENBSlMsQ0FLYixFQTBMRXdULEtBQUFBLEVBQ0FDLFUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxFQUNBTyxNQUFBQSxFQUNBalEsT0FBQUEsRUFDQXFNLFFBQUFBLEVBQ0FzRCxXQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFDQVcsWUFBQUEsRUFDQUYsU0FBQUEsRUFDQVcsY0FsQk8sU0FBZTNXLEVBQTJCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dWLEdBQ2pEQSxFQUFXN2IsR0FBYTZiLENBQUEsRUFBYVUsRUFBMUIsRUFBMENWLEVBQy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxJQUFBb0IsRUFBc0IsQ0FBQSxJQUFSNVcsR0FBZ0JnUSxFQUFRd0YsQ0FBUixFQUFxQicKICAgICAgICAgICAgICAgICAgICAgICAgYid4RixFQUFRZ0csRUFBVSxDQUFBLENBQUEsQ0FBbEIsRUFDbkRMLEVBQXNCLENBQUEsSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1IzVixHQUFpQmdRLEVBQVF3RixDQUFSLEVBQXFCeEYsRUFBUWdHLEVBQVUsQ0FBQSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxDQUFsQixFQUMxRCxPQUFPWSxHQUFlakIsQ0FDeEIsRUFjRVQsV0FBQUEsQ0FaSyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidjVCxhQ2xRZ0IsU0FBWTVRLEVBQWdCa0csRUFBd0IxSSxHQUNsRSxJQWtCSStVLEVBVUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUtBQyxFQUtBNUUsRUF0Q2lCOU4sRUFBQUEsRUFBZ0JDLEdBQTdCSSxJQUFBQSxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUcsSUFBQUEsS0FDSm1TLEVBQVN4TSxFQUFUd00sS0FDQWQsRUFBc0NjLEVBQXRDZCxZQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYUYsRUFBeUJnQixFQUF6QmhCLFNBQVVULEVBQWV5QixFQUFmekIsV0FDdkI5QyxLQUF3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JqSSxFQUFXa0IsUUFBbkMrRyxTQUFVRCxJQUFBQSxVQUNWeUUsRUFBWW5WLEVBQVptViwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFDRkMsRUFBVTVTLEVBQU9nQyxHQUFJMkQsRUFBWDNGLEVBQ1Y2UyxFQUFVN1MsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgYidnQyxHQUFJMEQsRUFBWDFGLEVBQ1Y4UyxFQUFVMWUsRUFBTzJlLEVBQWEsQ0FBQSxDQUFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNqQkMsRUFBVTVlLEVBQU8yZSxFQUFhLENBQUEsQ0FBYixFQUtuQkUsRUFBWXpWLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRekosT0FBUyxFQVU3Qm1mLEVBQVlELEVBK0JoQixTQUFTL0YsSUFDUHNGLEVBQWF0RScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBVyxDQUFBLEdBQ3hCdUUsRUFBYWpWLEVBQVFpVixRQUNyQjVFLEVBQWFyUSxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FRLFFBQ3JCMEUsRUFBYWpCLEVBQWIsRUFFQSxJQUFNeEwsRUFBUXZKLEVBQU8wVyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVyxFQUFHTixFQUFVSixFQUFXQyxFQUFhLENBQWhELEVBRWhCMU0sSUFBVW1OLElBQ0RBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFBbk4sRUFDWjRNLEVBQUs5QixXQUFMLEVBRUosQ0FNQSxTQUFTdUMsSUFDRlosSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FqQixLQUNoQi9RLEUxQnJGaUMsSTBCcUZqQyxDQUVKLENBNEVTLFNBQUF3UyxFQUFhNUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWVpRixHQUNuQyxJQUFNalYsRUFBU3NXLElBQWE3RSxFQUFhLEVBQUEsRUFBSUMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3ZDc0UsRUFBU2lCLEVBQWtCSCxFQUFZOVcsR0FBV2dRLEVBQU8sQ0FBSyxFQUFBLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLOEcsRUFBVyxFQUFJUixHQUFXN0UsRUFBZixFQUFuRCxFQUU1QixNQUFTLEtBQVR1RSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBZVUsR0FDYixDQUFFL1csR0FBb0I4VixJQUFlRixFQUFVLENBQUV2RixHQUFRLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidyREEsRUFBTyxFQUFJb0csRUFJZm5CLEVBQWNlLEVBQU9rQixFQUFNbEIsQ0FBTixDQUM5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FnQlMsU0FBQWlCLEVBQWtCakIsRUFBY3pKLEVBQWM0SyxHQUNoRCxJQUNHeE4sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInK0JELE9BaENGcUksRUFBQSxHQUFjUCxFQUFBLElBQ1g5SCxFQTBDVixTQUFrQ3FNLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidoQyxHQUFLVSxHQUFpQyxTQUF0QnJWLEVBQVF5VSxXQUF3QkUsSUFBU2MsRUFHdkQsSUFGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsSUFBTS9CLEVBQVdVLEVBQWpCLEVBRVFWLElBQWFELEVBQVlrQixFQUFNLENBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxCLEdBQTRCalcsR0FBU2lXLEVBQU0sRUFBR25TLEVBQU9wTSxPQUFTLEVBQUcsQ0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgYic0SixFQUFRaUUsTUFBdEMsR0FDakQwUSxFQUFBYyxFQUFZLEVBQUVkLEVBQU8sRUFBRUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBSTNCLE9BQUFBLENBQ1QsRUFwRDJDQSxNQUV4QkEsSUFDRnpKLEVBQUF5SixFQUNBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQXJNLEVBQ0F3TixFQUFBLENBQUEsR0FHUm5CLEVBQU8sR0FBWUksRUFBUEosRUFLWCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBSkdNLEdBQWF2VyxDQUFBQSxHQUFTLEVBQUdpVyxFQUFNekosRUFBTSxDQUFBLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FmLEdBQXlCeE0sQ0FBQUEsR0FBU3FXLEVBQVU3SixFQUFNeUosRUFBTSxDQUFBLENBQXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUd4RFMsRUFDSVUsRUFDSG5CLEVBQU8sRUFBSSxFQUFJSyxFQUFhM0UsR0FBV0EsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVkyRSxFQUNuREwsRUFDTTNVLEVBQVFpRSxPQUNYMFEsRUFBTyxFQUFJSSxFQUFXLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V0QixDQUFBLEVBVEY1RSxFQUFTNEYsRUFBUXBCLENBQUEsQ0FBakIsRUFhSm1CLEdBQVknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkIsSUFBU3pKLElBQ3hCeUosRUFBT3hFLEVBQVM0RixFQUFRN0ssQ0FBQSxHQUFXeUosRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU96SixFQUFPLEdBQUssTUFJbkR5SixFQUFBLENBQUEsRUFHRkEsQ0FDVCxDQTZCQSxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU2tCLEVBQU12TixHQUNiLE9BQU84TSxHQUFXOU0sRUFBUTBNLEdBQWVBLEdBQWMsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUkxTSxDQUM3RCxDQVVBLFNBQVN3TCxJQUdDLElBRlIsSUFBSXRkLEVBQU13ZSxHQUFlNScKICAgICAgICAgICAgICAgICAgICAgICAgYidFLEVBQUEsR0FBZ0JnRixHQUFVSCxFQUFZLEVBQUk1RSxHQUUzRDhFLEdBQW1CLEVBQVIzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsS0FDWixHQUFBaWQsRUFBWXVCLEVBQWEsRUFBRyxDQUFBLENBQTVCLElBQXVDdkIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVlqZCxFQUFLLENBQUEsQ0FBTCxFQUFjLENBQ3BFQSxDQUFBLEdBQ0EsS0FDRixDQUdGLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPQUFPdUksRUFBT3ZJLEVBQUssRUFBR3dlLEVBQWEsQ0FBckIsQ0FDaEIsQ0FTQSxTQUFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdFLEVBQVNGLEdBQ2hCLE9BQU9sUixFQUFPcVIsRUFBUyxFQUFJSCxFQUFPSSxFQUFVSiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTSxFQUFHOEUsRUFDdkQsQ0FTQSxTQUFTZ0IsRUFBUXpOLEdBQ2YsT0FBTzhILElBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidIcFMsRUFBS3NLLEVBQU95TSxDQUFQLEVBQ0w1VyxJQUFrQjRXLEdBQVR6TSxFQUFvQjBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFhLEVBQUkxTSxHQUFVK0gsQ0FBL0MsQ0FDZixDQW1CQSxTQUFTMkYsRUFBVTFOLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNaQSxJQUFVbU4sSUFDREMsRUFBQUQsRUFDQUEsRUFBQW5OLEVBRWhCLENBZ0JBLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTOEgsSUFDUCxNQUFPLENBQUV2WSxHQUFhbUksRUFBUWxFLEtBQXJCLEdBQWdDa0UsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1E0SSxZQUNuRCxDQU9BLFNBQVN5SyxJQUNBN1EsT0FBQUEsRUFBTytCLE1BQU1DLEdBQUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUU5TyxFQUFRQyxHQUEzQjZNLEdBQTRDLENBQUMsQ0FBRXhDLEVBQVFpVyxpQkFDaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFLENBRU8sTUFBQSxDQUNMcEwsTUE1U0YsV0FDTzZFLEVBQUEsRUFDTDlNLEVBQUksQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VqQixFQUFlRCxFMUJ4RGMsTTBCd0Q0QmdPLENBQS9ELEVBQ0E5TSxFQUFJZixHQUFlOFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQW5CLENBQ0YsRUF5U0VPLEdBalFPLFNBQUlDLEVBQTBCQyxFQUEwQnJXLEdBQzFELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQUVHdUksRUFGRCtLLEtBSVEsQ0FBQSxHQUZQL0ssRUFBUXVOLEVBRFJsQixFQWlDVixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZ0J3QixHQUNkLElBQUk3TixFQUFRbU4sRUFFUCxDQUFBLElBQ09ZLEVBQVcxWCxFQUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbEIvRyxFQUFVdWUsQ0FBVixHQUNHRyxFQUEwQkgsRUFBUXRJLE1BQU8saUJBQWYsR0FBcycKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEdBQTVEd0ksRUFBSkMsRUFBQSxHQUFlM1gsRUFBZjJYLEVBQUEsR0FFYSxNQUFkRCxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbUMsTUFBZEEsRUFDaEIvTixFQUFBc04sRUFBa0JILEdBQVksRUFBS1ksR0FBQUEsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWMsQ0FBQzFYLEdBQVUsSUFBTThXLENBQWxFLEVBQ2dCLE1BQWRZLEVBQ1YvTixFQUFRMycKICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQVN3UixFQUFTLENBQUN4UixDQUFELEVBQVkyVyxFQUFTLENBQUEsR0FDdkIsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLElBQ1YvTixFQUFRa04sRUFBUyxDQUFBLEtBR25CbE4sRUFBUThNLEVBQVNlLEVBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncFgsRUFBT29YLEVBQVMsRUFBR3BCLENBQVosQ0FDcEMsQ0FFTyxPQUFBek0sQ0FDVCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYiduRHlCNk4sT0FHQUMsR0FBa0I5TixJQUFVbU4sS0FDL0NPLEVBQVUxTixDQUFWLEVBQ0E0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBS1IsS0FBTUMsRUFBTXJNLEVBQU9vTixFQUFXM1YsQ0FBbkMsRUFHTixFQXdQRXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVyxPQTlPRixTQUFpQjNDLEVBQXFCdEIsRUFBbUJrRSxFQUFnQnpXLEdBQ3ZFMkksRUFBVycKICAgICAgICAgICAgICAgICAgICAgICAgYic0SyxPQUFPaUQsT0FBUTNDLEVBQWF0QixFQUFVa0UsRUFBTSxXQUNyRCxJQUFNbE8sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1F1TixFQUFNWCxFQUFLL0UsUUFBU2lFLEVBQWQsQ0FBQSxDQUFBLEVBQ3BCNEIsRUFBVWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVVuWCxFQUFLc0ssRUFBT3lNLENBQVosRUFBeUJ6TSxDQUE3QyxFQUNBdkksR0FBWScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQVosQ0FDQSxDQUpGMkksQ0FLRixFQXlPRTRNLFFBQUFBLEVBQ0FFLFFBQUFBLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBRCxZQUFBQSxFQUNBekIsT0FBQUEsRUFDQWtDLFNBQUFBLEVBQ0FTLFNBL0JGLFNBQW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQjlILEdBQ2pCLE9BQU9BLEVBQU8rRyxFQUFZRCxDQUM1QixFQThCRXRGLFFBQUFBLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBNEYsT0FBQUEsRUFDQVcsT0F4REYsU0FBaUI5QyxHQUVmLE9BRE10RSxFQUFVNEYsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0svRSxRQUFTeUQsQ0FBZCxFQUNUeUIsRUFBVXRXLEVBQU91USxFQUFTLEVBQUd5RixDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkIsRUFBZ0N6RixDQUNuRCxFQXNERWMsU0FBQUEsRUFDQWlELE9BQUFBLENBZEssQ0FnQicKICAgICAgICAgICAgICAgICAgICAgICAgYidULFNDM1ZnQixTQUFRN1EsRUFBZ0JrRyxFQUF3QjFJLEdBQ3hELElBd0JGMlcsRUFLQUMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBN0JFM1csRUFBUXNDLEVBQWdCQyxHQUN0QkksRUFBbUIzQyxFQUFuQjJDLEdBQUk5TCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZW1KLEVBQWZuSixLQUFNaU0sRUFBUzlDLEVBQVQ4QyxLQUNWaEssRUFBa0JpSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBbEJqSCxRQUFTK1AsRUFBUzlJLEVBQVQ4SSxLQUNUeUIsRUFBeUI3QixFQUF6QjZCLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVMkYsRUFBZXhILEVBQWZ3SCxXQUNGMkcsRUFBdUJ0TSxFQUEvQm1FLE9BQXFCbEUsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVELEVBQVZDLE1BS3pCc00sRUFBVUQsRUFLVmxJLEVBQU9wRSxFQUFTb0UsS0FLaEJDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPckUsRUFBU3FFLEtBZWRGLEVBQXNDLEdBSzVDLFNBQVM3RCxJQWlCUCxJQUFNa00sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVUvVyxFQUFRME8sT0FFbkJxSSxDQUFBQSxHQUFlcEksR0FBUUMsSUF1RDVCa0ksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVELEdBQWV2YixFQUFRLE1BQU92QyxFQUFRMlYsTUFBdkIsRUFDekJDLEVBQVVxSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYSxDQUFBLEdBQ3ZCcEksRUFBVW9JLEVBQWEsQ0FBQSxHQUNiTCxFQUFBLENBQUEsRUFFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1Z0ZCxFQUFReWQsRUFBUyxDQUFFbkksRUFBTUMsRUFBekIsRUFDRWlJLEdBQWVwZCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUXFkLEVBQVN0TSxDQUFULEdBekRwQm1FLEdBQVFDLElBQ1hoVSxHQUFROFQsRUFBUSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBRUMsS0FBQUEsRUFBTUMsS0FBQUEsQ0FBUixDQUFoQixFQUNTL1MsR0FBQWliLEVBQVNDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFVLEdBQUssTUFBeEIsRUFDVDVkLEVBQVUyZCxFQUFXRixFQUFxQi9QLEdBQW1CN0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUFBLEVBQVE0TSxTQUFyRSxFQUVLbUssSUE0QlBuVSxFQUFJLENBQUUxQixFQUFlRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBYU0sRUFBZUssRTNCdEhkLE0yQnNIeUQ2QixDQUE1RixFQUNBOU0sRUFBTThYLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLFFBQVNoWSxFQUFPc2YsRUFBSSxHQUFKLENBQTVCLEVBQ0FwZixFQUFNNlgsRUFBTSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUy9YLEVBQU9zZixFQUFJLEdBQUosQ0FBNUIsRUE1Qld0UyxFQUFBLEVBQ1B4SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYyxDQUFFdVQsRUFBTUMsR0FBUWxKLEdBQWU4RSxFQUFNbEgsRUFBbkQsRUFDTVAsRTNCJwogICAgICAgICAgICAgICAgICAgICAgICBiJzNHMEIsaUIyQjJHSjRMLEVBQU1DLENBQTVCLElBOUJWaE0sRUFBSWpCLEVBQWUrUSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkIsQ0FDRixDQUtBLFNBQVNBLElBQ0MxUixFQUFBLEVBQ0Y2SixFQUFBLENBQ1IsQ0E2QicKICAgICAgICAgICAgICAgICAgICAgICAgYidBLFNBQVM3SixJQUNQZixFQUFNZSxRQUFOLEVBQ0ExRCxFQUFhd1osRUFBU0YsQ0FBdEIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBRUtELEdBQ0hwYSxFQUFRc2EsRUFBYyxDQUFFbEksRUFBTUMsR0FBU2tJLENBQXZDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBbkksRUFBT0MsRUFBTyxNQUVkNVQsRUFBaUIsQ0FBRTJULEVBQU1DLEdBQVF2SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBakMsQ0FFSixDQWdCQSxTQUFTNlAsRUFBSUMsR0FDQWpHLEVBQUFnRyxHQUFJQyxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQWIsQ0FDYixDQXVCQSxTQUFTYSxFQUFhckksR0FLcEIsT0FBT2xTLEdBSk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGtCQUFtQjFELEVBQVFrZSxNQUEzQixLQUFzQ3RJLEVBQU81VixFQUFRNFYsS0FBTzVWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRNlYsTUFBcEUsa0lBRUc1TyxFQUFRa1gsV0NyTFQseUZEbUxoQixPQUtGLENBS0EsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVN0VCxJQUNQLElBRVE4UixFQUNBeUIsRUFDQUMsRUFDQUMsRUFMSDFJLEdBQVFDLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNMdEcsRUFBWTlGLEVBQU84RixNQUNuQm9OLEVBQVl4RixFQUFXc0YsUUFBdkIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYicyQixFQUFZakgsRUFBV29GLFFBQXZCLEVBQ0E4QixFQUF3QixDQUFBLEVBQVoxQixHQUFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JwTixFQUFRb04sRUFBWTVNLEVBQUt3TyxLQUFPeE8sRUFBSzZGLEtBQ25FMEksRUFBd0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsRUFBWkYsR0FBMEJBLEVBQVI3TyxFQUFvQlEsRUFBS3lPLE1BQVF6TyxFQUFLOCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBRTFFRCxFQUFLNkksU0FBVzlCLEVBQVksRUFDNUI5RyxFQUFLNEksU0FBV0wsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ksRUFFZC9iLEVBQUF1VCxFQUFNOUksR0FBWXVSLENBQWxCLEVBQ0FoYyxFQUFBd1QsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU0vSSxHQUFZd1IsQ0FBbEIsRUFFZHRVLEUzQjlMa0MsaUIyQjhMTjRMLEVBQU1DLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNOEcsRUFBV3lCLENBQW5ELEVBRUosQ0FFTyxNQUFBLENBQ0x6SSxPQUFBQSxFQUNBN0QsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01BQUFBLEVBQ0E3SixRQUFBQSxFQUNBNEMsT0FBQUEsQ0FKSyxDQU1ULFdFdExnQixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVXBCLEVBQWdCa0csRUFBd0IxSSxHQUNoRSxJQVNJeVgsRUFLQUMsRUFkdUJuVixFQUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBZ0JDLEdBQW5DSSxJQUFBQSxHQUFJOUwsSUFBQUEsS0FBTWlNLElBQUFBLEtBQ1pFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFXRCxHQUFpQmhELEVBQVFpRCxTQUFVVCxFQUFPMFQsR0FBR3BmLEtBQU0wTCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxHQUF4QkEsRUFpSHBELFNBQTJCaUIsR0FDbkIsSUFBRW9MLEVBQVF0RSxFQUFSc0UsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1JBLEdBQU9uVCxFQUFPbVQsRUFBSyxRQUFvQixJQUFQcEwsRUFBaEMsR0FBQSxFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRTdCbklvQyxtQjZCbUlOVSxDQUE5QixDQUNGLENBckhrQyxFQUMxQlcsRUFBYW5CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFibUIsU0FDQW1HLEVBQXlDN0IsRUFBekM2QixTQUFzQjVCLEtBQW1CRCxFQUEvQjZCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidVQUFZNUIsS0FBTW1HLElBQUFBLE9BQzVCNkksRUFBYTNYLEVBQWIyWCxTQWdCSkMsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VCLFVBQWJELEVBNkNkLFNBQVNFLElBQ0Z6VCxLQUFjc0UsRUFBV2tCLE9BQU8rRyxhQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMUIxTixFQUFBMU0sTUFBTyxDQUFFeUosRUFBUThYLGFBQWpCLEVBQ1RKLEVBQVVELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVRyxFQUFVLENBQUEsRUFDdkJoVSxFQUFBLEVBQ1BiLEVBQU1iLEVBQU4sRUFFSixDQU9TJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFBMkIsRUFBT2tVLEdBQ2RILEVBQVUsQ0FBQyxFQURHRyxFQUFvQixLQUFBLElBQXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkEsRUFBTyxDQUFBLEVBQ1JBLEdBQ05uVSxFQUFBLEVBRUFRLE1BQ0xuQixFQUFTWSxNQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVCxFQUNBZCxFQUFNWixFQUFOLEVBRUosQ0FNQSxTQUFTNlYsSUFDQUosSUFDTEgsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dDLEVBQVU3VCxFQUFPLENBQUEsQ0FBUCxFQUFpQmdVLEVBQXRDLEVBRUosQ0FLQSxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2pVLElBQ0ZrTCxJQUNValcsRUFBQWlXLEVBQVF4SCxHQUFjLENBQUVzUSxDQUF4QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDYnhjLEVBQWMwVCxFQUFRakosR0FBWTdGLEVBQVE4SSxLQUFNOE8sRUFBVSxPQUFTLFFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FuRSxFQUVKLENBa0JBLFNBQVM3TixFQUFRekIsR0FDVEQsRUFBUUssRUFBV2tCLE9BQU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxNQUFPdkIsQ0FBekJJLEVBQ0x6RixFQUFBaUIsSUFBS21FLEdBQVMsQ0FBQ3JNLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidjcU0sRUFBTUcsTUFBTzZDLEVBQTNCLEdBQXdEckwsRUFBUWlELFFBQS9FLENBQ1gsQ0FFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08sTUFBQSxDQUNMNEgsTUExR0YsV0FDTzhNLElBWUEzWCxFQUFRaVksY0FDTG5oQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTZSLEVBQU0sd0JBQXlCLFNBQUt4USxHQUN4Q3NmLEVBQXFCLGVBQVh0ZixFQUFFYixLQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDRDBnQixFQUFBLENBQ1gsQ0FISSxFQU1IaFksRUFBUWtZLGNBQ0xwaEIsRUFBQTZSLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLG1CQUFvQixTQUFLeFEsR0FDbkN1ZixFQUFxQixZQUFYdmYsRUFBRWIsS0FDRDBnQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQSxDQUNYLENBSEksRUFNSGxKLEdBQ0doWSxFQUFBZ1ksRUFBUSxRQUFTLFdBQ1g4SScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQUMsRUFBQSxFQUFTaFUsRUFBTyxDQUFBLENBQVAsQ0FDbkIsQ0FGSSxFQUtSakIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUksQ0FBRXpCLEVBQVlXLEdBQWNKLEdBQWlCdUIsRUFBU2dCLE1BQTFELEVBQ0FyQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBSXpCLEVBQVk0SSxDQUFoQixFQS9CRStFLEdBQVUxVCxFQUFjMFQsRUFBUXBKLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidlNkUsRUFBU0MsTUFBTWxILEVBQXRDLEVBQ3hCc1UsR0FBV0MsRUFBWCxFQUNPalUsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFFWCxFQW9HRTVDLFFBQVNpQyxFQUFTYSxPQUNsQitULEtBQUFBLEVBQ0FoVSxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDQU8sU0FBQUEsQ0FMSyxDQU9ULFFDdEpnQixTQUFPNUIsRUFBZ0JrRyxFQUF3QicKICAgICAgICAgICAgICAgICAgICAgICAgYicxSSxHQUM3RCxJQUFRNEMsRUFBT0wsRUFBZ0JDLENBQWhCLEVBQVBJLEdBaUJSLFNBQVN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRUFBT0EsR0FDZHpQLEVBQVdrQixPQUFPdFIsUUFBUyxTQUFTK1AsR0FDbEMsSUFBTW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSSxFQUFNdFcsR0FBeUJtTyxFQUFNaUIsV0FBYWpCLEVBQU1HLE1BQU8sS0FBaEMsRUFFaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDZ0ksR0FBT0EsRUFBSTRILEtBQ05ELEVBQUFBLEVBQU8zSCxFQUFLbkksQ0FBWjhQLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWLENBTkZ6UCxDQU9GLENBU1MsU0FBQW9HLEVBQVFxSixFQUFnQjNILEVBQXVCbkksR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3REQSxFQUFNM00sTUFBTyxhQUFjeWMsRUFBd0MzSCwrQkFBQUEsRUFBSTRILElBQVcsSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsR0FBSSxDQUFBLENBQXRGLEVBQ1N2YyxHQUFBMlUsRUFBSzJILEVBQVEsT0FBUyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdEIsQ0FDWCxDQUVPLE1BQUEsQ0FDTHROLE1BbkNGLFdBQ083SyxFQUFRbVksUUFDWHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVixFQUFJUixHQUF1QnhMLEVBQU9rWSxFQUFRLENBQUEsQ0FBZixDQUEzQixFQUNJbE0sRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsQ0FBRTFCLEVBQWVTLEVBQWVELEdBQWlCOUssRUFBT3VoQixFQUFPLENBQUEsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1AsQ0FBeEQsRUFFUixFQStCRW5YLFFBQVNwSyxFQUFPdWhCLEVBQU8sQ0FBQSxDQUFQLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUZYLENBSVQsU0N4Q2dCLFNBQVEzVixFQUFnQmtHLEVBQXdCMUksR0FDOUQsSUFTSWlELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUtBbEQsRUFkaUJ3QyxFQUFBQSxFQUFnQkMsR0FBN0JJLElBQUFBLEdBQUlHLElBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUNLbUIsRUFBVTFCLEVBQW5CK0IsTUFBU0wsSUFDVGdSLEVBQVN4TSxFQUFUd00sS0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FkLEVBQW9EYyxFQUFwRGQsWUFBYUYsRUFBdUNnQixFQUF2Q2hCLFNBQVVXLEVBQTZCSycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBN0JMLGNBQWVyQixFQUFjMEIsRUFBZDFCLFVBQ3hDNkIsRUFBVTdTLEVBQU9nQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSTBELEVBQVgxRixFQWVaNlYsRUFBVyxFQW1CZixTQUFTOUIsRUFDUDNDLEVBQ0F0QiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQWtFLEVBQ0E4QixFQUNBQyxHQUVBLElBTVF6SyxFQU5GNUMsRUFBT2tKLEVBQWIsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVU1vRSxHQVJBQyxFQUFBLEVBRURqQyxDQUFBQSxHQUFZbkIsR0FBYVIsRUFBZixJQUNQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRUFBU3pMLEVBQVd1SyxPQUFPYixXQUEzQixFQUNBdEUsRUFBUzlPLEdBQU00VSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUFnQk8sRUFBT2hXLEdBQU9FLEVBQUt1VixDQUFBLEVBQWdCTyxJQUFVLEVBQ3BFUCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQXNCLEVBQUt6QixXQUFZL0ssRUFBV3dILFdBQVd3RyxPQUFROUMsRUFBY08sQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzVDekwsQ0FBakIsRUFBd0VvRixHQUdyRXhQLEdBQW9CNE0sRUFBTTBJLEVBQWEsQ0FBdkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBRVJ5RSxFQUFBLEVBQ0EvRixFQUFBa0csRUFBYSxFQUFJbEcsR0FBWXBVLEdBQUtHLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFLdVYsRUFBYzFJLEdDaEV2QyxJQU9ELEdEeURnQixFQUM3Qm5MLEVBQUF1WSxFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JWLEVBQUFELEdBQWlCc1AsRUFBVW9HLEVBQU85aEIsRUFBT2dOLEVBQVFzSCxFQUFNMEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWEyRSxDQUFsQyxFQUFpRCxDQUFuRixFQUVYclUsRUFBS3ZPLEVBQUwsRUFDQW9OLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFNakIsRUFBTixFQUNBbUIsRUFBUzFNLE1BQVQsQ0FDRixDQUtBLFNBQVNtaUIsSUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1B4VSxFbkYxRmdCLENtRjBGaEIsRUFDQW5FLEdBQVlBLEVBQVosRUFDQWdELEVBQU1oQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBTixDQUNGLENBVUEsU0FBUzZCLEVBQVFzSCxFQUFjeU4sRUFBWUosRUFBa0M5VSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDM0UsSUFBTWlRLEVBQVdVLEVBQWpCLEVBRU1oSixHQURXRixHQUFTeU4sRUFBS3pOLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dDaEIwTixFQXhDaUNuVixHQXlDeENvVixFQUFlN1ksRUFBZjZZLFlBQ1lBLEVBQVlELEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFNLEVBQUkzYSxLQUFLNmEsSUFBSyxFQUFJRixFQUFHLENBQWpCLEdBekNkbEYsR0FBYScKICAgICAgICAgICAgICAgICAgICAgICAgYicyRSxFQUV6QzdFLEVBQVdFLEVBQVd0SSxDQUF0QixFQUVLaUssR0FBVyxDQUFFa0QsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UxRCxNQUNuQndELEdDekdhLEdEMkdwQmhhLEVBQUsrTSxDQUFMLEVDekgwQixJRDBIckInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbUwsRUFBQXJDLEVBQVVXLEVBQWUsQ0FBQSxFQUF6QixFQ25IZSxJRG1IcUMsQ0FBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTzlVLEVBQVUsQ0FBQSxDQUFyRSxFQUdkLENBS0EsU0FBUzBZLElBQ0Z4VixHQUNIQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU2EsT0FBVCxDQUVKLENBS0EsU0FBU0EsSUFDRmIsR0FBWSxDQUFFQSxFQUFTbUIsYUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3BCcVUsRUFBQSxFQUNBQyxFQUFBLEVBRVYsQ0FjTyxNQUFBLENBQ0w3TixNQTVHRixXQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDRWpJLEVBQUl6QixFQUFZc1gsQ0FBaEIsRUFDQTdWLEVBQUksQ0FBRWpCLEVBQWVELEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQm9DLENBQXRDLENBQ0YsRUEwR0U5QyxRQUFTeVgsRUFDVGxDLE9BQUFBLEVBQ0F6UywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBQUEsQ0FKSyxDQU1ULE9FeElnQixTQUFNdEIsRUFBZ0JrRyxFQUF3QjFJLEdBQzVELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQVNJK1ksRUFLQUMsRUFLQUMsRUFLQUMsRUFLQUMsRUFXQUMsRUFLQTVCLEVBS0FuYixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FsRCtCa0csRUFBQUEsRUFBZ0JDLEdBQTNDSSxJQUFBQSxHQUFJRyxJQUFBQSxLQUFNak0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQUFBLEtBQU15SixJQUFBQSxPQUNoQmdFLEVBQVUvQixFQUFWK0IsTUFDQTJRLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidxRXhNLEVBQXJFd00sS0FBTTVCLEVBQStENUssRUFBL0Q0SyxPQUFRcEQsRUFBdUR4SCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdkR3SCxXQUF3QjFGLEVBQStCOUIsRUFBM0M2QixTQUFZQyxNQUFrQnNDLEVBQWFwRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBdEIyUSxNQUFTdk0sT0FDeEQ3RCxLQUFvQlAsRUFBV1EsV0FBL0JELFFBQVNpRixJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsT0FDVGtHLEVBQStCYyxFQUEvQmQsWUFBYVMsRUFBa0JLLEVBQWxCTCxjQStCakJ5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsRUFBVyxDQUFBLEVBZ0NmLFNBQVM1SixJQUNELElBQUVELEVBQVN6UCxFQUFUeVAsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1I4SixFQUFTLENBQUU5SixDQUFYLEVBQ0F5SixFQUFrQixTQUFUekosQ0FDWCxDQVVBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFTK0osRUFBZXJoQixHQUd0QixJQUNRc2hCLEVBNFBZcGQsRUFDWnFkLEVBaFFTTixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxDQUFBLEVBRVY1QixJQUNDaUMsRUFBVUUsRUFBY3hoQixHQTRQWmtFLEVBMVBBbEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUVrRSxPQTJQZHFkLEVBQVcxWixFQUFYMFosT0FFQzNmLEdBQVNzQyxNQUFhNkssRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXRCLE1BQW1ESixFQUFuRCxHQUNBNFMsR0FBWTNmLEdBQVNzQyxFQUFRcWQsQ0FBUnJkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQTlQTW9kLENBQUFBLEdBQWF0aEIsRUFBRXloQixTQUN4QzFKLEVBQVdtRCxTQVdoQnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVyxFQUFTM0UsRUFBRyxDQUFBLENBQVosR0FWQWtFLEVBQWdCb2QsRUFBVWpQLEVBQVF2UycKICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FDbENraEIsRUFBZ0I1VSxFQUFNQyxHQUFJLENBQUU5TyxFQUFRQyxHQUFwQixFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NqQixFQUFBLEtBRVZuaUIsRUFBQXVGLEVBQVEyTCxHQUFxQjZSLEVBQWV2TyxFQUE1QywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQXhVLEVBQUF1RixFQUFRNEwsR0FBbUI2UixFQUFheE8sRUFBeEMsRUFDTjRKLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidLcFIsT0FBTCxFQUNBd1AsRUFBT3hQLE9BQVAsRUFDQWlXLEVBQU01aEIsQ0FBTixJQU1SJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQU9BLFNBQVMwaEIsRUFBZTFoQixHQU10QixJQXNHb0JBLEVBQ002aEIsRUFDcEJDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBQyxFQVlvQi9oQixFQTFIbkJvTSxFQUFNQyxHckZySE8sQ3FGcUhiLElBQ0xELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNTCxJckZ0SFksQ3FGc0hsQixFQUNBbkIsRWpDdElrQyxNaUNzSWxDLEdBR0c1SyxFQUFFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpQixhQUNBaEIsR0FDSGpFLEVBQUsxQixVQUFXdUYsRUFBMEJxQixFQUFXamlCLENBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBaU56Q21oQixHQUFZOVcsRUFBT2dDLEdBQUkwRCxFQUFYMUYsRXhCcFdSLEV3Qm9XdycKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBak54RCxFQUVNNlgsRXhCOUljLEl3QjhJQUMsRUFBVW5pQixDQUFBLEVBQ3hCb2lCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFjakIsS0FBZUEsRUFBV3pFLE1BRXpDd0YsR0FBV0UsSUFDZFIsRUFBTTVoQixDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTixFQUdlaWhCLEVBQUEsQ0FBQSxFQUNqQnJXLEVqQ3BKZ0MsVWlDb0poQyxFQUNBakcsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMzRSxDQUFULEdBeUdHa0csRUFBSytiLEVBRGNqaUIsRUF2R09BLEVBd0cxQixFQUF3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JrRyxFQUFLK2IsRUFBV2ppQixFQUFHLENBQUEsQ0FBZCxDQUFBLElBaEJoQkEsRUF2RlEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQXdGRjZoQixFQUFlaGEsRUFBakN3YSxpQkFDRlAsRUFBUXppQixHQUFVd2lCLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsQkUsRUFBUUQsR0FBU0QsRUFBV0UsT0FBUyxFQUNyQ08sR0FBVVIsRUFBUUQsRUFBV1MsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01BQVEsQ0FBQ1QsSUFBZ0IsR0EzRnhEYixFQTRGRzlhLEVBQUsrYixFQUFXamlCLEVBQWgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixHQUEwQndoQixFQUFjeGhCLENBQUEsRUFBTXNpQixFQUFRUCxHQTNGekRwZCxFQUFTMycKICAgICAgICAgICAgICAgICAgICAgICAgYidFLENBQVQsR0FHTixDQVVBLFNBQVMyaEIsRUFBYTNoQixHQU1wQixJQXlDTXVpQixFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzlHLEVBQ0EzUCxFQWhERE0sRUFBTUMsR3JGeEpTLENxRndKZixJQUNIRCxFQUFNTCxJckYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneEtRLENxRndLZCxFQUNBbkIsRWpDdktrQyxTaUN1S2xDLEdBR0dvVyxJQTBDQ3ZGLEVBcycKICAgICAgICAgICAgICAgICAgICAgICAgYidFUixTQUE2QjhHLEdBQzNCLE9BQU90RyxFQUFnQnBWLEVBQUFBLEdBQU0wYixDQUFBLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FhMWMsRUFDeENLLEVBQUtxYyxDQUFBLEdBQWUxYSxFQUFRMmEsWUFBYyxLQUMxQ3pCLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTNUUsRUFBQUEsRUFBVzVMLEVBQVd1SyxPQUFPbEIsWUFBZS9SLEVBQVE0YSxlQUFpQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFGdEMsQ0FJNUMsRUEzRTBDRixFQW1EMUMsU0FBMEJ2aUIsR0FDeEIsR0FBS3FLLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPZ0MsR0FBSTJELEVBQVgzRixHQUFxQixDQUFFOFcsRUFBVyxDQUMvQixJQUFBblYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU9tVyxFQUFVbmlCLEdBRWxCLEdBQUFnTSxHQUFRQSxFeEI5UVMsSXdCK1FiLE9BQUFpVycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBV2ppQixDQUFYLEVBQWlCZ00sQ0FFNUIsQ0FFTyxPQUFBLENBQ1QsRUEvRGVoTSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F2Q0xBLElBMENGOEwsRUFBY2pFLEVBQVFpRSxRQUFVakUsRUFBUTZhLGFBRTlDL04sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVEsQ0FBQSxDQUFSLEVBRUtvTSxFQUNIaEosRUFBV3FHLE9BQVEzQyxFQUFhLEVBQUc1VCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUXdXLElBQTNDLEVBQ1VoVSxFQUFPZ0MsR0FBSTRELEVBQVg1RixFQUNWME4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dnRyxHQUFJaEksRUFBUWxQLEdBQU0wYixDQUFBLENBQWQsRUFBNkIsRUFBTXpXLEVBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQU0sSUFBVUEsRUFBUyxJQUFNLEdBQTFGLEVBQ1V6QixFQUFPZ0MsR0FBSTBELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidYMUYsR0FBc0I4VyxHQUFZclYsRUFDNUNpTSxFQUFXZ0csR0FBSXJCLEVBQWUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZixFQUF3QixJQUFNLEdBQTdDLEVBRUEzRSxFQUFXZ0csR0FBSWhHLEVBQVd3RyxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUTlDLENBQW5CLEVBQWtDLENBQUEsQ0FBakQsRUFHRjlHLEVBQVEsQ0FBQSxDQUFSLEVBdicKICAgICAgICAgICAgICAgICAgICAgICAgYidERWhRLEVBQVMzRSxDQUFULEdBR01vSSxFQUFBbEUsRUFBUTJMLEdBQXFCNlIsQ0FBN0IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0F0WixFQUFBbEUsRUFBUTRMLEdBQW1CNlIsQ0FBM0IsRUFDR1gsRUFBQSxDQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNiLENBUUEsU0FBUzJCLEVBQVMzaUIsR0FDWCxDQUFFcWYsR0FBWTRCLEdBQ2pCdGMsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMzRSxFQUFHLENBQUEsQ0FBWixDQUVKLENBT0EsU0FBUzRoQixFQUFNNWhCLEdBQ0c4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dCLEVBQUFELEVBQ0FBLEVBQUE3Z0IsRUFDaEI0Z0IsRUFBZ0IzRSxFQUFoQixDQUNGLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWdHUyxTQUFBZ0csRUFBV2ppQixFQUE0QjRpQixHQUN2QyxPQUFBQyxFQUFTN2lCLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidHNGlCLENBQVosRUFBMkJDLEVBQVNDLEVBQWM5aUIsQ0FBQSxFQUFLNGlCLEVBQ2hFLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBLFNBQVNULEVBQVVuaUIsR0FDakIsT0FBT29GLEdBQVFwRixHQUFNb0YsR0FBUTBkLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjOWlCLENBQWQsQ0FBQSxDQUMvQixDQVVBLFNBQVM4aUIsRUFBYzlpQixHQUNkLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNmdCLElBQWM3Z0IsR0FBSzhnQixHQUFpQkQsQ0FDN0MsQ0FXUyxTQUFBZ0MsRUFBUzdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBNEI0aUIsR0FDbkMsT0FBQXBCLEVBQWN4aEIsQ0FBZCxFQUFvQkEsRUFBRStpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUFBZ0IsR0FBTS9pQixHQUFhOFEsT0FBQUEsRUFBUzhSLEVBQWEsSUFBTSxHQUE1QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDcEUsQ0FtQ0EsU0FBU3BCLEVBQWN4aEIsR0FDZCxNQUFzQixhQUF0QixPQUFPZ2pCLFlBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E4QmhqQixhQUFhZ2pCLFVBQzNELENBZ0JBLFNBQVM1QixFQUFTbGhCLEdBQ0xtZixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW5mLENBQ2IsQ0FFTyxNQUFBLENBQ0x3UyxNQS9URixXQUNRL1QsRUFBQTBULEVBQU94QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBcUJoUixHQUFNc1UsRUFBbEMsRUFDQXhVLEVBQUEwVCxFQUFPdkMsR0FBbUJqUixHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTXNVLEVBQWhDLEVBQ0F4VSxFQUFBMFQsRUFBT3pDLEdBQXFCeVIsRUFBZWxPLEVBQTMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUNOeFUsRUFBTTBULEVBQU8sUUFBU3NRLEVBQVMsQ0FBRXRQLFFBQVMsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWCxDQUEvQixFQUNNMVUsRUFBQTBULEVBQU8sWUFBYTFOLENBQXBCLEVBQ044RixFQUFJJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFFMUIsRUFBZVMsR0FBaUIrTixDQUF0QyxDQUNGLEVBeVRFNkosUUFBQUEsRUFDQTYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixXQWhCRixXQUNTLE9BQUFqQyxDQUNULENBV08sQ0FLVCxXbEJ4WGdCLFNBQVUzVyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JrRyxFQUF3QjFJLEdBQ2hFLElBT0kzRCxFQUtBbWIsRUFaeUJqVixFQUFBQSxFQUFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JDLEdBQXJDSSxJQUFBQSxHQUFJOUwsSUFBQUEsS0FBTXlKLElBQUFBLE9BQ1ZvSSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU25HLEVBQVRtRyxLQUNBTSxFQUFZUCxFQUFXUSxVQUF2QkQsUUF5QlIsU0FBU3lHLElBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidELElBQUUyTCxFQUFhcmIsRUFBYnFiLFNBRUhBLElBQ01oZixFQUFhLFdBQWJnZixFQUF3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JwakIsT0FBUzBRLEVBQ3BDN1IsRUFBQXVGLEVBQVEyUCxHQUFnQnNQLENBQXhCLEVBRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBS0EsU0FBU3RhLElBQ1BULEVBQVFsRSxFQUFRMlAsRUFBaEIsQ0FDRixDQWVBLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTakMsSUFDUCxJQUFNd1IsRUFBWS9ELEVBQ1BBLEVBQUEsQ0FBQSxFQUNYdmdCLEVBQVUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dBQW1CdWdCLEVBQUErRCxDQUFZLENBQXpDLENBQ0YsQ0FPQSxTQUFTRCxFQUFXbmpCLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNYcWYsS0FDQzdjLEVBQU1vUixHQUFjNVQsTUFFYjhRLEVBQVN0RSxFQUFBLEVBQ3BCbicKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQU8wVCxHQUFJLEdBQVgxVCxFQUNVN0gsSUFBUXNPLEVBQVNyRSxFQUFBLEdBQzNCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BDLEVBQU8wVCxHQUFJLEdBQVgxVCxFQUdOLENBRU8sTUFBQSxDQUNMcUksTUEvREYsV0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ082RSxFQUFBLEVBQ0w5TSxFQUFJakIsRUFBZVgsQ0FBbkIsRUFDQTRCLEVBQUlqQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZStOLENBQW5CLEVBQ0E5TSxFQUFJekIsRUFBWTRJLENBQWhCLENBQ0YsRUEyREUvSSxRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQUEsRUFDQXVZLFFBbENGLFNBQWtCbGhCLEdBQ0xtZixFQUFBbmYsQ0FDYixDQTZCTywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FLVCxXbUIvRGdCLFNBQVVtSyxFQUFnQmtHLEVBQXdCMUksR0FDaEUsSUFBZ0N1QyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFBZ0JDLEdBQXhDSSxJQUFBQSxHQUFJRSxJQUFBQSxJQUFLaE0sSUFBQUEsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01pTSxJQUFBQSxLQUNqQnlZLEVBQW9DLGVBQXJCeGIsRUFBUXliLFNBQ3ZCN2IsRUFBZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBRXdCLEdBQWFXLEdBS2hDMlosRUFBMkIsR0FnQi9CLFNBQVNoTSxJQUNQeFosRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3bEIsQ0FBUCxFQWlCQWhULEVBQVdrQixPQUFPdFIsUUFBUyxTQUFTK1AsR0FDbENqTCxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBNEJpTCxFQUFNRyxNQUFPMkQsRUFBekMsRUFBMEQ3VCxRQUFTLFNBQU9rWSxHQUNsRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBQTRILEVBQVNwYyxFQUFjd1UsRUFBS3ZFLEVBQUwsRUFDdkIwUCxFQUFTM2YsRUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgYid3VSxFQUFLdEUsRUFBTCxFQUV4QmtNLElBQVE1SCxFQUFJNEgsS0FBT3VELElBQVduTCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSW1MLFNBQy9CemYsRUFBWThELEVBQVFqSCxRQUFRNmlCLFFBRTVCQSxFQUFZMWhCLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQURaWixFQUFZa1gsRUFBSWhCLGtCQUNnQnRULElBQWtCWixFQUFRLE9BQVFZLEVBQVc1QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBM0IsRUFFeERvaUIsRUFBUS9pQixLQUFNLENBQUU2WCxFQUFLbkksRUFBT3VULEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E1QixFQUNJcEwsRUFBQTRILEtBQU92YyxHQUFTMlUsRUFBSyxNQUFMLEVBRXRCLENBWkYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBYUEsQ0FkRjlILEdBZEs4UyxFQUNNSyxHQUVUL1ksRUFBS2xELENBQUwsRUFDQWdELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFJaEQsRUFBUWtjLENBQVosRUFDTUEsSUFKRyxDQU1iLENBNEJBLFNBQVNBLEtBQ0dKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBQSxFQUFRemhCLE9BQVEsU0FBUWdILEdBQ2hDLElBQU1rSyxFQUFXbkwsRUFBUXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxVQUFjclEsRUFBUStiLGNBQWdCLEdBQU0sR0FBTSxFQUNwRSxNQUFBOWEsQ0FBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU0sR0FBSWdLLFNBQVV6SSxFQUFPOEYsTUFBTzZDLENBQWxDLEdBQStDNlEsRUFBTS9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQzVELENBSFEsR0FLRjdLLFFBQVUwTSxFQUFLbEQsRUFDekIsQ0FPQSxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU29jLEVBQU0vYSxHQUNQLElBQUV1UCxFQUFRdlAsRUFBVixHQUVJOUgsRUFBQThILEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNLEdBQUl1SCxNQUFPYixFQUFqQixFQUNWN1EsRUFBTTBaLEVBQUssYUFBYzVaLEVBQU9xJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCLEVBQVFoYixDQUFSLENBQWhDLEVBRUE3RixFQUFjb1YsRUFBSyxNQUFPeFUsRUFBY3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVSxFQUFLdkUsRUFBTCxDQUF4QyxFQUNBN1EsRUFBY29WLEVBQUssU0FBVXhVLEVBQWN3VScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBS3RFLEVBQUwsQ0FBM0MsRUFDQWxSLEVBQWlCd1YsRUFBS3ZFLEVBQXRCLEVBQ0FqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1IsRUFBaUJ3VixFQUFLdEUsRUFBdEIsQ0FDRixDQVFTLFNBQUErUCxFQUFRaGIsRUFBcUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInOUksR0FDOUIsSUFBRXFZLEVBQWV2UCxFQUFqQixHQUFPb0gsRUFBVXBILEVBQWpCLEdBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidPM0QsRUFBQStLLEVBQU1HLE1BQU9iLEVBQWIsRUFFRyxVQUFYeFAsRUFBRWIsT0FDTGlGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRMEUsRUFBTSxFQUFkLEVBQ0FwRixHQUFTMlUsRUFBSyxFQUFkLEVBQ016TixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVgsR0FBdUJvTyxFQUFLbkksQ0FBNUIsRUFDTnRGLEVBQU1uQixFQUFOLEdBR0Y0WixHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JLLEVBQWhCLENBQ0YsQ0FLQSxTQUFTQSxJQUNQSCxFQUFRdGxCLFFBQVU0bEIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01OLEVBQVEzSCxNQUFSLENBQU4sQ0FDcEIsQ0FFTyxNQUFBLENBQ0xsSixNQXpHRixXQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTzdLLEVBQVF5YixXQUNOL0wsRUFBQSxFQUNMOU0sRUFBSWxCLEVBQWVnTyxDQUFuQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFSixFQXFHRTFPLFFBQVNwSyxFQUFPVixFQUFPd2xCLENBQVAsRUFDaEJJLE1BQUFBLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hLLENBS1QsYUM3RmdCLFNBQVl0WixFQUFnQmtHLEVBQXdCMUksR0FDNUQsSUFlRm1PLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUtBK04sRUFwQkVqYyxFQUFRc0MsRUFBZ0JDLEdBQ3RCSSxFQUFtQjNDLEVBQW5CMkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUlHLEVBQWU5QyxFQUFmOEMsS0FBTWpNLEVBQVNtSixFQUFUbkosS0FDVjhTLEVBQWlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCLEVBQWpDa0IsT0FBUVcsRUFBeUI3QixFQUF6QjZCLFNBQVUyRixFQUFleEgsRUFBZncnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSCxXQUNsQkUsRUFBMkJGLEVBQTNCRSxTQUFVcUcsRUFBaUJ2RyxFQUFqQnVHLFNBQVVQLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPaEcsRUFBUGdHLEdBQ3BCak4sRUFBWVAsRUFBV1EsVUFBdkJELFFBQ1k0TixFQUFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0J0TSxFQUE1QnhCLFdBS0ZuUSxFQUEwQixHQWlDaEMsU0FBU29JLElBQ0ZtTixJQUNINVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFzYSxFQUFjeGdCLEVBQU84WCxFQUFLNVUsUUFBWixFQUF5QjRVLENBQS9DLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBN1EsRUFBYTZRLEVBQU0rTixDQUFuQixFQUNBaG1CLEVBQU8wQyxDQUFQLEVBQ091VixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxNQUdUbE8sRUFBTWUsUUFBTixDQUNGLENBK0NBLFNBQVM4WixFQUFTN0ssR0FDWmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFLakcsSUFBQUEsRUFBUyxDQUFBLENBQWQsQ0FDTixDQVVTLFNBQUFxTCxFQUFXcicKICAgICAgICAgICAgICAgICAgICAgICAgYidMLEVBQWM5WCxHQUMxQixJQUFFL0IsRUFBV3dDLEVBQVh4QyxPQUNGdUUsRUFBTW9SLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FjNVQsR0FDcEJna0IsRUFBTUMsRUFBWixFQUVJQyxFQUFXLENBQUEsRUFZVEMsR0FWRDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaEIsSUFBUXNPLEVBQVNyRSxHQUFhLENBQUEsRUFBT3VYLENBQTdCLEVBQ1hFLEVBQVcsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUVwTSxFQUFPN1osRUFDVnVFLElBQVFzTyxFQUFTdEUsR0FBWSxDQUFBLEVBQU93WCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBNUIsRUFDTEUsR0FBQSxFQUFFcE0sRUFBTzdaLEdBQVdBLEVBQ2YsU0FBUnVFLEVBQ0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMGhCLEVBQUEsRUFDTyxRQUFSMWhCLElBQ1YwaEIsRUFBV2ptQixFQUFTLEdBR1R3QyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBT3lqQixJQUVmQyxJQUNIeGdCLEdBQU93Z0IsRUFBSzFDLE1BQVosRUFDQTFELEVBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQVNtRyxDQUFULEVBQ0F2ZixFQUFTM0UsRUFBRyxDQUFBLENBQVosRUFFSixDQUtBLFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTaWtCLElBQ0EsT0FBQXBjLEVBQVF1YyxxQkFBdUJ2YyxFQUFRNE0sU0FDaEQsQ0FTQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBUy9DLEVBQU92QixHQUNQLE9BQUExUCxFQUFPc1gsRUFBVzZGLE9BQVF6TixDQUFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFDaEIsQ0FLQSxTQUFTMUUsSUFDUCxJQVdVZ1csRUFYSmpMLEVBQU85RSxFQUFPNE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVUsQ0FBQSxDQUFBLENBQWpCLEVBQ1B6TSxFQUFPSCxFQUFPNE0sR0FBQSxFQUVmOScKICAgICAgICAgICAgICAgICAgICAgICAgYidILElBRUhyUixFQURRc2MsRUFBV2pMLEVBQVhpTCxPQUNhdFMsRUFBckIsRUFDQXRNLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQjRlLEVBQVFoVSxFQUF6QixFQUNjeEssRUFBQXdlLEVBQVFwVSxFQUFXLENBQUcsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXRCLEdBR1h3RSxJQUVIN1EsRUFEUXlnQixFQUFXNVAsRUFBWDRQLE9BQ1V0UyxFQUFsQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDY2xNLEVBQUF3ZSxFQUFRaFUsR0FBZSxDQUFBLENBQXZCLEVBQ0F4SyxFQUFBd2UsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFwVSxFQUFXLEVBQW5CLEdBR2hCekMsRW5DalBvQyxxQm1DaVBKLENBQUVvTCxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFBTXZWLE1BQUFBLENBQVIsRUFBaUIrVixFQUFNM0UsQ0FBdkQsQ0FDRixDQUVPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBLENBQ0xwUixNQUFBQSxFQUNBaVMsTUE1SkYsU0FBU0EsSUFDQzdKLEVBQUEsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1I0QixFQUFJLENBQUVqQixFQUFlRCxFbkNsRmMsTW1Da0Y0Qm1KLENBQS9ELEVBRUEsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU1rTSxFQUFVL1csRUFBUStJLFdBR3hCLEdBRkE4TixHQUFlaGIsR0FBU2diLEVBQWFFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVLEdBQUssTUFBNUIsRUFFbkJBLEVBQVUsQ0FDYm5VLEVBQUksQ0FBRXpCLEVBQVlXJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFjQyxHQUFrQjZCLENBQWxELEVBeUJJLElBQUV4TixFQUFXb00sRUFBWHBNLE9BQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMkMsRUFBMkJpSCxFQUEzQmpILFFBQVMrUCxFQUFrQjlJLEVBQWxCOEksS0FBTXVILEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZclEsRUFBWnFRLFFBQ2pCblMsRUFBTWtTLElBQWFGLEVBQVc0RCxPQUFXLEVBQUEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0kxVixHQUFNaEksRUFBU2lhLENBQVQsRUFJekRsWCxFQUZBZ1YsRUFBTzBJLEdBQWV2YiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUSxLQUFNdkMsRUFBUWdRLFdBQVl3QixFQUFTQyxNQUFNZ0YsYUFBekMsRUFFWjBNLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUF3QmpWLEdBQXhCLEtBQStDbVYsR0FBakUsRUFDY2hoQixFQUFBK1MsRUFBTTVJLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLFNBQVosRUFDQW5LLEVBQUErUyxFQUFNdEksR0FBWWlELEVBQUswVCxNQUF2QixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHBoQixFQUFjK1MsRUFBTW5JLEdBQWtCb1csRUFBbUJyWCxJQUFBQSxHQUFNLFdBQWEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQTVFLEVBRUEsSUFBQSxJQUFVd1AsRUFBSSxFQUFHQSxFQUFJclcsRUFBS3FXLENBQU0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQUEsQ0FDOUIsSUFBTWtJLEVBQVduaEIsRUFBUSxLQUFNLEtBQU02UyxDQUFwQixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWHlMLEVBQVd0ZSxFQUFRLFNBQVUsQ0FBRW9oQixNQUFPM2pCLEVBQVFrWCxLQUFNM1ksSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU0sUUFBN0IsRUFBeUNtbEIsQ0FBbkQsRUFDbkJqVCxFQUFXSSxFQUFPb0csTUFBT3VFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFkLEVBQWtCN0ssSUFBSyxTQUFBckIsR0FBQSxPQUFTQSxFQUFNRyxNQUFNbEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXJCLENBQXZCLEVBQ1hxWixFQUFXLENBQUV2TSxFQUFTLEdBQWUsRUFBVkMsRUFBY3ZILCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFLOFQsTUFBUTlULEVBQUtnQixPQUVqRWhULEVBQU04aUIsRUFBUSxRQUFTaGpCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPa2tCLEVBQVN2RyxDQUFULENBQTlCLEVBRUt2VSxFQUFRNmMsb0JBQ1gvbEIsRUFBTTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUIsRUFBUSxVQUFXaGpCLEVBQU8wa0IsRUFBVy9HLENBQVgsQ0FBaEMsRUFHWW5aLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBcWhCLEVBQUlsWCxFQUFNLGNBQVYsRUFDQW5LLEVBQUF3ZSxFQUFRclUsRUFBTSxLQUFkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNkbkssRUFBY3dlLEVBQVFsVSxHQUFlOEQsRUFBUzNHLEtBQU0sR0FBZixDQUFyQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQXpILEVBQWN3ZSxFQUFRL1QsR0FBWTVHLEdBQVEwZCxFQUFNcEksRUFBSSxDQUFsQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBbEMsRUFDY25aLEVBQUF3ZSxFQUFRcFUsRUFBVyxDQUFHLENBQXRCLEVBRWQ1TSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTUQsS0FBTSxDQUFFOGpCLEdBQUFBLEVBQUk3QyxPQUFBQSxFQUFRM0osS0FBTXNFLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFwQixDQUFaLENBQ0YsQ0FyRFMzUSxFQUFBLEVBQ0RiLEVuQ3RHNEIscUJtQ3NHRixDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBRW9MLEtBQUFBLEVBQU12VixNQUFBQSxDQUFSLEVBQWlCaVIsRUFBT3JILEVBQU84RixLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUDlGLENBQWxELENBQ1IsQ0FDRixFQWdKRXhCLFFBQUFBLEVBQ0E2SSxNQUFBQSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWpHLE9BQUFBLENBTEssQ0FPVCxPbEJwT2dCLFNBQU1wQixFQUFnQmtHLEVBQXdCMUksRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3RELElBQUU0SSxFQUE2QjVJLEVBQTdCNEksYUFBY0ksRUFBZWhKLEVBQWZnSixXQUtoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JwSixFQUFpQyxHQUt2QyxTQUFTaUwsSUFtRFQsSUFDUTVLLEVBQ0UyQyxFQXBEUkosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU9pSCxRQUFRblIsUUFBUyxTQUFVK0QsR0FDekJBLEVBQU95Z0IsV0FDTnRhLEVBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRbkcsRUFBT3NOLE1BQWZuSCxFQUNBdWEsRUFBQTFnQixFQUFPc04sT0FBUW5ILENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FmLEVBRVIsQ0FMRkEsRUFPS29HLElBNENDM0ksRUFBUXNDLEVBQWdCQyxJQUN0QkksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU8zQyxFQUFQMkMsSUFFSnZCLEdBQWF5WixDQUFqQixFQUNBbFksRUFBSVAsR0FBcUJpWicKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBekIsRUFDQTFZLEVBQUksQ0FBRTFCLEVBQWVTLEdBQWlCaUMsQ0FBdEMsRUFFQWhFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPakgsS0FBTXNILENBQWIsRUFDTUEsRUFBQThDLEtBQU1kLEdBQTBCTyxFQUFPaUgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQXZDLEVBakRSLENBS0EsU0FBU3pJLElBQ1BwQixFQUFPdEgsUUFBUyxTQUFTMkgsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUVBLEVBQU1lLFFBQU4sQ0FBa0IsQ0FBN0MsRUFDQTlLLEVBQU8wSixDQUFQLENBQ0YsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBa0JTLFNBQUFtZCxFQUFNcFQsRUFBZ0J0TixHQUN2QjRELEVBQVFzQyxFQUFnQm9ILEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUU5QjFKLEVBQU0yQyxHQUFJekIsRUFBWSxTQUFFbUgsRUFBT3FHLEVBQU1nRyxHQUNuQycKICAgICAgICAgICAgICAgICAgICAgICAgYid0WSxFQUFPNlosR0FBSTdaLEVBQU9tSSxHQUFJMkQsRUFBWCxFQUFvQndNLEVBQU9yTSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdEMsQ0FDQSxDQUZGLEVBSUExSSxFQUFPakgsS0FBTXNILENBQWIsQ0FDRixDQXFCQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBUzJELElBQ084RSxFQUFBQSxFQUFXNkIsU0FBUzRELEtBQU1uSSxHQUFrQmhHLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidRNE0sWUFBYzdILEdBQU0sV0FBYSxFQUFyRjJELENBQ2hCLENBT0EsU0FBU29TLEVBQVN6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MsR0FDaEI3RixFQUFPMFQsR0FBSTdOLEVBQU1DLEtBQWpCOUYsQ0FDRixDQVFTLFNBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOFksRUFBV2pULEVBQXVCbFEsR0FDcENNLEVBQVUyVCxHQUFjTCxHQUFjNVQsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNUIsSUFDYjJpQixFQUFTelMsQ0FBVCxFQUNBdkwsRUFBUzNFLENBQVQsRUFFSixDQUVPJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFBLENBQ0xrVixNQUFPelcsRUFDTDhSLEVBQVcyUSxNQUFNblYsSUFDakIsQ0FBRTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxXQUFZblIsR0FBYW1SLENBQWIsRUFBNEJKLEVBQWVJLENBQXpELEVBQ0EsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidISyxFQUtQNkIsTUFBQUEsRUFDQTdKLFFBQUFBLEVBQ0EwUixRQTFFRixXQUNVMVIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFDRjZKLEVBQUEsQ0FDUixDQStETyxDQVVULFFtQnBJZ0IsU0FBT3JJLEVBQWdCa0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQXdCMUksR0FDN0QsSUFBUWxKLEVBQVN5TCxFQUFnQkMsQ0FBaEIsRUFBVDFMLEtBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidKa21CLEVBQVcsRUFnQmYsU0FBU0MsRUFBUzlrQixHQUNoQixJQUVRNmIsRUFDQXhXLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBUSxFQUNBa2YsRUFrQmNsSixFQXZCakI3YixFQUFFZ2lCLGFBRUNuRyxHQURFbUosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVdobEIsRUFBWGdsQixRQUNtQixFQUNyQjNmLEVBQVlELEdBQVFwRixHQUNwQjZGLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZZ0MsRUFBUW9kLG1CQUFxQixFQUN6Q0YsRUFBWWxkLEVBQVFxZCxZQUFjLEVBRW5DaGYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUs4ZSxHQUFXbmYsR0FBOEJrZixFQUF2QjFmLEVBQVl3ZixJQUN0Q3hhLEVBQU8wVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBSWxDLEVBQVksSUFBTSxHQUE3QnhSLEVBQ1d3YSxFQUFBeGYsR0FjT3dXLEVBWExBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQVlSaFUsRUFBUXNkLGNBQ1o5YSxDQUFBQSxFQUFPK0IsTUFBTUMsR0FBSTlPLENBQWpCJwogICAgICAgICAgICAgICAgICAgICAgICBiJzhNLEdBQ21ELENBQUEsSUFBbkRrRyxFQUFXd0gsV0FBV3FGLFlBQWF2QixDQUFuQ3RMLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWQyQjVMLEVBQVMzRSxDQUFULEVBRWxDLENBZU8sTUFBQSxDQUNMMFMsTUExQ0YsV0FDTycKICAgICAgICAgICAgICAgICAgICAgICAgYic3SyxFQUFRdWQsT0FDWHptQixFQUFNNFIsRUFBVzZCLFNBQVNDLE1BQU8sUUFBU3lTLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTM1IsRUFBbkQsQ0FFSixDQXFDTyxDQUdULE9DOUNnQixTQUFNOUksRUFBZ0JrRyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd0IxSSxHQUM1RCxJQUFRNEMsRUFBT0wsRUFBZ0JDLENBQWhCLEVBQVBJLEdBQ0E0SCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVTlCLEVBQVc2QixTQUFyQkMsTUFLRnVNLEVBQVUvVyxFQUFRd2QsTUFBUSxDQUFFeGQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVE0SSxhQUtwQzZVLEVBQUtuaUIsRUFBUSxPQUFRK0wsRUFBUixFQUticEUsRUFBV0QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBaENNLEdBZ0M2QnBNLEVBQU9rWSxFQUFRLENBQUEsQ0FBUixDQUF6QixFQXdCbEMsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNBLEVBQVE1RSxHQUNEOU8sRUFBQW9QLEVBQU9yRSxHQUFXK0QsQ0FBbEIsRUFFVEEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ0g3USxFQUFRbVIsRUFBT2lULENBQWYsRUFDQXhhLEVBQVMxTSxNQUFULElBRUFnRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUWtoQixDQUFSLEVBQ0F4YSxFQUFTYSxPQUFULEVBRUosQ0FnQkEsU0FBU3lWLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTL0IsR0FDWFQsR0FDSDNiLEVBQWNvUCxFQUFPdEUsR0FBV3NSLEVBQVcsTUFBUSxRQUFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsQ0FFSixDQUVPLE1BQUEsQ0FDTDNNLE1BbERGLFdBQ09rTSxJQUNId0MsRUFBUyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRTdRLEVBQVdnVixTQUFTdFosVUFBL0IsRUFDY2hKLEVBQUFvUCxFQUFPcEUsR0FBYSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUFwQixFQUNkcVgsRUFBR0UsWUFBYyxJQUVqQi9hLEVBQUlWLEdBQXFCdEwsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08yaUIsRUFBUyxDQUFBLENBQWhCLENBQXpCLEVBQ0EzVyxFQUFJVCxHQUFzQnZMLEVBQU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMmlCLEVBQVMsQ0FBQSxDQUFoQixDQUExQixFQUNBM1csRUFBSSxDQUFFeEIsR0FBYVcsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWtCbkwsRUFBT2tZLEVBQVEsQ0FBQSxDQUFSLENBQTVDLEVBRUosRUF5Q0V5SyxRQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFDQXZZLFFBcEJGLFdBQ0VoRyxFQUFpQndQLEVBQU8sQ0FBRXRFLEdBQVdFLEdBQWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxHQUFsRCxFQUNBNUosRUFBUWtoQixDQUFSLENBQ0YsQ0FjTyxDQUtULElDdkdhRyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBb0IsQ0FDL0J0bUIsS0FBb0IsUUFDcEIwWCxLQUFvQixTQUNwQjZPLE1BQW9CLElBQ3BCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hOLFFBQW9CLEVBQ3BCekYsWUFBb0IsQ0FBQSxFQUNwQjhELE9BQW9CLENBQUEsRUFDcEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInM0YsV0FBb0IsQ0FBQSxFQUNwQjhULG1CQUFvQixDQUFBLEVBQ3BCNVosU0FBb0IsSUFDcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCZ1YsYUFBb0IsQ0FBQSxFQUNwQkMsYUFBb0IsQ0FBQSxFQUNwQkosY0FBb0IsQ0FBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDcEJnRyxPQUFvQixnQ0FDcEJyTyxLQUFvQixDQUFBLEVBQ3BCN0MsVUFBb0IsTUFDcEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkgsVUFBb0IsQ0FBQSxFQUNwQi9KLGVBQW9CLDZDQUNwQjhTLEtBQW9CLENBQUEsRUFDcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCemtCLFE5QnFDcUIsQ0FDckJ5UCxNQUFZOUIsR0FDWnFNLE1BQVlwTSxHQUNaK0gsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1k3SCxHQUNab1EsTUFBWW5RLEdBQ1o2SCxLQUFZNUgsR0FDWjZILEtBQVk1SCxHQUNaK0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQVk5QixHQUNaZ0osS0FBWS9JLEdBQ1owVSxRQXhDdUN0VixFQUFsQyxTQStCZ0IsRScKICAgICAgICAgICAgICAgICAgICAgICAgYic4QnBDckJ3QyxLQzFCa0IsQ0FDbEI2RixLQUFZLGlCQUNaQyxLQUFZLGFBQ1oySSxNQUFZJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvQkFDWkQsS0FBWSxtQkFDWnhOLE9BQVksaUJBQ1o4UyxNQUFZLGdCQUNaL0UsS0FBWSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUJBQ1poVSxNQUFZLGlCQUNacUwsU0FBWSxXQUNaMUcsTUFBWSxRQUNaZ1UsT0FBWSx5QicKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1oxUixXQUFZLFVBWk0sRUQyQmxCd0IsY0FBZSxDQUNidVIsTUFBYSxFQUNiRSxZQUFhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNicEcsU0FBYSxPQUhBLENBckJnQixFRU9qQixTQUFBcUcsR0FBTXhiLEVBQWdCa0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQXdCMUksR0FDdEQsSUFBRTRKLEVBQVdsQixFQUFYa0IsT0FjUixTQUFTOEYsSUFDUCcKICAgICAgICAgICAgICAgICAgICAgICAgYic5RixFQUFPdFIsUUFBUyxTQUFTK1AsR0FDdkJBLEVBQU0zTSxNQUFPLDJCQUE2QixJQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJzJNLEVBQU1DLE1BQXRELElBQUEsQ0FDQSxDQUZGLENBR0YsQ0FhTyxNQUFBLENBQ0x1QywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTUEzQkYsV0FDRXRJLEVBQWdCQyxDQUFoQixFQUF5QkksR0FBSSxDQUFFMUIsRUFBZVEsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWlCZ08sQ0FBL0QsQ0FDRixFQTBCRW5aLE1BUE8sU0FBTytSLEVBQWUyVixHQUM3QnJVJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPbE8sTUFBTyxhQUFkLFdBQXdDc0UsRUFBUTZkLE1BQWhELE1BQTZEN2QsRUFBUTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCxNQUFyRSxFQUNBN21CLEVBQVVnbkIsQ0FBVixDQUNGLEVBS0VuYSxPQUFROU0sRUFISCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FLVCxDQ3JDZ0IsU0FBQXFSLEdBQU83RixFQUFnQmtHLEVBQXdCMUksR0FDN0QsSUFPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lrZSxFQVBJaEosRUFBNkJ4TSxFQUE3QndNLEtBQU1oRixFQUF1QnhILEVBQXZCd0gsV0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVlvRCxFQUFXNUssRUFBWDRLLE9BQ2xCbkYsRUFBU3pGLEVBQVc2QixTQUFwQjRELEtBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidGZ1EsRUFBYXZuQixFQUFPOEUsRUFBT3lTLEVBQU0sWUFBcEIsRUFnRG5CLFNBQVNySyxJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDUHFhLEVBQVksRUFBWixFQUNBN0ssRUFBT3hQLE9BQVAsQ0FDRixDQXNCTyxNQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNMK0csTUFoRUYsV0FDRXRJLEVBQWdCQyxDQUFoQixFQUF5QjFMLEtBQU1xWCxFQUFNLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidnQkFBaUIsU0FBS2hXLEdBQ3BEQSxFQUFFa0UsU0FBVzhSLEdBQVErUCxJQUNqQnBhLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQ0tvYSxFQUFBLEVBRWQsQ0FMRixDQU1GLEVBMERFM25CLE1BakRPLFNBQU8rUiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZTJWLEdBQzdCLElBQU1ySyxFQUFjc0IsRUFBS3pCLFdBQVluTCxFQUFPLENBQUEsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXhCLEVBQ2RvTCxFQUFjd0IsRUFBS2QsWUFBbkIsRUFDQXlKLEVBNkJSLFNBQW1CdlYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ1gsSUFBRXlWLEVBQWdCL2QsRUFBaEIrZCxZQUVSLEdBQUt2YixFQUFPZ0MsR0FBSTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxFQUFYMUYsR0FBc0J1YixFQUFjLENBQ2pDLElBQUFwUCxFQUFPdUIsRUFBV3VHLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVLENBQUEsQ0FBckIsRUFDUGpnQixFQUFPMFosRUFBVzRELE9BQWxCLEVBRU4sR0FBZ0IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQVRuRixHQUF1Qm5ZLEdBQVQ4UixHQUE0QjlSLEdBQVJtWSxHQUF5QixJQUFWckcsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQy9DLE9BQUF5VixDQUVYLENBRUEsT0FBTy9kLEVBQVE2ZCxLQUNqQixFQTFDZ0N2VixHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFUSxHQUFqQ2pLLEVBQUt1VixFQUFjRixJQUE0QixHQUFUbUssRUFDcEM3ZCxFQUFRb2UsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VBQ1g5SyxFQUFPaUQsT0FBUTNDLEVBQWFpSyxFQUFPLENBQUEsRUFBT0ksQ0FBMUMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVlFLGVBQWNOLEVBQWQsTUFBMkI3ZCxFQUFROGQsTUFBbkMsRUFDUDVJLEVBQUExQixVQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBV0ksRUFBYSxDQUFBLENBQXhCLEVBQ1NzSyxFQUFBRCxJQUdoQi9JLEVBQUszQixLQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pMLENBQVgsRUFDSzJWLEVBQUEsRUFFVCxFQWlDRW5hLE9BQUFBLENBSEssQ0FLVCxDQy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWF0QixhQThEWCxTQUFhbkcsRUFBQUEsRUFBOEIyRCxHQTNDM0NxZSxLQUFTcGUsTUFBOCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCc0MsRUFBdkMsRUFLQThiLEtBQVMzVixXQUF5QixHQUt6QjJWLEtBQUE5WixNQUFxQkYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0U5RjlDVCxHOEZtRHJCZ2EsS0FBUzVVLFFBQXdCLEdBS2pDNFUsS0FBaUJDLEVBQWMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVS9CRCxLQUFRRSxFQUEyQyxHQWMzQzVWLEVBQU8vUSxFQUFVeUUsQ0FBQSxFQUFXYSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBb0IxQixTQUFVYSxDQUFWLEVBQXFCQSxFQUNuRXVCLEdBQUErSyxFQUFVQSxFQUFWLGNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBSVIzSSxFQUFVbEYsRUFBTyxDQUNmc08sTUFBWXBOLEVBSGRxaUIsS0FBSzFWLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPQSxFQUdzQjlDLEVBQXBCLEdBQW9DLEdBQ2hEd0osV0FBWXJULEVBQWMyTSxFQUFNNycKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQXBCLEdBQXlDLEVBRnRDLEVBR2Q4WCxHQUFVWSxFQUFPQyxTQUFVemUsR0FBVyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FIeEIsRUFLYixJQUNGbEYsRUFBT2tGLEVBQVMwZSxLQUFLQyxNQUFPM2lCLEVBQWMyTSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTWhMLEVBQWhDLENBQWhCLENBR0YsT0FGVXhGLEdBQ1J5RixHQUFRLENBQUEsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgYicsY0FBZixDQUNGLENBRUF5Z0IsS0FBS0MsRUFBS2prQixPQUFPaUIsT0FBUVIsRUFBTyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSWtGLEVBQTFCLENBQ1osNEJBVUE2SyxNQUFBLFNBQU8rVCxFQUFtRHpMLEdBQTBDLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBMEwsRUFBQVIsS0FDMUY5WixFQUFzQjhaLEtBQXRCOVosTUFBT21FLEVBQWUyVixLQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZjNWLFdBNEJSLE9BM0JQOUssR0FBUTJHLEVBQU1DLEdBQUksQzlGN0dDLEVBOEJFLEU4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0YrRWIsRUFBb0Msa0JBQTVDLEVBRUFELEVBQU1MLEk5Ri9HYSxDOEYrR25CLEVBRUFtYSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBS1MsRUFBS3BXLEVBQ0wyVixLQUFBVSxFQUFLNUwsR0FBY2tMLEtBQUtVLElBQVFWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFLN1osR0FBSTRELEVBQVQsRUFBa0I0VixHQUFPM1YsSUFDekRnVyxLQUFBRSxFQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ssR0FBY1AsS0FBS0UsRUFJckJoa0IsRUFGYUssR0FBUSxHQUFJb2tCLEdBQXVCWCxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0UsRUFBSSxDQUFFcEwsV0FBWWtMLEtBQUtVLENBQW5CLENBQXBDLEVBRVAsU0FBRUUsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVd0a0IsR0FDM0J1a0IsRUFBWUQsRUFBV0osRUFBTW5XLEVBQVltVyxFQUFLUCxDQUFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsR0FDbEI1VixFQUFZL04sR0FBUXVrQixHQUNWN1IsT0FBUzZSLEVBQVU3UixNQUFuQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDVixDQUpNLEVBTVI5UyxFQUFRbU8sRUFBWSxTQUFhd1csR0FDckJBLEVBQUFyVSxPQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU3FVLEVBQVVyVSxNQUFuQixDQUNWLENBRkYsRUFJQXdULEtBQUt0YixLQUFNN0IsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1gsRUFFVS9ILEVBQUFrbEIsS0FBSzFWLEtsQ2hHc0JwQixnQmtDZ0czQixFQUVWaEQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU1MLEk5RjNIVSxDOEYySGhCLEVBQ0FtYSxLQUFLdGIsSzFDeEkrQixPMEN3SXBDLEVBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidPc2IsSUFDVCxJQW9CQXRCLEtBQUEsU0FBTXBULEdBU0csT0FSUDBVLEtBQUs1VSxRQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJzlRLEtBQU0sQ0FBRWdSLE9BQUFBLENBQUYsQ0FBbkIsRUFDQUEsRUFBT0YsUUFBUTlRLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFNLENBQUVnUixPQUFRMFUsS0FBTXZCLFNBQVUsQ0FBQSxDQUExQixDQUFyQixFQUVLdScKICAgICAgICAgICAgICAgICAgICAgICAgYidCLEtBQUs5WixNQUFNQyxHOUZ2SkEsQzhGdUpYLElBQ0U2WixLQUFBUyxFQUFHSyxLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3pNLFFBQVIsRUFDRS9JLEVBQUFqQixXQUFXeVcsS0FBS3pNLFFBQWhCLEdBR0YyTCxJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxJQXNDQW5JLEdBQUEsU0FBSUMsR0FFSyxPQURGa0ksS0FBQVMsRUFBRzVPLFdBQVdnRycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBSUMsQ0FBbEIsRUFDRWtJLElBQ1QsSUEwQkF6YixHQUFBLFNBQUloRCxFQUEyQkcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBRXRCLE9BREZzZSxLQUFBcGUsTUFBTTJDLEdBQUloRCxFQUFRRyxDQUFsQixFQUNFc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQ1QsSUFxQkF2YixJQUFBLFNBQStCbEQsR0FFdEIsT0FERnllLEtBQUFwZSxNQUFNNicKICAgICAgICAgICAgICAgICAgICAgICAgYidDLElBQUtsRCxDQUFYLEVBQ0V5ZSxJQUNULElBWUF0YixLQUFBLFNBQU05QyxHQUFzQixJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQW1mLEVBR25CLE9BREZuZixFQUFBQSxLQUFBQSxPQUFNOEMsS0FBTTlDLE1BQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxDQUFBQSxHQUFVNUosT0FBQUEsRUFBT1UsVUFBVyxDQUFYLENBQWxDLENBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ09zbkIsSUFDVCxJQXNCQXJsQixJQUFBLFNBQUtzVixFQUE0RGhHLEdBRXhELE9BRFArJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsS0FBS1MsRUFBR2xWLE9BQU81USxJQUFLc1YsRUFBUWhHLENBQTVCLEVBQ08rVixJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxJQVFBOWhCLE9BQUEsU0FBUXdULEdBRUMsT0FERnNPLEtBQUFTLEVBQUdsVixPQUFPcicKICAgICAgICAgICAgICAgICAgICAgICAgYidOLE9BQVF3VCxDQUFsQixFQUNFc08sSUFDVCxJQVNBN1osR0FBQSxTQUFJbE4sR0FDSyxPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSttQixLQUFLQyxFQUFHaG5CLE9BQVNBLENBQzFCLElBT0EwVixRQUFBLFdBRVMsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRFBxUixLQUFLdGIsS0FBTXJCLENBQVgsRUFDTzJjLElBQ1QsSUFTQXJkLFFBQUEsU0FBUycKICAgICAgICAgICAgICAgICAgICAgICAgYid3TCxHQUEwQixLQUFBLElBQTFCQSxJQUFBQSxFQUFhLENBQUEsR0FDZCxJQUFFdk0sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lCb2UsS0FBakJwZSxNQUFPc0UsRUFBVThaLEtBQVY5WixNQWdCUixPQWRGQSxFQUFNQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRzlGMVZRLEM4RjBWZCxFQUVhakMsRUFBQThiLElBQUEsRUFBT3piLEcxQzlWVyxRMEM4VicKICAgICAgICAgICAgICAgICAgICAgICAgYidNeWIsS0FBS3JkLFFBQVFsSyxLQUFNdW5CLEtBQU03UixDQUF6QixDQUF4QixHQUVSalMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUE4akIsS0FBS1MsRUFBSSxTQUFhSSxHQUNsQkEsRUFBQWxlLFNBQVdrZSxFQUFVbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBQVN3TCxDQUFuQixHQUNwQixDQUFBLENBRkssRUFJUnZNLEVBQU04QyxLQUFNZixDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWixFQUNBL0IsRUFBTWUsUUFBTixFQUNjd0wsR0FBQXRXLEVBQU9tb0IsS0FBSzVVLE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FaLEVBQ2RsRixFQUFNTCxJOUZ2VWEsQzhGdVVuQixHQUdLbWEsSUFDVCwyQkFPQSxXQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxPQUFPQSxLQUFLQyxDQUNkLE1BT0EsU0FBYXRlLEdBQ1hxZSxLQUFLUyxFQUFHekYsTScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU1uVixJQUFLbEUsRUFBUyxDQUFBLEVBQU0sQ0FBQSxDQUFsQyxDQUNGLHFCQU9BLFdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NFLE9BQU9xZSxLQUFLUyxFQUFHbFYsT0FBTzhHLFVBQVcsQ0FBQSxDQUExQixDQUNULG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkFPQSxXQUNTLE9BQUEyTixLQUFLUyxFQUFHNU8sV0FBV3VHLFNBQW5CLENBQ1QsUUE1WCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLLFNBQU1qVSxFQUlKaWMsU0FBb0IsR0FKaEJqYyxFQVNLNU0sT0FBU0EifScsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUubWluLmpzLm1hcCcsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ3sidmVyc2lvbiI6MywiZmlsZSI6InNwbGlkZS5taW4uanMiLCJzb3VyY2VzIjpbIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi8uLi9zcmMvanMvY29uc3RhbnRzL21lZGlhLnRzIiwiLi4vLi4vc3JjL2pzL2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdGFudHMvc3RhdGVzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L2VtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0eS9lbXB0eS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheUxpa2Uvc2xpYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlL3NsaWNlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Z1bmN0aW9uL2FwcGx5L2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mdW5jdGlvbi9ub29wL25vb3AuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Z1bmN0aW9uL25leHRUaWNrL25leHRUaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjay50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mdW5jdGlvbi9yYWYvcmFmLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy91dGlscy90eXBlL3R5cGUudHMiLCIuLi8uLi9zcmMvanMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0aWxzL2FycmF5L3RvQXJyYXkvdG9BcnJheS50cyIsIi4uLy4uL3NyYy9qcy91dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbHMvYXJyYXkvZm9yRWFjaC9mb3JFYWNoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy9hcnJheS9pbmNsdWRlcy9pbmNsdWRlcy50cyIsIi4uLy4uL3NyYy9qcy91dGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvYXJyYXkvcHVzaC9wdXNoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlQ2xhc3MvdG9nZ2xlQ2xhc3MudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbS9hZGRDbGFzcy9hZGRDbGFzcy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGVuZC9hcHBlbmQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2JlZm9yZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvYmVmb3JlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9tYXRjaGVzL21hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9jaGlsZHJlbi9jaGlsZHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2NoaWxkL2NoaWxkLnRzIiwiLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLy4uL3NyYy9qcy91dGlscy9vYmplY3Qvb3duS2V5cy9vd25LZXlzLnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9vYmplY3QvZm9yT3duL2Zvck93bi50cyIsIi4uLy4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9zcmMvanMvdXRpbHMvb2JqZWN0L2Fzc2lnbi9hc3NpZ24udHMiLCIuLi8uLi9zcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjL2pzL3V0aWxzL29iamVjdC9tZXJnZS9tZXJnZS50cyIsIi4uLy4uL3NyYy9qcy8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRpbHMvb2JqZWN0L29taXQvb21pdC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tL3JlbW92ZUF0dHJpYnV0ZS9yZW1vdmVBdHRyaWJ1dGUudHMiLCIuLi8uLi9zcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjL2pzL3V0aWxzL2RvbS9zZXRBdHRyaWJ1dGUvc2V0QXR0cmlidXRlLnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9kb20vY3JlYXRlL2NyZWF0ZS50cyIsIi4uLy4uL3NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MvanMvdXRpbHMvZG9tL3N0eWxlL3N0eWxlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidscy9kb20vZGlzcGxheS9kaXNwbGF5LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb20vZm9jdXMvZm9jdXMudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2dldEF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUvZ2V0QXR0cmlidXRlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvaGFzQ2xhc3MvaGFzQ2xhc3MudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0L3JlY3QudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3JlbW92ZS9yZW1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9wYXJzZUh0bWwvcGFyc2VIdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtbC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcHJldmVudC9wcmV2ZW50LnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcXVlcnkvcXVlcnkudHMiLCIuLi8uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4vc3JjL2pzL3V0aWxzL2RvbS9xdWVyeUFsbC9xdWVyeUFsbC50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvdXRpbHMvZG9tL3JlbW92ZUNsYXNzL3JlbW92ZUNsYXNzLnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9kb20vdGltZU9mL3RpbWVPZi50cyIsIi4uLy4uL3NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MvanMvdXRpbHMvZG9tL3VuaXQvdW5pdC50cyIsIi4uLy4uL3NyYy9qcy9jb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbnRzL3Byb2plY3QudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZXJyb3IvYXNzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC9hc3NlcnQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvbWF0aC9tYXRoL21hdGguJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvYXBwcm94aW1hdGVseUVxdWFsLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcHByb3hpbWF0ZWx5RXF1YWwudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvbWF0aC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmV0d2Vlbi9iZXR3ZWVuLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wL2NsYW1wLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvc2lnbi9zaWduLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsIi4uLy4uL3NyYy9qcy91dGlscy9zdHJpbmcvZm9ybWF0L2Zvcm1hdC50cyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3BhZC9wYWQudHMiLCIuLi8uLi9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JjL2pzL3V0aWxzL3N0cmluZy91bmlxdWVJZC91bmlxdWVJZC50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvY29uc3RydWN0b3JzL0V2ZW50QmluZGVyL0V2ZW50QmluZGVyLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZXZlbnRzLnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9jb25zdHJ1Y3RvcnMvRXZlbnRJbnRlcmZhY2UvRXZlbnRJbnRlcmZhY2UudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLi4vLi4vc3JjL2pzL2NvbnN0cnVjdG9ycy9SZXF1ZXN0SW50ZXJ2YWwvUmVxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RJbnRlcnZhbC50cyIsIi4uLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvU3RhdGUvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N0YXRlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9hcnJvd3MudHMiLCIuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLi4vc3JjL2pzL2NvbnN0YW50cy9kaXJlY3Rpb25zLnRzIiwiLi4vLi4vc3JjL2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy9jb21wb25lbnRzL0RpcmVjdGlvbi9EaXJlY3Rpb24udHMiLCIuLi8uLi9zcmMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pzL2NvbnN0YW50cy9hdHRyaWJ1dGVzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMvY2xhc3Nlcy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0RyYWcvY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0YW50cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvdHlwZXMudHMiLCIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4vLi4vc3JjL2pzL2NvbXBvbmVudHMvU2xpZGVzL1NsaWRlLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy9jb21wb25lbnRzL0F1dG9wbGF5L2NvbnN0YW50cy50cyIsIi4uLy4uL3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmMvanMvY29uc3RhbnRzL2xpc3RlbmVyLW9wdGlvbnMudHMiLCIuLi8uLi9zcmMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pzL3V0aWxzL2RvbS9ub3JtYWxpemVLZXkvbm9ybWFsaXplS2V5LnRzIiwiLi4vLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuL3NyYy9qcy9jb21wb25lbnRzL0tleWJvYXJkL0tleWJvYXJkLnRzIiwiLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL3NyYy9qcy9jb21wb25lbnRzL0xhenlMb2FkL2NvbnN0YW50cy50cyIsIi4uLy4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9zcmMvanMvY29tcG9uZW50cy9TeW5jL1N5bmMudHMiLCIuLi8uLi9zcmMvanMvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMvTWVkaWEvTWVkaWEudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMvRWxlbWVudHMvRWxlbWVudHMudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9jbG9zZXN0L2Nsb3Nlc3QudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9TbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVzL1NsaWRlcy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0xheW91dC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGF5b3V0LnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0cnVjdG9ycy9UaHJvdHRsZS9UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hyb3R0bGUudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9DbG9uZXMvQ2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL01vdmUvTW92ZS50cyIsIi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi8uLi9zcmMvanMvY29tcG9uZW50cy9Db250cm9sbGVyL0NvbnRyb2xsZXIudHMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXJyb3dzL0Fycm93cy50cyIsIi4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi9zcmMvanMvY29tcG9uZW50cy9BcnJvd3MvcGF0aC50cyIsIi4uLy4uL3NyYy8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInanMvY29tcG9uZW50cy9BdXRvcGxheS9BdXRvcGxheS50cyIsIi4uLy4uL3NyYy9qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvY29tcG9uZW50cy9Db3Zlci9Db3Zlci50cyIsIi4uLy4uL3NyYy9qcy9jb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cy9TY3JvbGwvU2Nyb2xsLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1Njcm9sbC9jb25zdGFudHMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZy9EcmFnLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvTGF6eUxvYWQvTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhenlMb2FkLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvUGFnaW5hdGlvbi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFnaW5hdGlvbi50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL1doZWVsL1doJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlbC50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0xpdmUvTGl2ZS50cyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi8uLi9zcmMvanMvY29uc3RhbnRzL2RlZmF1bHRzLnRzIiwiLi4vLi4vc3JjL2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy9jb25zdGFudHMvaTE4bi50cyIsIi4uLy4uL3NyYy9qcy90cmFuc2l0aW9ucy9GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZS9GYWRlLnRzIiwiLi4vLi4vc3JjL2pzL3RyYW5zaXRpb25zL1NsaWRlL1NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZS50cyIsIi4uLy4uL3NyYy9qcy9jb3JlL1NwbGlkZS9TcGxpZGUudHMiXSwic28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJjZXNDb250ZW50IjpbIi8qKlxcclxcbiAqIE1hdGNoZXMgd2hlbiB1c2VycyByZXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzdCByZWR1Y2luZyBub24tZXNzZW50aWFsIGFuaW1hdGlvbnMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTL2RvY3MvV2ViL0NTUy9AbWVkaWEvcHJlZmVycy1yZWR1Y2VkLW1vdGlvblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG5leHBvcnQgY29uc3QgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBcJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpXCc7IiwiLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFNwbGlkZSBoYXMgYmVlbiBqdXN0IGNyZWF0ZWQuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBDUkVBVEVEID0gMTtcXHJcXG5cXHJcXG4vKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogU3BsaWRlIGhhcyBtb3VudGVkIGNvbXBvbmVudHMuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBNT1VOVEVEID0gMjtcXHJcXG5cXHJcXG4vKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogU3BsaWRlIGlzIHJlYWR5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgSURMRSA9IDM7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU3BsaWRlIGlzIG1vdmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE1PVklORyA9IDQ7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKlxcclxcbiAqIFNwbGlkZSBpcyBtb3ZpbmcuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBTQ1JPTExJTkcgPSA1O1xcclxcblxcclxcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBUaGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG5leHBvcnQgY29uc3QgRFJBR0dJTkcgPSA2O1xcclxcblxcclxcbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBTcGxpZGUgaGFzIGJlZW4gZGVzdHJveWVkLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgREVTVFJPWUVEID0gNztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGNvbGxlY3Rpb24gb2YgYWxsIHN0YXRlcy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU1RBVEVTID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIENSRUFURUQsXFxyXFxuICBNT1VOVEVELFxcclxcbiAgSURMRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBNT1ZJTkcsXFxyXFxuICBTQ1JPTExJTkcsXFxyXFxuICBEUkFHR0lORywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBERVNUUk9ZRUQsXFxyXFxufTtcXHJcXG4iLCIvKipcXHJcXG4gKiBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wdGllcyB0aGUgYXJyYXkuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gYXJyYXkgLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBhcnJheSB0byBlbXB0eS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtcHR5KCBhcnJheTogYW55W10gKTogdm9pZCB7XFxyXFxuICBhcnJheS5sZW5ndGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gMDtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHNsaWNlIG1ldGhvZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIGFuIGFycmF5LWxpa2Ugb2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcnJheUxpa2UgLSBBbiBhcnJheS1saWtlIG9iamVjdC5cXHJcXG4gKiBAcGFyYW0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXJ0ICAgICAtIE9wdGlvbmFsLiBBIHN0YXJ0IGluZGV4LlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gZW5kICAgICAgIC0gT3B0aW9uYWwuIEEgZW5kIGluZGV4LlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBzbGljZWQgZWxlbWVudHMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzbGljZTxUPiggYXJyYXlMaWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogQXJyYXlMaWtlPFQ+LCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUW10ge1xcclxcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyYXlMaWtlLCBzdGFydCwgZW5kICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBbnlGdW5jdGlvbiwgU2hpZnROIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrZSc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbi8qKlxcclxcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoZXJlIHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlZCBhcmd1bWVudHMgYXJlIGJvdW5kLlxcclxcbiAqIGB0aGlzYCBwYXJhbWV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHdpbGwgYmUgYWx3YXlzIG51bGwuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmMgLSBBIGZ1bmN0aW9uLlxcclxcbiAqIEBwYXJhbSBhcmdzIC0gQXJndW1lbnRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBiaW5kIHRvIHRoZSBmdW5jdGlvbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgZnVuY3Rpb24gd2hlcmUgYXJndW1lbnRzIGFyZSBib3VuZC5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5PEYgZXh0ZW5kcyBBbnlGdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIEEgZXh0ZW5kcyBhbnlbXSA9IGFueVtdPihcXHJcXG4gIGZ1bmM6IEYsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLi4uYXJnczogQVxcclxcbik6ICggLi4uYXJnczogU2hpZnROPFBhcmFtZXRlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPEY+LCBBW1xcImxlbmd0aFxcIl0+ICkgPT4gUmV0dXJuVHlwZTxGPjtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hlcmUgcHJvdmlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyXFxuICogYHRoaXNgIHBhcmFtZXRlciB3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbCBiZSBhbHdheXMgbnVsbC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmdW5jIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggZnVuYzogQW55RnVuY3Rpb24gKTogYW55IHtcXHJcXG4gIC8vIGVzbGludC1kaXNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zLCBwcmVmZXItc3ByZWFkXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcmV0dXJuIGZ1bmMuYmluZCggbnVsbCwgLi4uc2xpY2UoIGFyZ3VtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIDEgKSApO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBObyBvcGVyYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBub29wID0gKCk6IHZvaWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXFxyXFxuIiwiaW1wb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IEFueUZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJbnZva2VzIHRoZSBjYWxsYmFjayBvbiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIG5leHQgdGljay5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dFRpY2s6ICggY2FsbGJhY2s6IEFueUZ1bmN0aW9uICkgPT4gUmV0dXJuVHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8dHlwZW9mIHNldFRpbWVvdXQ+ID0gc2V0VGltZW91dDtcXHJcXG4iLCIvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIGFsaWFzIG9mIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcmFmKCBmdW5jOiBGcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWVSZXF1ZXN0Q2FsbGJhY2sgKTogbnVtYmVyIHtcXHJcXG4gIHJldHVybiByZXF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdEFuaW1hdGlvbkZyYW1lKCBmdW5jICk7XFxyXFxufVxcclxcbiIsImltcG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieyBBbnlGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXBwbHkgfSBmcm9tICcuLi9mdW5jdGlvbic7XFxyXFxuXFxyXFxuXFxyXFxuLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFRoZSBhbGlhcyBvZiB0aGUgdHlwZSBjaGVjayBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdHlwZSAgICAtIEEgdHlwZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgdGhlIHNwZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWZpZWQgdHlwZS5cXHJcXG4gKi9cXHJcXG5mdW5jdGlvbiB0eXBlT2YoIHR5cGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcsIHN1YmplY3Q6IHVua25vd24gKTogYm9vbGVhbiB7XFxyXFxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHR5cGVvZiBzdWJqZWN0ID09PSB0eXBlO1xcclxcbn1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Qgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIHRoZSBzdWJqZWN0IGlzIGFuIG9iamVjdCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCggc3ViamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IHVua25vd24gKTogc3ViamVjdCBpcyBvYmplY3Qge1xcclxcbiAgcmV0dXJuICEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlzTnVsbCggc3ViamVjdCApICYmIHR5cGVPZiggJ29iamVjdCcsIHN1YmplY3QgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVuIHN1YmplY3QgaXMgYW4gYXJyYXkgb3Igbm90LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGFuIGFycmF5LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0FycmF5OiA8VD4oIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUW10gPSBBcnJheS5pc0FycmF5O1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYSBmdW5jdGlvbiBvciBub3QuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIGEgZnVuY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9IDwoIHN1YmplY3Q6IHVua25vd24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIikgPT4gc3ViamVjdCBpcyBBbnlGdW5jdGlvbj5hcHBseSggdHlwZU9mLCAnZnVuYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9uJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHN1YmplY3QgaXMgYSBzdHJpbmcgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGEgc3RyaW5nLCBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1N0cmluZyA9IDwoIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzIHN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJpbmc+YXBwbHkoIHR5cGVPZiwgJ3N0cmluZycgKTtcXHJcXG5cXHJcXG4vKipcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGB1bmRlZmluZWRgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHN1YmplY3QgaXMgYHVuZGVmaW5lZGAsIG9yIG90aGVyd2lzZSBgZmFsc2VgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSA8KCBzdWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdDogdW5rbm93biApID0+IHN1YmplY3QgaXMgdW5kZWZpbmVkPmFwcGx5KCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlwZU9mLCAndW5kZWZpbmVkJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYG51bGxgIG9yIG5vdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgYG51bGxgLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIGlzTnVsbCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCBpcyBudWxsIHtcXHJcXG4gIHJldHVybiBzdWJqZWN0ID09PSBudWxsO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW5jZSBvciBub3QuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudCB3aGljaCBgd2luZG93YCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIG5vZGUgYmVsb25ncyB0by5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaXNIVE1MRWxlbWVudCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCBpcyBIVE1MRWxlbWVudCB7XFxyXFxuICB0cnkge1xcclxcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YmplY3QgaW5zdGFuY2VvZiAoICggc3ViamVjdCBhcyBOb2RlICkub3duZXJEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93ICkuSFRNTEVsZW1lbnQ7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSBjYXRjaCAoIGUgKSB7XFxyXFxuICAgIHJldHVybiBmYWxzZTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxufSIsImltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwnLi4vLi4vdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvdHlwZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUHVzaCB0aGUgcHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZpZGVkIHZhbHVlIHRvIGFuIGFycmF5IGlmIHRoZSB2YWx1ZSBpcyBub3QgYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHVzaC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgY29udGFpbmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgdGhlIHZhbHVlLCBvciB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0IGlzIGFscmVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R5IGFuIGFycmF5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0b0FycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheTxUPiggdmFsdWU6IFQgfCBUW10gKTogVFtdIHtcXHJcXG4gIHJldHVybiBpc0FycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSggdmFsdWUgKSA/IHZhbHVlIDogWyB2YWx1ZSBdO1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4uL3RvQXJyYXkvdG9BcnJheSc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBleHRlbmRlZCBgQXJyYXkjZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hgIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgdmFsdWUgYXMgYW4gYXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlcyAgIC0gQSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgdmFsdWVzIHRvIGl0ZXJhdGUgb3Zlci5cXHJcXG4gKiBAcGFyYW0gaXRlcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBmb3JFYWNoPFQ+KCB2YWx1ZXM6IFQgfCBUW10sIGl0ZXJhdGVlOiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSApID0+IHZvaWQgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgdG9BcnJheSggdmFsdWVzICkuZm9yRWFjaCggaXRlcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlICk7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgYXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IGluY2x1ZGVzIHRoZSB2YWx1ZSBvciBub3QuXFxyXFxuICogYEFycmF5I2luY2x1ZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc2AgaXMgbm90IHN1cHBvcnRlZCBieSBJRS5cXHJcXG4gKlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gYXJyYXkgLSBBbiBhcnJheS5cXHJcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0byBzZWFyY2ggZm9yLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIHRoZSBhcnJheSBpbmNsdWRlcyB0aGUgdmFsdWUsIG9yIG90aGVyd2lzZSBgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXM8VD4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBhcnJheTogVFtdLCB2YWx1ZTogVCApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXkuaW5kZXhPZiggdmFsdWUgKSA+IC0xO1xcclxcbn1cXHJcXG4iLCJpbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IHsgdG9BcnJheSB9IGZyb20gJy4uL3RvQXJyYXkvdG9BcnJheSc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcblxcclxcbi8qKlxcclxcbiAqIEV4dGVuZGVkIGBBcnJheSNwdXNoKClgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGF0IGFjY2VwdHMgYW4gaXRlbSBvciBhbiBhcnJheSB3aXRoIGl0ZW1zLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEFuIGFycmF5IHRvIHB1c2ggaXRlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAqIEBwYXJhbSBpdGVtcyAtIEFuIGl0ZW0gb3IgaXRlbXMgdG8gcHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgcHJvdmlkZWQgYXJyYXkgaXRzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcHVzaDxUPiggYXJyYXk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUW10sIGl0ZW1zOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICBhcnJheS5wdXNoKCAuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4udG9BcnJheSggaXRlbXMgKSApO1xcclxcbiAgcmV0dXJuIGFycmF5O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCcuLi8uLi9hcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRvZ2dsZXMgdGhlIHByb3YiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlZCBjbGFzcyBvciBjbGFzc2VzIGJ5IGZvbGxvd2luZyB0aGUgYGFkZGAgYm9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW4uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtICAgICAtIEFuIGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHdob3NlIGNsYXNzZXMgYXJlIHRvZ2dsZWQuXFxyXFxuICogQHBhcmFtIGNsYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIC0gQSBjbGFzcyBvciBjbGFzcyBuYW1lcy5cXHJcXG4gKiBAcGFyYW0gYWRkICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBXaGV0aGVyIHRvIGFkZCBvciByZW1vdmUgYSBjbGFzcy5cXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCBlbG06IEVsZW1lbnQsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWRkOiBib29sZWFuICk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGlmICggZWxtICkge1xcclxcbiAgICBmb3JFYWNoKCBjbGFzc2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFtZSA9PiB7XFxyXFxuICAgICAgaWYgKCBuYW1lICkge1xcclxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVsbS5jbGFzc0xpc3RbIGFkZCA/ICdhZGQnIDogJ3JlbW92ZScgXSggbmFtZSApOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcJy4uLy4uL3R5cGUvdHlwZVwnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyB0b2dnbGVDbGFzcyB9IGZyb20gJy4uL3RvZ2dsZUNsYXNzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi90b2dnbGVDbGFzcyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQWRkcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xhc3NlcyB0byB0aGUgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxtICAgICAtIEFuIGVsZW1lbnQgdG8gYWRkIGNsYXNzZXMgdG8uXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBjbGFzc2VzIC0gQ2xhc3NlcyB0byBhZGQuXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBmdW5jdGlvbiBhZGRDbGFzcyggZWxtOiBFbGVtZW50LCBjbGFzc2VzOiBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nIHwgc3RyaW5nW10gKTogdm9pZCB7XFxyXFxuICB0b2dnbGVDbGFzcyggZWxtLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgaXNTdHJpbmcoIGNsYXNzZXMgKSA/IGNsYXNzZXMuc3BsaXQoICcgJyApIDogY2wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzZXMsIHRydWUgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEFwcGVuZHMgY2hpbGRyZW4gdG8gdGhlIHBhcmVudCBlbGVtZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIEBwYXJhbSBjaGlsZHJlbiAtIEEgY2hpbGQgb3IgY2hpbGRyZW4gdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGVuZCB0byB0aGUgcGFyZW50LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gYXBwZW5kKCBwYXJlbnQ6IEVsZW1lbnQsIGNoaWxkcmVuOiBOb2RlIHwgTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGVbXSApOiB2b2lkIHtcXHJcXG4gIGZvckVhY2goIGNoaWxkcmVuLCBwYXJlbnQuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVuZENoaWxkLmJpbmQoIHBhcmVudCApICk7XFxyXFxufVxcclxcbiIsImltcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4vKipcXHJcXG4gKiBJbnNlcnRzIGEgbm9kZSBvciBub2RlcyBiZWZvcmUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIG5vZGUuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIG5vZGVzIC0gQSBub2RlIG9yIG5vZGVzIHRvIGluc2VydC5cXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIHJlZiAgIC0gQSByZWZlcmVuY2Ugbm9kZS5cXHJcXG4gKi9cXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGZ1bmN0aW9uIGJlZm9yZSggbm9kZXM6IE5vZGUgfCBOb2RlW10sIHJlZjogTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUgfCBudWxsICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCggbm9kZXMsIG5vZGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcXHJcXG4gICAgY29uc3QgcGFyZW50ID0gKCByZWYgfHwgbm9kZSApLnBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOb2RlO1xcclxcblxcclxcbiAgICBpZiAoIHBhcmVudCApIHtcXHJcXG4gICAgICBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50Lmluc2VydEJlZm9yZSggbm9kZSwgcmVmICk7XFxyXFxuICAgIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9ICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZCBieSB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3ZpZGVkIHNlbGVjdG9yIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gZWxtICAgICAgLSBBbiBlbGVtZW50IHRvIGNoZWNrLlxcclxcbiAqIEBwYXJhbSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIHRlc3QuXFxyXFxuICpcXHJcXG4gKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBgdHJ1ZWAgaWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG1hdGNoZXMoIGVsbTogRWxlbWVudCB8IEV2ZW50VGFyZ2V0LCBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3I6IHN0cmluZyApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiBpc0hUTUxFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJudCggZWxtICkgJiYgKCBlbG1bICdtc01hdGNoZXNTZWxlY3RvcicgXSB8fCBlbG0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLm1hdGNoZXMgKS5jYWxsKCBlbG0sIHNlbGVjdG9yICk7XFxyXFxufVxcclxcbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJpbXBvcnQgeyBzbGljZSB9IGZyb20gXCcuLi8uLi9hcnJheUxpa2VcJztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgbWF0Y2hlcyB9IGZyb20gJy4uL21hdGNoZXMvbWF0Y2hlcyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEZpbmRzIGNoaWxkcmVuIHRoYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hhcyB0aGUgc3BlY2lmaWVkIHRhZyBvciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBzZWxlY3RvciAtIE9wdGlvbmFsLiBBIHNlbGVjdG9yIHRvIGZpbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXIgY2hpbGRyZW4uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmF5IHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIGZpbHRlcmVkIGNoaWxkcmVuLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY2hpbGRyZW48RSBleHRlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNTEVsZW1lbnQsIHNlbGVjdG9yPzogc3RyaW5nICk6IEVbXSB7XFxyXFxuICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hpbGRyZW4gPSBwYXJlbnQgPyBzbGljZSggcGFyZW50LmNoaWxkcmVuICkgYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEVbXSA6IFtdO1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4uZmlsdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciggY2hpbGQgPT4gbWF0Y2hlcyggY2hpbGQsIHNlbGVjdG9yICkgKSA6IGNoaWxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbjtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgY2hpbGRyZW4gfSBmcm9tIFwnLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NoaWxkcmVuL2NoaWxkcmVuJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyBhIGNoaWxkIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaWVkIHRhZyBvciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciAtIEEgc2VsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gQSBtYXRjaGVkIGNoaWxkIGVsZW1lbnQgaWYgYXZhaWxhYmxlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY2hpbGQ8RSBleHRlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RNTEVsZW1lbnQsIHNlbGVjdG9yPzogc3RyaW5nICk6IEUgfCB1bmRlZmluZWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuPEU+KCBwYXJlbnQsIHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciApWyAwIF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQgYXMgRTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidufVxcclxcbiIsIi8qKlxcclxcbiAqIEFuIGFsaWFzIG9mIGBPYmplY3Qua2V5cygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKWBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3Qgb3duS2V5cyA9IE9iamVjdC5rJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5czsiLCJpbXBvcnQgeyBvd25LZXlzIH0gZnJvbSBcJy4uL293bktleXMvb3duS2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieXMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEl0ZXJhdGVzIG92ZXIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBwcm92aWRlZCBvYmplY3QgYnkgb3duIGVudW1lcmFibGUga2V5cyB3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsaW5nIHRoZSBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gb2JqZWN0ICAgLSBBbiBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gaXRlcmF0ZWUgLSBBbiBpdGVyYXRlZSBmdW5jdGlvbiB0aGF0IHRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tlcyBgdmFsdWVgIGFuZCBga2V5YCBhcyBhcmd1bWVudHMuXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCAgICAtIElmIGB0cnVlYCwgdGhlIG1ldGhvZCBpdGVyYXRlcyBvdmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgb2JqZWN0IGZyb20gdGhlIGVuZCBsaWtlIGBmb3JFYWNoUmlnaHQoKWAuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHJldHVybiBBIHByb3ZpZGVkIG9iamVjdCBpdHNlbGYuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JPd248VCBleHRlbmRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3Q+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgaXRlcmF0ZWU6ICggdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlOiBUWyBrZXlvZiBUIF0sIGtleTogc3RyaW5nICkgPT4gYm9vbGVhbiB8IHZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkLFxcclxcbiAgcmlnaHQ/OiBib29sZWFuXFxyXFxuKTogVCB7XFxyXFxuICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3QgKSB7XFxyXFxuICAgICggcmlnaHQgPyBvd25LZXlzKCBvYmplY3QgKS5yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZXJzZSgpIDogb3duS2V5cyggb2JqZWN0ICkgKS5mb3JFYWNoKCBrZXkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgICBrZXkgIT09ICdfX3Byb3RvX18nICYmIGl0ZXJhdGVlKCBvYmplYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0WyBrZXkgXSwga2V5ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICByZXR1cm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBDYXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgSGVhZCwgUHVzaCwgUmVzb2x2ZSwgU2hpZnQgfSBmcm9tICcuLi8uLi8uLi90eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gZnJvbSAnLi4vZm9yT3duL2Zvck93IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEFzc2lnbnMgVSB0byBULiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWduIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEFuIG9iamVjdCB0byBhc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhc3NpZ25lZCBvYmplY3QgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgQXNzaWduPFQsIFU+ID0gT21pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8VCwga2V5b2YgVT4gJiBVO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2l2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidseSBhc3NpZ25zIFVbXSB0byBULlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVCAtIEFuIG9iamVjdCB0byBhc3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgdHVwbGUgY29udGFpbnMgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSBBc3NpZ25lZDxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFtdLCBOIGV4dGVuZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgMDogVCxcXHJcXG4gIDE6IEFzc2lnbmVkPEFzc2lnbjxULCBIZWFkPCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJVPj4sIFNoaWZ0PFU+LCBOLCBQdXNoPEM+PixcXHJcXG59WyBDWydsZW5ndGgnXSBleCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBOID8gMCA6IDEgXSBleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogbmV2ZXI7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0W10+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgLi4uc291cmNlczogVVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4pOiBSZXNvbHZlPEFzc2lnbmVkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuLyoqXFxyXFxuICogQXNzaWducyBhbGwgb3duIGVudW1lcmFibGUgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BlcnRpZXMgb2YgYWxsIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBwcm92aWRlZCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAtIEFuIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gYXNzaWduIHByb3BlcnRpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBBbiBvYmplY3QgYXNzaWduZWQgcHJvcGVydGllcyBvZiB0aGUgc291cmNlcyB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIG9iamVjdD4oIG9iamVjdDogVCApOiBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXMsIHByZWZlci1zcHJlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBzbGljZSggYXJndW1lbnRzLCAxICkuZm9yRWFjaCggc291cmNlID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvck93biggc291cmNlLCAoIHZhbHVlLCBrZXkgKSA9PiB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIG9iamVjdFsga2V5IF0gPSBzb3VyY2VbIGtleSBdO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgfSApO1xcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IENhc3QsIEhlYWQsIFB1c2gsIFJlc28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibHZlLCBTaGlmdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IGlzQXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmF5LCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuaW1wb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IGZvck93biB9IGZyb20gJy4uL2Zvck93bi9mb3JPd24nO1xcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBNZXJnZXMgVSB0byBULlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBtZXJnZSBVIGludG8uXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEB0eXBlUGFyYW0gVSAtIEFuIG9iamVjdCB0byBtZXJnZSBwcm9wZXJ0aWVzIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9tLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIG1lcmdlZCBvYmplY3QgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgTWVyZ2U8VCBleHRlbmRzIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QsIFUgZXh0ZW5kcyBvYmplY3Q+ID0gT21pdDxULCBrZXlvZiBVPiAmIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBbIEsgaW4gKCBrZXlvZiBUICYga2V5b2YgVSApIF06IFVbIEsgXSBleHRlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBvYmplY3RcXHJcXG4gICAgPyBVWyBLIF0gZXh0ZW5kcyBhbnlbXVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA/IFVbIEsgXVxcclxcbiAgICAgIDogVFsgSyBdIGV4dGVuZHMgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFxcclxcbiAgICAgICAgPyBNZXJnZTxUWyBLIF0sIFVbIEsgXT4gZXh0ZW5kcyBpbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgQSA/IFJlc29sdmU8Q2FzdDxBLCBvYmplY3Q+PiA6IG5ldmVyXFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgOiBVWyBLIF1cXHJcXG4gICAgOiBVWyBLIF07XFxyXFxufSAmIE9taXQ8VSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleW9mIFQ+O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2l2ZWx5IG1lcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgVVtdIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0IHRvIGFzc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBIHR1cGxlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb250YWlucyBvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWduZWQgb2JqZWN0IHR5cGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgTWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlZDxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0W10sIE4gZXh0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7XFxyXFxuICAwOiBULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIDE6IE1lcmdlZDxNZXJnZTxULCBIZWFkPFU+PiwgU2hpZnQ8VT4sIE4sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJQdXNoPEM+PixcXHJcXG59WyBDWydsZW5ndGgnXSBleHRlbmRzIE4gPyAwIDogMSBdICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueT4gOiBuZXZlcjtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0OiBUICk6IFQ7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0W10+KFxcclxcbiAgb2JqZWN0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVCxcXHJcXG4gIC4uLnNvdXJjZXM6IFVcXHJcXG4pOiBSZXNvbHZlPE1lcmdlZDwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVCwgVSwgVVsnbGVuZ3RoJ10+Plxcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2kiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVseSBtZXJnZXMgc291cmNlIHByb3BlcnRpZXMgdG8gdGhlIG9iamVjdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQmUgYXdhcmUgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBtZXJnZSBhcnJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lzLiBUaGV5IGFyZSBqdXN0IGR1cGxpY2F0ZWQgYnkgYHNsaWNlKClgLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBvYmplY3QgdG8gbWVyZ2UgcHJvcGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgbmV3IG9iamVjdCB3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aCBtZXJnZWQgcHJvcGVydGllcy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTogYW55IHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ftc1xcclxcbiAgc2xpY2UoIGFyZ3VtZW50cywgMSApLmZvckVhY2goIHNvdXJjZSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4ge1xcclxcbiAgICBmb3JPd24oIHNvdXJjZSwgKCB2YWx1ZSwga2V5ICkgPT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBpZiAoIGlzQXJyYXkoIHZhbHVlICkgKSB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb2JqZWN0WyBrZXkgXSA9IHZhbHVlLnNsaWNlKCk7XFxyXFxuICAgICAgfSBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZSBpZiAoIGlzT2JqZWN0KCB2YWx1ZSApICkge1xcclxcbiAgICAgICAgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1sga2V5IF0gPSBtZXJnZSgge30sIGlzT2JqZWN0KCBvYmplY3RbIGtleSBdICkgPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0WyBrZXkgXSA6IHt9LCB2YWx1ZSApO1xcclxcbiAgICAgIH0gZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uge1xcclxcbiAgICAgICAgb2JqZWN0WyBrZXkgXSA9IHZhbHVlO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0gKTtcXHJcXG5cXHJcXG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2FycmF5JztcXHJcXG5pbXBvcnQgeyBvd25LZXlzIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm93bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGV0ZXMgc3BlY2lmaWVkIG93biBrZXlzIGZyb20gdGhlIG9iamVjdC5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0LlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0ga2V5cyAgIC0gQSBrZXkgb3Iga2V5cyB0byBkZWxldGUuIElmIG5vdCBzcGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmaWVkLCBhbGwgb3duIGVudW1lcmFibGUga2V5cyB3aWxsIGJlIGRlbGV0ZWQuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBvbWl0KCBvYmplY3Q6IG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QsIGtleXM/OiBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkIHtcXHJcXG4gIGZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKCBrZXlzIHx8IG93bktleXMoIG9iamVjdCApLCBrZXkgPT4ge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVsZXRlIG9iamVjdFsga2V5IF07XFxyXFxuICB9ICk7XFxyXFxufSIsImltcG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBSZW1vdmVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtcyAgLSBBbiBlbGVtZW50IG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbGVtZW50cy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJpYnV0ZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gcmVtb3ZlQXR0cmlidXRlKCBlbG1zOiBFbGVtZW50IHwgRWxlbWVudFtdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnM6IHN0cmluZyB8IHN0cmluZ1tdICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbXMsIGVsbSA9PiB7XFxyXFxuICAgIGZvckVhY2goIGF0dHJzLCBhdHRyID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZWxtICYmIGVsbS5yZW1vdmVBdHRyaWJ1dGUoIGF0dHIgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0gKTtcXHJcXG59XFxyXFxuIiwiaW1wb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IGZvckVhY2ggfSBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuaW1wb3J0IHsgZm8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIick93biB9IGZyb20gJy4uLy4uL29iamVjdCc7XFxyXFxuaW1wb3J0IHsgaXNOdWxsLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaXNPYmplY3QgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcbmltcG9ydCB7IHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi9yZW1vdmVBdHRyaWJ1dGUvcmVtb3ZlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkF0dHJpYnV0ZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUoIGVsbXM6IEVsZW1lbnQgfCBFbGVtZW50W10sIGF0dHI6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuICk6IHZvaWQ7XFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoIGVsbXM6IEVsZW1lbnQgfCBFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudFtdLCBhdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW4+ICk6IHZvaWQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU2V0cyBhdHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlL2F0dHJpYnV0ZXMgdG8gdGhlIGVsZW1lbnQgb3IgZWxlbWVudHMuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIElmIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgYW4gZW1wdHkgc3RyaW5nLCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGVsbXMgIC0gQW4gZWxlbWVudCBvciBhbiBhcnJheSB3aXRoIGVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgbmFtZSBvZiBhbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHdpdGggcGFpcnMgb2YgYSBuYW1lIGFuZCBhIHZhbHVlLlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHNldC5cXHJcXG4gKi9cXHJcXG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShcXHJcXG4gIGVsbXM6IEVsZW1lbnQgfCBFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudFtdLFxcclxcbiAgYXR0cnM6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcgfCBudW1iZXIgfCBib29sZWFuPixcXHJcXG4gIHZhbHVlPzogc3RyaW5nIHwgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciB8IGJvb2xlYW5cXHJcXG4pOiB2b2lkIHtcXHJcXG4gIGlmICggaXNPYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0KCBhdHRycyApICkge1xcclxcbiAgICBmb3JPd24oIGF0dHJzLCAoIHZhbHVlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFtZSApID0+IHtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGVsbXMsIG5hbWUsIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9IGVsc2Uge1xcclxcbiAgICBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCggZWxtcywgZWxtID0+IHtcXHJcXG4gICAgICBpc051bGwoIHZhbHVlICkgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHZhbHVlID09PSAnJyA/IHJlbW92ZUF0dHJpYnV0ZSggZWxtLCBhdHRycyApIDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbS5zZXRBdHRyaWJ1dGUoIGF0dHJzLCBTdHJpbmcoIHZhbHVlICkgKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0gKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIn0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5pbXBvcnQgeyBhZGRDbGFzcyB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi9hZGRDbGFzcy9hZGRDbGFzcyc7XFxyXFxuaW1wb3J0IHsgYXBwZW5kIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uL2FwcGVuZC9hcHBlbmQnO1xcclxcbmltcG9ydCB7IHNldEF0dHJpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImJ1dGUgfSBmcm9tICcuLi9zZXRBdHRyaWJ1dGUvc2V0QXR0cmlidXRlJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZTxLIGV4dGVuZHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXFxyXFxuICB0YWc6IEssXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVhbj4gfCBzdHJpbmcsXFxyXFxuICBwYXJlbnQ/OiBIVE1MRWxlbWVudFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbIEsgXTtcXHJcXG5cXHJcXG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGZ1bmN0aW9uIGNyZWF0ZShcXHJcXG4gIHRhZzogc3RyaW5nLFxcclxcbiAgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc3RyaW5nLFxcclxcbiAgcGFyZW50PzogSFRNTEVsZW1lbnRcXHJcXG4pOiBIVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNTEVsZW1lbnQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlcyBhIEhUTUwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdGFnICAgIC0gQSB0YWcgbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWUuXFxyXFxuICogQHBhcmFtIGF0dHJzICAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggYXR0cmlidXRlcyB0byBhcHBseSB0aGUgY3JlYXRlZCBlbGVtZW50IHRvLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYSBzdHJpbmcgd2l0aCBjbGFzc2VzLlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIEEgcGFyZW50IGVsZW1lbnQgd2hlcmUgdGhlIGNyZWF0ZWQgZWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgaXMgYXBwZW5kZWQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGU8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgdGFnOiBLLFxcclxcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIHwgYm9vbGVhbj4gfCBzdHJpbmcsXFxyXFxuICBwYXJlbnQ/OiBIVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnRcXHJcXG4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbIEsgXSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGFnICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgaWYgKCBhdHRycyApIHtcXHJcXG4gICAgaXNTdHJpbmcoIGF0dHJzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpID8gYWRkQ2xhc3MoIGVsbSwgYXR0cnMgKSA6IHNldEF0dHJpYnV0ZSggZWxtLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHBhcmVudCAmJiBhcHBlbmQoIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQsIGVsbSApO1xcclxcblxcclxcbiAgcmV0dXJuIGVsbTtcXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiIsImltcG9ydCB7IGlzTnVsbCwgaXNVbmRlZmluZWQgfSBmcm9tIFwnLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL3R5cGUvdHlwZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHN0eWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTxLIGV4dGVuZHMga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbj4oXFxyXFxuICBlbG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IEssXFxyXFxuKTogQ1NTU3R5bGVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjbGFyYXRpb25bIEsgXTtcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gc3R5bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKFxcclxcbiAgZWxtOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IHN0cmluZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuKTogc3RyaW5nO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBzdHlsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBlbG06IEhUTUxFbGVtZW50LFxcclxcbiAgcHJvcDogc3RyaW5nLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcXHJcXG4pOiB2b2lkO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBBcHBsaWVzIGlubGluZSBzdHlsZXMgdG8gdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm92aWRlZCBlbGVtZW50IGJ5IGFuIG9iamVjdCBsaXRlcmFsLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBwYXJhbSBlbG0gICAtIEFuIGVsZW1lbnQgdG8gYXBwbHkgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0by5cXHJcXG4gKiBAcGFyYW0gcHJvcCAgLSBBbiBvYmplY3QgbGl0ZXJhbCB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCBzdHlsZXMgb3IgYSBwcm9wZXJ0eSBuYW1lLlxcclxcbiAqIEBwYXJhbSB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBIHZhbHVlIHRvIHNldC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlKFxcclxcbiAgZWxtOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcsXFxyXFxuICB2YWx1ZT86IHN0cmluZyB8IG51bWJlclxcclxcbik6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgfCB2b2lkIHtcXHJcXG4gIGlmICggaXNVbmRlZmluZWQoIHZhbHVlICkgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSggZWxtIClbIHByb3AgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBpZiAoICEgaXNOdWxsKCB2YWx1ZSApICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgZWxtLnN0eWxlWyBwcm9wIF0gPSBgJHsgdmFsdWUgfWA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBzdHlsZSB9IGZyb20gXCcuLi9zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ5bGUvc3R5bGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFNldHMgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBgZGlzcGxheWAgQ1NTIHZhbHVlIHRvIHRoZSBlbGVtZW50LlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSBlbG0gICAgIC0gQW4gZWxlbWVudCB0byBzZXQgYSBuZXcgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIHRvLlxcclxcbiAqIEBwYXJhbSBkaXNwbGF5IC0gQSBuZXcgYGRpc3BsYXlgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheSggZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbTogSFRNTEVsZW1lbnQsIGRpc3BsYXk6IHN0cmluZyApOiB2b2lkIHtcXHJcXG4gIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSggZWxtLCBcJ2Rpc3BsYXlcJywgZGlzcGxheSApO1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogRm9jdXNlcyB0aGUgcHJvdmlkZWQgZWxlbWVudCB3aXRob3V0IHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGxpbmcgdGhlIGFzY2VuZGFudCBlbGVtZW50LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBlbG0gLSBBbiBlbGVtZW50IHRvIGZvY3VzLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgZnVuY3Rpb24gZm9jdXMoIGVsbTogSFRNTEVsZW1lbnQgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIie1xcclxcbiAgZWxtWyAnc2V0QWN0aXZlJyBdICYmIGVsbVsgJ3NldEFjdGl2ZScgXSgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB8fCBlbG0uZm9jdXMoIHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9ICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZSB2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlbG0gIC0gQW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZW1lbnQuXFxyXFxuICogQHBhcmFtIGF0dHIgLSBBbiBhdHRyaWJ1dGUgdG8gZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtOiBFbGVtZW50LCBhdHRyOiBzdHJpbmcgKTogc3RyaW5nIHwgbnVsbCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGVsbS5nZXRBdHRyaWJ1dGUoIGF0dHIgKTtcXHJcXG59XFxyXFxuIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZWxlbWVudCBjb250YWlucyB0aGUgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNpZmllZCBjbGFzcyBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAtIEFuIGVsZW1lbnQgdG8gY2hlY2suXFxyXFxuICogQHBhcmFtIGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05hbWUgLSBBIGNsYXNzIG5hbWUgdGhhdCBtYXkgYmUgY29udGFpbmVkIGJ5IHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudCBjb250YWlucyB0aGUgY2xhc3MsIG9yIG90aGVyd2lzZSBgZmFsc2VgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2xhc3MoIGVsbTogRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQsIGNsYXNzTmFtZTogc3RyaW5nICk6IGJvb2xlYW4ge1xcclxcbiAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWlucyggY2xhc3NOYW1lICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIGEgRE9NUmVjdCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mIHRoZSBwcm92aWRlZCBlbGVtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0YXJnZXQgLSBBbiBlbGVtZW50LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gcmVjdCggdGFyZ2V0OiBFbGVtZW50ICk6IERPTVJlY3Qge1xcclxcbiAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSBcJy4uLy4uL2FycmF5XCc7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlbW92ZXMgdGhlIHByb3ZpZGVkIG5vZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zyb20gaXRzIHBhcmVudC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBub2RlcyAtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBIG5vZGUgb3Igbm9kZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gcmVtb3ZlKCBub2RlczogTm9kZSB8IE5vZGVbXSApOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBmb3JFYWNoKCBub2Rlcywgbm9kZSA9PiB7XFxyXFxuICAgIGlmICggbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUgJiYgbm9kZS5wYXJlbnROb2RlICkge1xcclxcbiAgICAgIG5vZGUucGFyZW50TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG59XFxyXFxuIiwiaW1wb3J0IHsgY2hpbGQgfSBmcm9tIFwnLi4vY2hpbGQvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoaWxkJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBQYXJzZXMgdGhlIHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm92aWRlZCBIVE1MIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gaHRtbCAtIEFuIEhUTUwgc3RyaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBwYXJzZS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gRWxlbWVudCBvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3VjY2Vzcywgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgZnVuY3Rpb24gcGFyc2VIdG1sPEUgZXh0ZW5kcyBIVE1MRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+KCBodG1sOiBzdHJpbmcgKTogRSB8IHVuZGVmaW5lZCB7XFxyXFxuICByZXR1cm4gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaWxkPEU+KCBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCBodG1sLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXCd0ZXh0L2h0bWxcJyApLmJvZHkgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIENhbGwgdGhlIGBwcmV2ZW50RGVmYXVsdCgpYCBvZiB0aGUgcHJvdmlkZWQgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGUgICAgICAgICAgICAgICAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBFdmVudCBvYmplY3QuXFxyXFxuICogQHBhcmFtIHN0b3BQcm9wYWdhdGlvbiAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25hbC4gV2hldGhlciB0byBzdG9wIHRoZSBldmVudCBwcm9wYWdhdGlvbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igbm90LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50KCBlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnQsIHN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZS5wcmV2ZW50RGVmYXVsdCgpO1xcclxcblxcclxcbiAgaWYgKCBzdG9wUHJvcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2F0aW9uICkge1xcclxcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcXHJcXG4gIH1cXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiIsIi8qKlxcclxcbiAqIFJldHVybnMgYW4gZWxlbWVudCB0aGF0IG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzIHRoZSBwcm92aWRlZCBzZWxlY3Rvci5cXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gcGFyZW50ICAgLSBBIHBhcmVudCBlbGVtZW50IHRvIHN0YXJ0IHNlYXJjaGluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJvbS5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIHF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyeS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBmb3VuZCBlbGVtZW50IG9yIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbGAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5PEUgZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZHMgRWxlbWVudCA9IEVsZW1lbnQ+KCBwYXJlbnQ6IEVsZW1lbnQgfCBEb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIHNlbGVjdG9yOiBzdHJpbmcgKTogRSB8IG51bGwge1xcclxcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJlbnQgJiYgcGFyZW50LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XFxyXFxufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gXCcuLi8uLi9hcnJheUxpaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1cm5zIGVsZW1lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0aGF0IG1hdGNoIHRoZSBwcm92aWRlZCBzZWxlY3Rvci5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAcGFyYW0gcGFyZW50ICAgLSBBIHBhcmVudCBlbGVtZW50IHRvIHN0YXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWFyY2hpbmcgZnJvbS5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0byBxdWVyeS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggbWF0Y2hlZCBlbGVtZW50cy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHF1ZXJ5QWxsPEUgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oIHBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEVsZW1lbnQgfCBEb2N1bWVudCwgc2VsZWN0b3I/OiBzdHJpbmcgKTogRVtdIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZXR1cm4gc2VsZWN0b3IgPyBzbGljZTxFPiggcGFyZW50LnF1ZXJ5U2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVjdG9yQWxsKCBzZWxlY3RvciApICkgOiBbXTtcXHJcXG59XFxyXFxuIiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IHRvZ2dsZUNsYXNzIH0gZnJvbSAnLi4vdG9nZ2xlQ2xhc3MvdG9nZ2xlQyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXNzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZW1vdmVzIGNsYXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzIGZyb20gdGhlIGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgLSBBbiBlbGVtZW50IHRvIHJlbW92ZSBjbGFzc2VzIGZyb20uXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBjbGFzc2VzIC0gQ2xhc3NlcyB0byByZW1vdmUuXFxyXFxuICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDbGFzcyggZWxtOiBFbGVtZW50LCBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gKTogdm9pZCB7XFxyXFxuICB0b2dnbGVDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3MoIGVsbSwgY2xhc3NlcywgZmFsc2UgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEV4dHJhY3RzIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgZXZlbnQgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlIC0gQW4gRXZlbnQgb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdGltZU9mKCBlOiBFdmVudCApOiBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHtcXHJcXG4gIHJldHVybiBlLnRpbWVTdGFtcDtcXHJcXG59IiwiaW1wb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogQXBwZW5kcyBgcHhgIHRvIHRoZSBwcm92aWRlZCBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyLlxcclxcbiAqIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywganVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgcmV0dXJucyBpdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB2YWx1ZSAtIEEgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIHRvIGFwcGVuZCBgcHhgIHRvLlxcclxcbiAqXFxyXFxuICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSBzdHJpbmcgd2l0aCB0aGUgQ1NTIHVuaXQuXFxyXFxuICovXFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiB1bml0KCB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nICk6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgcmV0dXJuIGlzU3RyaW5nKCB2YWx1ZSApID8gdmFsdWUgOiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBgJHsgdmFsdWUgfXB4YCA6IFwnXCc7XFxyXFxufVxcclxcbiIsIi8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBUaGUgcHJvamVjdCBjb2RlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQUk9KRUNUX0NPREUgPSAncyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGlkZSc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmVmaXguXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IERBVEFfQVRUUklCVVRFID0gYGRhdGEtJHsgUFJPSkVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ09ERSB9YDtcXHJcXG4iLCJpbXBvcnQgeyBQUk9KRUNUX0NPREUgfSBmcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibSAnLi4vLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcblxcclxcblxcclxcbi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHByb3ZpZGVkIGNvbmRpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gaXMgZmFsc3kuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gY29uZGl0aW9uIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lmIGZhbHN5LCBhbiBlcnJvciBpcyB0aHJvd24uXFxyXFxuICogQHBhcmFtIG1lc3NhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlICAgLSBPcHRpb25hbC4gQSBtZXNzYWdlIHRvIGRpc3BsYXkuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoIGNvbmRpdGlvbjogYW55LCBtZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2FnZT86IHN0cmluZyApOiB2b2lkIHtcXHJcXG4gIGlmICggISBjb25kaXRpb24gKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICB0aHJvdyBuZXcgRXJyb3IoIGBbJHsgUFJPSkVDVF9DT0RFIH1dICQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBtZXNzYWdlIHx8IFwnXCcgfWAgKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBjb25zdCB7IG1pbiwgbWF4LCBmbG9vciwgY2VpbCwgYWJzIH0gPSBNYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcXHJcXG4iLCJpbXBvcnQgeyBhYnMgfSBmcm9tIFwnLi4vbWF0aC9tYXRoXCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZGVkIDIgbnVtYmVycyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCBvciBub3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQHBhcmFtIHggICAgICAgLSBBIG51bWJlci5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIHkgICAgICAgLSBBbm90aGVyIG51bWJlciB0byBjb21wYXJlLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcGFyYW0gZXBzaWxvbiAtIEFuIGFjY3VyYWN5IHRoYXQgZGVmaW5lcyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcHJveGltYXRpb24uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgMiBudW1iZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGVxdWFsLCBvciBvdGhlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFwcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3hpbWF0ZWx5RXF1YWwoIHg6IG51bWJlciwgeTogbnVtYmVyLCBlcHNpbG9uOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyICk6IGJvb2xlYW4ge1xcclxcbiAgcmV0dXJuIGFicyggeCAtIHkgKSA8IGVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbG9uO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vbWF0aC9tYXRoJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tzIGlmIHRoZSBzdWJqZWN0IG51bWJlciBpcyBiZXR3ZWVuIGB4YCBhbmQgYHlgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBudW1iZXIgICAgLSBBIHN1YmplY3QgbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciB0byBjaGVjay5cXHJcXG4gKiBAcGFyYW0geCAgICAgICAgIC0gQSBtaW4gb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heCBudW1iZXIuXFxyXFxuICogQHBhcmFtIHkgICAgICAgICAtIEEgbWF4IG9yIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gbnVtYmVyLlxcclxcbiAqIEBwYXJhbSBleGNsdXNpdmUgLSBPcHRpb25hbC4gV2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRoZXIgdG8gZXhjbHVkZSBgeGAgb3IgYHlgLlxcclxcbiAqL1xcclxcbmV4cG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgZnVuY3Rpb24gYmV0d2VlbiggbnVtYmVyOiBudW1iZXIsIHg6IG51bWJlciwgeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciwgZXhjbHVzaXZlPzogYm9vbGVhbiApOiBib29sZWFuIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBtaW5pbXVtID0gbWluKCB4LCB5ICk7XFxyXFxuICBjb25zdCBtYXhpbXVtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IG1heCggeCwgeSApO1xcclxcbiAgcmV0dXJuIGV4Y2x1c2l2ZVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBtaW5pbXVtIDwgbnVtYmVyICYmIG51bWJlciA8IG1heGltdW1cXHJcXG4gICAgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWluaW11bSA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IG1heGltdW07XFxyXFxufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4iLCJpbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCcuLi9tYXRoL21hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDbGFtcHMgYSBudW1iZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG51bWJlciAtIEEgc3ViamVjdCBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHRvIGNoZWNrLlxcclxcbiAqIEBwYXJhbSB4ICAgICAgLSBBIG1pbiBvciBtYXggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlci5cXHJcXG4gKiBAcGFyYW0geSAgICAgIC0gQSBtaW4gb3IgbWF4IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgY2xhbXBlZCBudW1iZXIuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCggbnVtYmVyOiBudW1iZXIsIHg6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIHk6IG51bWJlciApOiBudW1iZXIge1xcclxcbiAgY29uc3QgbWluaW11JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gPSBtaW4oIHgsIHkgKTtcXHJcXG4gIGNvbnN0IG1heGltdW0gPSBtYXgoIHgsIHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICByZXR1cm4gbWluKCBtYXgoIG1pbmltdW0sIG51bWJlciApLCBtYXhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ211bSApO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIHRoZSBzaWduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvZiB0aGUgcHJvdmlkZWQgbnVtYmVyLlxcclxcbiAqXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4IC0gQSBudW1iZXIuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGAxYCBmb3IgcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aXZlIG51bWJlcnMsIGAtMWAgZm9yIG5lZ2F0aXZlIG51bWJlcnMsIG9yIGAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AgZm9yIGAwYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gc2lnbiggeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciApOiBudW1iZXIge1xcclxcbiAgcmV0dXJuICsoIHggPiAwICkgLSArKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeCA8IDAgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRm9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21hdHMgYSBzdHJpbmcuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3RyaW5nICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgc3RyaW5nIHRvIGZvcm1hdC5cXHJcXG4gKiBAcGFyYW0gcmVwbGFjZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyAtIEEgcmVwbGFjZW1lbnQgb3IgcmVwbGFjZW1lbnRzLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEByZXR1cm4gQSBmb3JtYXR0ZWQgc3RyaW5nLlxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgZnVuY3Rpb24gZm9ybWF0KCBzdHJpbmc6IHN0cmluZywgcmVwbGFjZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czogc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nIHtcXHJcXG4gIGZvckVhY2goIHJlcGxhY2VtZW50cywgcmVwbGFjZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiID0+IHtcXHJcXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoICclcycsIGAkeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZW1lbnQgfWAgKTtcXHJcXG4gIH0gKTtcXHJcXG5cXHJcXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBQYWRzIHRoZSBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpdGggMC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBudW1iZXIgLSBBIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdG8gcGFkLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBzdHJpbmcgLSBQYWRkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIG51bWJlci5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcGFkKCBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyOiBudW1iZXIgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBudW1iZXIgPCAxMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBgMCR7IG51bWJlciB9YCA6IGAkeyBudW1iZXIgfWA7XFxyXFxufVxcclxcbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJpbXBvcnQgeyBwYWQgfSBmcm9tIFwnLi4vcGFkL3BhZFwnO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBTdG9yZXMgdW5pcXVlIElEcy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBpZHM6IFJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybnMgYSBzZXF1ZW50aWFsIHVuaXF1ZSBJRCBhcyBcXCJ7IHByZWZpeCB9LXsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciB9XFwiLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHByZWZpeCAtIEEgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWZpeCBmb3IgdGhlIElELlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pcXVlSWQoIHByZWZpeDogc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AkeyBwcmVmaXggfSR7IHBhZCggKCBpZHNbIHByZWZpeCBdID0gKCBpZHNbIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaXggXSB8fCAwICkgKyAxICkgKSB9YDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEFueUZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXB0eSwgZm9yRWFjaCB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGFuIEV2ZW50VGFyZ2V0IG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiBhcnJheSB3aXRoIEV2ZW50VGFyZ2V0IG9iamVjdHMuXFxyXFxuICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxudHlwZSBFdmVudFRhcmdldHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdldFtdO1xcclxcblxcclxcbi8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRCaW5kZXIgb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIGJpbmQoIHRhcmdldDogRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250VGFyZ2V0cywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbnlGdW5jdGlvbiwgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiB2b2lkXFxyXFxuICB1bmJpbmQoIHRhcmdldDogRXZlbnRUYXJnZXQgfCBFdmVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXRbXSwgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s/OiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ255RnVuY3Rpb24gKTogdm9pZDtcXHJcXG4gIGRpc3BhdGNoPFQ+KCB0YXJnZXQ6IEV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudFRhcmdldCwgZXZlbnQ6IHN0cmluZywgZGV0YWlsPzogVCApOiB2b2lkO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGRlc3Ryb3koKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBwcm92aWRlIG1ldGhvZHMgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YnNjcmliZSBuYXRpdmUgZXZlbnRzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA0LjAuMFxcclxcbiAqIEBjb25zdHJ1Y3RvclxcclxcbiAqXFxyXFxuICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gQW4gRXZlbnRCaW5kZXIgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gRXZlbnRCaW5kZXIoKTogRXZlbnRCaW5kZXJPYmplY3Qge1xcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogU3RvcmVzIGFsbCBoYW5kbGVycyB0aGF0IGxpc3RlbiB0byBuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aXZlIGV2ZW50cy5cXHJcXG4gICAqIGBbIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGNhbGxiYWNrLCByZW1vdmVyIF1gXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVuZXJzOiBbIEV2ZW50VGFyZ2V0LCBzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsIEFueUZ1bmN0aW9uLCAoKSA9PiB2b2lkIF1bXSA9IFtdO1xcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxcclxcbiAgICogTGlzdGVucyB0byBuYXRpdmUgZXZlbnRzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIC0gYGRlc3Ryb3koKWAgY2FuIHVuc3Vic2NyaWJlIGFsbCBldmVudHMuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogLSBJbiBJRSwgbWVkaWFRdWVyeUxpc3QgZG9lcyBub3QgaW5oZXJpdCBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRUYXJnZXQsXFxyXFxuICAgKiAgIGFuZCBvbmx5IHN1cHBvcnRzIGRlcHJlY2F0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGBhZGRMaXN0ZW5lcmAgYW5kIGByZW1vdmVMaXN0ZW5lcmAuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi1VUy9kb2NzL1dlYi9BUEkvTWVkaWFRdWVyeUxpc3QvYWRkTGlzdGVuZXJcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldHMgIC0gQSB0YXJnZXQgZWxlbWVudCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSB3aW5kb3cgb2JqZWN0IG9yIHRoZSBkb2N1bWVudCBvYmplY3QuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGV2ZW50cyAgIC0gQW4gZXZlbnQgb3IgZXZlbnRzIHRvIGxpc3RlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdG8uXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbi5cXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zICAtIE9wdGlvbmFsLiBUaGUgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMgdG8gcGFzcyB0byB0aGUgYGFkZEV2ZW50TGlzdGVuZXJgIGZ1bmN0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gYmluZChcXHJcXG4gICAgdGFyZ2V0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEV2ZW50VGFyZ2V0cyxcXHJcXG4gICAgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIGNhbGxiYWNrOiBBbnlGdW5jdGlvbixcXHJcXG4gICAgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9uc1xcclxcbiAgKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBmb3JFYWNoRXZlbnQoIHRhcmdldHMsIGV2ZW50cywgKCB0YXJnZXQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudCwgbmFtZXNwYWNlICkgPT4ge1xcclxcbiAgICAgIGNvbnN0IGlzRXZlbnRUYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyZ2V0ID0gJ2FkZEV2ZW50TGlzdGVuZXInIGluIHRhcmdldDtcXHJcXG4gICAgICBjbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgcmVtb3ZlciA9IGlzRXZlbnRUYXJnZXRcXHJcXG4gICAgICAgID8gdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoIHRhcmdldCwgZXZlbnQsIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaywgb3B0aW9ucyApXFxyXFxuICAgICAgICA6IHRhcmdldFsgJ3JlbW92ZUxpc3RlbmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicicgXS5iaW5kKCB0YXJnZXQsIGNhbGxiYWNrICk7XFxyXFxuXFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRXZlbnRUYXJnZXQgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lciggZXZlbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjYWxsYmFjaywgb3B0aW9ucyApIDogdGFyZ2V0WyAnYWRkTGlzdGVuZXInIF0oIGMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjayApO1xcclxcbiAgICAgIGxpc3RlbmVycy5wdXNoKCBbIHRhcmdldCwgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBuYW1lc3BhY2UsIGNhbGxiYWNrLCByZW1vdmVyIF0gKTtcXHJcXG4gICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGV2ZW50IGhhbmRsZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHRoZSB3aW5kb3cgb2JqZWN0IG9yIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIGV2ZW50cyAgIC0gQW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50IG5hbWUgb3IgbmFtZXMgdG8gcmVtb3ZlLlxcclxcbiAgICogQHBhcmFtIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjayAtIE9wdGlvbmFsLiBTcGVjaWZ5IHRoZSBjYWxsYmFjayB0byByZW1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB1bmJpbmQoIHRhcmdldHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudFRhcmdldHMsIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaz86IEFueUZ1bmN0aW9uICk6IHZvaWQge1xcclxcbiAgICBmb3JFYWNoRXZlbnQoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXRzLCBldmVudHMsICggdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlICkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKCBsaXN0ZW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgPT4ge1xcclxcbiAgICAgICAgaWYgKCBsaXN0ZW5lclsgMCBdID09PSB0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0XFxyXFxuICAgICAgICAgICYmIGxpc3RlbmVyWyAxIF0gPT09IGV2ZW50XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgICAmJiBsaXN0ZW5lclsgMiBdID09PSBuYW1lc3BhY2VcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgICAgICYmICggISBjYWxsYmFjayB8fCBsaXN0ZW5lclsgMyBdID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY2FsbGJhY2sgKVxcclxcbiAgICAgICAgKSB7XFxyXFxuICAgICAgICAgIGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5lclsgNCBdKCk7XFxyXFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBEaXNwYXRjaGVzIGEgY3VzdG9tIGV2ZW50IG9mIHRoZSB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBBbiBldmVudCB0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0LlxcclxcbiAgICogQHBhcmFtIHR5cGUgICAtIEFuIGV2ZW50IHR5cGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGRldGFpbCAtIE9wdGlvbmFsLiBUaGUgYGRldGFpbGAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCBvZiB0aGUgZXZlbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQW4gZXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF0Y2g8VD4oIHRhcmdldDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZywgZGV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FpbD86IFQgKTogQ3VzdG9tRXZlbnQge1xcclxcbiAgICBsZXQgZTogQ3VzdG9tRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250O1xcclxcbiAgICBjb25zdCBidWJibGVzID0gdHJ1ZTtcXHJcXG5cXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlmICggdHlwZW9mIEN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nICkge1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlID0gbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGJ1YmJsZXMsIGRldGFpbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIGUgPSBkb2N1bWVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY3JlYXRlRXZlbnQoICdDdXN0b21FdmVudCcgKTtcXHJcXG4gICAgICBlLmluaXRDdXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9tRXZlbnQoIHR5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoIGUgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogSXRlcmF0ZXMgb3ZlciBlYWNoIHRhcmdldCBhbmQgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoXFxyXFxuICAgIHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzOiBFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tdLFxcclxcbiAgICBpdGVyYXRlZTogKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQgKSA9PiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZFxcclxcbiAgKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIHRhcmdldHMsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQgPT4ge1xcclxcbiAgICAgIHRhcmdldCAmJiBmb3JFYWNoKCBldmVudHMsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidmVudHMgPT4ge1xcclxcbiAgICAgICAgZXZlbnRzLnNwbGl0KCAnICcgKS5mb3JFYWMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCggZXZlbnROUyA9PiB7XFxyXFxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZW50TlMuc3BsaXQoICcuJyApO1xcclxcbiAgICAgICAgICBpdGVyYXRlZSggdGFyZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgZnJhZ21lbnRbIDAgXSwgZnJhZ21lbnRbIDEgXSApO1xcclxcbiAgICAgICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVycy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0ZW5lcnMuZm9yRWFjaCggZGF0YSA9PiB7IGRhdGFbIDQgXSgpIH0gKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGVtcHR5KCBsaXN0ZW5lcnMgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4ge1xcclxcbiAgICBiaW5kLFxcclxcbiAgICB1bmJpbmQsXFxyXFxuICAgIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXRjaCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gIH07XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJleHBvcnQgY29uc3QgRVZFTlRfTU9VTlRFRCAgICAgICAgICAgID0gXCdtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFQURZICAgICAgICAgICAgICA9ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIncmVhZHknO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9NT1ZFICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgID0gJ21vdmUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9NT1ZFRCAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgID0gJ21vdmVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQ0xJQ0sgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgICA9ICdjbGljayc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FDVElWRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgICAgICAgPSAnYWN0aXZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJOQUNUSVZFICAgICAgICAgICA9ICdpbmFjdGl2ZSc7XFxyXFxuZXhwb3J0IGNvbnN0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFVkVOVF9WSVNJQkxFICAgICAgICAgICAgPSAndmlzaWJsZSc7XFxyXFxuZXhwb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjb25zdCBFVkVOVF9ISURERU4gICAgICAgICAgICAgPSAnaGlkZGVuJztcXHJcXG5leCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IGNvbnN0IEVWRU5UX1JFRlJFU0ggICAgICAgICAgICA9ICdyZWZyZXNoJzsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1VQREFURUQgICAgICAgICAgICA9ICd1cGQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFU0laRSAgICAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPSAncmVzaXplJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUkVTSVpFRCAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICA9ICdyZXNpemVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBRyAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgICA9ICdkcmFnJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBR0ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSU5HICAgICAgICAgICA9ICdkcmFnZ2luZyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVF9EUkFHR0VEICAgICAgICAgICAgPSAnZHJhZ2dlZCc7XFxyXFxuZXhwb3J0IGNvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCBFVkVOVF9TQ1JPTEwgICAgICAgICAgICAgPSAnc2Nyb2xsJztcXHJcXG5leHBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGNvbnN0IEVWRU5UX1NDUk9MTEVEICAgICAgICAgICA9ICdzY3JvbGxlZCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmV4cG9ydCBjb25zdCBFVkVOVF9PVkVSRkxPVyAgICAgICAgICAgPSAnb3ZlcmZsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm93JztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfREVTVFJPWSAgICAgICAgICAgID0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidkZXN0cm95JztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQVJST1dTX01PVU5URUQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICA9ICdhcnJvd3M6bW91bnRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FSIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlJPV1NfVVBEQVRFRCAgICAgPSAnYXJyb3dzOnVwZGF0ZWQnO1xcclxcbmV4cG9ydCBjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uc3QgRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEID0gJ3BhZ2luYXRpb246bW91biIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQgPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3BhZ2luYXRpb246dXBkYXRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX05BViIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJJR0FUSU9OX01PVU5URUQgPSAnbmF2aWdhdGlvbjptb3VudGVkJztcXHJcXG5leHBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IGNvbnN0IEVWRU5UX0FVVE9QTEFZX1BMQVkgICAgICA9ICdhdXRvcGxheTpwbGEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgICA9ICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXV0b3BsYXk6cGxheWluZyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QTEEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiWV9QQVVTRSAgICAgPSAnYXV0b3BsYXk6cGF1c2UnO1xcclxcbmV4cG9ydCBjb25zdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRVZFTlRfTEFaWUxPQURfTE9BREVEICAgID0gJ2xhenlsb2FkOmxvYWRlZCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKiBAaW50ZXJuYWwgKi9cXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNMSURFX0tFWURPV04gICAgID0gJ3NrJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNISUZURUQgICAgICAgICAgID0gJ3NoJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VORF9JTkRFWF9DSEFOR0VEID0gXCdlaVwnO1xcclxcbiIsImltcG9ydCB7IEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJOVF9ERVNUUk9ZIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0aW9uLCBFdmVudE1hcCB9IGZyb20gJy4uLy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHksIGFzc2lnbiwgaXNBcnJheSwgc2wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWNlLCB0b0FycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IEUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidmVudEJpbmRlciwgRXZlbnRCaW5kZXJPYmplY3QgfSBmcm9tICcuLi9FdmVudEJpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5kZXIvRXZlbnRCaW5kZXInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRJbnRlcmZhY2Ugb2JqZWN0LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWN0IGV4dGVuZHMgRXZlbnRCaW5kZXJPYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0IHtcXHJcXG4gIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSywgY2FsbGJhY2s6IEV2ZW50TWFwWyBLIF0gKTogdm9pZDtcXHJcXG4gIG9uKCBldmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2b2lkO1xcclxcbiAgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6IEsgfCBLW10gfCBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkO1xcclxcbiAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssIC4uLmFyZ3M6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQYXJhbWV0ZXJzPEV2ZW50TWFwWyBLIF0+ICk6IHZvaWRcXHJcXG4gIGVtaXQoIGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSApOiB2b2lkO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKiBAaW50ZXJuYWwgKi9cXHJcXG4gIGJ1czogRG9jdW1lbnRGcmFnbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb25zdHJ1Y3RvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBpbnRlcmZhY2UgZm9yIGludGVybmFsIGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgbmF0aXZlIGV2ZW50cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAY29uc3RydWN0b3JcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGxlY3Rpb24gb2YgaW50ZXJmYWNlIGZ1bmN0aW9ucy5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGU/OiBTcGxpZGUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEV2ZW50SW50ZXJmYWNlT2JqZWN0IHtcXHJcXG4gIC8qKlxcclxcbiAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgaW50ZXJuYWwgZXZlbnRzLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFByb3ZpZGUgdGhlIFNwbGlkZSBpbnN0YW5jZSB0byBzaGFyZSB0aGUgYnVzLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgY29uc3QgYnVzID0gU3BsaWRlID8gU3BsaWRlLmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudC5idXMgOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBBbiBldmVudCBiaW5kZXIgb2JqZWN0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgY29uc3QgYmluZGVyID0gRXZlbnRCaW5kZXIoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gYW4gaW50ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50IG9yIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cyAgIC0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcy4gVXNlIGEgZG90KC4pIHRvIGFkZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb24oIGV2ZW50czogc3RyaW5nIHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZ1tdLCBjYWxsYmFjazogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBiaW5kZXIuYmluZCggYnVzLCB0b0FycmF5KCBldmVudHMgKS5qb2luKCAnICcgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGUgPT4ge1xcclxcbiAgICAgIGNhbGxiYWNrLmFwcGx5KCBjYWxsYmFjaywgaXNBcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkoIGUuZGV0YWlsICkgPyBlLmRldGFpbCA6IFtdICk7XFxyXFxuICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRyaWdnZXJzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsYmFjayBmdW5jdGlvbnMuXFxyXFxuICAgKiBUaGlzIGFjY2VwdHMgYWRkaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYWwgYXJndW1lbnRzIGFuZCBwYXNzZXMgdGhlbSB0byBjYWxsYmFja3MuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBlbWl0KCBldmVudDogc3RyaW5nICk6IHZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC1wYXJhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gICAgYmluZGVyLmRpc3BhdGNoKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnVzLCBldmVudCwgc2xpY2UoIGFyZ3VtZW50cywgMSApICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgaWYgKCBTcGxpZGUgKSB7XFxyXFxuICAgIFNwbGlkZS5ldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicub24oIEVWRU5UX0RFU1RST1ksIGJpbmRlci5kZXN0cm95ICk7XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgcmV0dXJuIGFzc2lnbiggYmluZGVyLCB7XFxyXFxuICAgIGJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsXFxyXFxuICAgIG9uLFxcclxcbiAgICBvZmY6IGFwcGx5KCBiaW5kZXIudW5iaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCwgYnVzICksXFxyXFxuICAgIGVtaXQsXFxyXFxuICB9ICk7XFxyXFxufSIsImltcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBtaW4sIHJhZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHVybmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgdmFsdWUgb2YgdGhlIFJlcXVlc3RJbnRlcnZhbC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFJlcXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0SW50ZXJ2YWxJbnRlcmZhY2Uge1xcclxcbiAgc3RhcnQoIHJlc3VtZT86IGJvb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFuICk6IHZvaWQ7XFxyXFxuICBwYXVzZSgpOiB2b2lkO1xcclxcbiAgcmV3aW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpOiB2b2lkO1xcclxcbiAgY2FuY2VsKCk6IHZvaWQ7XFxyXFxuICBzZXQoIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbDogbnVtYmVyICk6IHZvaWQ7XFxyXFxuICBpc1BhdXNlZCgpOiBib29sZWFuOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVxdWVzdHMgaW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxpa2UgdGhlIG5hdGl2ZSBgc2V0SW50ZXJ2YWwoKWAgd2l0aCB1c2luZyBgcmVxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Vlc3RBbmltYXRpb25GcmFtZWAuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gaW50ZXJ2YWwgICAtIFRoZSBpbnRlcnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWwgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxcclxcbiAqIEBwYXJhbSBvbkludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbCAtIFRoZSBjYWxsYmFjayBmaXJlZCBvbiBldmVyeSBpbnRlcnZhbC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIG9uVXBkYXRlICAgLSBPcHRpb25hbC4gQ2FsbGVkIG9uIGV2ZXJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhbmltYXRpb24gZnJhbWUsIHRha2luZyB0aGUgcHJvZ3Jlc3MgcmF0ZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGxpbWl0ICAgICAgLSBPcHRpb25hbC4gTGltaXRzIHRoZSBudW1iZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIG9mIGludGVydmFsLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBSZXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzdEludGVydmFsKFxcclxcbiAgaW50ZXJ2YWw6IG51bWJlcixcXHJcXG4gIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ludGVydmFsOiAoKSA9PiB2b2lkLFxcclxcbiAgb25VcGRhdGU/OiAoIHJhdGU6IG51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIgKSA9PiB2b2lkLFxcclxcbiAgbGltaXQ/OiBudW1iZXJcXHJcXG4pOiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVzdEludGVydmFsSW50ZXJmYWNlIHtcXHJcXG4gIGNvbnN0IHsgbm93IH0gPSBEYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHRpbWUgd2hlbiB0aGUgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsIHN0YXJ0cy5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHN0YXJ0VGltZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGN1cnJlbnQgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2dyZXNzIHJhdGUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCByYXRlID0gMDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBhbmltYXRpb24gZnJhbWUgSUQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBsZXQgaWQ6IG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnRlcnZhbCBpcyBjdXJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGx5IHBhdXNlZCBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gdHJ1ZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGxvb3AgY291bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLiBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgYGxpbWl0YCBhcmd1bWVudCBpcyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdmlkZWQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjb3VudCA9IDA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgdXBkYXRlIGZ1bmN0aW9uIGNhbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qgb24gZXZlcnkgYW5pbWF0aW9uIGZyYW1lLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgcGF1c2VkICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICByYXRlID0gaW50ZXJ2YWwgPyBtaW4oICggbm93KCkgLSBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lICkgLyBpbnRlcnZhbCwgMSApIDogMTtcXHJcXG4gICAgICBvblVwZGF0ZSAmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25VcGRhdGUoIHJhdGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIHJhdGUgPj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDEgKSB7XFxyXFxuICAgICAgICBvbkludGVydmFsKCk7XFxyXFxuICAgICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnRUaW1lID0gbm93KCk7XFxyXFxuXFxyXFxuICAgICAgICBpZiAoIGxpbWl0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiArK2NvdW50ID49IGxpbWl0ICkge1xcclxcbiAgICAgICAgICByZXR1cm4gcGF1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKCk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZCA9IHJhZiggdXBkYXRlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFN0YXJ0cyB0aGUgaW50ZXJ2YWwuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSByZXN1bWUgLSBPcHRpb25hbC4gV2hldGhlciB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzdW1lIHRoZSBwYXVzZWQgcHJvZ3Jlc3Mgb3Igbm90LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gc3RhcnQoIHJlc3VtZT86IGJvb2xlYW4gKTogdm9pZCB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXN1bWUgfHwgY2FuY2VsKCk7XFxyXFxuICAgIHN0YXJ0VGltZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBub3coKSAtICggcmVzdW1lID8gcmF0ZSAqIGludGVydmFsIDogMCApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcGF1c2VkICAgID0gZmFsc2U7XFxyXFxuICAgIGlkICAgICAgICA9IHJhZiggdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBQYXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzIHRoZSBpbnRlcnZhbC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcGF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlKCk6IHZvaWQge1xcclxcbiAgICBwYXVzZWQgPSB0cnVlO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV3aW5kcyB0aGUgY3VycmVudCBwcm9ncicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3MuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHN0YXJ0VGltZSA9IG5vdygpO1xcclxcbiAgICByYXRlICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gMDtcXHJcXG5cXHJcXG4gICAgaWYgKCBvblVwZGF0ZSApIHtcXHJcXG4gICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25VcGRhdGUoIHJhdGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxcclxcbiAgICogQ2FuY2VscyB0aGUgaW50ZXJ2YWwuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XFxyXFxuICAgIGlkICYmIGNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xBbmltYXRpb25GcmFtZSggaWQgKTtcXHJcXG4gICAgcmF0ZSAgID0gMDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGlkICAgICA9IDA7XFxyXFxuICAgIHBhdXNlZCA9IHRydWU7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTZXRzIG5ldyBpbnRlcnZhbCBkdXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHRpbWUgLSBUaGUgaW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VydmFsIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHNldCggdGltZTogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJ2YWwgPSB0aW1lO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQ2hlY2tzIGlmIHRoZSBpbnRlcnZhbCBpcyBwYXVzZWQgb3Igbm90LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgaW50ZXJ2YWwgaXMgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlZCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBpc1BhdXNlZCgpOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIHBhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIHJld2luZCxcXHJcXG4gICAgcGF1c2UsXFxyXFxuICAgIGNhbmNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIHNldCxcXHJcXG4gICAgaXNQYXVzZWQsXFxyXFxuICB9O1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG59XFxyXFxuIiwiaW1wb3J0IHsgaW5jbHVkZXMsIHRvQXJyYXkgfSBmcm9tICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJmYWNlIGZvciB0aGUgU3RhdGUgb2JqZWN0LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlT2JqZWN0IHtcXHJcXG4gIHNldCggc3RhdGU6IG51bWJlciApOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGlzKCBzdGF0ZXM6IG51bWJlciB8IG51bWJlcltdICk6IGJvb2xlYW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZnVuY3Rpb24gcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZGluZyBhIHN1cGVyIHNpbXBsZSBzdGF0ZSBzeXN0ZW0uXFxyXFxuICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIGluaXRpYWxTdGF0ZSAtIFNwZWNpZmllcyB0aGUgaW5pdGlhbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFN0YXRlKCBpbml0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lhbFN0YXRlOiBudW1iZXIgKTogU3RhdGVPYmplY3Qge1xcclxcbiAgLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUgPSBpbml0aWFsU3RhdGU7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRzIGEgbmV3IHN0YXRlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgLSBBIG5ldyBzdGF0ZSB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNldCggdmFsdWU6IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgc3RhdGUgPSB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIGN1cnJlbnQgc3RhdGUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgb25lLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc3RhdGVzIC0gQSBzdGF0ZSB0byBjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY2suXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJyZW50IHN0YXRlIGlzIHRoZSBwcm92aWRlZCBvbmUuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBpcyggc3RhdGVzOiBudW1iZXIgfCBudW1iZXJbXSApOiBibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGVhbiB7XFxyXFxuICAgIHJldHVybiBpbmNsdWRlcyggdG9BcnJheSggc3RhdGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLCBzdGF0ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHsgc2V0LCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcXHJcXG59XFxyXFxuIiwiY29uc3QgQVJST1cgPSBcJ0Fycm93XCc7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUICA9IGAkeyBBUlJPVyB9TGVmdGA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVCA9IGAkeyBBUlJPVyB9UmlnaHRgO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3QgQVJST1dfVVAgICAgPSBgJHsgQVJST1cgfVVwYDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IEFSUk9XX0RPV04gID0gYCR7IEFSUk9XIH1Eb3duYDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLyoqXFxyXFxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgTFRSID0gJ2x0cic7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgc2xpZGVzIGZyb20gcmlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRvIGxlZnQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFJUTCA9ICdydGwnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBpbiBhIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImwuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFRUQiA9ICd0dGInO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4iLCJpbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlQsIEFSUk9XX1VQIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IFJUTCwgVFRCIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpcmVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpb25zJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5cXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERpcmVjdGlvbiBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb21wb25lbnQge1xcclxcbiAgcmVzb2x2ZSggcHJvcDogc3RyaW5nLCBheGlzT25sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInk/OiBib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpb25zWydkaXJlY3Rpb24nXSApOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xcclxcbiAgb3JpZW50KCB2YWx1ZTogbnVtYmVyICk6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB0cmFuc2xhdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWFwIGZvciBkaXJlY3Rpb25zLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBPUklFTlRBVElPTl9NQVAgPSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgd2lkdGggICAgIDogWyAnaGVpZ2h0JyBdLFxcclxcbiAgbGVmdCAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICA6IFsgJ3RvcCcsICdyaWdodCcgXSxcXHJcXG4gIHJpZ2h0ICAgICA6IFsgJ2JvdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0b20nLCAnbGVmdCcgXSxcXHJcXG4gIHggICAgICAgICA6IFsgJ3knIF0sXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibiAgWCAgICAgICAgIDogWyAnWScgXSxcXHJcXG4gIFkgICAgICAgICA6IFsgJ1gnIF0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgQXJyb3dMZWZ0IDogWyBBUlJPV19VUCwgQVJST1dfUklHSFQgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBBcnJvd1JpZ2h0OiBbIEFSUk9XX0RPV04sIEFSUk9XX0xFRlQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10sXFxyXFxufTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGF0IGFic29yYnMgdGhlIGRpZmZlcmVuY2UgYW1vbmcgZGlyZWN0aW9ucy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIERpcmVjdGlvbiBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgZnVuY3Rpb24gRGlyZWN0aW9uKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogRGlyZWN0aW9uQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCB7XFxyXFxuICAvKipcXHJcXG4gICAqIFJlc29sdmVzIHRoZSBwcm92aWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgcHJvcGVydHkgbmFtZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAtIEEgcHJvcGVydHkgbmFtZSB0byB0cmFuc2xhdGUuXFxyXFxuICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIGF4aXNPbmx5ICAtIE9wdGlvbmFsLiBJZiBgdHVyZWAsIHJldHVybnMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzYW1lIHByb3BlcnR5IGZvciBMVFIgYW5kIFJUTC5cXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlyZWN0aW9uIC0gT3B0aW9uYWwuIFNwZWNpZnkgdGhlIGRpcmVjdGlvbi4gVGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZWZhdWx0IHZhbHVlIGlzIHRoZSBgZGlyZWN0aW9uYCBvcHRpb24uXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBmdW5jdGlvbiByZXNvbHZlKCBwcm9wOiBzdHJpbmcsIGF4aXNPbmx5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIj86IGJvb2xlYW4sIGRpcmVjdGlvbj86IE9wdGlvbnNbJ2RpcmVjdGlvbiddICk6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJpbmcge1xcclxcbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGlyZWN0aW9uO1xcclxcbiAgICBjb25zdCBpbmRleCA9IGRpcmVjdGlvbiA9PT0gUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTCAmJiAhIGF4aXNPbmx5ID8gMSA6IGRpcmVjdGlvbiA9PT0gVFRCID8gMCA6IC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIE9SSUVOVEFUSU9OX01BUFsgcHJvcCBdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBPUklFTlRBVElPTl9NQVBbIHByb3AgXVsgaW5kZXggXVxcclxcbiAgICAgIHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm9wLnJlcGxhY2UoIC93aWR0aHxsZWZ0fHJpZ2h0L2ksICggbWF0Y2gsIG9mZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQgKSA9PiB7XFxyXFxuICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IE9SSUVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVElPTl9NQVBbIG1hdGNoLnRvTG93ZXJDYXNlKCkgXVsgaW5kZXggXSB8fCBtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2g7XFxyXFxuICAgICAgICByZXR1cm4gb2Zmc2V0ID4gMCA/IHJlcGxhY2VtZW50LmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGFyQXQoIDAgKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoIDEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiByZXBsYWNlbWVudDtcXHJcXG4gICAgICB9ICk7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBPcmllbnRzIHRoZSB2YWx1ZSB0b3dhcmRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgY3VycmVudCBkaXJlY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSB2YWx1ZSAtIEEgdmFsdWUgdG8gb3JpZW50LlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIFRoZSBvcmllbnRlZCB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIG9yaWVudCggdmFsdWU6IG51bWJlciApOiBudW1iZXIge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIHZhbHVlICogKCBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUlRMID8gMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiAtMSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlc29sdmUsXFxyXFxuICAgIG9yaWVudCxcXHJcXG4gIH07XFxyXFxufVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24iLCJleHBvcnQgY29uc3QgUk9MRSAgICAgID0gXCdyb2xlXCc7XFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJydCBjb25zdCBUQUJfSU5ERVggPSAndGFiaW5kZXgnO1xcclxcbmV4cG9ydCBjb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgRElTQUJMRUQgID0gJ2Rpc2FibGVkJztcXHJcXG5cXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEFSSUFfUFJFRklYICAgICAgICAgID0gJ2FyaWEtJztcXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSSUFfQ09OVFJPTFMgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1jb250cm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0NVUlJFTlQgICAgICAgICA9IGAkeyBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQV9QUkVGSVggfWN1cnJlbnRgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX1NFTEVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCAgICAgICAgPSBgJHsgQVJJQV9QUkVGSVggfXNlbGVjdGVkYDtcXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGNvbnN0IEFSSUFfTEFCRUwgICAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9bGFiZWxgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0xBQkVMTEVEQlkgICAgICA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgJHsgQVJJQV9QUkVGSVggfWxhYmVsbGVkYnlgO1xcclxcbmV4cG9ydCBjb25zdCBBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQV9ISURERU4gICAgICAgICAgPSBgJHsgQVJJQV9QUkVGSVggfWhpZGRlbmA7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBjb25zdCBBUklBX09SSUVOVEFUSU9OICAgICA9IGAkeyBBUklBX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkVGSVggfW9yaWVudGF0aW9uYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9ST0xFREUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0NSSVBUSU9OID0gYCR7IEFSSUFfUFJFRklYIH1yb2xlZGVzY3JpcHRpb25gO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3QgQVJJQV9MSVZFICAgICAgICAgICAgPSBgJHsgQVJJQV9QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYIH1saXZlYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9CVVNZICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgID0gYCR7IEFSSUFfUFJFRklYIH1idXN5YDtcXHJcXG5leHBvcnQgY29uc3QgQVJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FfQVRPTUlDICAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1hdG9taWNgO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBUaGUgYXJyYXkgd2l0aCBhbGwgYXR0cmlidXRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gcmVtb3ZlIGxhdGVyLlxcclxcbiAqIE5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCBpbiB0aGlzLlxcclxcbiAqIE5vdGUgdGhhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVtb3ZpbmcgYGFyaWEtbGl2ZWAgZGlzYWJsZXMgdGhlIGxpdmUgcmVnaW9uIHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpbCB0aGUgcGFnZSByZWxvYWQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEFMTF9BVFRSSUJVVEVTID0gWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIFJPTEUsXFxyXFxuICBUQUJfSU5ERVgsXFxyXFxuICBESVNBQkxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsXFxyXFxuICBBUklBX0NPTlRST0xTLFxcclxcbiAgQVJJQV9DVVJSRU5ULFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIEFSSUFfTEFCRUwsXFxyXFxuICBBUklBX0xBQkVMTEVEQlksXFxyXFxuICBBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQV9ISURERU4sXFxyXFxuICBBUklBX09SSUVOVEFUSU9OLFxcclxcbiAgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUk9MRURFU0NSSVBUSU9OLFxcclxcbl07XFxyXFxuIiwiaW1wb3J0IHsgUFJPSkVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRfQ09ERSB9IGZyb20gJy4vcHJvamVjdCc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBwcmVmaXggZm9yIGNsYXNzZXMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuMS4wXFxyXFxuICovXFxyXFxuY29uc3QgQ0xBU1NfUFJFRklYID0gYCR7IFBST0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUNUX0NPREUgfV9fYDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgcHJlZml4IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Igc3RhdHVzIGNsYXNzZXMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4xLjBcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICovXFxyXFxuY29uc3QgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICdpcy0nOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBbGwgY2xhc3NlcyBhcyBjb25zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19ST09UICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgID0gUFJPSkVDVF9DT0RFO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19UUkFDSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9dHJhY2tgO1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ0xBU1NfTElTVCAgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWxpc3RgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19TTElERSAgICAgICAgICAgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCR7IENMQVNTX1BSRUZJWCB9c2xpZGVgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xPTkUgICAgICAgICAgID0gYCR7IENMQVNTX1NMSURFIH0tLWNsb25lYDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0IGNvbnN0IENMQVNTX0NPTlRBSU5FUiAgICAgICA9IGAkeyBDTEFTU19TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xJREUgfV9fY29udGFpbmVyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQVJST1dTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWFycm93c2A7XFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19BUlJPVyAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9YXJyb3dgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPV19QUkVWICAgICAgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYCR7IENMQVNTX0FSUk9XIH0tLXByZXZgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVJST1dfTkVYVCAgICAgID0gYCR7IENMQVNTX0FSUk9XIH0tLW5leHRgO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgQ0xBU1NfUEFHSU5BVElPTiAgICAgID0gYCR7IENMQVNTX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkVGSVggfXBhZ2luYXRpb25gO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QQUdJTkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTl9QQUdFID0gYCR7IENMQVNTX1BBR0lOQVRJT04gfV9fcGFnZWA7XFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBjb25zdCBDTEFTU19QUk9HUkVTUyAgICAgICAgPSBgJHsgQ0xBU1NfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZJWCB9cHJvZ3Jlc3NgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QUk9HUkVTU19CJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSICAgID0gYCR7IENMQVNTX1BST0dSRVNTIH1fX2JhcmA7XFxyXFxuZXhwb3J0IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBDTEFTU19UT0dHTEUgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH10bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFX1BMQVkgICAgID0gYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYickeyBDTEFTU19UT0dHTEUgfV9fcGxheWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUT0dHTEVfUEFVU0UgICAgPSBgJHsgQ0xBU1NfVE9HR0xFIH1fX3BhdXNlYDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXhwb3J0IGNvbnN0IENMQVNTX1NQSU5ORVIgICAgICAgICA9IGAkeyBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYIH1zcGlubmVyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfU1IgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXNyYDtcXHJcXG5leHBvcnQgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0lOSVRJQUxJWkVEICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9aW5pdGlhbGl6ZWRgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BQ1RJVkUgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfWFjdGl2ZWA7XFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBjb25zdCBDTEFTU19QUkVWICAgICAgICAgICAgPSBgJHsgU1RBVFVTX0NMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggfXByZXZgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19ORVhUICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW5leHRgO1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgY29uc3QgQ0xBU1NfVklTSUJMRSAgICAgICAgID0gYCR7IFNUQVRVU19DTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfUFJFRklYIH12aXNpYmxlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTE9BREknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkcgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1sb2FkaW5nYDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0ZPQ1VTX0lOICAgICAgICA9IGAkeyBTVEFUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VTX0NMQVNTX1BSRUZJWCB9Zm9jdXMtaW5gO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfT1ZFUkZMT1cgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmxvd2A7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFycmF5IHdpdGggYWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGF0dXMgY2xhc3NlcyBleGNlcHQgZm9yIGBpcy1pbml0aWFsaXplZGAuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTVEFUVVNfQ0xBU1NFUyA9IFtcXHJcXG4gIENMQVNTX0FDVElWRSxcXHJcXG4gIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19WSVNJQkxFLFxcclxcbiAgQ0xBU1NfUFJFVixcXHJcXG4gIENMQVNTX05FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1hULFxcclxcbiAgQ0xBU1NfTE9BRElORyxcXHJcXG4gIENMQVNTX0ZPQ1VTX0lOLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIENMQVNTX09WRVJGTE9XLFxcclxcbl07XFxyXFxuXFxyXFxuLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgZm9yIGVsZW1lbnRzIHRoYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZSBkeW5hbWljYWxseSBjcmVhdGVzLlxcclxcbiAqXFxyXFxuICogQHNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU0VTID0geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHNsaWRlICAgICA6IENMQVNTX1NMSURFLFxcclxcbiAgY2xvbmUgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICA6IENMQVNTX0NMT05FLFxcclxcbiAgYXJyb3dzICAgIDogQ0xBU1NfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXUyxcXHJcXG4gIGFycm93ICAgICA6IENMQVNTX0FSUk9XLFxcclxcbiAgcHJldiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBuZXh0ICAgICAgOiBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dfTkVYVCxcXHJcXG4gIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOLFxcclxcbiAgcGFnZSAgICAgIDogQ0xBU1NfUEFHSU5BVElPTl9QQUdFLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNwaW5uZXIgICA6IENMQVNTX1NQSU5ORVIsXFxyXFxufTtcXHJcXG4iLCIvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICogVGhlIHBvd2VyIG9mIHRoZSBmcmljdGlvbi5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgRlJJQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OID0gNTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJZiB0aGUgdXNlciBzdG9wcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZHJhZ2dpbmcgZm9yIHRoaXMgZHVyYXRpb24gd2l0aCBrZWVwaW5nIHRoZSBwb2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlciBkb3duLCB1cGRhdGVzIHRoZSBiYXNlIGNvb3JkIGFuZCB0aW1lLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTE9HX0lOVEVSVkFMID0gMjAwO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFN0YXJ0IGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX0RPV05fRVZFTlRTICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI9ICd0b3VjaHN0YXJ0IG1vdXNlZG93bic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSBldmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX01PVkVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkVWRU5UUyA9ICd0b3VjaG1vdmUgbW91c2Vtb3ZlJztcXHJcXG5cXHJcXG4vKipcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogRW5kIGV2ZW50cyBmb3IgZHJhZ2dpbmcuXFxyXFxuICogVGhlIGBjbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tgIGV2ZW50IGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGJyb3dzZXIgc29tZXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lcyBkaXNwYXRjaGVzIGBkcmFnYCBldmVudHMgaW5zdGVhZCBvZiBgbW91c2VgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnQgY29uc3QgUE9JTlRFUl9VUF9FVkVOVFMgPSAndG91Y2hlbmQgdG91Y2hjYW5jIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIG1vdXNldXAgY2xpY2tcJztcXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgdHlwZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIHRoZSByZWd1bGFyIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU0xJREUgPSAnc2xpZGUnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgdGhlIGNhcm91c2VsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuZXhwb3J0IGNvbnN0IExPT1AgPSAnbG9vcCc7XFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCBjYW4gbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEZBREUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXCdmYWRlXCc7XFxyXFxuIiwiaW1wb3J0IHtcXHJcXG4gIEFMTF9BVFRSSUJVVEVTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIEFSSUFfQ09OVFJPTFMsXFxyXFxuICBBUklBX0NVUlJFTlQsXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQVJJQV9ISURERU4sXFxyXFxuICBBUklBX0xBQkVMLFxcclxcbiAgQVJJQV9ST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRURFU0NSSVBUSU9OLFxcclxcbiAgUk9MRSxcXHJcXG4gIFRBQl9JTkRFWCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIifSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFxyXFxuaW1wb3J0IHsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDTEFTU19DT05UQUlORVIsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgQ0xBU1NfTkVYVCxcXHJcXG4gIENMQVNTX1BSRVYsXFxyXFxuICBDTEFTU19WJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIklTSUJMRSxcXHJcXG4gIFNUQVRVU19DTEFTU0VTLFxcclxcbn0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0YW50cy9jbGFzc2VzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgRVZFTlQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0FDVElWRSxcXHJcXG4gIEVWRU5UX0NMSUNLLFxcclxcbiAgRVZFTlRfSElEREVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIEVWRU5UX0lOQUNUSVZFLFxcclxcbiAgRVZFTlRfTU9WRSxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9NT1ZFRCxcXHJcXG4gIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXHJcXG4gIEVWRU5UX1NISUZURUQsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgRVZFTlRfU0xJREVfS0VZRE9XTixcXHJcXG4gIEVWRU5UX1ZJU0lCTEUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IE1PVklORywgU0NST0xMSU5HIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3N0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImF0ZXMnO1xcclxcbmltcG9ydCB7IEZBREUsIExPT1AgfSBmcm9tICcuLi8uLi9jb25zIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRhbnRzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYWJzLFxcclxcbiAgYXBwbHksXFxyXFxuICBjZWlsLFxcclxcbiAgY2hpbGQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZmxvb3IsXFxyXFxuICBmb2N1cyxcXHJcXG4gIGZvcm1hdCxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBnZXRBdHRyaWJ1dGUsXFxyXFxuICBoYXNDbGFzcyxcXHJcXG4gIG1pbixcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBwYWQsXFxyXFxuICBxdWVyeUFsbCxcXHJcXG4gIHJlY3QsXFxyXFxuICByZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQXR0cmlidXRlLFxcclxcbiAgcmVtb3ZlQ2xhc3MsXFxyXFxuICBzZXRBdHRyaWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRlLFxcclxcbiAgc3R5bGUgYXMgX3N0eWxlLFxcclxcbiAgdG9nZ2xlQ2xhc3MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2xpZGUgc3ViIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGludGVyZmFjZSAgU2xpZGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB7XFxyXFxuICBpbmRleDogbnVtYmVyO1xcclxcbiAgc2xpZGVJbmRleDogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlcjtcXHJcXG4gIHNsaWRlOiBIVE1MRWxlbWVudDtcXHJcXG4gIGNvbnRhaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXI6IEhUTUxFbGVtZW50O1xcclxcbiAgaXNDbG9uZTogYm9vbGVhbjtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHN0eWxlKCBwcm9wOiBzdHJpbmcsIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nIHwgbnVtYmVyLCB1c2VDb250YWluZXI/OiBib29sZWFuICk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkXFxyXFxuICBpc1dpdGhpbiggZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgc3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZWFjaCBzbGlkZS5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBpbmRleCAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgc2xpZGUgaW5kZXguXFxyXFxuICogQHBhcmFtIHNsaWRlSW5kZXggLSBBIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSBpbmRleCBmb3IgY2xvbmVzLiBUaGlzIG11c3QgYmUgYC0xYCBpZiB0aGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIGlzIG5vdCBhIGNsb25lLlxcclxcbiAqIEBwYXJhbSBzbGlkZSAgICAgIC0gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBTbGlkZSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ViY29tcG9uZW50LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIFNwbGlkZTogU3BsaWRlLCBpbmRleDogbnVtYmVyLCBzbGlkZUluZGV4OiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyLCBzbGlkZTogSFRNTEVsZW1lbnQgKTogU2xpZGVDb21wb25lbnQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHsgb24sIGVtaXQsIGJpbmQgfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50cywgcm9vdCwgb3B0aW9ucyB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNOYXZpZ2F0aW9uLCB1cGRhdGVPbk1vdmUsIGkxOG4sIHBhZ2luYXRpb24sIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUZvY3VzIH0gPSBvcHRpb25zO1xcclxcbiAgY29uc3QgeyByZXNvbHZlIH0gPSBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCBzdHlsZXMgICAgPSBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR0cmlidXRlKCBzbGlkZSwgJ3N0eWxlJyApO1xcclxcbiAgY29uc3QgbGFiZWwgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGdldEF0dHJpYnV0ZSggc2xpZGUsIEFSSUFfTEFCRUwgKTtcXHJcXG4gIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0Nsb25lICAgPSBzbGlkZUluZGV4ID4gLTE7XFxyXFxuICBjb25zdCBjb250YWluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyID0gY2hpbGQoIHNsaWRlLCBgLiR7IENMQVNTX0NPTlRBSU5FUiB9YCApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogVHVybnMgaW50byBgdHJ1ZWAgd2hlbiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveWVkOiBib29sZWFuO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gbW91bnQoIHRoaXM6IFNsaWRlQ29tcG9uZW50ICk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIHtcXHJcXG4gICAgaWYgKCAhIGlzQ2xvbmUgKSB7XFxyXFxuICAgICAgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmlkID0gYCR7IHJvb3QuaWQgfS1zbGlkZSR7IHBhZCggaW5kZXggKyAxICkgfWA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggc2xpZGUsIFJPTEUsIHBhZ2luYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIj8gJ3RhYnBhbmVsJyA6ICdncm91cCcgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZSwgQVJJQV9ST0xFREVTQ1JJUFRJT04sIGkxOG4uc2xpZGUgKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9MQUJFTCwgbGFiZWwgfHwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcm1hdCggaTE4bi5zbGlkZUxhYmVsLCBbIGluZGV4ICsgMSwgU3BsaWRlLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggXSApICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGlzdGVuKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBMaXN0ZW5zIHRvIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21lIGV2ZW50cy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbGlzdGVuKCk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB2b2lkIHtcXHJcXG4gICAgYmluZCggc2xpZGUsICdjbGljaycsIGFwcGx5KCBlbWl0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgRVZFTlRfQ0xJQ0ssIHNlbGYgKSApO1xcclxcbiAgICBiaW5kKCBzbGlkZSwgJ2tlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlkb3duJywgYXBwbHkoIGVtaXQsIEVWRU5UX1NMSURFX0tFWURPV04sIHNlbGYgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfTU9WRUQsIEVWRU5UX1NISUZURUQsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9TQ1JPTExFRCBdLCB1cGRhdGUgKTtcXHJcXG4gICAgb24oIEVWRU5UX05BVklHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OX01PVU5URUQsIGluaXROYXZpZ2F0aW9uICk7XFxyXFxuXFxyXFxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIHVwZGF0ZU9uTW92ZSApIHtcXHJcXG4gICAgICBvbiggRVZFTlRfTU9WRSwgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveWVkID0gdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XFxyXFxuICAgIGV2ZW50LmRlc3Ryb3koKTtcXHJcXG4gICAgcmVtb3ZlQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBzbGlkZSwgU1RBVFVTX0NMQVNTRVMgKTtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSggc2xpZGUsIEFMTF9BVFRSSUJVVEVTICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoIHNsaWRlLCAnc3R5bGUnLCBzdHlsZXMgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgc2xpZGUsIEFSSUFfTEFCRUwsIGxhYmVsIHx8ICcnICk7XFxyXFxuICB9XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyBzbGlkZXMgYXMgbmF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnYXRpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGluaXROYXZpZ2F0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgY29udHJvbHMgPSBTcGxpZGUuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMubWFwKCB0YXJnZXQgPT4ge1xcclxcbiAgICAgIGNvbnN0IFNsaWRlID0gdGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldC5zcGxpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoIGluZGV4ICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgIHJldHVybiBTbGlkZSA/IFNsaWRlLnNsaWRlLmlkIDogJyc7XFxyXFxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ9ICkuam9pbiggJyAnICk7XFxyXFxuXFxyXFxuICAgIHNldEF0dHJpYnV0ZSggc2wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLCBBUklBX0xBQkVMLCBmb3JtYXQoIGkxOG4uc2xpZGVYLCAoIGlzQ2xvbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gc2xpZGVJbmRleCA6IGluZGV4ICkgKyAxICkgKTtcXHJcXG4gICAgc2V0QXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZSggc2xpZGUsIEFSSUFfQ09OVFJPTFMsIGNvbnRyb2xzICk7XFxyXFxuICAgIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRBdHRyaWJ1dGUoIHNsaWRlLCBST0xFLCBzbGlkZUZvY3VzID8gJ2J1dHRvbicgOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJycgKTtcXHJcXG4gICAgc2xpZGVGb2N1cyAmJiByZW1vdmVBdHRyaWJ1dGUoIHNsaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgQVJJQV9ST0xFREVTQ1JJUFRJT04gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIElmIHRoZSBgdXBkYXRlT25Nb3ZlYCBvcHRpb24gaXMgYHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYCwgY2FsbGVkIHdoZW4gdGhlIHNsaWRlciBzdGFydHMgbW92aW5nLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3ZlKCk6IHZvaWQge1xcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCAhIGRlc3Ryb3llZCApIHtcXHJcXG4gICAgICB1cGRhdGUoKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVXBkYXRlcyBhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlIGFuZCBjbGFzc2VzIG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgY29uc3QgeyBpbmRleDogY3VyciB9ID0gUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTtcXHJcXG5cXHJcXG4gICAgICB1cGRhdGVBY3Rpdml0eSgpO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1cGRhdGVWaXNpYmlsaXR5KCk7XFxyXFxuICAgICAgdG9nZ2xlQ2xhc3MoIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgQ0xBU1NfUFJFViwgaW5kZXggPT09IGN1cnIgLSAxICk7XFxyXFxuICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfTkVYVCwgaW5kZXggPT09IGN1cnIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBVcGRhdGVzIHRoZSBzdGF0dXMgcmVsYXRlZCB3aXRoIGFjdGl2aXR5LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdHkoKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBjb25zdCBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCBhY3RpdmUgIT09IGhhc0NsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkge1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9DVVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogVXBkYXRlcyBjbGFzc2VzIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgd2l0aCB2aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaWJpbGl0eS5cXHJcXG4gICAqIC0gRG8gbm90IHVwZGF0ZSBhcmlhLWhpZGRlbiBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2hpZnRpbmcgdG8gYXZvaWQgV2luZG93IE5hcnJhdG9yIGZyb20gc3RhcnQgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRpbmcgY29udGVudHMuXFxyXFxuICAgKiAtIElmIHRoZSBzbGlkZSBoYXMgZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuZCBnZXRzIGhpZGRlbiwgbW92ZXMgZm9jdXMgdG8gdGhlIGFjdGl2ZSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBjb25zdCB2aXNpYmxlID0gaXNWaXNpYmxlKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCBoaWRkZW4gPSAhIHZpc2libGUgJiYgKCAhIGlzQWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHx8IGlzQ2xvbmUgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCAhIFNwbGlkZS5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUuaXMoIFsgTU9WSU5HLCBTQ1JPTExJTkcgXSApICkge1xcclxcbiAgICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBdHRyaWJ1dGUoIHNsaWRlLCBBUklBX0hJRERFTiwgaGlkZGVuIHx8ICcnICk7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldEF0dHJpYnV0ZSggcXVlcnlBbGwoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibGlkZSwgb3B0aW9ucy5mb2N1c2FibGVOb2RlcyB8fCAnJyApLCBUQUJfSU5ERVgsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBoaWRkZW4gPyAtMSA6ICcnICk7XFxyXFxuXFxyXFxuICAgIGlmICggc2xpZGVGbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXMgKSB7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgVEFCX0lOREVYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaGlkZGVuID8gLTEgOiAwICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmlzaWJsZSAhPT0gaGFzQ2xhc3MoIHNsaWRlLCBDTEFTU19WSVNJQkxFICkgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2libGUgKTtcXHJcXG4gICAgICBlbWl0KCB2aXNpYmxlID8gRVZFTlRfVklTSUJMRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBFVkVOVF9ISURERU4sIHNlbGYgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCAhIHZpc2libGUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICkge1xcclxcbiAgICAgIGNvbnN0IFNsaWRlID0gQ29tcG9uZW50cy5TbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0KCBTcGxpZGUuaW5kZXggKTtcXHJcXG4gICAgICBTbGlkZSAmJiBmb2N1cyggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlLnNsaWRlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEFkZHMgYSBDU1MgcnVsZSB0byB0aGUgc2xpZGVyIG9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29udGFpbmVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwcm9wICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC0gQSBwcm9wZXJ0eSBuYW1lLlxcclxcbiAgICogQHBhcmFtIHZhbHVlICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLSBBIENTUyB2YWx1ZSB0byBhZGQuXFxyXFxuICAgKiBAcGFyYW0gdXNlQ29udGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lciAtIE9wdGlvbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXBwbHkgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBydWxlIHRvIHRoZSBjb250YWluZXIgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gc3R5bGUoIHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIHVzZUNvbnRhaW5lcj86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUoICggdXNlQ29udGFpbmVyICYmIGNvbnRhaW5lciApIHx8IHNsaWRlLCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcCwgdmFsdWUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIENoZWNrcyBpZiB0aGUgc2xpZGUgaXMgYWN0aXZlIG9yIG5vdC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHNsaWRlIGlzIGFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzQWN0aXZlKCk6IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcXHJcXG4gICAgY29uc3QgeyBpbmRleDogY3VyciB9ID0gU3BsaWRlO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIGN1cnIgPT09IGluZGV4IHx8ICggb3B0aW9ucy5jbG9uZVN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dXMgJiYgY3VyciA9PT0gc2xpZGVJbmRleCApO1xcclxcbiAgfVxcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZSBpcyB2aXNpYmxlIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzVmlzaWJsZSgpOiBibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGVhbiB7XFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBGQURFICkgKSB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHJldHVybiBpc0FjdGl2ZSgpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCB0cmFja1JlY3QgPSByZWN0KCBDb21wb25lbnRzLkVsZW1lbnRzLnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjayApO1xcclxcbiAgICBjb25zdCBzbGlkZVJlY3QgPSByZWN0KCBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKTtcXHJcXG4gICAgY29uc3QgbGVmdCAgICAgID0gcmVzb2x2ZSggJ2xlZnQnLCB0cnUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSApO1xcclxcbiAgICBjb25zdCByaWdodCAgICAgPSByZXNvbHZlKCAncmlnaHQnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSApO1xcclxcblxcclxcbiAgICByZXR1cm4gZmxvb3IoIHRyYWNrUmVjdFsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZnQgXSApIDw9IGNlaWwoIHNsaWRlUmVjdFsgbGVmdCBdIClcXHJcXG4gICAgICAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgZmxvb3IoIHNsaWRlUmVjdFsgcmlnaHQgXSApIDw9IGNlaWwoIHRyYWNrUmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbIHJpZ2h0IF0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENhbGN1bGF0ZXMgaG93IGZhciB0aGlzIHNsaWRlIGlzIGZyb20gYW5vdGhlciBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgYW5kXFxyXFxuICAgKiByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGlzdGFuY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzIHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyLlxcclxcbiAgICpcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZnJvbSAgICAgLSBBbiBpbmRleCBvZiBhIGJhc2Ugc2xpZGUuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHBhcmFtIGRpc3RhbmNlIC0gYHRydWVgIGlmIHRoZSBzbGlkZSBpcyB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGluIHRoaXMgbnVtYmVyLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlYCBpZiB0aGUgc2xpZGUgaXMgd2l0aGluIHRoZSBgZGlzdGFuY2VgIGZyb20gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBiYXNlIHNsaWRlLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIGlzV2l0aGluKCBmcm9tOiBudW1iZXIsIGRpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyICk6IGJvb2xlYW4ge1xcclxcbiAgICBsZXQgZGlmZiA9IGFicyggZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gLSBpbmRleCApO1xcclxcblxcclxcbiAgICBpZiAoICEgaXNDbG9uZSAmJiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLnJld2luZCB8fCBTcGxpZGUuaXMoIExPT1AgKSApICkge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkaWZmID0gbWluKCBkaWZmLCBTcGxpZGUubGVuZ3RoIC0gZGlmZiApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGlmZiA8PSBkaXN0YW5jZTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICBjb25zdCBzZWxmID0ge1xcclxcbiAgICBpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gsXFxyXFxuICAgIHNsaWRlSW5kZXgsXFxyXFxuICAgIHNsaWRlLFxcclxcbiAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29udGFpbmVyLFxcclxcbiAgICBpc0Nsb25lLFxcclxcbiAgICBtb3VudCxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3Ryb3ksXFxyXFxuICAgIHVwZGF0ZSxcXHJcXG4gICAgc3R5bGUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpc1dpdGhpbixcXHJcXG4gIH07XFxyXFxuXFxyXFxuICByZXR1cm4gc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGY7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IERBVEFfQVRUUklCVVRFIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgYXV0b3BsYXkgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVydmFsIGR1cmF0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNS4wXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSA9IGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgREFUQV9BVFRSSUJVVEUgfS1pbnRlcnZhbGA7XFxyXFxuIiwiLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIGZvciBsaXN0ZW5lcnMgdGhhdCBtYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IHByZXZlbnQgdGhlIGJyb3dzZXIgc2Nyb2xsLlxcclxcbiAqXFxyXFxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjQuMVxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTQ1JPTExfTElTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFTkVSX09QVElPTlMgPSB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiB0cnVlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xcclxcbiIsImltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XX0xFRlQsIEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJSSUdIVCwgQVJST1dfVVAgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYXJyb3ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicyc7XFxyXFxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgbWFwIHRvIGFzc29jIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lhdGUgYSBub24tc3RhbmRhcmQgbmFtZSB0byB0aGUgc3RhbmRhcmQgb25lLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSA0LjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgTk9STUFMSVpBVElPTl9NQVAgPSB7XFxyXFxuICBTcGFjZWJhcjogJyAnLFxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIFJpZ2h0ICAgOiBBUlJPV19SSUdIVCxcXHJcXG4gIExlZnQgICAgOiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1dfTEVGVCxcXHJcXG4gIFVwICAgICAgOiBBUlJPV19VUCxcXHJcXG4gIERvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIDogQVJST1dfRE9XTixcXHJcXG59O1xcclxcblxcclxcbi8qKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBOb3JtYWxpemVzIHRoZSBrZXkuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0ga2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAtIEEgc3RyaW5nIG9yIGEgS2V5Ym9hcmRFdmVudCBvYmplY3QuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHJldHVybiBBIG5vcm1hbGl6ZWQga2V5LlxcclxcbiAqL1xcclxcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplS2V5KCBrZXk6IHN0cmluZyB8IEtleWJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZEV2ZW50ICk6IHN0cmluZyB7XFxyXFxuICBrZXkgPSBpc1N0cmluZygga2V5ICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8ga2V5IDoga2V5LmtleTtcXHJcXG4gIHJldHVybiBOT1JNQUxJWkFUSU9OX01BUFsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleSBdIHx8IGtleTtcXHJcXG59IiwiaW1wb3J0IHsgQVJST1dfTEVGVCwgQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlJJR0hUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7XFxyXFxuaW1wb3J0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB7IEVWRU5UX01PVkUsIEVWRU5UX1VQREFURUQgfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJzsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICcuLi8uLi91dGlscyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IG5vcm1hbGl6ZUtleSB9IGZyb20gJy4uLy4uL3V0aWxzL2RvbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvbm9ybWFsaXplS2V5L25vcm1hbGl6ZUtleSc7XFxyXFxuXFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBLZXlib2FyZCBjb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBpbnRlcmZhY2UgS2V5Ym9hcmRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCB7XFxyXFxuICBkaXNhYmxlKCBkaXNhYmxlZDogYm9vbGVhbiApOiB2b2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGtleWJvYXJkIGV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCBuYW1lLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNi4wXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL1xcclxcbmNvbnN0IEtFWUJPQVJEX0VWRU5UID0gJ2tleWRvd24nO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciBjb250cm9sbGluZyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHNsaWRlciBieSBrZXlib2FyZHMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIEtleWJvYXJkIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBLZXlib2FyZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogT3B0aW9ucyApOiBLZXlib2FyZENvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgYmluZCwgdW5iaW5kIH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgeyByb290IH0gPSBTcGxpZGU7XFxyXFxuICBjb25zdCB7IHJlc29sdmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gPSBDb21wb25lbnRzLkRpcmVjdGlvbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFRoZSB0YXJnZXQgZWxlbWVudCBvZiB0aGUga2V5Ym9hcmQgZXZlbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBsZXQgdGFyZ2V0OiBXaW5kb3cgfCBIVE1MRWxlbWVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50IGlzIGN1cnJlbnRseSBkaXNhYmxlZCBvciBub3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsZXQgZGlzYWJsZWQ6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGluaXQoKTtcXHJcXG4gICAgb24oIEVWRU5UX1VQREFURUQsIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95ICk7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVEVELCBpbml0ICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBvbiggRVZFTlRfTU9WRSwgb25Nb3ZlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHsga2V5Ym9hcmQgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAgIGlmICggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImtleWJvYXJkICkge1xcclxcbiAgICAgIHRhcmdldCA9IGtleWJvYXJkID09PSAnZ2xvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImJhbCcgPyB3aW5kb3cgOiByb290O1xcclxcbiAgICAgIGJpbmQoIHRhcmdldCwgS0VZIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JPQVJEX0VWRU5ULCBvbktleWRvd24gKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1bmJpbmQoIHRhcmdldCwgS0VZQk9BUkRfRVZFTlQgKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERpc2FibGVzIHRoZSBrZXlib2FyZCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25wdXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gVG9nZ2xlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsaW5nL2VuYWJsaW5nIHRoZSBrZXlib2FyZCBpbnB1dC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGRpc2FibGUoIHZhbHVlOiBib29sZWFuICk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBzbGlkZXIgbW92ZXMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVG8gYXZvaWQgdGhlIHNsaWRlciBmcm9tIG1vdmluZyB0d2ljZSwgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaXQgZm9yIGEgdGljay5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgX2Rpc2FibGVkID0gZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xcclxcbiAgICBkaXNhYmxlZCA9IHRydWU7XFxyXFxuICAgIG5leHRUaWNrKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgPT4geyBkaXNhYmxlZCA9IF9kaXNhYmxlZCB9ICk7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiBhbnkga2V5IGlzIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VkIG9uIHRoZSB0YXJnZXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBLZXlib2FyZEV2ZW50IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG9uS2V5ZG93biggZTogS2V5Ym9hcmRFdmVudCApOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmICggISBkaXNhYmxlZCApIHtcXHJcXG4gICAgICBjb25zdCBrZXkgPSBub3JtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsaXplS2V5KCBlICk7XFxyXFxuXFxyXFxuICAgICAgaWYgKCBrZXkgPT09IHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbHZlKCBBUlJPV19MRUZUICkgKSB7XFxyXFxuICAgICAgICBTcGxpZGUuZ28oICc8JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgICB9IGVsc2UgaWYgKCBrZXkgPT09IHJlc29sdmUoIEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJSSUdIVCApICkge1xcclxcbiAgICAgICAgU3BsaWRlLmdvKCAnPicgKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIGRpc2FiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgREFUQV9BVFRSSUJVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZSBzcmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhbHVlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBTUkNfREFUQV9BVFRSSUJVVEUgPSBgJHsgREFUQV9BVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUUklCVVRFIH0tbGF6eWA7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGRhdGEgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZSBmb3IgdGhlIHNyY3NldCB2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU1JDU0VUX0RBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBX0FUVFJJQlVURSA9IGAkeyBTUkNfREFUQV9BVFRSSUJVVEUgfS1zcmNzZXRgOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgc2VsZWN0b3Igc3RyaW5nIGZvciBpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2VzIHRvIGxvYWQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGNvbnN0IElNQUdFX1NFTEVDVE9SID0gYFskeyBTUkNfREFUQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVRUUklCVVRFIH1dLCBbJHsgU1JDU0VUX0RBVEFfQVRUUklCVVRFIH1dYDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIiwiaW1wb3J0IHsgQVJJQV9PUklFTlRBVElPTiB9IGZyb20gXCcuLi8uLi9jb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRhbnRzL2F0dHJpYnV0ZXMnO1xcclxcbmltcG9ydCB7IFRUQiB9IGZyb20gJy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvZGlyZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9DTElDSyxcXHJcXG4gIEVWRU5UX01PVU5URUQsXFxyXFxuICBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxcXHJcXG4gIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCxcXHJcXG4gIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19TTElERV9LRVlET1dOLFxcclxcbiAgRVZFTlRfVVBEQVRFRCxcXHJcXG59IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBMT09QIH0gZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0ZXJmYWNlLCBFdmVudEludGVyZmFjZU9iamVjdCB9IGZyb20gJy4uLy4uL2NvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBhcHBseSwgZW1wdHksIGluY2x1ZGVzLCBpc1VuZGVmaW5lZCwgcHJldmVudCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInNldEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL25vcm1hbGl6ZUtleSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvbm9ybWFsaXplS2V5JztcXHJcXG5pbXBvcnQgeyBTbGlkZUNvbXBvbmVudCB9IGZybyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi9TbGlkZXMvU2xpZGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU3luYyBjb21wb25lbnQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgU3luY0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW91bnQoKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBrZXlzIGZvciB0cmlnZ2VyaW5nIHRoZSBuYXZpZ2F0aW9uIHNsaWRlLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmNvbnN0IFRSSUdHRVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiX0tFWVMgPSBbICcgJywgJ0VudGVyJyBdO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29tcG9uZW50IGZvciBzeW5jaW5nIG11bHRpcGxlIHNsaWRlcnMuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIFN5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBTeW5jKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnM6IE9wdGlvbnMgKTogU3luY0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBpc05hdmlnYXRpb24sIHNsaWRlRm9jdXMgfSA9IG9wdGlvbnM7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgZXZlbnQgb2JqZWN0cy5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGNvbnN0IGV2ZW50czogRXZlbnRJbnRlcmZhY2VPYmplY3RbXSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KCk6IHZvaWQge1xcclxcbiAgICBTcGxpZGUuc3BsaWRlcy5mb3JFYWNoKCB0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0ID0+IHtcXHJcXG4gICAgICBpZiAoICEgdGFyZ2V0LmlzUGFyZW50ICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHN5bmMoIFNwbGlkZSwgdGFyZ2V0LnNwbGlkZSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICAgIHN5bmMoIHRhcmdldC5zcGxpZGUsIFNwbGlkZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBpc05hdmlnYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uICkge1xcclxcbiAgICAgIG5hdmlnYXRlKCk7XFxyXFxuICAgIH1cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlc3Ryb3lzIHRoZSBjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZXZlbnRzLmZvckVhY2goIGV2ZW50ID0+IHsgZXZlbnQuZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB9ICk7XFxyXFxuICAgIGVtcHR5KCBldmVudHMgKTtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW91bnRzIHRoZSBjb21wb25lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEBpbnRlcm5hbFxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gcmVtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveSgpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbW91bnQoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFN5bmNzIHRoZSBjdXJyZW50IGluZGV4IHdpdGggYSBwcm92aWRlZCBjaGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qgc3BsaWRlIGluc3RhbmNlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIC0gQSBzcGxpZGUgaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSB0YXJnZXQgLSBBIHRhcmdldCBzcGxpZGUgaW5zdGFuY2UuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBmdW5jdGlvbiBzeW5jKCBzcGxpZGU6IFNwbGlkZSwgdGFyZ2V0OiBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBldmVudCA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSggc3BsaWRlICk7XFxyXFxuXFxyXFxuICAgIGV2ZW50Lm9uKCBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSwgKCBpbmRleCwgcHJldiwgZGVzdCApID0+IHtcXHJcXG4gICAgICB0YXJnZXQuZ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB0YXJnZXQuaXMoIExPT1AgKSA/IGRlc3QgOiBpbmRleCApO1xcclxcbiAgICB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICBldmVudHMucHVzaCggZXZlbnQgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE1ha2VzIHNsaWRlcyBjbGlja2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGFuZCBtb3ZlcyB0aGUgc2xpZGVyIHRvIHRoZSBpbmRleCBvZiBjbGlja2VkIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5cXHJcXG4gICAqIE5vdGUgdGhhdCB0aGUgZGlyZWN0aW9uIG9mIGBtZW51YCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgaW1wbGljaXRseSBgdmVydGljYWxgIGFzIGRlZmF1bHQuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBmdW5jdGlvbiBuYXZpZ2F0ZSgpOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgeyBvbiB9ID0gZXZlbnQ7XFxyXFxuXFxyXFxuICAgIG9uKCBFVkVOVF9DTElDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssIG9uQ2xpY2sgKTtcXHJcXG4gICAgb24oIEVWRU5UX1NMSURFX0tFWURPV04sIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tleWRvd24gKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FURUQgXSwgdXBkYXRlICk7XFxyXFxuXFxyXFxuICAgIGV2ZW50cy5wdXNoKCBldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgKTtcXHJcXG4gICAgZXZlbnQuZW1pdCggRVZFTlRfTkFWSUdBVElPTl9NT1VOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCwgU3BsaWRlLnNwbGlkZXMgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFVwZGF0ZSBhdHRyaWJ1dGVzLlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBzZXRBdHRyaWJ1dGUoIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzLkVsZW1lbnRzLmxpc3QsIEFSSUFfT1JJRU5UQVRJT04sIG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzLmRpcmVjdGlvbiA9PT0gVFRCID8gJ3ZlcnRpY2FsJyA6ICcnICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbmF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnYXRpb24gc2xpZGUgaXMgY2xpY2tlZC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIFNsaWRlIC0gQSBjbGlja2VkIFNsaWRlIGNvbXBvbmVudC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIG9uQ2xpY2soIFNsaWRlOiBTbGlkZUNvbXBvbmVudCApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdm9pZCB7XFxyXFxuICAgIFNwbGlkZS5nbyggU2xpZGUuaW5kZXggKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIGFueSBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIHByZXNzZWQgb24gdGhlIG5hdmlnYXRpb24gc2xpZGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGUgY29tcG9uZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEBwYXJhbSBlICAgICAtIEEgS2V5Ym9hcmRFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbktleWRvd24oIFNsaWRlOiBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVDb21wb25lbnQsIGU6IEtleWJvYXJkRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIGluY2x1ZGVzKCBUUklHR0VSX0tFWVMsIG5vcm1hbGl6ZUtleSggZSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICkge1xcclxcbiAgICAgIG9uQ2xpY2soIFNsaWRlICk7XFxyXFxuICAgICAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQoIGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XFxyXFxuICAgIHNldHVwOiBhcHBseShcXHJcXG4gICAgICBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5NZWRpYS5zZXQsXFxyXFxuICAgICAgeyBzbGlkZUZvY3VzOiBpc1VuZGVmaW5lZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHNsaWRlRm9jdXMgKSA/IGlzTmF2aWdhdGlvbiA6IHNsaWRlRm9jdXMgfSxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgdHJ1ZVxcclxcbiAgICApLFxcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3ksXFxyXFxuICAgIHJlbW91bnQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1wb3J0IHsgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTiB9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdGFudHMvbWVkaWEnO1xcclxcbmltcG9ydCB7IENSRUFURUQsIERFIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNUUk9ZRUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IHsgRXZlbnRCaW5kZXIgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBtZXJnZSwgb21pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIG93bktleXMgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRVZFTiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJUX1VQREFURUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBNZWRpYSBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNvbXBvbmVudCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIC8qKiBAaW50ZXJuYWwgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICByZWR1Y2UoIHJlZHVjZWQ6IGJvb2xlYW4gKTogdm9pZDtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQoIG9wdGlvbnM6IE9wdGlvbnMsIGJhc2U/OiBib29sZWFuLCBub3RpZnk/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm9vbGVhbiApOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGNvbXBvbmVudCBmb3Igb2JzZXJ2aW5nIG1lZGlhIHF1ZXJpZXMgYW5kIHVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGluZyBvcHRpb25zIGlmIG5lY2Vzc2FyeS5cXHJcXG4gKiBUaGlzIHVzZWQgdG8gYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHRoZSBPcHRpb25zIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNC4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgTWVkaWEgY29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIE1lZGlhKCBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICk6IE1lZGlhQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgc3RhdGUgfSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGU7XFxyXFxuICBjb25zdCBicmVha3BvaW50cyAgID0gb3B0aW9ucy5icmVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2twb2ludHMgfHwge307XFxyXFxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVkdWNlZE1vdGlvbiB8fCB7fTtcXHJcXG4gIGNvbnN0IGJpbmRlciAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gRXZlbnRCaW5kZXIoKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zIGFuZCBNZWRpYVF1ZXJ5TGlzdCBvYmplY3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBjb25zdCBxdWVyaWVzOiBBcnJheTxbIE9wdGlvbnMsIE1lZGlhUXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGlzdCBdPiA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gdGhlIGNvbXBvbmVudCBpcyBjb25zdHJ1Y3RlZC5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGZ1bmN0aW9uIHNldHVwKCk6IHZvaWQge1xcclxcbiAgICBjb25zdCBpc01pbiA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBvcHRpb25zLm1lZGlhUXVlcnkgPT09ICdtaW4nO1xcclxcblxcclxcbiAgICBvdyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduS2V5cyggYnJlYWtwb2ludHMgKVxcclxcbiAgICAgIC5zb3J0KCAoIG4sIG0gKSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNNaW4gPyArbiAtICttIDogK20gLSArbiApXFxyXFxuICAgICAgLmZvckVhY2goICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrZXkgPT4ge1xcclxcbiAgICAgICAgcmVnaXN0ZXIoIGJyZWFrcG9pbnRzWyBrZXkgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIGAoJHsgaXNNaW4gPyAnbWluJyA6ICdtYXgnIH0td2lkdGg6JHsga2V5IH1weCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCApO1xcclxcbiAgICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgcmVnaXN0ZXIoIHJlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2VkTW90aW9uLCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB1cGRhdGUoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Rlc3Ryb3lzIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBjb21wbGV0ZWx5IC0gV2lsbCBiZSBgdHJ1ZWAgZm9yIGNvbXBsZXRlIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVjdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSggY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsZXRlbHk6IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIGlmICggY29tcGxldGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kgKSB7XFxyXFxuICAgICAgYmluZGVyLmRlc3Ryb3koKTtcXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVnaXN0ZXJzIGVudHJpZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzIFsgT3B0aW9ucywgbWVkaWEgcXVlcnkgc3RyaW5nIF0uXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBtZXJnZWQgdG8gY3VycmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgb3B0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBtYXRjaGVzIHRoZSBxdWVyeS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gcXVlcnkgICAtIEEgcXVlcnkgc3RyaW5nLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xcclxcbiAgZnVuY3Rpb24gcmVnaXN0ZXIoIG9wdGlvbnM6IE9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVyeTogc3RyaW5nICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBxdWVyeUxpc3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWF0Y2hNZWRpYSggcXVlcnkgKTtcXHJcXG4gICAgYmluZGVyLmJpbmQoIHF1ZXJ5TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpc3QsICdjaGFuZ2UnLCB1cGRhdGUgKTtcXHJcXG4gICAgcXVlcmllcy5wdXNoKCBbICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLCBxdWVyeUxpc3QgXSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ2hlY2tzIGFsbCBtZWRpYSBxdWVyaWVzIGluIGVudHJpZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuZCB1cGRhdGVzIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHN0YXRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyggREVTVFJPWUVEICk7XFxyXFxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgbWVyZ2VkID0gcXVlcmllcy5yZWR1YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPE9wdGlvbnM+KCAoIG1lcmdlZCwgZW50cnkgKSA9PiB7XFxyXFxuICAgICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBtZXJnZSggbWVyZ2VkLCBlbnRyeVsgMSBdLm1hdGNoZXMgPyBlbnRyeVsgMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSA6IHt9ICk7XFxyXFxuICAgIH0sIHt9ICk7XFxyXFxuXFxyXFxuICAgIG9taXQoIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zICk7XFxyXFxuICAgIHNldCggbWVyZ2VkICk7XFxyXFxuXFxyXFxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIG9wdGlvbnMuZGVzdHJveSApIHtcXHJcXG4gICAgICBTcGxpZGUuZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2NvbXBsZXRlbHknICk7XFxyXFxuICAgIH0gZWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgaWYgKCBkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgZGVzdHJveSggdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgICBTcGxpZGUubW91bnQoKTtcXHJcXG4gICAgfSBlbHNlIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZGlyZWN0aW9uICE9PSBvcHRpb25zLmRpcmVjdGlvbiAmJiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnJlZnJlc2goKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogRGlzYWJsZXMgb3IgZW5hYmxlcyBgcmVkdWNlZE1vdGlvbmAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcgd2hlbiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBxdWVyeS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQGludGVybmFsXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFibGUgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXBwbHkgYHJlZHVjZWRNb3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uYCBvcHRpb25zIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZHVjZSggZW5hYmxlOiBib29sZWFuICk6IHZvaWQge1xcclxcbiAgICBpZiAoIG1hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaE1lZGlhKCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OICkubWF0Y2hlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgZW5hYmxlID8gbWVyZ2UoIG9wdGlvbnMsIHJlZHVjZWRNb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uICkgOiBvbWl0KCBvcHRpb25zLCBvd25LZXlzKCByZWR1Y2VkTW90aW9uICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NldHMgY3VycmVudCBvcHRpb25zIG9yIGJhc2Ugb3B0aW9ucyAocHJvdG90eXBlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKiBJZiBjaGFuZ2luZyBiYXNlIG9wdGlvbnMsIGFsd2F5cyBlbWl0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGB1cGRhdGVkYCBldmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG9wdHMgICAtIE5ldyBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cXHJcXG4gICAqIEBwYXJhbSBiYXNlICAgLSBPcHRpb25hbC4gRGV0ZXJtaW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgd2hldGhlciB0byBhbHNvIHVwZGF0ZSBiYXNlIG9wdGlvbnMgb3Igbm90LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBub3RpZnkgLSBPcHRpb25hbC4gSWYgYHRydWVgLCBhbHdheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIGVtaXRzIHRoZSBgdXBkYXRlYCBldmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHNldCggb3B0czogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3k/OiBib29sZWFuICk6IHZvaWQge1xcclxcbiAgICBtZXJnZSggb3B0aW9ucywgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKTtcXHJcXG4gICAgYmFzZSAmJiBtZXJnZSggT2JqZWN0LmdldFByb3RvdHlwZU9mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggb3B0aW9ucyApLCBvcHRzICk7XFxyXFxuXFxyXFxuICAgIGlmICggbm90aWZ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fCAhIHN0YXRlLmlzKCBDUkVBVEVEICkgKSB7XFxyXFxuICAgICAgU3BsaWRlLmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBFVkVOVF9VUERBVEVELCBvcHRpb25zICk7XFxyXFxuICAgIH1cXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBzZXR1cCxcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3ksXFxyXFxuICAgIHJlZHVjZSxcXHJcXG4gICAgc2V0LFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFMTF9BVFRSSUJVVEVTLCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19MQUJFTCwgQVJJQV9MQUJFTExFREJZLCBBUklBX1JPTEVERVNDUklQVElPTiwgUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJPTEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFxyXFxuaW1wbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydCB7XFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDTEFTU19BUlJPV19ORVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVCxcXHJcXG4gIENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBDTEFTU19BUlJPV1MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgQ0xBU1NfQ0xPTkUsXFxyXFxuICBDTEFTU19GT0NVU19JTixcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19MSVNULFxcclxcbiAgQ0xBU1NfUEFHSU5BVElPTixcXHJcXG4gIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUk9HUkVTU19CQVIsXFxyXFxuICBDTEFTU19ST09ULFxcclxcbiAgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1NMSURFLFxcclxcbiAgQ0xBU1NfVE9HR0xFLFxcclxcbiAgQ0xBU1NfVFJBQ0ssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IFBST0pFQ1RfQ09ERSB9IGYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi8uLi9jb25zdGFudHMvcHJvamVjdCc7XFxyXFxuaW1wb3J0IHsgRXZlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIGFkZENsYXNzLCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGFzc2VydCxcXHJcXG4gIGFzc2lnbixcXHJcXG4gIGNoaWxkLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGNoaWxkcmVuLFxcclxcbiAgZW1wdHksXFxyXFxuICBmb3JPd24sXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZ2V0QXR0cmlidXRlLFxcclxcbiAgcHVzaCxcXHJcXG4gIHF1ZXJ5LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJlbW92ZUF0dHJpYnV0ZSxcXHJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEF0dHJpYnV0ZSxcXHJcXG4gIHRvZ2dsZUNsYXNzLFxcclxcbiAgdW5pcXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZUlkLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IGNsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9zZXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL2Nsb3Nlc3QvY2xvc2VzdCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IFBPSU5URVJfRE9XTl9FVkVOVFMgfSBmcm9tICcuLi9EcmFnLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjb25zdGFudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIGZvciBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyIGNvbnNpc3RzIG9mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgaW50ZXJmYWNlIEVsZW1lbnRDb2xsZWN0aW9uIHtcXHJcXG4gIHJvb3Q6IEhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRWxlbWVudDtcXHJcXG4gIHRyYWNrOiBIVE1MRWxlbWVudDtcXHJcXG4gIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBIVE1MRWxlbWVudDtcXHJcXG4gIHNsaWRlczogSFRNTEVsZW1lbnRbXTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBhcnJvd3M/OiBIVE1MRWxlbWVudDtcXHJcXG4gIHBhZ2luYXRpb24/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSFRNTFVMaXN0RWxlbWVudDtcXHJcXG4gIHByZXY/OiBIVE1MQnV0dG9uRWxlbWVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XFxyXFxuICBiYXI/OiBIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RNTEVsZW1lbnQ7XFxyXFxuICB0b2dnbGU/OiBIVE1MRWxlbWVudDtcXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudHNDb21wb25lbnQgZXh0ZW5kcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQmFzZUNvbXBvbmVudCwgRWxlbWVudENvbGxlY3Rpb24ge1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCB0aGF0IGNvbGxlY3RzIGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgaGFuZGxlcyBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyIGNvbnNpc3RzIG9mLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEFuIEVsZW1lbnRzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBmdW5jdGlvbiBFbGVtZW50cyggU3BsaWRlOiBTcGxpZGUsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBiaW5kIH0gPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyByb290IH0gPSBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgY29uc3QgeyBpMThuIH0gPSBvcHRpb25zO1xcclxcbiAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZW1lbnRzOiBFbGVtZW50Q29sbGVjdGlvbiA9IHt9IGFzIEVsZW1lbnRDb2xsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGFsbCBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IHNsaWRlczogSFRNTEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGwgcm9vdCBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgcm9vdENsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzOiBzdHJpbmdbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGFsbCBsaXN0IGNsYXNzZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCB0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIHRyYWNrIGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCB0cmFjazonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEhUTUxFbGVtZW50O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGlzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGxpc3Q6IEhUTUxFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHVybnMgaW50byBgdHJ1ZWAgd2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZGV0ZWN0aW5nIGtleWRvd24sIGFuZCBgZmFsc2VgIHdoZW4gZGV0ZWN0aW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludGVyZG93bi5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGlzVXNpbmdLZXk6IGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb29sZWFuO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBvbmVudCBpcyBjb25zdHJ1Y3RlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHNldHVwKCk6IHZvaWQge1xcclxcbiAgICBjb2xsZWN0KCk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpbml0KCk7XFxyXFxuICAgIHVwZGF0ZSgpO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQge1xcclxcbiAgICBvbiggRVZFTlRfUkVGUkVTSCwgZGVzdHJveSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIEVWRU5UX1JFRlJFU0gsIHNldHVwICk7XFxyXFxuICAgIG9uKCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfVVBEQVRFRCwgdXBkYXRlICk7XFxyXFxuXFxyXFxuICAgIGJpbmQoIGRvY3VtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCwgYCR7IFBPSU5URVJfRE9XTl9FVkVOVFMgfSBrZXlkb3duYCwgZSA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgIGlzVXNpbmdLZXkgPSBlLnR5cGUgPT09ICdrZXlkb3duJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9ICk7XFxyXFxuXFxyXFxuICAgIGJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkKCByb290LCAnZm9jdXNpbicsICgpID0+IHtcXHJcXG4gICAgICB0b2dnbGVDbGFzcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAhISBpc1VzaW5nS2V5ICk7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlc3Ryb3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0aGUgY29tcG9uZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xldGVseSAtIFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgY29tcG9uZW50IGNvbXBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWx5IG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBsZXRlbHk/OiBib29sZWFuICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBhdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoICdzdHlsZScgKTtcXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGVtcHR5KCBzbGlkZXMgKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb290LCByb290Q2xhc3NlcyApO1xcclxcbiAgICByZW1vdmVDbGFzcyggdHJhY2ssIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFja0NsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidXRlKCBbIHRyYWNrLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdCBdLCBhdHRycyApO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoIHJvb3QsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib21wbGV0ZWx5ID8gYXR0cnMgOiBbICdzdHlsZScsIEFSSUFfUk9MRURFU0NSSVBUIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTiBdICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVzIHRoZSBzdGF0dXMgb2YgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZUNsYXNzKCByb28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgcm9vdENsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHRyYWNrLCB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tDbGFzc2VzICk7XFxyXFxuXFxyXFxuICAgIHJvb3RDbGFzc2VzICA9IGdldENsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzKCBDTEFTU19ST09UICk7XFxyXFxuICAgIHRyYWNrQ2xhc3NlcyA9IGdldENsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzKCBDTEFTU19UUkFDSyApO1xcclxcblxcclxcbiAgICBhZGRDbGFzcyggcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3QsIHJvb3RDbGFzc2VzICk7XFxyXFxuICAgIGFkZENsYXNzKCB0cmFjaywgdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrQ2xhc3NlcyApO1xcclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHJvb3QsIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUklBX0xBQkVMLCBvcHRpb25zLmxhYmVsICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QsIEFSSUFfTEFCRUxMRURCWSwgb3B0aW9ucy5sYWJlbGxlZGJ5ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb2xsZWN0cyBlbGVtZW50cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2hpY2ggdGhlIHNsaWRlciBjb25zaXN0cyBvZi5cXHJcXG4gICAqL1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGNvbGxlY3QoKTogdm9pZCB7XFxyXFxuICAgIHRyYWNrID0gZmluZCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AuJHsgQ0xBU1NfVFJBQ0sgfWAgKTtcXHJcXG4gICAgbGlzdCAgPSBjaGlsZCggdHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrLCBgLiR7IENMQVNTX0xJU1QgfWAgKTtcXHJcXG5cXHJcXG4gICAgYXNzZXJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgdHJhY2sgJiYgbGlzdCwgJ0EgdHJhY2svbGlzdCBlbGVtZW50IGlzIG1pc3NpbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLicgKTtcXHJcXG4gICAgcHVzaCggc2xpZGVzLCBjaGlsZHJlbiggbGlzdCwgYC4keyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfU0xJREUgfTpub3QoLiR7IENMQVNTX0NMT05FIH0pYCApICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICBmb3JPd24oIHtcXHJcXG4gICAgICBhcnJvd3MgICAgOiBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1dTLFxcclxcbiAgICAgIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICAgIHByZXYgICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG5leHQgICAgICA6IENMQVNTX0FSUk9XX05FWFQsXFxyXFxuICAgICAgYmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICA6IENMQVNTX1BST0dSRVNTX0JBUixcXHJcXG4gICAgICB0b2dnbGUgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogQ0xBU1NfVE9HR0xFLFxcclxcbiAgICB9LCAoIGNsYXNzTmFtZSwga2V5ICkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBlbGVtZW50c1sga2V5IF0gPSBmaW5kKCBgLiR7IGNsYXNzTmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfWAgKTtcXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICBhc3NpZ24oIGVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cywgeyByb290LCB0cmFjaywgbGlzdCwgc2xpZGVzIH0gKTtcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIGVzc2VudGlhbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudHMuXFxyXFxuICAgKiBOb3RlIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgb2YgdGhlIHJvb3QgZWxlbWVudCxcXHJcXG4gICAqIHdoaWNoIHJlbW92ZXMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSByZWdpb24gZnJvbSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlkICAgPSByb290LmlkIHx8IHVuaXF1ZUlkKCBQUk9KRUNUX0NPREUgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNvbnN0IHJvbGUgPSBvcHRpb25zLnJvbGU7XFxyXFxuXFxyXFxuICAgIHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290LmlkICA9IGlkO1xcclxcbiAgICB0cmFjay5pZCA9IHRyYWNrLmlkIHx8IGAkeyBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgfS10cmFja2A7XFxyXFxuICAgIGxpc3QuaWQgID0gbGlzdC5pZCB8fCBgJHsgaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30tbGlzdGA7XFxyXFxuXFxyXFxuICAgIGlmICggISBnZXRBdHRyaWJ1dGUoIHJvbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0LCBST0xFICkgJiYgcm9vdC50YWdOYW1lICE9PSAnU0VDVElPTicgJiYgcm9sZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCByb290LCBST0xFLCByb2xlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldEF0dHJpYnV0ZSggcm9vdCwgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuLmNhcm91c2VsICk7XFxyXFxuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBdHRyaWJ1dGUoIGxpc3QsIFJPTEUsICdwcmVzZW50YXRpb24nICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBGaW5kcyBhbiBlbGVtZW50IG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x5IGluIHRoaXMgc2xpZGVyLCBpZ25vcmluZyBlbGVtZW50cyBpbiBhIG5lc3RlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBmb3VuZCBlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCBvciBudWxsLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBmaW5kKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3I6IHN0cmluZyApOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjb25zdCBlbG0gPSBxdWVyeTxIVE1MRWxlbWVudD4oIHJvb3QsIHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciApO1xcclxcbiAgICByZXR1cm4gZWxtICYmIGNsb3Nlc3QoIGVsbSwgYC4keyBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUk9PVCB9YCApID09PSByb290ID8gZWxtIDogdW5kZWZpbmVkO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJuIGFuIGFycmF5IHdpdGggbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGlmaWVyIGNsYXNzZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGJhc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBiYXNlIGNsYXNzIG5hbWUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gQW4gYXJyYXkgd2l0aCBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZ2V0Q2xhc3NlcyggYmFzZTogc3RyaW5nICk6IHN0cmluZ1tdIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBbXFxyXFxuICAgICAgYCR7IGJhc2UgfS0tJHsgb3B0aW9ucy50eXBlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9YCxcXHJcXG4gICAgICBgJHsgYmFzZSB9LS0keyBvcHRpb25zLmRpcmVjdGlvbiB9YCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgICAgb3B0aW9ucy5kcmFnICYmIGAkeyBiYXNlIH0tLWRyYWdnYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgLFxcclxcbiAgICAgIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmIGAkeyBiYXNlIH0tLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXZgLFxcclxcbiAgICAgIGJhc2UgPT09IENMQVNTX1JPT1QgJiYgQ0xBU1NfQUNUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRSxcXHJcXG4gICAgXTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWduKCBlbGVtZW50cywge1xcclxcbiAgICBzZXR1cCxcXHJcXG4gICAgbW91bnQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBkZXN0cm95LFxcclxcbiAgfSApO1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IG1hdGNoZXMgfSBmcm9tICcuLi9tYXRjaGVzL21hdGNoZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTdGFydHMgZnJvbSB0aGUgcHJvdmlkZWQgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQsIHNlYXJjaGVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzIHRoZSBzZWxlY3RvciBpbiBhc2NlbmRhbnRzLlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBmcm9tICAgICAtIEFuIGVsZW1lbnQgdG8gc2VhcmNoIGZyb20uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IuXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBUaGUgZm91bmQgZWxlbWVudCBpZiBhdmFpbGFibGUsIG9yIGBudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNsb3Nlc3QoIGZyb206JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmluZyApOiBIVE1MRWxlbWVudCB8ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsIHtcXHJcXG4gIGlmICggaXNGdW5jdGlvbiggZnJvbS5jbG9zZXN0ICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICByZXR1cm4gZnJvbS5jbG9zZXN0KCBzZWxlY3RvciApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIGxldCBlbG06IEhUTUxFbGVtZW50IHwgbnVsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBmcm9tO1xcclxcblxcclxcbiAgd2hpbGUgKCBlbG0gJiYgZWxtLm5vZGVUeXBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gMSApIHtcXHJcXG4gICAgaWYgKCBtYXRjaGVzKCBlbG0sIHNlbGVjdG9yICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGJyZWFrO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gZWxtO1xcclxcbn0iLCJpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJTSVpFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSc7XFxyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbnQsIENvbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgYWRkQ2xhc3MsXFxyXFxuICBhcHBlbmQsXFxyXFxuICBhcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBiZWZvcmUsXFxyXFxuICBiZXR3ZWVuLFxcclxcbiAgZW1wdHksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZm9yRWFjaCBhcyBmb3JFYWNoSXRlbSxcXHJcXG4gIGluY2x1ZGVzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGlzRnVuY3Rpb24sXFxyXFxuICBpc0hUTUxFbGVtZW50LFxcclxcbiAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzU3RyaW5nLFxcclxcbiAgbWF0Y2hlcyxcXHJcXG4gIHBhcnNlSHRtbCxcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVyeUFsbCxcXHJcXG4gIHJlbW92ZSBhcyByZW1vdmVOb2RlLFxcclxcbiAgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQXJyYXksXFxyXFxufSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNsaWRlLCBTbGlkZUNvbXBvbmVudCB9IGZyb20gJy4vU2xpZGUnO1xcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGludGVyZmFjZSBTbGlkZXNDb21wb25lbnQgZXh0ZW5kcyBCYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNvbXBvbmVudCB7XFxyXFxuICB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rlciggc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyLCBzbGlkZUluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleDogbnVtYmVyICk6IHZvaWQ7XFxyXFxuICBnZXQoIGV4Y2x1ZGVDbG9uZXM/OiBibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGVhbiApOiBTbGlkZUNvbXBvbmVudFtdO1xcclxcbiAgZ2V0SW4oIHBhZ2U6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgKTogU2xpZGVDb21wb25lbnRbXTtcXHJcXG4gIGdldEF0KCBpbmRleDogbnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlciApOiBTbGlkZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcXHJcXG4gIGFkZCggc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBzdHJpbmcgfCBFbGVtZW50IHwgQXJyYXk8c3RyaW5nIHwgRWxlbWVudD4sIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleD86IG51bWJlciApOiB2b2lkO1xcclxcbiAgcmVtb3ZlKCBzZWxlY3RvcjogU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlTWF0Y2hlciApOiB2b2lkO1xcclxcbiAgZm9yRWFjaCggaXRlcmF0ZWU6IFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNJdGVyYXRlZSwgZXhjbHVkZUNsb25lcz86IGJvb2xlYW4gKTogdm9pZDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmaWx0ZXIoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciApOiBTbGlkZUNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RbXTtcXHJcXG4gIHN0eWxlKCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyLCB1c2VDb250YWluZXI/OiBib29sZWFuICk6IHZvaWRcXHJcXG4gIGdldExlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Vub3VnaCgpOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGl0ZXJhdGVlIGZ1bmN0aW9uIGZvciBTbGlkZXMuXFxyXFxuICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0l0ZXJhdGVlID0gKCBTbGlkZTogU2xpZGVDb21wb25lbnQsIGluZGV4OiBudW1iZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyLCBTbGlkZXM6IFNsaWRlQ29tcG9uZW50W10gKSA9PiB2b2lkXFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZm9yIFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IHR5cGUgU2xpZGVzUHJlZGljYXRlID0gKCBTbGlkZTogU2xpZGVDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBpbmRleDogbnVtYmVyLCBTbGlkZXM6IFNsaWRlQ29tcG9uZW50W10gKSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYW55XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGZpbHRlcmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU2xpZGVDb21wb25lbnQgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBTbGlkZU1hdGNoZXIgPSBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyIHwgbnVtYmVyW10gfCBzdHJpbmcgfCBTbGlkZXNQcmVkaWNhdGU7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVzIGluY2x1ZGUgY2xvbmVzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gU2xpZGVzIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTbGlkZXMoIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMgKTogU2xpZGVzQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24sIGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0LCBiaW5kIH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgeyBzbGlkZXMsIGxpc3QgfSA9IENvbXBvbmVudHMuRWxlbWVudHM7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIFNsaWRlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3RzLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBTbGlkZXM6IFNsaWRlQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudFtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaW5pdCgpO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kgKTtcXHJcXG4gICAgb24oIEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9SRUZSRVNILCBpbml0ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgc2xpZGVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKCAoIHNsaWRlLCBpbmRleCApID0+IHsgcmVnaXN0ZXIoIHNsaWRlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgsIC0xICkgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIFNsaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PiB7IFNsaWRlLmRlc3Ryb3koKSB9ICk7XFxyXFxuICAgIGVtcHR5KCBTbGlkZXMgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE1hbnVhbGx5IHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGVzIHRoZSBzdGF0dXMgb2YgYWxsIHNsaWRlcy5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaCggU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlID0+IHsgU2xpZGUudXBkYXRlKCkgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogUmVnaXN0ZXJzIGEgc2xpZGUgZWxlbWVudCBhbmQgY3JlYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYSBTbGlkZSBvYmplY3QuXFxyXFxuICAgKiBOZWVkcyB0byBzb3J0IGV2ZXJ5IHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lIHdoZW4gYSBuZXcgc2xpZGUgaXMgcmVnaXN0ZXJlZCBlc3BlY2lhbGx5IGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBzbGlkZSAgICAgIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgc2xpZGUgZWxlbWVudCB0byByZWdpc3Rlci5cXHJcXG4gICAqIEBwYXJhbSBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggICAgICAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gc2xpZGVJbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggLSBBIHNsaWRlIGluZGV4IGZvciBjbG9uZXMuIFRoaXMgbXVzdCBiZSBgLTFgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgcmVndWxhciBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWdpc3Rlciggc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyLCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVJbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBvYmplY3QgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUoIFNwbGlkZSwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBvYmplY3QubW91bnQoKTtcXHJcXG4gICAgU2xpZGVzLnB1c2goIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgU2xpZGVzLnNvcnQoICggU2xpZGUxLCBTbGlkZTIgKSA9PiBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUxLmluZGV4IC0gU2xpZGUyLmluZGV4ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGFsbCBTbGlkZSBvYmplY3RzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gZXhjbHVkZUNsb25lcyAtIE9wdGlvbmFsLiBEZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJtaW5lcyB3aGV0aGVyIHRvIGV4Y2x1ZGUgY2xvbmVzIG9yIG5vdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHJldHVybiBBbiBhcnJheSB3aXRoIFNsaWRlIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXQoIGV4Y2x1ZGVDbG9uZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogYm9vbGVhbiApOiBTbGlkZUNvbXBvbmVudFtdIHtcXHJcXG4gICAgcmV0dXJuIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdWRlQ2xvbmVzID8gZmlsdGVyKCBTbGlkZSA9PiAhIFNsaWRlLmlzQ2xvbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBTbGlkZXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZXR1cm5zIHNsaWRlcyBpbiB0aGUgc3BlY2lmaWVkIHBhZ2UuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSBwYWdlIC0gQSBwYWdlIGluZGV4LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcmV0dXJuIEFuIGFycmF5IHdpdGggc2xpZGVzIHRoYXQgYmVsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyB0byB0aGUgcGFnZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBwYWdlOiBudW1iZXIgKTogU2xpZGVDb21wb25lbnRbXSB7XFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB7IENvbnRyb2xsZXIgfSA9IENvbXBvbmVudHM7XFxyXFxuICAgIGNvbnN0IGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCA9IENvbnRyb2xsZXIudG9JbmRleCggcGFnZSApO1xcclxcbiAgICBjb25zdCBtYXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgPSBDb250cm9sbGVyLmhhc0ZvY3VzKCkgPyAxIDogb3B0aW9ucy5wZXJQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgcmV0dXJuIGZpbHRlciggU2xpZGUgPT4gYmV0d2VlbiggU2xpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4LCBpbmRleCwgaW5kZXggKyBtYXggLSAxICkgKTtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgYSBTbGlkZSBvYmplY3QgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBzcGVjaWZpZWQgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gQSBTbGlkZSBvYmplY3QgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlZmluZWRgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRBdCggaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4OiBudW1iZXIgKTogU2xpZGVDb21wb25lbnQgfCB1bmRlZmluZWQge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIGZpbHRlciggaW5kZXggKVsgMCBdO1xcclxcbiAgfVxcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogSW5zZXJ0cyBhIHNsaWRlIG9yIHNsaWRlcyBhdCBhIHNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjaWZpZWQgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGl0ZW1zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgc2xpZGUgZWxlbWVudCwgYW4gSFRNTCBzdHJpbmcgb3IgYW4gYXJyYXkgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggdGhlbS5cXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIE9wdGlvbmFsLiBBbiBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggdG8gaW5zZXJ0IHRoZSBzbGlkZSBhdC4gSWYgb21pdHRlZCwgYXBwZW5kcyBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdG8gdGhlIGxpc3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGFkZCggaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW1zOiBzdHJpbmcgfCBFbGVtZW50IHwgQXJyYXk8c3RyaW5nIHwgRWxlbWVudD4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBpbmRleD86IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaEl0ZW0oIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVtcywgc2xpZGUgPT4ge1xcclxcbiAgICAgIGlmICggaXNTdHJpbmcoIHNsaWRlICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkge1xcclxcbiAgICAgICAgc2xpZGUgPSBwYXJzZUh0bWwoIHNsaWRlICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBpZiAoIGlzSFRNTEVsZW1lbnQoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSApICkge1xcclxcbiAgICAgICAgY29uc3QgcmVmID0gc2xpZGVzWyBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXTtcXHJcXG4gICAgICAgIHJlZiA/IGJlZm9yZSggc2xpZGUsIHJlZiApIDogYXBwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCggbGlzdCwgc2xpZGUgKTtcXHJcXG4gICAgICAgIGFkZENsYXNzKCBzbGlkZSwgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuY2xhc3Nlcy5zbGlkZSApO1xcclxcbiAgICAgICAgb2JzZXJ2ZUltYWdlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHNsaWRlLCBhcHBseSggZW1pdCwgRVZFTlRfUkVTSVpFICkgKTtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIGVtaXQoIEVWRU5UX1JFRlJFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidIICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW92ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlcyB0aGF0IG1hdGNoIHRoZSBtYXRjaGVyXFxyXFxuICAgKiB0aGF0IGNhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmUgYW4gaW5kZXgsIGFuIGFycmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gbWF0Y2hlciAtIEFuIGluZGV4LCBhbiBhcnJheSB3aXRoIGluZGljZXMsIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yIHN0cmluZywgb3IgYW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiByZW1vdmUoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZU5vZGUoIGZpbHRlciggbWF0Y2hlciApLm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXAoIFNsaWRlID0+IFNsaWRlLnNsaWRlICkgKTtcXHJcXG4gICAgZW1pdCggRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1JFRlJFU0ggKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0l0ZXJhdGVzIG92ZXIgU2xpZGUgb2JqZWN0cyBieSB0aGUgaXRlcmF0ZWUgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpdGVyYXRlZSAgICAgIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFuIGl0ZXJhdGVlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBTbGlkZSBvYmplY3QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhbiBpbmRleCBhbmQgYW4gYXJyYXkgd2l0aCBTbGlkZXMuXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGV4Y2x1ZGVDbG9uZXMgLSBPcHRpb25hbC4gRGV0ZXJtaW5lcyB3aGV0aGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBleGNsdWRlIGNsb25lcyBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBmb3JFYWNoKCBpdGVyYXRlZTogU2xpZGVzSXRlcmF0ZWUsIGV4Y2x1ZGVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVzPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgZ2V0KCBleGNsdWRlQ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lcyApLmZvckVhY2goIGl0ZXJhdGVlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBGaWx0ZXJzIFNsaWRlcyBieSB0aGUgbWF0Y2hlclxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheSB3aXRoIGluZGljZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhIHNlbGVjdG9yLCBvciBhIHByZWRpY2F0ZSBmdW5jdGlvbi5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXJyYXkgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGEgcHJlZGljYXRlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEFuIGFycmF5IHdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIFNsaWRlQ29tcG9uZW50IG9iamVjdHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBmaWx0ZXIoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciApOiBTbGlkZUNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRbXSB7XFxyXFxuICAgIHJldHVybiBTbGlkZXMuZmlsdGVyKCBpc0Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiggbWF0Y2hlciApXFxyXFxuICAgICAgPyBtYXRjaGVyXFxyXFxuICAgICAgOiBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgPT4gaXNTdHJpbmcoIG1hdGNoZXIgKVxcclxcbiAgICAgICAgPyBtYXRjaGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggU2xpZGUuc2xpZGUsIG1hdGNoZXIgKVxcclxcbiAgICAgICAgOiBpbmNsdWRlcyggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvQXJyYXkoIG1hdGNoZXIgKSwgU2xpZGUuaW5kZXggKVxcclxcbiAgICApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQWRkcyBhIENTUyByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsZSB0byBhbGwgc2xpZGVzIG9yIGNvbnRhaW5lcnMuXFxyXFxuICAgKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBwcm9wICAgICAgICAgLSBBIHByb3BlcnR5IG5hbWUuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHBhcmFtIHZhbHVlICAgICAgICAtIEEgQ1NTIHZhbHVlIHRvIGFkZC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcGFyYW0gdXNlQ29udGFpbmVyIC0gT3B0aW9uYWwuIERldGVybWluZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdoZXRoZXIgdG8gYXBwbHkgdGhlIHJ1bGUgdG8gdGhlIGNvbnRhaW5lciBvciBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdHlsZSggcHJvcDogc3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciwgdXNlQ29udGFpbmVyPzogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW4gKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIFNsaWRlID0+IHsgU2xpZGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKCBwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmVyICkgfSApO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW52b2tlcyB0aGUgY2FsbGJhY2sgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdGVyIGFsbCBpbWFnZXMgaW4gdGhlIGVsZW1lbnQgYXJlIGxvYWRlZC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIGVsbSAgICAgIC0gQW4gZWxlbWVudCB0aGF0IG1heScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29udGFpbiBpbWFnZXMuXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjayBmdW5jdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb2JzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVJbWFnZXMoIGVsbTogRWxlbWVudCwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB2b2lkIHtcXHJcXG4gICAgY29uc3QgaW1hZ2VzID0gcXVlcnlBbGwoIGVsbSwgJ2ltIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImcnICk7XFxyXFxuICAgIGxldCB7IGxlbmd0aCB9ID0gaW1hZ2VzO1xcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgaWYgKCBsZW5ndGggKSB7XFxyXFxuICAgICAgaW1hZ2VzLmZvckVhY2goIGltJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImcgPT4ge1xcclxcbiAgICAgICAgYmluZCggaW1nLCAnbG9hZCBlcnJvcicsICgpID0+IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICAgIGlmICggISAtLWxlbmd0aCApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgY2FsbGJhY2soKTtcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBzbGlkZXMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBleGNsdWRlQ2xvbmVzIC0gT3B0aW9uYWwuIERldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcm1pbmVzIHdoZXRoZXIgdG8gZXhjbHVkZSBjbG9uZXMgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2Ygc2xpZGVzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0TGVuZ3RoKCBleGNsdWRlQ2xvbmVzPzogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzLmxlbmd0aCA6IFNsaWRlcy5sZW5ndGg7XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIG51bWJlciBvZiBzbGlkZXMgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG92ZXIgdGhhbiB0aGUgYHBlclBhZ2VgIG9wdGlvbiwgaW5jbHVkaW5nIGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlcmUgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZSBlbm91Z2ggc2xpZGVzLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGlzRW5vdWdoKCk6IGJvb2xlYW4ge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIFNsaWRlcy5sZW5ndGggPiBvcHRpb25zLnBlclBhZ2U7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBkZXN0cm95LFxcclxcbiAgICB1cGRhdGUsXFxyXFxuICAgIHJlZ2lzdGVyLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgZ2V0LFxcclxcbiAgICBnZXRJbixcXHJcXG4gICAgZ2V0QXQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBhZGQsXFxyXFxuICAgIHJlbW92ZSxcXHJcXG4gICAgZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIGZpbHRlcixcXHJcXG4gICAgc3R5bGUsXFxyXFxuICAgIGdldExlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidndGgsXFxyXFxuICAgIGlzRW5vdWdoLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImltcG9ydCB7IFRUQiB9IGZyb20gXCcuLi8uLi9jb25zdGFudHMvZGlyZWN0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcbmltcG9ydCB7IEVWRU5UX09WRVJGTE9XLCBFVkVOVF9SRUZSRVNILCBFViIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVTSVpFLCBFVkVOVF9SRVNJWkVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZmFjZSwgVGhyb3R0bGUgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhYnMsIGFwcGx5LCBhIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXJ0LCBpc09iamVjdCwgcmVjdCwgc3R5bGUsIHRvZ2dsZUNsYXNzLCB1bml0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBGQURFIH0gZnJvbSAnLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NfT1ZFUkZMTyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJXIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcblxcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgTGF5b3V0IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBCYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNvbXBvbmVudCB7XFxyXFxuICBsaXN0U2l6ZSgpOiBudW1iZXI7XFxyXFxuICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplKCBpbmRleDogbnVtYmVyLCB3aXRob3V0R2FwPzogYm9vbGVhbiApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xcclxcbiAgc2xpZGVyU2l6ZSggd2l0aG91dEdhcD86IGJvb2xlYW4gKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlcjtcXHJcXG4gIHRvdGFsU2l6ZSggaW5kZXg/OiBudW1iZXIsIHdpdGhvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0R2FwPzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFxuICBnZXRQYWRkaW5nKCByaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGJvb2xlYW4gKTogbnVtYmVyO1xcclxcbiAgaXNPdmVyZmxvdygpOiBib29sZWFuOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKiBAaW50ZXJuYWwgKi9cXHJcXG4gIHJlc2l6ZSggZm9yYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPzogYm9vbGVhbiApOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogVGhlIGNvbXBvbmVudCB0aGF0IGFkanVzdHMgc2xpZGVyIHN0eWxlcyBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3ZpZGVzIG1ldGhvZHMgZm9yIGRpbWVuc2lvbnMuXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBMYXlvdXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMYXlvdXQoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uczogT3B0aW9ucyApOiBMYXlvdXRDb21wb25lbnQge1xcclxcbiAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHsgb24sIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjb25zdCB7IFNsaWRlcyB9ID0gQ29tcG9uZW50cztcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB7IHJlc29sdmUgfSA9IENvbXBvbmVudHMuRGlyZWN0aW9uO1xcclxcbiAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHsgcm9vdCwgdHJhY2ssIGxpc3QgfSA9IENvbXBvbmVudHMuRWxlbWVudHM7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgY29uc3QgeyBnZXRBdCwgc3R5bGU6IHN0eWxlU2xpZGVzIH0gPSBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlciBkaXJlY3Rpb24gaXMgdmVydGljYWwgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgbGV0IHZlcnRpY2FsOiBib29sZWFuO1xcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogS2VlcHMgdGhlIERPTVJlY3Qgb2JqZWN0IG9mIHRoZSByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICBsZXQgcm9vdFJlY3Q6IERPTVJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUdXJucyBpbnRvIGB0cnVlYCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiB0aGUgY2Fyb3VzZWwgaXMgd2lkZXIgdGhhbiB0aGUgbGlzdC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGxldCBvdmVyZmxvdzogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gICAgaW5pdCgpO1xcclxcbiAgICBiaW5kKCB3aW5kb3csICdyZXNpemUgbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvYWQnLCBUaHJvdHRsZSggYXBwbHkoIGVtaXQsIEVWRU5UX1JFU0laRSApICkgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIG9uKCBbIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgKTtcXHJcXG4gICAgb24oIEVWRU5UX1JFU0laRSwgcmVzaXplICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBvbiBgbW91bnRgIG9yIGB1cGRhdGVkYC5cXHJcXG4gICAqIFVzZXMgYG1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gtd2lkdGhgIGZvciB0aGUgcm9vdCB0byBwcmV2ZW50IHRoZSBzbGlkZXIgZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXhjZWVkaW5nIHRoZSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGluaXQoKTogdm9pZCB7XFxyXFxuICAgIHZlcnRpY2FsID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uID09PSBUVEI7XFxyXFxuXFxyXFxuICAgIHN0eWxlKCByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgJ21heFdpZHRoJywgdW5pdCggb3B0aW9ucy53aWR0aCApICk7XFxyXFxuICAgIHN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlsZSggdHJhY2ssIHJlc29sdmUoICdwYWRkaW5nTGVmdCcgKSwgY3NzUGFkZGluZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoIGZhbHNlICkgKTtcXHJcXG4gICAgc3R5bGUoIHRyYWNrLCByZXNvbHZlKCAncGFkZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbmdSaWdodCcgKSwgY3NzUGFkZGluZyggdHJ1ZSApICk7XFxyXFxuXFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXNpemUoIHRydWUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIFVwZGF0ZXMgZGltZW5zaW9ucyBvZiBzb21lIGVsZW1lbnRzIHdoZW4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBjYXJvdXNlbCBpcyByZXNpemVkLlxcclxcbiAgICogQWxzbyBjaGVja3MgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYXJvdXNlbCBzaXplIGFuZCBlbWl0cyBgb3ZlcmZsb3dgIGV2ZW50cyB3aGVuIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBleGNlZWRzIHRoZSBsaXN0IHdpZHRoLlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gZm9yY2UgLSBTa2lwcyBjaGVja2luZyB0aGUgcm9vdCBkaW1lbnNpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoYW5nZSBhbmQgYWx3YXlzIHBlcmZvcm1zIHRoZSByZXNpemluZyBwcm9jZXNzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzaXplKCBmb3JjZT86IGJvb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBuZXdSZWN0ID0gcmVjdCggcm9vdCApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gICAgaWYgKCBmb3JjZSB8fCByb290UmVjdC53aWR0aCAhPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IG5ld1JlY3Qud2lkdGggfHwgcm9vdFJlY3QuaGVpZ2h0ICE9PSBuZXdSZWN0LmgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWlnaHQgKSB7XFxyXFxuICAgICAgc3R5bGUoIHRyYWNrLCAnaGVpZ2h0JywgY3NzVHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrSGVpZ2h0KCkgKTtcXHJcXG5cXHJcXG4gICAgICBzdHlsZVNsaWRlcyggcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9sdmUoICdtYXJnaW5SaWdodCcgKSwgdW5pdCggb3B0aW9ucy5nYXAgKSApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4gICAgICBzdHlsZVNsaWRlcyggJ3dpZHRoJywgY3NzU2xpZGVXaWR0aCgpICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbiAgICAgIHN0eWxlU2xpZGVzKCAnaGVpZ2h0JywgY3NzU2xpZGVIZWlnaHQoKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHRydWUgKTtcXHJcXG5cXHJcXG4gICAgICByb290UmVjdCA9IG5ld1JlY3Q7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGVtaXQoIEVWRU5UX1JFU0laRUQgKTtcXHJcXG5cXHJcXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCBvdmVyZmxvdyAhPT0gKCBvdmVyZmxvdyA9IGlzT3ZlcmZsb3coKSApICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICAgIHRvZ2dsZUNsYXNzKCByb290LCBDTEFTU19PVkVSRkxPVywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZXJmbG93ICk7XFxyXFxuICAgICAgICBlbWl0KCBFVkVOVF9PVkVSRkxPVywgb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmbG93ICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBQYXJzZXMgdGhlIHBhZGRpbmcgb3B0aW9uIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgcmV0dXJucyB0aGUgdmFsdWUgZm9yIGVhY2ggc2lkZS5cXHJcXG4gICAqIFRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1ldGhvZCByZXR1cm5zIGBwYWRkaW5nVG9wYCBvciBgcGFkZGluZ0JvdHRvbWAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciB0aGUgdmVydGljYWwgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gcmlnaHQgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZ2V0IGBwYWRkaW5nUmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0L0JvdHRvbWAgb3IgYHBhZGRpbmdMZWZ0L1RvcGAuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEByZXR1cm4gVGhlIHBhZGRpbmcgdmFsdWUgYXMgYSBDU1Mgc3RyaW5nLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzUGFkZGluZyggcmlnaHQ6IGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb29sZWFuICk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IHsgcGFkZGluZyB9ID0gb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbnM7XFxyXFxuICAgIGNvbnN0IHByb3AgPSByZXNvbHZlKCByaWdodCA/ICdyaWciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaHQnIDogJ2xlZnQnICk7XFxyXFxuICAgIHJldHVybiBwYWRkaW5nXFxyXFxuICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICYmIHVuaXQoIHBhZGRpbmdbIHByb3AgXSB8fCAoIGlzT2JqZWN0KCBwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuZyApID8gMCA6IHBhZGRpbmcgKSApXFxyXFxuICAgICAgfHwgJzBweCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mIHRoZSB0cmFjayBlbGVtZW50IGFzIGEgQ1NTIHN0cmluZy5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBUaGUgaGVpZ2h0IG9mIHRoZSB0cmFjay5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNzc1RyYWNrSGVpZ2h0KCk6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbmcge1xcclxcbiAgICBsZXQgaGVpZ2h0ID0gJyc7XFxyXFxuXFxyXFxuICAgIGlmICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZlcnRpY2FsICkge1xcclxcbiAgICAgIGhlaWdodCA9IGNzc0hlaWdodCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG4gICAgICBhc3NlcnQoIGhlaWdodCwgJ2hlaWdodCBvciBoZWlnaHRSYXRpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm8gaXMgbWlzc2luZy4nICk7XFxyXFxuICAgICAgaGVpZ2h0ID0gYGNhbGMoJHsgaGVpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCB9IC0gJHsgY3NzUGFkZGluZyggZmFsc2UgKSB9IC0gJHsgY3NzUGFkZGluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHRydWUgKSB9KWA7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBvcHRpb25zIHJlbGF0ZWQgd2l0aCBoZWlnaHQgdG8gYSBDU1Mgc3RyaW5nLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBoZWlnaHQgYXMgYSBDU1MgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZyBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjc3NIZWlnaHQoKTogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIHJldHVybiB1bml0KCBvcHRpb25zLmhlaWdodCB8fCByZWN0KCBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdCApLndpZHRoICogb3B0aW9ucy5oZWlnaHRSYXRpbyApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZSBhcyBhIENTUyBzdHJpbmcuXFxyXFxuICAgKlxcclxcbiAgICogQHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gVGhlIHdpZHRoIG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGNzc1NsaWRlV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGhcXHJcXG4gICAgICA/IG51bGxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgOiB1bml0KCBvcHRpb25zLmZpeGVkV2lkdGggKSB8fCAoIHZlcnRpY2FsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiA/ICcnIDogY3NzU2xpZGVTaXplKCkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgc2xpZGUgYXMgYSBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTIHN0cmluZy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlSGVpZ2h0KCk6IHN0cmluZyB8IG51bGwge1xcclxcbiAgICByZXR1cm4gdW5pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZml4ZWRIZWlnaHQgKVxcclxcbiAgICAgIHx8ICggdmVydGljYWwgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBvcHRpb25zLmF1dG9IZWlnaHQgPyBudWxsIDogY3NzU2xpZGVTaXplKCkgKSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjc3NIZWlnaHQoKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogUmV0dXJucyB0aGUgQ1NTIHN0cmluZyBmb3Igc2xpZGUgd2lkdGggb3IgaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCB3aXRob3V0IGdhcC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgQ1NTIHN0cmluZyBmb3Igc2xpZGUgd2lkdGggb3IgaGVpZ2h0LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gY3NzU2xpZGVTaXplKCk6IHN0cmluZyB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCBnYXAgPSB1bml0KCBvcHRpb25zLmdhcCApO1xcclxcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGBjYWxjKCgxMDAlJHsgZ2FwICYmIGAgKyAkeyBnYXAgfWAgfSkvJHsgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMucGVyUGFnZSB8fCAxIH0keyBnYXAgJiYgYCAtICR7IGdhcCB9YCB9KWA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCBmb3IgdGhlIGhvcml6b250YWwgc2xpZGVyLCBvciB0aGUgaGVpZ2h0IGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIHZlcnRpY2FsIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBUaGUgc2l6ZSBvZiB0aGUgbGlzdCBlbGVtZW50IGluIHBpeGVsLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gbGlzdFNpemUoKTogbnVtYmVyIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHJldHVybiByZWN0KCBsaXN0IClbIHJlc29sdmUoICd3aWR0aCcgKSBdO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgc2xpZGUgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoIGZvciB0aGUgaG9yaXpvbnRhbCBzbGlkZXIsIG9yIHRoZSBoZWlnaHQgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgdmVydGljYWwgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggICAgICAtIE9wdGlvbmFsLiBBIHNsaWRlIGluZGV4LlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSB3aXRob3V0R2FwIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gZXhjbHVkZSB0aGUgZ2FwIGFtb3VudCBvciBub3QuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEByZXR1cm4gVGhlIHNpemUgb2YgdGhlIHNwZWNpZmllZCBzbGlkZSBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudCBpbiBwaXhlbC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2l6ZSggaW5kZXg/OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuICk6IG51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIge1xcclxcbiAgICBjb25zdCBTbGlkZSA9IGdldEF0KCBpbmRleCB8fCAwICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gU2xpZGVcXHJcXG4gICAgICA/IHJlY3QoIFNsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzbGlkZSApWyByZXNvbHZlKCAnd2lkdGgnICkgXSArICggd2l0aG91dEdhcCA/IDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogZ2V0R2FwKCkgKVxcclxcbiAgICAgIDogMDtcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIHRvdGFsIHdpZHRoIG9yIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQgb2Ygc2xpZGVzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHNsaWRlciB0byB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHNwZWNpZmllZCBpbmRleC5cXHJcXG4gICAqIFRoaXMgaW5jbHVkZXMgc2l6ZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mIGNsb25lcyBiZWZvcmUgdGhlIGZpcnN0IHNsaWRlLlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcGFyYW0gaW5kZXggICAgICAtIEEgc2xpZGUgaW5kZXguIElmIG9taXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVkLCB1c2VzIHRoZSBsYXN0IGluZGV4LlxcclxcbiAgICogQHBhcmFtIHdpdGhvdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR2FwIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBleGNsdWRlIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgbGFzdCBnYXAgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB0b3RhbCB3aWR0aCBvZiBzbGlkZXMgaW4gdGhlIGhvcml6b250YWwgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciwgb3IgdGhlIGhlaWdodCBpbiB0aGUgdmVydGljYWwgb25lLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gdG90YWxTaXplKCBpbmRleDogbnVtYmVyLCB3aXRobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dEdhcD86IGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgU2xpZGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0QXQoIGluZGV4ICk7XFxyXFxuXFxyXFxuICAgIGlmICggU2xpZGUgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNvbnN0IHJpZ2h0ID0gcmVjdCggU2xpZGUuc2xpZGUgKVsgcmVzb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidmUoICdyaWdodCcgKSBdO1xcclxcbiAgICAgIGNvbnN0IGxlZnQgID0gcmVjdCggbGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgKVsgcmVzb2x2ZSggJ2xlZnQnICkgXTtcXHJcXG4gICAgICByZXR1cm4gYWJzKCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlnaHQgLSBsZWZ0ICkgKyAoIHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIDA7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBzbGlkZXIgc2l6ZSB3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aG91dCBjbG9uZXMgYmVmb3JlIHRoZSBmaXJzdCBzbGlkZS5cXHJcXG4gICAqIERvICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJub3QgdXNlIHRoZSBjbG9uZSdzIHNpemUgYmVjYXVzZSBpdCdzIHVuc3RhYmxlIHciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlsZSBpbml0aWFsaXppbmcgYW5kIHJlZnJlc2hpbmcgcHJvY2Vzcy5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIHdpdGhvdXRHYXAgLSBPcHRpb25hbC4gRGV0ZXJtaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgd2hldGhlciB0byBleGNsdWRlIHRoZSBsYXN0IGdhcCBvciBub3QuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlciB3aXRob3V0IGNsb25lcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlclNpemUoIHdpdGhvdXRHYXA/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gdG90YWxTaXplKCBTcGxpZGUubGVuZ3RoIC0gMSApIC0gdG90YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsU2l6ZSggMCApICsgc2xpZGVTaXplKCAwLCB3aXRob3V0R2FwICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBnYXAgdmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlIGluIHBpeGVsIGJ5IHVzaW5nIHRoZSBjb21wdXRlZCBzdHlsZSBvZiB0aGUgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcnN0IHNsaWRlLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIGdhcCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUgaW4gcGl4ZWwuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldEdhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AoKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgU2xpZGUgPSBnZXRBdCggMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoIHN0eWxlKCBTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZGUuc2xpZGUsIHJlc29sdmUoICdtYXJnaW5SaWdodCcgKSApICkgfHwgMDtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIHBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhbHVlLlxcclxcbiAgICogVGhpcyBtZXRob2QgcmVzb2x2ZXMgdGhlIGRpZmZlcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIG9mIHRoZSBkaXJlY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCAtIERldGVybWluZXMgd2hldGhlciB0byBnZXQgYHBhZGRpbmdSaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvQm90dG9tYCBvciBgcGFkZGluZ0xlZnQvVG9wYC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHJldHVybiBUaGUgcGFkZGluZyB2YWx1ZSBpbiBwaXhlbC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcoIHJpZ2h0OiBib29sZWFuICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIge1xcclxcbiAgICByZXR1cm4gcGFyc2VGbG9hdCggc3R5bGUoIHRyYWNrLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgcmVzb2x2ZSggYHBhZGRpbmckeyByaWdodCA/ICdSaWdodCcgOiAnTGVmdCcgfWAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKSApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDaGVja3MgaWYgdGhlIGNhcm91c2VsIGlzIHdpZGVyIHRoYW4gdGhlIGxpc3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYHRydWVgIGZvciBhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWRlIGNhcm91c2VsLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgY2Fyb3VzZWwgaXMgd2lkZXIgdGhhbiB0aGUgbGlzdCwgb3Igb3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc092ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmxvdygpOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIFNwbGlkZS5pcyggRkFERScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSB8fCBzbGlkZXJTaXplKCB0cnVlICkgPiBsaXN0U2l6ZSgpO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzaXplLFxcclxcbiAgICBsaXN0U2l6ZSxcXHJcXG4gICAgc2xpZGVTaXplLFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgc2xpZGVyU2l6ZSxcXHJcXG4gICAgdG90YWxTaXplLFxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UGFkZGluZyxcXHJcXG4gICAgaXNPdmVyZmxvdyxcXHJcXG4gIH07XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCJpbXBvcnQgeyBBbnlGdW5jdGlvbiB9IGZyb20gXCcuLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvdHlwZXMnO1xcclxcbmltcG9ydCB7IFJlcXVlc3RJbnRlcnZhbCB9IGZyb20gJy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJSZXF1ZXN0SW50ZXJ2YWwvUmVxdWVzdEludGVydmFsJztcXHJcXG5cXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHVybmluZyB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgdGhlIFJlcXVlc3RJbnRlcnZhbC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFRocm90dGxlSW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbmNlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gZXh0ZW5kcyBGdW5jdGlvbiB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgKCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEY+ICk6IHZvaWQ7XFxyXFxufVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1cm5zIHRoZSB0aHJvdHRsZWQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGZ1bmMgICAgIC0gQSBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdG8gdGhyb3R0bGUuXFxyXFxuICogQHBhcmFtIGR1cmF0aW9uIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaHJvdHRsZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXFxyXFxuICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHJldHVybiBBIHRocm90dGxlZCBmdW5jdGlvbi5cXHJcXG4gKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0IGZ1bmN0aW9uIFRocm90dGxlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuYzogRixcXHJcXG4gIGR1cmF0aW9uPzogbnVtYmVyXFxyXFxuKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Rocm90dGxlSW5zdGFuY2U8Rj4ge1xcclxcbiAgY29uc3QgaW50ZXJ2YWwgPSBSZXF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdEludGVydmFsKCBkdXJhdGlvbiB8fCAwLCBmdW5jLCBudWxsLCAxICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgcmV0dXJuICgpID0+IHtcXHJcXG4gICAgaW50ZXJ2YWwuaXNQYXVzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UX1VQREEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIExPT1AgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFkZENsYXNzLCBhIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZW5kLCBiZWZvcmUsIGNlaWwsIGVtcHR5LCBpc1VuZGVmaW5lZCwgcGFkLCBwdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzaCwgcmVjdCwgcmVtb3ZlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQ2xvbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIENsb25lc0NvbXBvbmVudCBleHRlbmRzIEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtdWx0aXBsaWVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb25lcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IE1VTFRJUExJRVIgPSAyO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50IHRoYXQgZ2VuZXJhdGVzIGNsb25lcyBmb3IgdGhlIGxvb3Agc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIEEgQ2xvbmVzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBmdW5jdGlvbiBDbG9uZXMoIFNwbGlkZTogU3BsaWRlLCBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBDbG9uZXNDb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50IHtcXHJcXG4gIGNvbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUgKTtcXHJcXG4gIGNvbnN0IHsgb24gfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3sgRWxlbWVudHMsIFNsaWRlcyB9ID0gQ29tcG9uZW50cztcXHJcXG4gIGNvbnN0IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc29sdmUgfSA9IENvbXBvbmVudHMuRGlyZWN0aW9uO1xcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogU3RvcmVzIGFsbCBjbG9uZWQgZWxlbWVudHMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBjb25zdCBjbG9uZXM6IEhUTUxFbGVtZW50W10gPSBbXTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEtlZXBzIHRoZSBjdXJyZW50IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgY2xvbmVzLlxcclxcbiAgICovXFxyXFxuICBsZXQgY2xvbmVDb3VudDogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqIE5lZWRzIHRvIHJlbW91bnQgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjb21wb25lbnQgb24gcmVmcmVzaCwgb3RoZXJ3aXNlIGByZWZyZXNoYCBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgd2lsbCBiZSB0cmlnZ2VyZWQgYWdhaW4gd2hpbGUgcmVmcmVzaGluZy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xcclxcbiAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIEVWRU5UX1JFRlJFU0gsIHJlbW91bnQgKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQREFURUQsIEVWRU5UX1JFU0laRSBdLCBvYnNlcnZlICk7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoICggY2xvbmVDb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCkgKSApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgZ2VuZXJhdGUoIGNsb25lQ291bnQgKTtcXHJcXG4gICAgICBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cy5MYXlvdXQucmVzaXplKCB0cnVlICk7XFxyXFxuICAgIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW91bnRzIHRoZSBjb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiByZW1vdW50KCk6IHZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgZGVzdHJveSgpO1xcclxcbiAgICBtb3VudCgpO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgY2xvbmVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIHJlbW92ZSggY2xvbmVzICk7XFxyXFxuICAgIGVtcHR5KCBjbG9uZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIGV2ZW50LmRlc3Ryb3koKTtcXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIE9ic2VydmVzIHRoZSByZXF1aXJlZCBjbG9uZSBjb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYW5kIHJlZnJlc2hlcyB0aGUgc2xpZGVyIGlmIG5lY2Vzc2FyeS5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIG9ic2VydmUoKTogdm9pZCB7XFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBjb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCk7XFxyXFxuXFxyXFxuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoIGNsb25lQ291bnQgIT09IGNvdW50ICkge1xcclxcbiAgICAgIGlmICggY2xvbmVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgPCBjb3VudCB8fCAhIGNvdW50ICkge1xcclxcbiAgICAgICAgZXZlbnQuZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIEVWRU5UX1JFRlJFU0ggKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEdlbmVyYXRlcyB0aGUgc3BlY2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llZCBudW1iZXIgb2YgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY291bnQgLSBUaGUgbnVtYmVyIG9mIGNsb25lcyB0byBnZW5lcmF0ZSBmb3IgZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggc2lkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2VuZXJhdGUoIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VudDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBzbGlkZXMgPSBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmdldCgpLnNsaWNlKCk7XFxyXFxuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzO1xcclxcblxcclxcbiAgICBpZiAoIGxlbmd0aCApIHtcXHJcXG4gICAgICB3aGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKCBzbGlkZXMubGVuZ3RoIDwgY291bnQgKSB7XFxyXFxuICAgICAgICBwdXNoKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzLCBzbGlkZXMgKTtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgcHVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2goIHNsaWRlcy5zbGljZSggLWNvdW50ICksIHNsaWRlcy5zbGljZSggMCwgY291bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ICkgKS5mb3JFYWNoKCAoIFNsaWRlLCBpbmRleCApID0+IHtcXHJcXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpc0hlYWQgPSBpbmRleCA8IGNvdW50O1xcclxcbiAgICAgICAgY29uc3QgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lICA9IGNsb25lRGVlcCggU2xpZGUuc2xpZGUsIGluZGV4ICk7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaXNIZWFkID8gYmVmb3JlKCBjbG9uZSwgc2xpZGVzWyAwIF0uc2xpZGUgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBhcHBlbmQoIEVsZW1lbnRzLmxpc3QsIGNsb25lICk7XFxyXFxuICAgICAgICBwdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCggY2xvbmVzLCBjbG9uZSApO1xcclxcbiAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xvbmUsIGluZGV4IC0gY291bnQgKyAoIGlzSGVhZCA/IDAgOiBsZW5ndGggKSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlLmluZGV4ICk7XFxyXFxuICAgICAgfSApO1xcclxcbiAgICB9XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEZWVwbHkgY2xvbmVzIHRoZSBwcm92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZWQgZWxlbWVudCB3aXRoIHJlbW92aW5nIHRoZSBJRCBhdHRyaWJ1dGUuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBwYXJhbSBlbG0gICAtIEFuIGVsZW1lbnQgdG8gY2xvbmUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaW5kZXggb2YgdGhlIGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgY2xvbmVkIGVsZW1lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjbG9uZURlZXAoIGVsbTogSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50LCBpbmRleDogbnVtYmVyICk6IEhUTUxFbGVtZW50IHtcXHJcXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGNsb25lID0gZWxtLmNsb25lTm9kZSggdHJ1ZSApIGFzIEhUTUxFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcXHJcXG4gICAgYWRkQ2xhc3MoIGNsb25lLCBvcHRpb25zLmNsYXNzZXMuY2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICAgIGNsb25lLmlkID0gYCR7IFNwbGlkZS5yb290LmlkIH0tY2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgcGFkKCBpbmRleCArIDEgKSB9YDtcXHJcXG4gICAgcmV0dXJuIGNsb25lOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciBvZiBlbGVtZW50cyB0byBnZW5lcmF0ZS5cXHJcXG4gICAqIFRoaXMgYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid2F5cyByZXR1cm5zIDAgaWYgdGhlIHNsaWRlciB0eXBlIGlzIG5vdCBgJ2xvb3AnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGNsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpOiBudW1iZXIge1xcclxcbiAgICBsZXQgeyBjbG9uZXMgfSA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xcclxcblxcclxcbiAgICBpZiAoICEgU3BsaWRlLmlzKCBMT09QICkgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNsb25lcyA9IDA7XFxyXFxuICAgIH0gZWxzZSBpZiAoIGlzVW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VmaW5lZCggY2xvbmVzICkgKSB7XFxyXFxuICAgICAgY29uc3QgZml4ZWRTaXplICA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBvcHRpb25zWyByZXNvbHZlKCAnZml4ZWRXaWR0aCcgKSBdICYmIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLkxheW91dC5zbGlkZVNpemUoIDAgKTtcXHJcXG4gICAgICBjb25zdCBmaXhlZENvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IGZpeGVkU2l6ZSAmJiBjZWlsKCByZWN0KCBFbGVtZW50cy50cmFjayApWyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmVzb2x2ZSggJ3dpZHRoJyApIF0gLyBmaXhlZFNpemUgKTtcXHJcXG4gICAgICBjbG8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmVzID0gZml4ZWRDb3VudCB8fCAoIG9wdGlvbnNbIHJlc29sdmUoICdhdXRvV2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRoJyApIF0gJiYgU3BsaWRlLmxlbmd0aCApIHx8IG9wdGlvbnMucGVyUGFnZSAqICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNVUxUSVBMSUVSO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICBkZXN0cm95LFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCB7XFxyXFxuICBFVkVOVF9NT1VOVEVELFxcclxcbiAgRVZFTlRfTU9WRSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBFVkVOVF9NT1ZFRCxcXHJcXG4gIEVWRU5UX1JFRlJFU0gsXFxyXFxuICBFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVTSVpFRCxcXHJcXG4gIEVWRU5UX1NISUZURUQsXFxyXFxuICBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVVBEQVRFRCxcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5pbXBvcnQgeyBJRExFLCBNT1ZJTkcgfSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzL3N0YXRlcyc7XFxyXFxuaW1wb3J0IHsgRkFERSwgTE9PUCwgU0xJREUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RhbnRzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBBbnlGdW5jdGlvbiwgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibnMsIFRyYW5zaXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmltcG9ydCB7IGFicywgY2VpbCwgY2xhbXAsIGlzVW5kZWZpbmVkLCByZWN0LCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR5bGUgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBNb3ZlIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGludGVyZmFjZSBNb3ZlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qge1xcclxcbiAgbW92ZSggZGVzdDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyLCBjYWxsYmFjaz86IEFueUZ1bmN0aW9uICk6IHZvaWQ7XFxyXFxuICBqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtcCggaW5kZXg6IG51bWJlciApOiB2b2lkO1xcclxcbiAgdHJhbnNsYXRlKCBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb246IG51bWJlciwgcHJldmVudExvb3A/OiBib29sZWFuICk6IHZvaWQ7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2hpZnQoIHBvc2l0aW9uOiBudW1iZXIsIGJhY2t3YXJkczogYm9vbGVhbiApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xcclxcbiAgY2FuY2VsKCk6IHZvaWQ7XFxyXFxuICB0b0luZGV4KCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zaXRpb246IG51bWJlciApOiBudW1iZXI7XFxyXFxuICB0b1Bvc2l0aW9uKCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXg6IG51bWJlciwgdHJpbW1pbmc/OiBib29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRQb3NpdGlvbigpOiBudW1iZXI7XFxyXFxuICBnZXRMaW1pdCggbWF4OiBib29sZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiApOiBudW1iZXI7XFxyXFxuICBleGNlZWRlZExpbWl0KCBtYXg/OiBib29sZWFuIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHVuZGVmaW5lZCwgcG9zaXRpb24/OiBudW1iZXIgKTogYm9vbGVhbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKiogQGludGVybmFsICovXFxyXFxuICByZXBvc2l0aW9uKCk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgbW92aW5nIHRoZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIE1vdmUgY29tcG9uZW50IG9iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIE1vdmUoIFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgKTogTW92ZUNvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBlbWl0IH0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBzZXQgfSA9IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUuc3RhdGU7XFxyXFxuICBjb25zdCB7IHNsaWRlU2l6ZSwgZ2V0UGFkZGluZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvdGFsU2l6ZSwgbGlzdFNpemUsIHNsaWRlclNpemUgfSA9IENvbXBvbmVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xheW91dDtcXHJcXG4gIGNvbnN0IHsgcmVzb2x2ZSwgb3JpZW50IH0gPSBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCB7IGxpc3QsIHRyYWNrIH0gPSBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cy5FbGVtZW50cztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUcmFuc2l0aW9uOiBUcmFuc2l0aW9uQ29tcG9uZW50O1xcclxcblxcclxcbiAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50cy5UcmFuc2l0aW9uO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTlRfVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgcmVwb3NpdGlvbiApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVwb3NpdGlvbnMgdGhlIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXFxyXFxuICAgKiAtIERvIG5vdCBjYWxsIGBjYW5jZWwoKWAgaGVyZSBiZWNhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBMYXp5TG9hZCBtYXkgZW1pdCByZXNpemUgd2hpbGUgdHJhbnNpdGlvbmluZy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiAtIGlPUyBTYWZhcmkgZW1pdHMgd2luZG93IHJlc2l6ZSBldmVudCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbGUgdGhlIHVzZXIgc3dpcGVzIHRoZSBzbGlkZXIgYmVjYXVzZSBvZiB0aGUgYm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRvbSBiYXIuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJlcG9zaXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgQ29tcG9uZW50cy5Db250cm9sbGVyLmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J1c3koKSApIHtcXHJcXG4gICAgICBDb21wb25lbnRzLlNjcm9sbC5jYW5jZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XFxyXFxuICAgICAganVtcCggU3BsaWRlLmluZGV4ICk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMuU2xpZGVzLnVwZGF0ZSgpO1xcclxcbiAgICB9XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBNb3ZlcyB0aGUgc2xpZGVyIHRvIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCBpbmRleCB3aXRoIHRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIGRlc3QgICAgIC0gQSBkZXN0aW5hdGlvbiBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgdG8gZ28gdG8sIGluY2x1ZGluZyBjbG9uZXMnLlxcclxcbiAgICogQHBhcmFtIGluZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCAgICAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gcHJldiAgICAgLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBwcmV2aW91cyBpbmRleC5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25hbC4gQSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGFmdGVyIHRyYW5zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGVuZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdmUoIGRlc3Q6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIGluZGV4OiBudW1iZXIsIHByZXY6IG51bWJlciwgY2FsbGJhY2s/OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGlmICggZGVzdCAhPT0gaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ICYmIGNhblNoaWZ0KCBkZXN0ID4gcHJldiApICkge1xcclxcbiAgICAgIGNhbmNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gICAgICB0cmFuc2xhdGUoIHNoaWZ0KCBnZXRQb3NpdGlvbigpLCBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCA+IHByZXYgKSwgdHJ1ZSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIE1PVklORyApO1xcclxcbiAgICBlbWl0KCBFVkVOVF9NT1ZFLCBpbmRleCwgcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGRlc3QgKTtcXHJcXG5cXHJcXG4gICAgVHJhbnNpdGlvbi5zdGFydCggaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAoKSA9PiB7XFxyXFxuICAgICAgc2V0KCBJRExFICk7XFxyXFxuICAgICAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCApO1xcclxcbiAgICAgIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsYmFjayAmJiBjYWxsYmFjaygpO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBKdW1wcyB0byB0aGUgc2xpZGUgYXQgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGVjaWZpZWQgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCAtIEFuIGluZGV4IHRvIGp1bXAgdG8uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBqdW1wKCBpbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICB0cmFuc2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKCB0b1Bvc2l0aW9uKCBpbmRleCwgdHJ1ZSApICk7XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBNb3ZlcyB0aGUgc2xpZGVyIHRvIHRoZSBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZWQgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBvc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAgICAtIFRoZSBwb3NpdGlvbiB0byBtb3ZlIHRvLlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcmV2ZW50TG9vcCAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIHNldHMgdGhlIHBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWRlZCBwb3NpdGlvbiBhcyBpcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zbGF0ZSggcG9zaXRpb246IG51bWJlciwgcHJldmVudExvb3A/OiBib29sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhbiApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhIFNwbGlkZS5pcyggRkFERSApICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHByZXZlbnRMb29wID8gcG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uIDogbG9vcCggcG9zaXRpb24gKTtcXHJcXG4gICAgICBzdHlsZSggbGlzdCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIid0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlJHsgcmVzb2x2ZSggJ1gnICkgfSgkeyBkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGluYXRpb24gfXB4KWAgKTtcXHJcXG4gICAgICBwb3NpdGlvbiAhPT0gZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uICYmIGVtaXQoIEVWRU5UX1NISUZURUQgKTtcXHJcXG4gICAgfVxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTG9vcHMgdGhlIHByb3ZpZGVkIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbiBpZiBpdCBleGNlZWRzIGJvdW5kcyAobGltaXQgaW5kaWNlcykuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIEEgcG9zaXRpb24gdG8gbG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3AuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGxvb3AoIHBvc2l0aW9uOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBMT09QICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGNvbnN0IGluZGV4ICAgICAgID0gdG9JbmRleCggcG9zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uICk7XFxyXFxuICAgICAgY29uc3QgZXhjZWVkZWRNYXggPSBpbmRleCA+IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLkNvbnRyb2xsZXIuZ2V0RW5kKCk7XFxyXFxuICAgICAgY29uc3QgZXhjZWVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkTWluID0gaW5kZXggPCAwO1xcclxcblxcclxcbiAgICAgIGlmICggZXhjZWVkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkTWluIHx8IGV4Y2VlZGVkTWF4ICkge1xcclxcbiAgICAgICAgcG9zaXRpb24gPSBzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZnQoIHBvc2l0aW9uLCBleGNlZWRlZE1heCApO1xcclxcbiAgICAgIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQWRkcyBvciBzdWJ0cmFjdHMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXIgd2lkdGggdG8gdGhlIHByb3ZpZGVkIHBvc2l0aW9uLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gcG9zaXRpb24gIC0gQSBwb3NpdGlvbiB0byBzaGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKiBAcGFyYW0gYmFja3dhcmRzIC0gRGV0ZXJtaW5lcyB3aGV0aGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0byBzaGlmdCB0aGUgc2xpZGVyIGJhY2t3YXJkcyBvciBmb3J3YXJkcy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHJldHVybiBUaGUgc2hpZnRlZCBwb3NpdGlvbi5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNoaWZ0KCBwb3NpdGlvbjogbnVtYmVyLCBiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidja3dhcmRzOiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IGV4Y2VzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBwb3NpdGlvbiAtIGdldExpbWl0KCBiYWNrd2FyZHMgKTtcXHJcXG4gICAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHNpemUgICA9IHNsaWRlclNpemUoKTtcXHJcXG4gICAgcG9zaXRpb24gLT0gb3JpZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCggc2l6ZSAqICggY2VpbCggYWJzKCBleGNlc3MgKSAvIHNpemUgKSB8fCAxICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKiAoIGJhY2t3YXJkcyA/IDEgOiAtMSApO1xcclxcbiAgICByZXR1cm4gcG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYW5jZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmFuc2l0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjYW5jZWwoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICB0cmFuc2xhdGUoIGdldFBvc2l0aW9uKCksIHRydWUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIFRyYW5zaXRpb24uY2FuY2VsKCk7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byB0aGUgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAtIEEgcG9zaXRpb24gdG8gY29udmVydC5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHJldHVybiBUaGUgY2xvc2VzdCBpbmRleCB0byB0aGUgcG9zaXRpb24uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBmdW5jdGlvbiB0b0luZGV4KCBwb3NpdGlvbjogbnVtYmVyICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIge1xcclxcbiAgICBjb25zdCBTbGlkZXMgPSBDb21wb25lbnRzLlNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZ2V0KCk7XFxyXFxuXFxyXFxuICAgIGxldCBpbmRleCAgICAgICA9IDA7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsZXQgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcXHJcXG5cXHJcXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciAoIGxldCBpID0gMDsgaSA8IFNsaWRlcy5sZW5ndGg7IGkrKyApIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY29uc3Qgc2xpZGVJbmRleCA9IFNsaWRlc1sgaSBdLmluZGV4O1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCBkaXN0YW5jZSAgID0gYWJzKCB0b1Bvc2l0aW9uKCBzbGlkZUluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCwgdHJ1ZSApIC0gcG9zaXRpb24gKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YW5jZSA8PSBtaW5EaXN0YW5jZSApIHtcXHJcXG4gICAgICAgIG1pbkRpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGRpc3RhbmNlO1xcclxcbiAgICAgICAgaW5kZXggICAgICAgPSBzbGlkZUluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgYnJlYWs7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gaW5kZXg7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb252ZXJ0cyB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlIGluZGV4IHRvIHRoZSBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIGluZGV4ICAgIC0gQW4gaW5kZXggdG8gY29udmVydC5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gdHJpbW1pbmcgLSBPcHRpb25hbC4gV2hldGhlciB0byB0cmltIGVkZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwYWNlcyBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uIGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgaW5kZXguXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiB0b1Bvc2l0aW9uKCBpbmRleDogbnVtYmVyLCB0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW1pbmc/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9yaWVudCggdG90YWxTaXplKCBpbmRleCAtIDEgKSAtIG9mZnNldCggaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ICkgKTtcXHJcXG4gICAgcmV0dXJuIHRyaW1taW5nID8gdHJpbSggcG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBwb3NpdGlvbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBsaXN0IGVsZW1lbnQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbigpOiBudW1iZXIgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgY29uc3QgbGVmdCA9IHJlc29sdmUoICdsZWZ0JyApO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHJlY3QoIGxpc3QgKVsgbGVmdCBdIC0gcmVjdCggdHJhY2sgKVsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZnQgXSArIG9yaWVudCggZ2V0UGFkZGluZyggZmFsc2UgKSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHJpbXMgc3BhY2VzIG9uIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWRnZSBvZiB0aGUgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gLSBBIHBvc2l0aW9uIHRvIHRyaW0uXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gQSB0cmltbWVkIHBvc2l0aW9uLlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gdHJpbSggcG9zaXRpb246IG51bWJlciApOiBudW1iZXIge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCBvcHRpb25zLnRyaW1TcGFjZSAmJiBTcGxpZGUuaXMoIFNMSURFICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIHBvc2l0aW9uID0gY2xhbXAoIHBvc2l0aW9uLCAwLCBvcmllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KCBzbGlkZXJTaXplKCB0cnVlICkgLSBsaXN0U2l6ZSgpICkgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0IGFtb3VudC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaW5kZXguXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBvZmZzZXQoIGluZGV4OiBudW1iZXIgKTogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciB7XFxyXFxuICAgIGNvbnN0IHsgZm9jdXMgfSA9IG9wdGlvbnM7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICByZXR1cm4gZm9jdXMgPT09ICdjZW50ZXInID8gKCBsaXN0U2l6ZSgpIC0gcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlU2l6ZSggaW5kZXgsIHRydWUgKSApIC8gMiA6ICtmb2N1cyAqIHNsaWRlU2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInemUoIGluZGV4ICkgfHwgMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIFJldHVybnMgdGhlIGxpbWl0IG51bWJlciB0aGF0IHRoZSBzbGlkZXIgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiBtb3ZlIHRvLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBtYXggLSBEZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJtaW5lcyB3aGV0aGVyIHRvIHJldHVybiB0aGUgbWF4aW11bSBvciBtaW5pbXVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBsaW1pdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBib3JkZXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlci5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0TGltaXQoIG1heDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHRvUG9zaXRpb24oIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXggPyBDb21wb25lbnRzLkNvbnRyb2xsZXIuZ2V0RW5kKCkgOiAwLCAhISBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy50cmltU3BhY2UgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIENoZWNrcyBpZiB0aGVyZSBpcyBlbm91Z2ggd2lkdGggdG8gc2hpZnQgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGJhY2t3YXJkcyAtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBgdHJ1ZWAgZm9yIGNoZWNraW5nIGJhY2t3YXJkcywgb3IgYGZhbHNlYCBmb3IgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaW5nIGZvcndhcmRzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgc2xpZGVyIGNhbiBiZSBzaGlmdGVkIGZvciB0aGUgc3BlY2lmaWVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXJlY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZnVuY3Rpb24gY2FuU2hpZnQoIGJhY2t3YXJkczogYm9vbGVhbiApOiBib28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVhbiB7XFxyXFxuICAgIGNvbnN0IHNoaWZ0ZWQgPSBvcmllbnQoIHNoaWZ0KCBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUG9zaXRpb24oKSwgYmFja3dhcmRzICkgKTtcXHJcXG4gICAgcmV0dXJuIGJhY2t3YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHNcXHJcXG4gICAgICA/IHNoaWZ0ZWQgPj0gMFxcclxcbiAgICAgIDogc2hpZnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImQgPD0gbGlzdFsgcmVzb2x2ZSggJ3Njcm9sbFdpZHRoJyApIF0gLSByZWN0KCB0ciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2sgKVsgcmVzb2x2ZSggJ3dpZHRoJyApIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIHBvc2l0aW9uIGV4YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWRzIHRoZSBtaW5pbXVtIG9yIG1heGltdW0gbGltaXQgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gbWF4ICAgICAgLSBPcHRpb25hbC4gYHRydWVgIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGVzdGluZyBtYXgsIGBmYWxzZWAgZm9yIG1pbiwgYW5kIGB1bmRlZmluZWRgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYm90aC5cXHJcXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIE9wdGlvbmFsLiBBIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbiB0byB0ZXN0LiBJZiBvbWl0dGVkLCB0ZXN0cyB0aGUgY3VycmVudCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBwb3NpdGlvbiBleGNlZWRzIHRoZSBsaW1pdCwgb3Igb3RoZXJ3aXNlIGBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBleGNlZWRlZExpbWl0KCBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4PzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgcG9zaXRpb24/OiBudW1iZXIgKTogYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb2xlYW4ge1xcclxcbiAgICBwb3NpdGlvbiA9IGlzVW5kZWZpbmVkKCBwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSA/IGdldFBvc2l0aW9uKCkgOiBwb3NpdGlvbjtcXHJcXG4gICAgY29uc3QgZXhjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZGVkTWluID0gbWF4ICE9PSB0cnVlICYmIG9yaWVudCggcG9zaXRpb24gKSA8IG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmllbnQoIGdldExpbWl0KCBmYWxzZSApICk7XFxyXFxuICAgIGNvbnN0IGV4Y2VlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZE1heCA9IG1heCAhPT0gZmFsc2UgJiYgb3JpZW50KCBwb3NpdGlvbiApID4gb3JpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCggZ2V0TGltaXQoIHRydWUgKSApO1xcclxcbiAgICByZXR1cm4gZXhjZWVkZWRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luIHx8IGV4Y2VlZGVkTWF4O1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBtb3ZlLFxcclxcbiAgICBqdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcCxcXHJcXG4gICAgdHJhbnNsYXRlLFxcclxcbiAgICBzaGlmdCxcXHJcXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlbCxcXHJcXG4gICAgdG9JbmRleCxcXHJcXG4gICAgdG9Qb3NpdGlvbixcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGdldFBvc2l0aW9uLFxcclxcbiAgICBnZXRMaW1pdCxcXHJcXG4gICAgZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2VlZGVkTGltaXQsXFxyXFxuICAgIHJlcG9zaXRpb24sXFxyXFxuICB9O1xcclxcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuIiwiaW1wb3J0IHsgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQsIEVWRU5UX1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRUZSRVNILCBFVkVOVF9SRVNJWkVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IE1PVklORywgU0NST0xMIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIklORyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdGF0ZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBMT09QLCBTTElERSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0byIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbXBvcnQgeyBhcHBseSwgYXBwcm94aW1hdGVseUVxdWFsLCBiZXR3ZWVuLCBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXAsIGZsb29yLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIG1pbiB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UgZm9yIHRoZSBDb250cm9sbGVyIGNvbXBvbmVudC5cXHJcXG4gKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDb250cm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ28oIGNvbnRyb2w6IG51bWJlciB8IHN0cmluZywgYWxsb3dTYW1lSW5kZXg/OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkO1xcclxcbiAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcm9sbCggZGVzdGluYXRpb246IG51bWJlciwgZHVyYXRpb24/OiBudW1iZXIsIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFwPzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGdldE5leHQoIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgZ2V0UHJldiggZGVzdGluYXRpb24/OiBib29sZWFuICk6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBnZXRFbmQoKTogbnVtYmVyO1xcclxcbiAgc2V0SW5kZXgoIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyICk6IHZvaWQ7XFxyXFxuICBnZXRJbmRleCggcHJldj86IGJvb2xlYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlcjtcXHJcXG4gIHRvSW5kZXgoIHBhZ2U6IG51bWJlciApOiBudW1iZXI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgdG9QYWdlKCBpbmRleDogbnVtYmVyICk6IG51bWJlcjtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b0Rlc3QoIHBvc2l0aW9uOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbiAgaGFzRm9jdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCk6IGJvb2xlYW47XFxyXFxuICBpc0J1c3koKTogYm9vbGVhbjtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKiogQGludGVybmFsICovXFxyXFxuICBnZXRBZGphY2VudCggcHJldjogYm9vbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYW4sIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFxufVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciBjb250cm9sbGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgdGhlIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgQ29udHJvbGxlciBjb21wb25lbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gQ29udHJvbGxlciggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucyApOiBDb250cm9sbGVyQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBlbWl0IH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBNb3ZlIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBnZXRQb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGdldExpbWl0LCB0b1Bvc2l0aW9uIH0gPSBNb3ZlO1xcclxcbiAgY29uc3QgeyBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2gsIGdldExlbmd0aCB9ID0gQ29tcG9uZW50cy5TbGlkZXM7XFxyXFxuICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgeyBvbWl0RW5kIH0gPSBvcHRpb25zO1xcclxcbiAgY29uc3QgaXNMb29wICA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUuaXMoIExPT1AgKTtcXHJcXG4gIGNvbnN0IGlzU2xpZGUgPSBTcGxpZGUuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBTTElERSApO1xcclxcbiAgY29uc3QgZ2V0TmV4dCA9IGFwcGx5KCBnZXRBZGphYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIGZhbHNlICk7XFxyXFxuICBjb25zdCBnZXRQcmV2ID0gYXBwbHkoIGdldEFkaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2VudCwgdHJ1ZSApO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgY3VycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjdXJySW5kZXggPSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5zdGFydCB8fCAwO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzdCBlbmQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBlbmRJbmRleDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHByZXZpb3VzIGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXZJbmRleCA9IGN1cnJJbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBsYXRlc3QgbnVtYmVyIG9mICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBzbGlkZUNvdW50OiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwZXJNb3ZlOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwZXJQYWdlOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdm9pZCB7XFxyXFxuICAgIGluaXQoKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfVVAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEIF0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbml0ICk7XFxyXFxuICAgIG9uKCBFVkVOVF9SRVNJWkVELCBvblJlc2l6ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plcyBzb21lIHBhcmFtZXRlcnMuXFxyXFxuICAgKiBOZWVkcyB0byBjaGVjayB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBzbGlkZXMgc2luY2UgdGhlIGN1cnJlbnQgaW5kZXggbWF5IGJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdXQgb2YgdGhlIHJhbmdlIGFmdGVyIHJlZnJlc2guXFxyXFxuICAgKiBUaGUgcHJvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Mgb3JkZXIgbXVzdCBiZSBFbGVtZW50cyAtPiBDb250cm9sbGVyIC0+IE1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2xpZGVDb3VudCA9IGdldExlbmd0aCggdHJ1ZSApO1xcclxcbiAgICBwZXJNb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAgICA9IG9wdGlvbnMucGVyTW92ZTtcXHJcXG4gICAgcGVyUGFnZSAgICA9IG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnBlclBhZ2U7XFxyXFxuICAgIGVuZEluZGV4ICAgPSBnZXRFbmQoKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIGNvbnN0IGluZGV4ID0gY2xhbXAoIGN1cnJJbmRleCwgMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9taXRFbmQgPyBlbmRJbmRleCA6IHNsaWRlQ291bnQgLSAxICk7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpZiAoIGluZGV4ICE9PSBjdXJySW5kZXggKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJJbmRleCA9IGluZGV4O1xcclxcbiAgICAgIE1vdmUucmVwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ2FsbGVkIHdoZW4gdGhlIHZpZXdwb3J0IHdpZHRoIGlzIGNoYW5nZWQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogVGhlIGVuZCBpbmRleCBjYW4gY2hhbmdlIGlmIGBhdXRvV2lkdGhgIG9yIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZml4ZWRXaWR0aGAgaXMgZW5hYmxlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9uUmVzaXplZCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBlbmRJbmRleCAhPT0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEVuZCgpICkge1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX0VORF9JTkRFWF9DSEFOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dFRCApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBNb3ZlcyB0aGUgc2xpZGVyIGJ5IHRoZSBjb250cm9sIHBhdHRlcm4uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBzZWUgYFNwbGlkZSNnbygpYFxcclxcbiAgICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gY29udHJvbCAgICAgICAgLSBBIGNvbnRyb2wgcGF0dGVybi5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gYWxsb3dTYW1lSW5kZXggLSBPcHRpb25hbC4gRGV0ZXJtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMgd2hldGhlciB0byBhbGxvdyBnb2luZyB0byB0aGUgY3VycmVudCBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Igbm90LlxcclxcbiAgICogQHBhcmFtIGNhbGxiYWNrICAgICAgIC0gT3B0aW9uYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgdHJhbnNpdGlvbiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ28oIGNvbnRyb2w6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgfCBzdHJpbmcsIGFsbG93U2FtZUluZGV4PzogYm9vbGVhbiwgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGlmICggISBpc0J1c3koKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgY29uc3QgZGVzdCAgPSBwYXJzZSggY29udHJvbCApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBjb25zdCBpbmRleCA9IGxvb3AoIGRlc3QgKTtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgaWYgKCBpbmRleCA+IC0xICYmICggYWxsb3dTYW1lSW5kZXggfHwgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4ICE9PSBjdXJySW5kZXggKSApIHtcXHJcXG4gICAgICAgIHNldEluZGV4KCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggKTtcXHJcXG4gICAgICAgIE1vdmUubW92ZSggZGVzdCwgaW5kZXgsIHByZXZJbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXgsIGNhbGxiYWNrICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTY3JvbGxzIHRoZSBzbGlkZXIgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHRoZSBzcGVjaWZpZWQgZGVzdGluYXRpb24gd2l0aCB1cGRhdGluZyBpbmRpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gLSBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uIHRvIHNjcm9sbCB0aGUgc2xpZGVyIHRvLlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkdXJhdGlvbiAgICAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIHNjcm9sbCBkdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRpb24uXFxyXFxuICAgKiBAcGFyYW0gc25hcCAgICAgICAgLSBPcHRpb25hbC4gVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZXRoZXIgdG8gc25hcCB0aGUgc2xpZGVyIHRvIHRoZSBjbG9zZXN0IHNsaWRlIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBub3QuXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgICAgLSBPcHRpb25hbC4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciBzY3JvbGwgZW5kcy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNjcm9sbCggZGVzdGluYXRpb246IG51bWJlciwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ255RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIENvbXBvbmVudHMuU2Nyb2xsLnNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbGwoIGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgKCkgPT4ge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjb25zdCBpbmRleCA9IGxvb3AoIE1vdmUudG9JbmRleCggZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCkgKSApO1xcclxcbiAgICAgIHNldEluZGV4KCBvbWl0RW5kID8gbWluKCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGVuZEluZGV4ICkgOiBpbmRleCApO1xcclxcbiAgICAgIGNhbGxiYWNrICYmIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaygpO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBQYXJzZXMgdGhlIGNvbnRyb2wgYW5kIHJldHVybnMgYSBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sIHBhdHRlcm4gdG8gcGFyc2UuXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gQSBgZGVzdGAgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJzZSggY29udHJvbDogbnVtYmVyIHwgc3RyaW5nICk6IG51bWJlciB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBsZXQgaW5kZXggPSBjdXJySW5kZXg7XFxyXFxuXFxyXFxuICAgIGlmICggaXNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaW5nKCBjb250cm9sICkgKSB7XFxyXFxuICAgICAgY29uc3QgWyAsIGluZGljYXRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIG51bWJlciBdID0gY29udHJvbC5tYXRjaCggLyhbK1xcXFwtPD5dKShcXFxcZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrKT8vICkgfHwgW107XFxyXFxuXFxyXFxuICAgICAgaWYgKCBpbmRpY2F0b3IgPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPSAnKycgfHwgaW5kaWNhdG9yID09PSAnLScgKSB7XFxyXFxuICAgICAgICBpbmRleCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjb21wdXRlRGVzdEluZGV4KCBjdXJySW5kZXggKyArYCR7IGluZGljYXRvciB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyR7ICtudW1iZXIgfHwgMSB9YCwgY3VyckluZGV4ICk7XFxyXFxuICAgICAgfSBlbHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBpZiAoIGluZGljYXRvciA9PT0gJz4nICkge1xcclxcbiAgICAgICAgaW5kZXggPSBuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyID8gdG9JbmRleCggK251bWJlciApIDogZ2V0TmV4dCggdHJ1ZSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4gICAgICB9IGVsc2UgaWYgKCBpbmRpY2F0b3IgPT09ICc8JyApIHtcXHJcXG4gICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpbmRleCA9IGdldFByZXYoIHRydWUgKTtcXHJcXG4gICAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9IGVsc2Uge1xcclxcbiAgICAgIGluZGV4ID0gaXNMb29wID8gY29udHJvbCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFtcCggY29udHJvbCwgMCwgZW5kSW5kZXggKTtcXHJcXG4gICAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgcmV0dXJuIGluZGV4O1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogUmV0dXJucyBhbiBhZGphY2VudCBkZXN0aW5hdGlvbiBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXguXFxyXFxuICAgKlxcclxcbiAgICogQGludGVybmFsXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBwcmV2ICAgICAgICAtIERldGVybWluZXMgd2hldGhlciB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGEgcHJldmlvdXMgb3IgbmV4dCBpbmRleC5cXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gLSBPcHRpb25hbC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgYSBkZXN0aW5hdGlvbiBpbmRleCBvciBhIHNsaWRlIG9uZS5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBBbiBhZGphY2VudCBpbmRleCBpZiBhdmFpbGFibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBvciBvdGhlcndpc2UgYC0xYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEFkamFjZW50KCBwcmV2OiBib29sZWFuLCBkZXN0aW5hdGlvbj86IGJvb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IG51bWJlciA9IHBlck1vdmUgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggaGFzRm9jdXMoKSA/IDEgOiBwZXJQYWdlICk7XFxyXFxuICAgIGNvbnN0IGRlc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgPSBjb21wdXRlRGVzdEluZGV4KCBjdXJySW5kZXggKyBudW1iZXIgKiAoIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ID8gLTEgOiAxICksIGN1cnJJbmRleCwgISAoIHBlck1vdmUgfHwgaGFzRm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgKSApO1xcclxcblxcclxcbiAgICBpZiAoIGRlc3QgPT09IC0xICYmIGlzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICkge1xcclxcbiAgICAgIGlmICggISBhcHByb3hpbWF0ZWx5RXF1YWwoIGdldFBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbigpLCBnZXRMaW1pdCggISBwcmV2ICksIDEgKSApIHtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gcHJldiA/IDAgOiBlbmRJbmRleDtcXHJcXG4gICAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBkZXN0aW5hdGlvbiA/IGRlc3QgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9vcCggZGVzdCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQ29udmVydHMgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW5kZXggdG8gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWxpZCBvbmUuXFxyXFxuICAgKiAtIElmIHRoZSBgbW92ZWAgb3B0aW9uIGlzIGB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZWAsIGZpbmRzIHRoZSBkZXN0IGluZGV4IHdob3NlIHBvc2l0aW9uIGlzIGRpZmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJlbnQgd2l0aCB0aGUgY3VycmVudCBvbmUuXFxyXFxuICAgKiAtIFRoaXMgbWF5IHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gY2xvbmUgaW5kaWNlcyBpZiB0aGUgZWRpdG9yIGlzIHRoZSBsb29wIG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLFxcclxcbiAgICogICBvciBgLTFgIGlmIHRoZXJlIGlzIG5vIHNsaWRlIHRvIGdvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIC0gVGhlcmUgYXJlIHN0aWxsIHNsaWRlcyB3aGVyZSB0aGUgY2FyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291c2VsIGNhbiBnbyBpZiBib3JkZXJzIGFyZSBiZXR3ZWVuIGBmcm9tYCBhbmQgYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0YC5cXHJcXG4gICAqIC0gSWYgYGZvY3VzYCBpcyBhdmFpbGFibGUsIG5lZWRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBjYWxjdWxhdGUgdGhlIGRlc3QgaW5kZXggZXZlbiBpZiB0aGVyZSBhcmUgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VnaCBudW1iZXIgb2Ygc2xpZGVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gZGVzdCAgICAgLSBUaGUgZGVzaXJlZCBkZXN0aW5hdGlvbiBpbmRleC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gZnJvbSAgICAgLSBBIGJhc2UgaW5kZXguXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIHNuYXBQYWdlIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc25hcCBhIHBhZ2UgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgY29udmVydGVkIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0aW5hdGlvbiBpbmRleCwgaW5jbHVkaW5nIGNsb25lcy5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVEZXN0SW5kZXgoIGRlc3Q6IG51bWJlciwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb206IG51bWJlciwgc25hcFBhZ2U/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoIGlzRW5vdWdoKCkgfHwgaGFzRm9jdXMoKSApIHtcXHJcXG4gICAgICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgaW5kZXggPSBjb21wdXRlTW92YWJsZURlc3RJbmRleCggZGVzdCApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBpZiAoIGluZGV4ICE9PSBkZXN0ICkge1xcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyb20gICAgID0gZGVzdDtcXHJcXG4gICAgICAgIGRlc3QgICAgID0gaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4O1xcclxcbiAgICAgICAgc25hcFBhZ2UgPSBmYWxzZTtcXHJcXG4gICAgICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICAgIGlmICggZGVzdCA8IDAgfHwgZGVzdCA+IGVuZEluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApIHtcXHJcXG4gICAgICAgIGlmICggISBwZXJNb3ZlICYmICggYmV0d2VlbiggMCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QsIGZyb20sIHRydWUgKSB8fCBiZXR3ZWVuKCBlbmRJbmRleCwgZnJvbSwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3QsIHRydWUgKSApICkge1xcclxcbiAgICAgICAgICBkZXN0ID0gdG9JbmRleCggdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvUGFnZSggZGVzdCApICk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKCBpc0xvb3AgKSB7XFxyXFxuICAgICAgICAgICAgZGVzdCA9IHNuYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFnZVxcclxcbiAgICAgICAgICAgICAgPyBkZXN0IDwgMCA/IC0gKCBzbGlkZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCAlIHBlclBhZ2UgfHwgcGVyUGFnZSApIDogc2xpZGVDb3VudFxcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIDogZGVzdDtcXHJcXG4gICAgICAgICAgfSBlbHNlIGlmICggb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kICkge1xcclxcbiAgICAgICAgICAgIGRlc3QgPSBkZXN0IDwgMCA/IGVuZEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCA6IDA7XFxyXFxuICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3QgPSAtMTtcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgaWYgKCBzbmFwUGFnZSAmJiBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAhPT0gZnJvbSApIHtcXHJcXG4gICAgICAgICAgZGVzdCA9IHRvSW5kZXgoIHRvUGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoIGZyb20gKSArICggZGVzdCA8IGZyb20gPyAtMSA6IDEgKSApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cXHJcXG4gICAgICB9XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSAtMTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEZpbmRzIHRoZSBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdCBpbmRleCB3aG9zZSBwb3NpdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ1cnJlbnQgb25lIGZvciBgdHJpbVNwYWNlOiAnbW92ZSdgLlxcclxcbiAgICogVGhpcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FuIGJlIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBgbGVuZ3RoIC0gMWAuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBkZXN0IC0gQSBkZXN0IGluZGV4LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgZGVzdCBpbmRleC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVNb3ZhYmxlRGVzdEluZGV4KCBkZXN0OiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIGlmICggaXNTbGlkZSAmJiBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi50cmltU3BhY2UgPT09ICdtb3ZlJyAmJiBkZXN0ICE9PSBjdXJySW5kZXggKSB7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgd2hpbGUgKCBwb3NpdGlvbiA9PT0gdG9Qb3NpdGlvbiggZGVzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUgKSAmJiBiZXR3ZWVuKCBkZXN0LCAwLCBTcGxpZGUubGVuZ3RoIC0gMSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEgb3B0aW9ucy5yZXdpbmQgKSApIHtcXHJcXG4gICAgICAgIGRlc3QgPCBjdXJySW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID8gLS1kZXN0IDogKytkZXN0O1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgcmV0dXJuIGRlc3Q7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBMb29wcyB0aGUgcHJvdmlkZWQgaW5kZXggb25seSBpbiB0aGUgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3AgbW9kZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXggdG8gbG9vcC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgbG9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZCBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbG9vcCggaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGlzTG9vcCA/ICggaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4ICsgc2xpZGVDb3VudCApICUgc2xpZGVDb3VudCB8fCAwIDogaW5kZXg7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kIGluZGV4IHdoZXJlIHRoZSBzbGlkZXIgY2FuIGdvLlxcclxcbiAgICogRm9yIGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtcGxlLCBpZiB0aGUgc2xpZGVyIGhhcyAxMCBzbGlkZXMgYW5kIHRoZSBgcGVyUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2VgIG9wdGlvbiBpcyAzLFxcclxcbiAgICogdGhlIHNsaWRlciBjYW4gZ28gdG8gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGlkZSA4ICh0aGUgaW5kZXggaXMgNykuXFxyXFxuICAgKiBJZiB0aGUgYG9taScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0RW5kYCBvcHRpb24gaXMgYXZhaWxhYmxlLCBjb21wdXRlcyB0aGUgaW5kZXggZnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb20gdGhlIHNsaWRlIHBvc2l0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIEFuIGVuZCBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCgpOiBudW1iZXIge1xcclxcbiAgICBsZXQgZW5kID0gc2xpZGVDb3VudCAtICggaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0ZvY3VzKCkgfHwgKCBpc0xvb3AgJiYgcGVyTW92ZSApID8gMSA6IHBlclBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuXFxyXFxuICAgIHdoaWxlICggb21pdEVuZCAmJiBlbmQtLSA+IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGlmICggdG9Qb3NpdGlvbiggc2xpZGVDb3VudCAtIDEsIHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlICkgIT09IHRvUG9zaXRpb24oIGVuZCwgdHJ1ZSApICkge1xcclxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZCsrO1xcclxcbiAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgfVxcclxcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICByZXR1cm4gY2xhbXAoIGVuZCwgMCwgc2xpZGVDb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSAxICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ0cyB0aGUgcGFnZSBpbmRleCB0byB0aGUgc2xpZGUgaW5kZXguXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBwYWdlIC0gQSBwYWdlIGluZGV4IHRvIGNvbnZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBzbGlkZSBpbmRleC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvSW5kZXgoIHBhZ2U6IG51bWJlciApOiBudScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGNsYW1wKCBoYXNGb2N1cygpID8gcGFnZSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZXJQYWdlICogcGFnZSwgMCwgZW5kSW5kZXggKTtcXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIENvbnZlcnRzIHRoZSBzbGlkZSBpbmRleCB0byB0aGUgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2UgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4IHRvIGNvbnZlcnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYWdlIGluZGV4LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB0b1BhZ2UoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleDogbnVtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBoYXNGb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKVxcclxcbiAgICAgID8gbWluKCBpbmRleCwgZW5kSW5kZXggKVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICA6IGZsb29yKCAoIGluZGV4ID49IGVuZEluZGV4ID8gc2xpZGVDb3VudCAtIDEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogaW5kZXggKSAvIHBlclBhZ2UgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIENvbnZlcnRzIHRoZSBkZXN0aW5hdGlvbiBwb3NpdGlvbiB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGRlc3QgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiAtIEEgcG9zaXRpb24gdG8gY29udmVydC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBBIGRlc3QgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiB0b0Rlc3QoIGRlc3RpbmF0aW9uOiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNvbnN0IGNsb3Nlc3QgPSBNb3ZlLnRvSW5kZXgoIGRlc3RpbmF0aW9uICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gaXNTbGlkZSA/IGNsYW1wKCBjbG9zZXN0LCAwLCBlbmRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggKSA6IGNsb3Nlc3Q7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBTZXRzIGEgbmV3IGluZGV4IGFuZCByZXRhaW5zIG9sZCBvbmUuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEEgbmV3IGluZGV4IHRvIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNldEluZGV4KCBpbmRleDogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBpbmRleCAhPT0gY3VyckluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcXHJcXG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJJbmRleCA9IGluZGV4O1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50L3ByZXZpb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIE9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hbC4gV2hldGhlciB0byByZXR1cm4gcHJldmlvdXMgaW5kZXggb3Igbm90LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0SW5kZXgoIHByZXY/OiBib29sZWFuICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIge1xcclxcbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFZlcmlmaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBpZiB0aGUgZm9jdXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvciBub3QuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzbGlkZXIgaGFzIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9jdXMgb3B0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBoYXNGb2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXMoKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiAhIGlzVW5kZWZpbmVkKCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5mb2N1cyApIHx8IG9wdGlvbnMuaXNOYXZpZ2F0aW9uO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZXIgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIG1vdmluZy9zY3JvbGxpbmcgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGVyIGNhbiBtb3ZlLCBvciBvdGhlcndpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzQnVzeSgpOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiBTcGxpZGUuc3RhdGUuaXMoIFsgTU9WSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidORywgU0NST0xMSU5HIF0gKSAmJiAhISBvcHRpb25zLndhaXRGb3JUcmFuc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gICAgZ28sXFxyXFxuICAgIHNjcm9sbCxcXHJcXG4gICAgZ2V0TmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHQsXFxyXFxuICAgIGdldFByZXYsXFxyXFxuICAgIGdldEFkamFjZW50LFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZ2V0RW5kLFxcclxcbiAgICBzZXRJbmRleCxcXHJcXG4gICAgZ2V0SW5kZXgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0b0luZGV4LFxcclxcbiAgICB0b1BhZ2UsXFxyXFxuICAgIHRvRGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsXFxyXFxuICAgIGhhc0ZvY3VzLFxcclxcbiAgICBpc0J1c3ksXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQUxMX0FUVFJJQlVURVMsIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNPTlRST0xTLCBBUklBX0xBQkVMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWJ1dGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU19BUlJPV1MgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBFVkVOVF8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dTX01PVU5URUQsXFxyXFxuICBFVkVOVF9BUlJPV1NfVVBEQVRFRCxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCxcXHJcXG4gIEVWRU5UX01PVU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEVELFxcclxcbiAgRVZFTlRfTU9WRUQsXFxyXFxuICBFVkVOVF9SRUZSRVNILFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIEVWRU5UX1NDUk9MTEVELFxcclxcbiAgRVZFTlRfVVBEQVRFRCxcXHJcXG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBFdmVuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgYWRkQ2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgYXBwZW5kLFxcclxcbiAgYXBwbHksXFxyXFxuICBhc3NpZ24sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgYmVmb3JlLFxcclxcbiAgY3JlYXRlLFxcclxcbiAgZGlzcGxheSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBwYXJzZUh0bWwsXFxyXFxuICByZW1vdmUsXFxyXFxuICByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlLFxcclxcbiAgcmVtb3ZlQ2xhc3MsXFxyXFxuICBzZXRBdHRyaWJ1dGUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IFBBVEgsIFMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSVpFLCBYTUxfTkFNRV9TUEFDRSB9IGZyb20gJy4vcGF0aCc7XFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBBcnJvd3MgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIEFycm93c0NvbXBvbmVudCBleHRlbmRzIEJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ29tcG9uZW50IHtcXHJcXG4gIGFycm93czogeyBwcmV2PzogSFRNTEJ1dHRvbkVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50LCBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQgfTtcXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKiogQGludGVybmFsICovXFxyXFxuICB1cGRhdGUoKTogdm9pZDtcXHJcXG59XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2aW91cyBhbmQgbmV4dCBhcnJvd3MuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBBcnJvd3MgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIEFycm93cyggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucyApOiBBcnJvd3NDb21wb25lbnQge1xcclxcbiAgY29uc3QgZXZlbnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBvbiwgYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGVtaXQgfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBjbGFzc2VzLCBpMThuIH0gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucztcXHJcXG4gIGNvbnN0IHsgRWxlbWVudHMsIENvbnRyb2xsZXIgfSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBhcnJvd3M6IHBsYWNlaG9sZGVyLCB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2sgfSA9IEVsZW1lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXBwZXIgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHdyYXBwZXIgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2Vob2xkZXI7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBwcmV2aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXMgYXJyb3cgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXYgPSBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudHMucHJldjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIG5leHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBuZXh0ID0gRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLm5leHQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldGhlciB0aGUgY29tcG9uZW50IGNyZWF0ZXMgYXJyb3dzIG9yIHJldHJpZXZlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnJvbSB0aGUgRE9NLlxcclxcbiAgICovXFxyXFxuICBsZXQgY3JlYXRlZDogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmaWVyIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgd3JhcHBlckNsYXNzZXM6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFuIG9iamVjdCB3aXRoIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aW91cyBhbmQgbmV4dCBhcnJvd3MuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnJvd3M6IEFycm93c0NvbXBvbmVudFsgJ2Fycm93cycgXSA9IHt9O1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQge1xcclxcbiAgICBpbml0KCk7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCwgcmVtb3VudCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogUmVtb3VudHMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHJlbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGRlc3Ryb3koKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIG1vdW50KCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgZW5hYmxlZCA9IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmFycm93cztcXHJcXG5cXHJcXG4gICAgaWYgKCBlbmFibGVkICYmICEgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldiAmJiBuZXh0ICkgKSB7XFxyXFxuICAgICAgY3JlYXRlQXJyb3dzKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGlmICggcHJldiAmJiBuZXh0ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBhc3NpZ24oIGFycm93cywgeyBwcmV2LCBuZXh0IH0gKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuICAgICAgZGlzcGxheSggd3JhcHBlciwgZW5hYmxlZCA/ICcnIDogJ25vbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlJyApO1xcclxcbiAgICAgIGFkZENsYXNzKCB3cmFwcGVyLCAoIHdyYXBwZXJDbGFzcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyA9IGAkeyBDTEFTU19BUlJPV1MgfS0tJHsgb3B0aW9ucy5kaXJlY3Rpb24gfWAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGVuYWJsZWQgKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbGlzdGVuKCk7XFxyXFxuICAgICAgICB1cGRhdGUoKTtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXRBdHRyaWJ1dGUoIFsgcHJldiwgbmV4dCBdLCBBUklBX0NPTlRST0xTLCB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2suaWQgKTtcXHJcXG4gICAgICAgIGVtaXQoIEVWRU5UX0FSUk9XU19NT1VOVEVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldiwgbmV4dCApO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBldmVudC5kZXN0cm95KCk7XFxyXFxuICAgIHJlbW92ZUNsYXNzKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd3JhcHBlciwgd3JhcHBlckNsYXNzZXMgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlZCApIHtcXHJcXG4gICAgICByZW1vdmUoIHBsYWNlaG9sZGVyID8gWyBwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgbmV4dCBdIDogd3JhcHBlciApO1xcclxcbiAgICAgIHByZXYgPSBuZXh0ID0gbnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgcmVtb3ZlQXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgWyBwcmV2LCBuZXh0IF0sIEFMTF9BVFRSSUJVVEVTICk7XFxyXFxuICAgIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbWUgZXZlbnRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsaXN0ZW4oKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBvbiggWyBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9FTkRfSU5ERVhfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNIQU5HRUQgXSwgdXBkYXRlICk7XFxyXFxuICAgIGJpbmQoIG5leHQsICdjbGljaycsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBhcHBseSggZ28sICc+JyApICk7XFxyXFxuICAgIGJpbmQoIHByZXYsICdjbGljaycsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBhcHBseSggZ28sICc8JyApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKioiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBUaGUgd3JhcHBlciBmdW5jdGlvbiBvZiBDb250cm9sbGVyI2dvKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjb250cm9sIC0gVGhlIGNvbnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sIHBhdHRlcm4uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdvKCBjb250cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbDogc3RyaW5nICk6IHZvaWQge1xcclxcbiAgICBDb250cm9sbGVyLmdvKCBjb250cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbCwgdHJ1ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ3JlYXRlIGFycm93cyBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIHNsaWRlci5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycm93cygpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIHdyYXBwZXIgPSBwbGFjZWhvbGRlciB8fCBjcmVhdGUoICdkaXYnLCBjbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3Nlcy5hcnJvd3MgKTtcXHJcXG4gICAgcHJldiAgICA9IGNyZWF0ZUFycm93KCB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSApO1xcclxcbiAgICBuZXh0ICAgID0gY3JlYXRlQXJyb3coIGZhbHNlICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjcmVhdGVkID0gdHJ1ZTtcXHJcXG5cXHJcXG4gICAgYXBwZW5kKCB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhcHBlciwgWyBwcmV2LCBuZXh0IF0gKTtcXHJcXG4gICAgISBwbGFjZWhvbGRlciAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgYmVmb3JlKCB3cmFwcGVyLCB0cmFjayApO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ3JlYXRlcyBhbiBhcnJvdyBidXR0b24uXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgSW4gSUUsIEEgU1ZHIGVsZW1lbnQgaXMgZm9jdXNhYmxlLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gcHJldiAtIERldGVybWluZXMgd2hldGhlciB0byBjcmVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIGEgcHJldmlvdXMgb3IgbmV4dCBhcnJvdy5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBBIGNyZWF0ZWQgYnV0dG9uIGVsZW1lbnQuXFxyXFxuICAgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJvdyggcHJldjogYm9vbGVhbiApOiBIVE1MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J1dHRvbkVsZW1lbnQge1xcclxcbiAgICBjb25zdCBhcnJvdyA9IGA8YnV0dG9uIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzcz1cXCIkeyBjbGFzc2VzLmFycm93IH0gJHsgcHJldiA/IGNsYXNzZXMucHJldiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjbGFzc2VzLm5leHQgfVxcIiB0eXBlPVxcImJ1dHRvblxcIj5gXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICtcXHRgPHN2ZyB4bWxucz1cXCIkeyBYTUxfTkFNRV9TUEFDRSB9XFwiIHZpZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3Qm94PVxcIjAgMCAkeyBTSVpFIH0gJHsgU0laRSB9XFwiIHdpZHRoPVxcIiR7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSVpFIH1cXCIgaGVpZ2h0PVxcIiR7IFNJWkUgfVxcIiBmb2N1c2FibGU9XFwiZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHNlXFwiPmBcXHJcXG4gICAgICArIGA8cGF0aCBkPVxcIiR7IG9wdGlvbnMuYXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293UGF0aCB8fCBQQVRIIH1cXCIgLz5gO1xcclxcblxcclxcbiAgICByZXR1cm4gcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnNlSHRtbDxIVE1MQnV0dG9uRWxlbWVudD4oIGFycm93ICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBVcGRhdGVzIHN0YXR1cyBvZiBhcnJvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBzdWNoIGFzIGBkaXNhYmxlZGAgYW5kIGBhcmlhLWxhYmVsYC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldiAmJiBuZXh0ICkge1xcclxcbiAgICAgIGNvbnN0IGluZGV4ICAgICA9IFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuaW5kZXg7XFxyXFxuICAgICAgY29uc3QgcHJldkluZGV4ID0gQ29udHJvbGxlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UHJldigpO1xcclxcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IENvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldE5leHQoKTtcXHJcXG4gICAgICBjb25zdCBwcmV2TGFiZWwgPSBwcmV2SW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID4gLTEgJiYgaW5kZXggPCBwcmV2SW5kZXggPyBpMThuLmxhc3QgOiBpMThuLnByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2O1xcclxcbiAgICAgIGNvbnN0IG5leHRMYWJlbCA9IG5leHRJbmRleCA+IC0xICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCA+IG5leHRJbmRleCA/IGkxOG4uZmlyc3QgOiBpMThuLm5leHQ7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHByZXYuZGlzYWJsZWQgPSBwcmV2SW5kZXggPCAwO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBuZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgMDtcXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgc2V0QXR0cmlidXRlKCBwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZWwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBuZXh0LCBBUklBX0xBQkVMLCBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xhYmVsICk7XFxyXFxuXFxyXFxuICAgICAgZW1pdCggRVZFTlRfQVJST1dTX1VQRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVELCBwcmV2LCBuZXh0LCBwcmV2SW5kZXgsIG5leHRJbmRleCApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyxcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgbmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzcGFjZSBmb3IgU1ZHIGVsZW1lbnRzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuc3QgWE1MX05BTUVfU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYXJyb3cgcGF0aC5cXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiovXFxyXFxuZXhwb3J0IGNvbnN0IFBBVEggPSAnbTE1LjUgMC45MzItNC4zIDQuMzggIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LjYgNC40LTQuMy00LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI0LTQuNC0xNC42LTE0LjZ6JztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTVkcgd2lkdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoIGFuZCBoZWlnaHQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNJWkUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNDA7XFxyXFxuIiwiaW1wb3J0IHsgQVJJQV9DT05UUk9MUywgQVJJQV9MQUJFTCB9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFxyXFxuaW1wb3J0IHsgQ0wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQVNTX0FDVElWRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1wb3J0IHtcXHJcXG4gIEVWRU5UX0FVVE9QTEFZX1BBVVNFLFxcclxcbiAgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0FVVE9QTEFZX1BMQVksXFxyXFxuICBFVkVOVF9BVVRPUExBWV9QTEFZSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxcXHJcXG4gIEVWRU5UX01PVkUsXFxyXFxuICBFVkVOVF9SRUZSRVNILFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEVWRU5UX1NDUk9MTCxcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSwgUmVxdWVzdEludGVydmFsIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlwZXMnO1xcclxcbmltcG9ydCB7IGdldEF0dHJpYnV0ZSwgc2V0QXR0cmlidXRlLCBzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR5bGUsIHRvZ2dsZUNsYXNzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSB9IGZyb20gJy4vY29uc3RhbnRzJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBBdXRvcGxheSBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBBdXRvcGxheUNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIHBsYXkoKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBwYXVzZSgpOiB2b2lkO1xcclxcbiAgaXNQYXVzZWQoKTogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciBhdXRvcGxheSwgaGFuZGxpbmcgYSBwcm9ncmVzcyBiYXIgYW5kIGEgdG9nZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZSBidXR0b24uXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBBdXRvcGxheSBjb21wb25lbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gQXV0b3BsYXkoIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMgKTogQXV0b3BsYXlDb21wb25lbnQge1xcclxcbiAgY29uc3QgeyBvbiwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbCggb3B0aW9ucy5pbnRlcnZhbCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIFNwbGlkZS5nby5iaW5kKCBTcGxpZGUsICc+JyApLCBvbkFuaW1hdGlvbkZyYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgY29uc3QgeyBpc1BhdXNlZCB9ID0gaW50ZXJ2YWw7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBFbGVtZW50cywgRWxlbWVudHM6IHsgcm9vdCwgdG9nZ2xlIH0gfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBhdXRvcGxheSB9ID0gb3B0aW9uczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVyIGlzIGhvdmVyZWQgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hvdmVyZWQ6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZXMgd2hldGhlciBvbmUgb2Ygc2xpZGVyIGVsZW1lbnRzIGhhcyBmb2N1cyBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgZm9jdXNlZDogYm9vbGVhbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBhdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BsYXkgaXMgc3RvcHBlZCBvciBub3QuXFxyXFxuICAgKiBJZiBzdG9wcGVkLCBhdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3BsYXkgd29uJ3Qgc3RhcnQgYXV0b21hdGljYWxseSB1bmxlc3MgYHBsYXkoKWAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzIGV4cGxpY2l0bHkgY2FsbGVkLlxcclxcbiAgICovXFxyXFxuICBsZXQgc3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwZWQgPSBhdXRvcGxheSA9PT0gJ3BhdXNlJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBhdXRvcGxheSApIHtcXHJcXG4gICAgICBsaXN0ZW4oKTtcXHJcXG4gICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29nZ2xlICYmIHNldEF0dHJpYnV0ZSggdG9nZ2xlLCBBUklBX0NPTlRST0xTLCBFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMudHJhY2suaWQgKTtcXHJcXG4gICAgICBzdG9wcGVkIHx8IHBsYXkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgdXBkYXRlKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gc29tZSBldmVudHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsaXN0ZW4oKTogdm9pZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIG9wdGlvbnMucGF1c2VPbkhvdmVyICkge1xcclxcbiAgICAgIGJpbmQoIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib290LCAnbW91c2VlbnRlciBtb3VzZWxlYXZlJywgZSA9PiB7XFxyXFxuICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaG92ZXJlZCA9IGUudHlwZSA9PT0gJ21vdXNlZW50ZXInO1xcclxcbiAgICAgICAgYXUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9Ub2dnbGUoKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggb3B0aW9ucy5wYXVzZU9uRm9jdXMgKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGJpbmQoIHJvb3QsICdmb2N1c2luIGZvY3Vzb3V0JywgZSA9PiB7XFxyXFxuICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgZm9jdXNlZCA9IGUudHlwZSA9PT0gJ2ZvY3VzaW4nO1xcclxcbiAgICAgICAgYXUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9Ub2dnbGUoKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggdG9nZ2xlICkge1xcclxcbiAgICAgIGJpbmQoIHRvZ2dsZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICdjbGljaycsICgpID0+IHtcXHJcXG4gICAgICAgIHN0b3BwZWQgPyBwbGF5KCkgOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2UoIHRydWUgKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIG9uKCBbIEVWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRlJFU0ggXSwgaW50ZXJ2YWwucmV3aW5kICk7XFxyXFxuICAgIG9uKCBFVkVOVF9NTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRSwgb25Nb3ZlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBTdGFydHMgYXV0b3BsYXkgYW5kIGNsZWFycyBhbGwgZmxhZ3MuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBmdW5jdGlvbiBwbGF5KCk6IHZvaWQge1xcclxcbiAgICBpZiAoIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BhdXNlZCgpICYmIENvbXBvbmVudHMuU2xpZGVzLmlzRW5vdWdoKCkgKSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGludGVydmFsLnN0YXJ0KCAhIG9wdGlvbnMucmVzZXRQcm9ncmVzcyApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBmb2N1c2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XFxyXFxuICAgICAgdXBkYXRlKCk7XFxyXFxuICAgICAgZW1pdCggRVZFTlRfQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVVE9QTEFZX1BMQVkgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogUGF1c2VzIGF1dG9wbGF5LlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gc3RvcCAtIElmIGB0cnVlYCwgYXV0b3BsYXkga2VlcHMgcGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bnRpbCBgcGxheSgpYCBpcyBleHBsaWNpdGx5IGNhbGxlZC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIHBhdXNlKCBzdG9wID0gdHJ1ZSApOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHN0b3BwZWQgPSAhISBzdG9wO1xcclxcbiAgICB1cGRhdGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIGlmICggISBpc1BhdXNlZCgpICkge1xcclxcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbC5wYXVzZSgpO1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX0FVVE9QTEFZX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVTRSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBUb2dnbGVzIHBsYXkvcGF1c2UgYWNjb3JkaW5nIHRvIGN1cnJlbnQgZmxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dzLlxcclxcbiAgICogSWYgYXV0b3BsYXkgaXMgbWFudWFsbHkgcGF1c2VkLCB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3aWxsIGRvIG5vdGhpbmcuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGF1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvVG9nZ2xlKCk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgc3RvcHBlZCApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgaG92ZXJlZCB8fCBmb2N1c2VkID8gcGF1c2UoIGZhbHNlICkgOiBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheSgpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBVcGRhdGVzIHRoZSB0b2dnbGUgYnV0dG9uIHN0YXR1cy5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggdG9nZ2xlICkge1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCB0b2dnbGUsIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BQ1RJVkUsICEgc3RvcHBlZCApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggdG9nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImdsZSwgQVJJQV9MQUJFTCwgb3B0aW9ucy5pMThuWyBzdG9wcGVkID8gJ3BsYXknICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6ICdwYXVzZScgXSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICAgKiBDYWxsZWQgb24gZXZlcnkgYW5pbWF0aW9uIGZyYW1lIHdoaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBhdXRvcGxheSBpcyBhY3RpdmUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByYXRlIC0gVGhlIHByb2dyZXNzIHJhdGUgYmV0d2VlbiAwIGFuZCAxLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggcmF0ZTogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBiYXIgfSA9IEVsZW1lbnRzO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgYmFyICYmIHN0eWxlKCBiYXIsICd3aWR0aCcsIGAkeyByYXRlICogMTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCB9JWAgKTtcXHJcXG4gICAgZW1pdCggRVZFTlRfQVVUT1BMQVlfUExBWUlORywgcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgb3IgcmVzdG9yZXMgdGhlIGludGVydmFsIGR1cmF0aW9uLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiBpbmRleCB0byBtb3ZlIHRvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3ZlKCBpbmRleDogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgU2xpZGUgPSBDb21wb25lbnRzLlNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuZ2V0QXQoIGluZGV4ICk7XFxyXFxuICAgIGludGVydmFsLnNldCggU2xpZGUgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICtnZXRBdHRyaWJ1dGUoIFNsaWRlLnNsaWRlLCBJTlRFUlZBTF9EQVRBX0FUVFJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JVVEUgKSB8fCBvcHRpb25zLmludGVydmFsICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3k6IGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbC5jYW5jZWwsXFxyXFxuICAgIHBsYXksXFxyXFxuICAgIHBhdXNlLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaXNQYXVzZWQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfTEFaWUxPQURfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9SRUZSRVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBhcHBseSwgY2hpbGQsIGRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vU2xpZGVzL1NsaWRlJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBDb3ZlciBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBDb3ZlckNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIHNldHRpbmcgdGhlIGltYWdlIGFzIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugc2xpZGUgYmFja2dyb3VuZC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgQ292ZXIgY29tcG9uZW50IG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIENvdmVyKCBTcGxpZGU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IENvdmVyQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24gfSA9IEV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZSggU3BsaWRlICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5jb3ZlciApIHtcXHJcXG4gICAgICBvbiggRVZFTlRfTEFaWUxPQURfTE9BREUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCwgYXBwbHkoIHRvZ2dsZSwgdHJ1ZSApICk7XFxyXFxuICAgICAgb24oIFsgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVU5URUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb3ZlciwgdHJ1ZSApICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIFNldHMvcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBpbWFnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8vZnJvbSBhbGwgc2xpZGVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY292ZXIgLSBJZiBgZmFsc2VgLCByZW1vdmVzIHRoZSBiYWNrZ3JvdW5kIGltYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY292ZXIoIGNvdmVyOiBib29sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiApOiB2b2lkIHtcXHJcXG4gICAgQ29tcG9uZW50cy5TbGlkZXMuZm9yRWFjaCggUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlID0+IHtcXHJcXG4gICAgICBjb25zdCBpbWcgPSBjaGlsZDxIVE1MSW1hZ2VFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlbWVudD4oIFNsaWRlLmNvbnRhaW5lciB8fCBTbGlkZS5zbGlkZSwgJ2ltZycgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCBpbWcgJiYgaW1nLnNyYyApIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0b2dnbGUoIGNvdmVyLCBpbWcsIFNsaWRlICk7XFxyXFxuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU2V0cy9yZW1vdmVzIHRoZSBiYWNrZ3JvdW5kIGltYWdlIHRvL2Zyb20gdGhlIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY292ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gSWYgYGZhbHNlYCwgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBpbWFnZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gaW1nICAgLSBBIHRhcmdldCBpbWFnZSBlbGVtZW50LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGVDb21wb25lbnQgb2JqZWN0IHdoZXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgaW1hZ2UgYmVsb25ncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dsZSggY292ZXI6IGJvb2xlYW4sIGltZzogSFRNTEltYWdlRWxlbWVudCwgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlOiBTbGlkZUNvbXBvbmVudCApOiB2b2lkIHtcXHJcXG4gICAgU2xpZGUuc3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnYmFja2dyb3VuZCcsIGNvdmVyID8gYGNlbnRlci9jb3ZlciBuby1yZXBlYXQgdSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybChcXCIkeyBpbWcuc3JjIH1cXCIpYCA6IFwnXCcsIHRydWUgKTtcXHJcXG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpc3BsYXkoIGltZywgY292ZXIgPyAnbm9uZScgOiAnJyApO1xcclxcbiAgfVxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveTogYXBwbHkoIGNvdmVyLCBmYWxzZSApLFxcclxcbiAgfTtcXHJcXG59XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiIsImltcG9ydCB7IEVWRU5UX01PVkUsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IElETEUsIFNDUk9MTElOIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBTIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkxJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEludGVyZmFjZSwgUmVxdWVzdEludGVydmFsLCBSZXF1ZXN0SW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFicywiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGx5LCBhcHByb3hpbWF0ZWx5RXF1YWwsIGZsb29yLCBtYXgsIHNpZ24gfSBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IEJBU0VfVkVMT0NJVFksIEJPIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VOQ0VfRElGRl9USFJFU0hPTEQsIEJPVU5DRV9EVVJBVElPTiwgRlJJQ1RJT05fRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBQ1RPUiwgTUlOX0RVUkFUSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sbCBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxDb21wb25lbnQgZXh0ZW5kcyBCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzZUNvbXBvbmVudCB7XFxyXFxuICBzY3JvbGwoIHBvc2l0aW9uOiBudW1iZXIsIGR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhdGlvbj86IG51bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICk6IHZvaWQ7XFxyXFxuICBjYW5jZWwoKTogdm9pZDtcXHJcXG59XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIHNjcm9sbGluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgU2Nyb2xsIGNvbXBvbmVudCBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTY3JvbGwoIFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgKTogU2Nyb2xsQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24sIGVtaXQgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCB7IHN0YXRlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBzZXQgfSB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyBNb3ZlIH0gPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cztcXHJcXG4gIGNvbnN0IHsgZ2V0UG9zaXRpb24sIGdldExpbWl0LCBleGNlZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWRMaW1pdCwgdHJhbnNsYXRlIH0gPSBNb3ZlO1xcclxcbiAgY29uc3QgaXNTbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBTcGxpZGUuaXMoIFNMSURFICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRhaW5zIHRoZSBhY3RpdmUgUmVxdWVzdEludGVydmFsIG9iamVjdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGxldCBpbnRlcnZhbDogUmVxdWVzdEludGVydmFsSW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgdGhlIGNhbGxiYWNrICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGNhbGxiYWNrOiBBbnlGdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBjdXJyZW50IGZyaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoPD0gMSkuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBmcmljdGlvbiA9IDE7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTogdm9pZCB7XFxyXFxuICAgIG9uKCBFVkVOVF9NT1ZFLCBjbGVhciApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgb24oIFsgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCBdLCBjYW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBzbGlkZXIgdG8gdGhlIHByb3ZpZGVkIGRlc3RpbmF0aW9uLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gLSBUaGUgZGVzdGluYXRpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHNjcm9sbCB0aGUgc2xpZGVyIHRvLlxcclxcbiAgICogQHBhcmFtIGR1cmF0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIE9wdGlvbmFsLiBUaGUgc2Nyb2xsIGR1cmF0aW9uLiBJZiBvbWl0dGVkLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsY3VsYXRlcyBpdCBieSB0aGUgZGlzdGFuY2UuXFxyXFxuICAgKiBAcGFyYW0gc24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXAgICAgICAgIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc25hcCB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0byB0aGUgY2xvc2VzdCBzbGlkZSBvciBub3QuXFxyXFxuICAgKiBAcGFyYW0gb25TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nyb2xsZWQgIC0gT3B0aW9uYWwuIEEgY2FsbGJhY2sgaW52b2tlZCBhZnRlciBzYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xsIGVuZHMuXFxyXFxuICAgKiBAcGFyYW0gbm9Db25zdHJhaW4gLSBPcHRpb25hbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuIFdoZXRoZXIgdG8gc3VwcHJlc3MgY29uc3RyYWludCBwcm9jZXNzIHdoZW4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIgZXhjZWVkcyBib3VuZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBzY3JvbGwoXFxyXFxuICAgIGRlc3RpbmF0aW9uOiBudW1iZXIsXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkdXJhdGlvbj86IG51bWJlcixcXHJcXG4gICAgc25hcD86IGJvb2xlYW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBvblNjcm9sbGVkPzogQW55RnVuY3Rpb24sXFxyXFxuICAgIG5vQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0cmFpbj86IGJvb2xlYW5cXHJcXG4gICk6IHZvaWQge1xcclxcbiAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgZnJvbSA9IGdldFBvc2l0aW9uKCk7XFxyXFxuXFxyXFxuICAgIGNsZWFyKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIHNuYXAgJiYgKCAhIGlzU2xpZGUgfHwgISBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZWVkZWRMaW1pdCgpICkgKSB7XFxyXFxuICAgICAgY29uc3Qgc2l6ZSAgID0gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMuTGF5b3V0LnNsaWRlclNpemUoKTtcXHJcXG4gICAgICBjb25zdCBvZmZzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gc2lnbiggZGVzdGluYXRpb24gKSAqIHNpemUgKiBmbG9vciggYWJzKCBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGluYXRpb24gKSAvIHNpemUgKSB8fCAwO1xcclxcbiAgICAgIGRlc3RpbmF0aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUudG9Qb3NpdGlvbiggQ29tcG9uZW50cy5Db250cm9sbGVyLnRvRGVzdCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3RpbmF0aW9uICUgc2l6ZSApICkgKyBvZmZzZXQ7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIGNvbnN0IG5vRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmcm9tLCBkZXN0aW5hdGlvbiwgMSApO1xcclxcblxcclxcbiAgICBmcmljdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSAxO1xcclxcbiAgICBkdXJhdGlvbiA9IG5vRGlzdGFuY2UgPyAwIDogZHVyYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IG1heCggYWJzKCBkZXN0aW5hdGlvbiAtIGZyb20gKSAvIEJBU0VfVkVMT0NJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RZLCBNSU5fRFVSQVRJT04gKTtcXHJcXG4gICAgY2FsbGJhY2sgPSBvblNjcm9sbGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoIGR1cmF0aW9uLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25FbmQsIGFwcGx5KCB1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaW4gKSwgMSApO1xcclxcblxcclxcbiAgICBzZXQoIFNDUk9MTElORyApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZW1pdCggRVZFTlRfU0NST0xMICk7XFxyXFxuICAgIGludGVydmFsLnN0YXJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gc2Nyb2xsIGVuZHMgb3IgaGFzIGJlZW4ganVzdCBjYW5jZWxlZC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIG9uRW5kKCk6IHZvaWQge1xcclxcbiAgICBzZXQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBJRExFICk7XFxyXFxuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbWl0KCBFVkVOVF9TQ1JPTExFRCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogQ2FsbGVkIHdoZW5ldmVyIHRoZSBpbnRlcnZhbCB0aW1lciBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdXBkYXRlZC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZnJvbSAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBwb3NpdGlvbiB3aGVyZSBzY3JvbGwgc3RhcnRzLlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSB0byAgICAgICAgICAtIEEgZGVzdGluYXRpb24gd2hlcmUgdGhlIHNsaWRlciBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29lcy5cXHJcXG4gICAqIEBwYXJhbSBub0NvbnN0cmFpbiAtIFdoZXRoZXIgdG8gc3VwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXNzIGNvbnN0cmFpbnQgcHJvY2VzcyB3aGVuIHRoZSBzbGlkZXIgZXhjZWVkcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm91bmRzLlxcclxcbiAgICogQHBhcmFtIHJhdGUgICAgICAgIC0gQSBjdXJyZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB1cGRhdGUoIGZyb206IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIHRvOiBudW1iZXIsIG5vQ29uc3RyYWluOiBib29sZWFuIHwgdW5kZWZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lZCwgcmF0ZTogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPSBnZXRQb3NpdGlvbigpO1xcclxcbiAgICBjb25zdCB0YXJnZXQgICA9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgKCB0byAtIGZyb20gKSAqIGVhc2luZyggcmF0ZSApO1xcclxcbiAgICBjb25zdCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmZiAgICAgPSAoIHRhcmdldCAtIHBvc2l0aW9uICkgKiBmcmljdGlvbjtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAgIHRyYW5zbGF0ZSggcG9zaXRpb24gKyBkaWZmICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBpZiAoIGlzU2xpZGUgJiYgISBub0NvbnN0cmFpbiAmJiBleGNlZWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RMaW1pdCgpICkge1xcclxcbiAgICAgIGZyaWN0aW9uICo9IEZSSUNUSU9OX0ZBQ1RPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1I7XFxyXFxuXFxyXFxuICAgICAgaWYgKCBhYnMoIGRpZmYgKSA8IEJPVU5DRV9ESScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGRl9USFJFU0hPTEQgKSB7XFxyXFxuICAgICAgICBzY3JvbGwoIGdldExpbWl0KCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZWVkZWRMaW1pdCggdHJ1ZSApICksIEJPVU5DRV9EVVJBVElPTiwgZmFsc2UsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaywgdHJ1ZSApO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2xlYXJzIHRoZSBhY3RpdmUgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjbGVhcigpOiB2b2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCB7XFxyXFxuICAgIGlmICggaW50ZXJ2YWwgKSB7XFxyXFxuICAgICAgaW50ZXJ2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLmNhbmNlbCgpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBDYW5jZWxzIHRoZSBhY3RpdmUgaW50ZXJ2YWwgYW5kIGVtaXRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYHNjcm9sbGVkYCBldmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbmNlbCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBpbnRlcnZhbCAmJiAhIGludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbC5pc1BhdXNlZCgpICkge1xcclxcbiAgICAgIGNsZWFyKCk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uRW5kKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIFRoZSBlYXNpbmcgZnVuY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSB0IC0gQSB2YWx1ZSB0byBlYXNlLlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIEFuIGVhc2VkIHZhbHVlLlxcclxcbiAgICovXFxyXFxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZWFzaW5nKCB0OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3sgZWFzaW5nRnVuYyB9ID0gb3B0aW9ucztcXHJcXG4gICAgcmV0dXJuIGVhc2luZ0Z1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jID8gZWFzaW5nRnVuYyggdCApIDogMSAtIE1hdGgucG93KCAxIC0gdCwgNCApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZGVzdHJveTogY2xlYXIsXFxyXFxuICAgIHNjcm9sbCxcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbmNlbCxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnZ2VycyB0aGUgYm91bmNlIGVmZmVjdCB3aGVuIHRoZSBkaWZmIGJlY29tZXMgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3MgdGhhbiB0aGlzIHZhbHVlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBCT1VOQ0VfRElGRl9USFJFU0hPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xEID0gMTA7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGR1cmF0aW9uIG9mIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYm91bmNlIGVmZmVjdC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKi9cXHJcXG5leHBvcnQgY29uc3QgQk9VTkNFX0RVUkFUSU9OID0gNjAwO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZnJpY3Rpb24gZmFjdG9yLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgdmVsb2NpdHkgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgZHVyYXRpb24uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBCQVNFX1ZFTE9DSVRZID0gMS41O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaW11bSBkdXJhdGlvbiBvZiBzY3JvbGwuXFxyXFxuICpcXHJcXG4gKiBAc2luYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE1JTl9EVVJBVElPTiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSA4MDA7XFxyXFxuIiwiaW1wb3J0IHsgQ0xBU1NfQVJST1csIENMQVNTX1BBR0lOQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSU9OX1BBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCB7IEVWRU5UX0RSQUcsIEVWRU5UX0RSQUdHRUQsIEVWRU5UX0RSQUdHSU5HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uL2NvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBTQ1JPTExfTElTVEVORVJfT1BUSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGlzdGVuZXItb3B0aW9ucyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmltcG9ydCB7IERSQUdHSU5HLCBJRExFLCBNT1ZJTkcsIFNDUk9MTElORyB9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiTE9PUCwgU0xJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFicywgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzT2JqZWN0LCBtYXRjaGVzLCBtaW4sIG5vb3AsIHByZXZlbnQsIHNpZ24sIHRpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlT2YgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRlJJQ1RJT04sICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT0dfSU5URVJWQUwsIFBPSU5URVJfRE9XTl9FVkVOVFMsIFBPSU5URVJfTU9WRV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRVZFTlRTLCBQT0lOVEVSX1VQX0VWRU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBEcmFnIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIERyYWdDb21wb25lbnQgZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICBkaXNhYmxlKCBkaXNhYmxlZDogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW4gKTogdm9pZDtcXHJcXG4gIGlzRHJhZ2dpbmcoKTogYm9vbGVhbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIGRyYWdnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyB0aGUgc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBEcmFnIGNvbXBvbmVudCBvYmplY3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBEcmFnKCBTcGxpZGU6IFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIERyYWdDb21wb25lbnQge1xcclxcbiAgY29uc3QgeyBvbiwgZW1pdCwgYmluZCwgdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmluZCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUgfSA9IFNwbGlkZTtcXHJcXG4gIGNvbnN0IHsgTW92ZSwgU2Nyb2xsLCBDb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJvbGxlciwgRWxlbWVudHM6IHsgdHJhY2sgfSwgTWVkaWE6IHsgcmVkdWNlIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyByZXNvbHZlLCBvcmllbnQgfSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDb21wb25lbnRzLkRpcmVjdGlvbjtcXHJcXG4gIGNvbnN0IHsgZ2V0UG9zaXRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleGNlZWRlZExpbWl0IH0gPSBNb3ZlO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogVGhlIGJhc2Ugc2xpZGVyIHBvc2l0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgZGVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhIG9mIGNvb3Jkcy5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGJhc2VQb3NpdGlvbjonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGJhc2UgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9iamVjdCBzYXZlZCBwZXIgc3BlY2lmaWMgc2FtcGxpbmcgaW50ZXJ2YWwuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBsZXQgYmFzZUV2ZW50OiBUb3VjaEV2ZW50IHwgTW91c2VFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBwcmV2aW91cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmFzZSBldmVudCBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwcmV2QmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VFdmVudDogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQ7XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZHJhZyBtb2RlIGlzIGBmcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWAgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgaXNGcmVlOiBib29sZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBzbGlkZXIgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgbGV0IGRyYWdnaW5nOiBib29sZWFuO1xcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNsaWRlciBleGNlZWRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBsaW1pdHMgb3Igbm90LlxcclxcbiAgICogVGhpcyBtdXN0IG5vdCBiZSBgdW5kZWZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lZGAgZm9yIHN0cmljdCBjb21wYXJpc29uLlxcclxcbiAgICovXFxyXFxuICBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGV4Y2VlZGVkID0gZmFsc2U7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducyBpbnRvIGB0cnVlYCB3aGVuIHRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlci5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGNsaWNrUHJldmVudGVkOiBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHRoZSBkcmFnIGNvbXBvbmVudCBpcyBub3cgZGlzYWJsZWQgb3Igbm90LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgbGV0IGRpc2FibGVkOiBib29sZWFuO1xcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogVGhlIHRhcmdldCBlbGVtZW50IHRvIGF0dGFjaCBsaXN0ZW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzLlxcclxcbiAgICovXFxyXFxuICBsZXQgdGFyZ2V0OiBXaW5kb3cgfCBIVE1MRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgYmluZCggdHJhY2ssIFBPSU5URVJfTU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVfRVZFTlRTLCBub29wLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYmluZCggdHJhY2ssIFBPSU5URVJfVVBfRVZFTlRTLCBub29wLCBTQ1JPTExfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xJU1RFTkVSX09QVElPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhY2ssIFBPSU5URVJfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RPV05fRVZFTlRTLCBvblBvaW50ZXJEb3duLCBTQ1JPTExfTElTVEVORVJfT1BUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhY2ssICdjbGljaycsIG9uQ2xpY2ssIHsgYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhcHR1cmU6IHRydWUgfSApO1xcclxcbiAgICBiaW5kKCB0cmFjaywgJ2RyYWdzdGFydCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLCBwcmV2ZW50ICk7XFxyXFxuICAgIG9uKCBbIEVWRU5UX01PVU5URUQsIEVWRU5UXyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVUERBVEVEIF0sIGluaXQgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnIH0gPSBvcHRpb25zO1xcclxcbiAgICBkaXNhYmxlKCAhIGRyYWcgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIGlzRnJlZSA9IGRyYWcgPT09ICdmcmVlJztcXHJcXG4gIH1cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgdG91Y2hlcyB0aGUgc2xpZGVyLlxcclxcbiAgICogLSBOZWVkcyB0byBwcmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiB0aGUgc2xpZGVyIGlzIGJ1c3kgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGRlbnkgYW55IGFjdGlvbiwgc3VjaCBhcyBkcmFnZ2luZyBpbWFnZXNcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiAtIElFIGRvZXMgbm90IHN1cHBvcnQgTW91c2VFdmVudCBhbmQgVG91Y2hFdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgY29uc3RydWN0b3JzXFxyXFxuICAgKiAtIFRoZSBgZHJhZ2dpbmdgIHN0YXRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHdheXMgYmVjb21lcyBgdHJ1ZWAgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIHdoaWxlIHRoZSBzbGlkZXIgaXMgbW92aW5nXFxyXFxuICAgKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKCBlOiBUb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hFdmVudCB8IE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIGNsaWNrUHJldmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlZCA9IGZhbHNlO1xcclxcblxcclxcbiAgICBpZiAoICEgZGlzYWJsZWQgKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIGNvbnN0IGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCBpc0RyYWdnYWJsZSggZS50YXJnZXQgKSAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgKCBpc1RvdWNoIHx8ICEgZS5idXR0b24gKSApIHtcXHJcXG4gICAgICAgIGlmICggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEgQ29udHJvbGxlci5pc0J1c3koKSApIHtcXHJcXG4gICAgICAgICAgdGFyZ2V0ICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgPSBpc1RvdWNoID8gdHJhY2sgOiB3aW5kb3c7XFxyXFxuICAgICAgICAgIGRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZ2luZyAgICAgID0gc3RhdGUuaXMoIFsgTU9WSU5HLCBTQ1JPTExJTkcgXSApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgICAgcHJldkJhc2VFdmVudCA9IG51bGw7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICBiaW5kKCB0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJNb3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyApO1xcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYmluZCggdGFyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyApO1xcclxcbiAgICAgICAgICBNb3ZlLmNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWwoKTtcXHJcXG4gICAgICAgICAgU2Nyb2xsLmNhbmNlbCgpO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgc2F2ZSggZSApO1xcclxcbiAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHByZXZlbnQoIGUsIHRydWUgKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBDYWxsZWQgd2hpbGUgdGhlIHVzZXIgbW92ZXMgdGhlIHBvaW50ZXIgb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKi9cXHJcXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvblBvaW50ZXJNb3ZlKCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogdm9pZCB7XFxyXFxuICAgIGlmICggISBzdGF0ZS5pcyggRFJBR0dJTkcgKSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgc3RhdGUuc2V0KCBEUkFHR0lORyApO1xcclxcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9EUkFHICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5jYW5jZWxhYmxlICkge1xcclxcbiAgICAgIGlmICggZHJhZ2dpbmcgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoIGJhc2VQb3NpdGlvbiArIGNvbnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaW4oIGRpZmZDb29yZCggZSApICkgKTtcXHJcXG5cXHJcXG4gICAgICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBleHBpcmVkICAgICA9IGRpZmZUaW1lKCBlICkgPiBMT0dfSU5URVJWQUw7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgICAgY29uc3QgaGFzRXhjZWVkZWQgPSBleGNlZWRlZCAhPT0gKCBleGNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkZWQgPSBleGNlZWRlZExpbWl0KCkgKTtcXHJcXG5cXHJcXG4gICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIGV4cGlyZWQgfHwgaGFzRXhjZWVkZWQgKSB7XFxyXFxuICAgICAgICAgIHNhdmUoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlICk7XFxyXFxuICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgICBjbGlja1ByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQgPSB0cnVlO1xcclxcbiAgICAgICAgZW1pdCggRVZFTlRfRFJBR0dJTkcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgICBwcmV2ZW50KCBlICk7XFxyXFxuICAgICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoIGlzU2xpZGVyRGlyZWN0aW9uKCBlICkgKSB7XFxyXFxuICAgICAgICBkcmFnZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcgPSBzaG91bGRTdGFydCggZSApO1xcclxcbiAgICAgICAgcHJldmVudCggZSApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIHBvaW50aW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXZpY2VzLlxcclxcbiAgICogTmVlZHMgdG8gbW92ZSB0aGUgc2xpZGVyIHdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuOlxcclxcbiAgICogLSBUaGUgdXNlciBkcmFncyB0aGUgc2xpZGVyIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3RhbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZFxcclxcbiAgICogLSBUaGUgdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYWJvcnRlZCB0aGUgc2xpZGVyIG1vdmluZyBieSBwb2ludGVyZG93biBhbmQgaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c3QgcmVsZWFzZWQgaXQgd2l0aG91dCBkcmFnZ2luZyB0aGUgc2xpZGVyXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9iamVjdFxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvblBvaW50ZXJVcCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IHZvaWQge1xcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBzdGF0ZS5pcyggRFJBR0dJTkcgKSApIHtcXHJcXG4gICAgICBzdGF0ZS5zZXQoIEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRExFICk7XFxyXFxuICAgICAgZW1pdCggRVZFTlRfRFJBR0dFRCApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgICBpZiAoIGRyYWdnaW5nICkge1xcclxcbiAgICAgIG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlKCBlICk7XFxyXFxuICAgICAgcHJldmVudCggZSApO1xcclxcbiAgICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB1bmJpbmQoIHRhcmdldCwgUE9JTlRFUl9NT1ZFX0VWRU5UUywgb25QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRlck1vdmUgKTtcXHJcXG4gICAgdW5iaW5kKCB0YXJnZXQsIFBPSU5URVJfVVBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UUywgb25Qb2ludGVyVXAgKTtcXHJcXG4gICAgZHJhZ2dpbmcgPSBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2U7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlbiB0aGUgdHJhY2sgZWxlbWVudCBpcyBjbGlja2VkLlxcclxcbiAgICogRGlzYWJsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGNsaWNrIGFueSBlbGVtZW50cyBpbnNpZGUgaXQgd2hpbGUgZHJhZ2dpbmcuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBNb3VzZUV2ZW50IG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG9uQ2xpY2soIGU6IE1vdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50ICk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgZGlzYWJsZWQgJiYgY2xpY2tQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmVudGVkICkge1xcclxcbiAgICAgIHByZXZlbnQoIGUsIHRydWUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU2F2ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGRhdGEgYXQgdGhlIHNwZWNpZmljIG1vbWVudC5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGUgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYmplY3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzYXZlKCBlOiBUb3VjaEV2ZW50IHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIHByZXZCYXNlRXZlbnQgPSBiYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50O1xcclxcbiAgICBiYXNlRXZlbnQgICAgID0gZTtcXHJcXG4gICAgYmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VQb3NpdGlvbiAgPSBnZXRQb3NpdGlvbigpO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ2FsY3VsYXRlcyB0aGUgZGVzdGluYXRpb24gYnkgdGhlIGRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnIHZlbG9jaXR5IGFuZCBtb3ZlcyB0aGUgY2Fyb3VzZWwuXFxyXFxuICAgKiBJZiBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290aW9uIGlzIHJlZHVjZWQsIHJlc3RvcmVzIHRyYW5zaXRpb24gc3BlZWQgdG8gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBpbml0aWFsIHZhbHVlXFxyXFxuICAgKiBiZWNhdXNlIGl0XCdzIFxcImVzc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpYWxcXCIgbW90aW9uIGZvciB0aGUgdXNlciB0byByZWNvZ25pemUgd2hhdCBoYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVucyBvbiB0aGUgY2Fyb3VzZWwuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZnVuY3Rpb24gbW92ZSggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IHZvaWQge1xcclxcbiAgICBjb25zdCB2ZWxvY2l0eSAgICA9IGNvbXB1dGVWZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2NpdHkoIGUgKTtcXHJcXG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBjb21wdXRlRGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RpbmF0aW9uKCB2ZWxvY2l0eSApO1xcclxcbiAgICBjb25zdCByZXdpbmQgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBvcHRpb25zLnJld2luZCAmJiBvcHRpb25zLnJld2luZEJ5RHJhZztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIHJlZHVjZSggZmFsc2UgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGcmVlICkge1xcclxcbiAgICAgIENvbnRyb2xsZXIuc2Nyb2xsKCBkZXN0aW5hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIDAsIG9wdGlvbnMuc25hcCApO1xcclxcbiAgICB9IGVsc2UgaWYgKCBTcGxpZGUuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBGQURFICkgKSB7XFxyXFxuICAgICAgQ29udHJvbGxlci5nbyggb3JpZW50KCBzaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJnbiggdmVsb2NpdHkgKSApIDwgMCA/ICggcmV3aW5kID8gJzwnIDogJy0nICkgOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKCByZXdpbmQgPyAnPicgOiAnKycgKSApO1xcclxcbiAgICB9IGVsc2UgaWYgKCBTcGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLmlzKCBTTElERSApICYmIGV4Y2VlZGVkICYmIHJld2luZCApIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgQ29udHJvbGxlci5nbyggZXhjZWVkZWRMaW1pdCggdHJ1ZSApID8gJz4nIDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIic8JyApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIENvbnRyb2xsZXIuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvKCBDb250cm9sbGVyLnRvRGVzdCggZGVzdGluYXRpb24gKSwgdHJ1ZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxcclxcblxcclxcbiAgICByZWR1Y2UoIHRydWUgKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgZHJhZyBkaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UgZXhjZWVkcyB0aGUgZGVmaW5lZCB0aHJlc2hvbGQuXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3RhbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCwgb3IgYGZhbHNlYCBpZiBubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzaG91bGRTdGFydCggZTogVG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IGJvb2xlYW4ge1xcclxcbiAgICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBkcmFnTWluVGhyZXNob2xkOiB0aHJlc2hvbGRzIH0gPSBvcHRpb25zO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgaXNPYmogPSBpc09iamVjdCggdGhyZXNob2xkcyApO1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgbW91c2UgPSBpc09iaiAmJiB0aHJlc2hvbGRzLm1vdXNlIHx8IDA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBjb25zdCB0b3VjaCA9ICggaXNPYmogPyB0aHJlc2hvbGRzLnRvdWNoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyt0aHJlc2hvbGRzICkgfHwgMTA7XFxyXFxuICAgIHJldHVybiBhYnMoIGRpZmZDb29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QoIGUgKSApID4gKCBpc1RvdWNoRXZlbnQoIGUgKSA/IHRvdWNoIDogbW91c2UgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyB3aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlciBkcmFnZ2luZyB0b3dhcmRzIHRoZSBzbGlkZXIgb3IgdGhlIHNjcm9sbCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkcmFnZ2luZyB0b3dhcmRzIHRoZSBzbGlkZXIgZGlyZWN0aW9uLCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKi9cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBpc1NsaWRlckRpcmVjdGlvbiggZTogVG91Y2hFdmVudCB8IE1vdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50ICk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gYWJzKCBkaWZmQ29vcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBlICkgKSA+IGFicyggZGlmZkNvb3JkKCBlLCB0cnVlICkgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbXB1dGVzIHRoZSBkcmFnIHZlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY2l0eS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgb3IgTW91c2VFdmVudCBvYmplY3RcXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBUaGUgZHJhZyB2ZWxvY2l0eS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGNvbXB1dGVWZWxvY2l0eSggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQgKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciB7XFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBMT09QICkgfHwgISBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWQgKSB7XFxyXFxuICAgICAgY29uc3QgdGltZSA9IGRpZmZUaW1lKCBlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcblxcclxcbiAgICAgIGlmICggdGltZSAmJiB0aW1lIDwgTE9HX0lOVEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUlZBTCApIHtcXHJcXG4gICAgICAgIHJldHVybiBkaWZmQ29vcmQoIGUgKSAvIHRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbXB1dGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgZGVzdGluYXRpb24gYnkgdGhlIHZlbG9jaXR5IGFuZCB0aGUgYGZsaWNrUG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2VyYCBvcHRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZlbG9jaXR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAtIFRoZSBkcmFnIHZlbG9jaXR5LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIFRoZSBkZXN0aW5hdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXB1dGVEZXN0aW5hdGlvbiggdmVsb2NpdHk6IG51bWJlciApOiBudW1iZXIge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCkgKyBzaWduKCB2ZWxvY2l0eSApICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pbihcXHJcXG4gICAgICBhYnMoIHZlbG9jaXR5ICkgKiAoIG9wdGlvbnMuZmxpY2tQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293ZXIgfHwgNjAwICksXFxyXFxuICAgICAgaXNGcmVlID8gSW5maW5pdHkgOiBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cy5MYXlvdXQubGlzdFNpemUoKSAqICggb3B0aW9ucy5mbGlja01heFBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyB8fCAxIClcXHJcXG4gICAgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFJldHVybnMgdGhlIGNvb3JkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3ZpZGVkIGFuZCBiYXNlIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGUgICAgICAgICAgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LlxcclxcbiAgICogQHBhcmFtIG9ydGhvZ29uYWwgLSBPcHRpb25hbC4gSWYgYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlYCwgcmV0dXJucyB0aGUgY29vcmQgb2YgdGhlIG9ydGhvZ29uYWwgYXhpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdhaW5zdCB0aGUgZHJhZyBvbmUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gVGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGNvb3JkLlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gZGlmZkNvb3JkKCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9ydGhvZ29uYWw/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29vcmRPZiggZSwgb3J0aG9nb25hbCApIC0gY29vcmRPZiggZ2V0QmFzZUV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggZSApLCBvcnRob2dvbmFsICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBlbGFwc2VkIHRpbWUgZnJvbSB0aGUgYmFzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQgdG8gYGVgLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBUaGUgZWxhcHNlZCB0aW1lIGluIG1pbGxpc2Vjb25kcy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRpZmZUaW1lKCBlOiBUb3VjaEV2ZW50IHwgTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlRXZlbnQgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHRpbWVPZiggZSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIHRpbWVPZiggZ2V0QmFzZUV2ZW50KCBlICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGJhc2UgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogSWYgdGhlIGJhc2UgZXZlbnQgaXMgc2FtZSB3aXRoIGBlYCwgcmV0dXJucyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmlvdXMgb25lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBUbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHJldHVybiBBIGJhc2UgZXZlbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBnZXRCYXNlRXZlbnQoIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUb3VjaEV2ZW50IHwgTW91c2VFdmVudCB7XFxyXFxuICAgIHJldHVybiBiYXNlRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID09PSBlICYmIHByZXZCYXNlRXZlbnQgfHwgYmFzZUV2ZW50O1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgYHBhZ2VYYCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kIGBwYWdlWWAgY29vcmRpbmF0ZXMgcHJvdmlkZWQgYnkgdGhlIGV2ZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEJlIGF3YXJlIHRoYXQgSUUgZG9lcyBub3Qgc3VwcG9ydCBib3RoIFRvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaEV2ZW50IGFuZCBNb3VzZUV2ZW50IGNvbnN0cnVjdG9ycy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGUgICAgICAgICAgLSBBIFRvdWNoRXZlbnQgb3IgTW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlRXZlbnQgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIG9ydGhvZ29uYWwgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwuIElmIGB0cnVlYCwgcmV0dXJucyB0aGUgY29vcmQgb2YgdGhlIG9ydGhvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsIGF4aXMgYWdhaW5zdCB0aGUgZHJhZyBvbmUuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gQSBwYWdlWCBvciBwYWdlWSBjb29yZGluYXRlLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZnVuY3Rpb24gY29vcmRPZiggZTogVG91Y2hFdmVudCB8IE1vdXNlRXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBvcnRob2dvbmFsPzogYm9vbGVhbiApOiBudW1iZXIge1xcclxcbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuICggaXNUb3VjaEV2ZW50KCBlICkgPyBlLmNoYW5nZWRUb3VjaGVzWyAwIF0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogZSApWyBgcGFnZSR7IHJlc29sdmUoIG9ydGhvZ29uYWwgPyAnWScgOiAnWCcgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfWAgXTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVkdWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgdGhlIGRpc3RhbmNlIHRvIG1vdmUgYnkgdGhlIHByZWRlZmluZWQgZnJpY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uLlxcclxcbiAgICogVGhpcyBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgc2xpZGVyIHR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlIGlzIG5vdCBgc2xpZGVgLCBvciB0aGUgcG9zaXRpb24gaXMgaW5zaWRlIGJvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXJzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBkaWZmIC0gRGlmZiB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3RyYWluLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhaW5lZCBkaWZmLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjb25zdHJhaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCBkaWZmOiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGRpZmYgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBleGNlZWRlZCAmJiBTcGxpZGUuaXMoIFNMSURFICkgPyBGUklDVElPTiA6IDEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2B0cnVlYCBpZiB0aGUgdXNlciBjYW4gZHJhZyB0aGUgdGFyZ2V0LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gQW4gZXZlbnQgdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgdGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBkcmFnZ2FibGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzRHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dnYWJsZSggdGFyZ2V0OiBFdmVudFRhcmdldCApOiBib29sZWFuIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHsgbm9EcmFnIH0gPSBvcHRpb25zO1xcclxcblxcclxcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICEgbWF0Y2hlcyggdGFyZ2V0LCBgLiR7IENMQVNTX1BBR0lOQVRJT05fUEFHRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSwgLiR7IENMQVNTX0FSUk9XIH1gIClcXHJcXG4gICAgICAmJiAoICEgbm9EcmFnIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAhIG1hdGNoZXMoIHRhcmdldCwgbm9EcmFnICkgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGlzIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGUgLSBBbiBldmVudCB0byBjaGVjay5cXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGBlYCBpcyBUb3VjaEV2ZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gaXNUb3VjaEV2ZW50KCBlOiBUb3VjaEV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8IE1vdXNlRXZlbnQgKTogZSBpcyBUb3VjaEV2ZW50IHtcXHJcXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZSBpbnN0YW5jZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZiBUb3VjaEV2ZW50O1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQ2hlY2tzIGlmIG5vdyB0aGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBzbGlkZXIgb3Igb3RoZXJ3aXNlIGBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc0RyYWdnaW5nKCk6IGJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIGRyYWdnaW5nO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGlzYWJsZXMgdGhlIGNvbXBvbmVudC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gU2V0IGB0cnVlYCB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsZSB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gZGlzYWJsZSggdmFsdWU6IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIGRpc2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlZCA9IHZhbHVlO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIG1vdW50LFxcclxcbiAgICBkaXNhYmxlLFxcclxcbiAgICBpc0RyYWdnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IENMQVNTX0xPQURJTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJHIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qge1xcclxcbiAgRVZFTlRfTEFaWUxPQURfTE9BREVELFxcclxcbiAgRVZFTlRfTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVkVELFxcclxcbiAgRVZFTlRfUkVGUkVTSCxcXHJcXG4gIEVWRU5UX1JFU0laRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5pbXBvcnQge1xcclxcbiAgYWRkQ2xhc3MsXFxyXFxuICBhcHBseSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjaGlsZCxcXHJcXG4gIGNyZWF0ZSxcXHJcXG4gIGRpc3BsYXksXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZW1wdHksXFxyXFxuICBnZXRBdHRyaWJ1dGUsXFxyXFxuICBxdWVyeUFsbCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZW1vdmUsXFxyXFxuICByZW1vdmVBdHRyaWJ1dGUsXFxyXFxuICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3ZlQ2xhc3MsXFxyXFxuICBzZXRBdHRyaWJ1dGUsXFxyXFxufSBmcm9tICcuLi8uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNsaWRlcy9TbGlkZSc7XFxyXFxuaW1wb3J0IHsgSU1BR0VfU0VMRUNUT1IsIFNSQ19EIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkFUQV9BVFRSSUJVVEUsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSB9IGZyb20gJy4vYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbnN0YW50cyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UgZm9yIHRoZSBMYXp5TG9hZCBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBMYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6eUxvYWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQGludGVybmFsICovXFxyXFxuICBjaGVjaygpOiB2b2lkO1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGVhY2ggZW50cnkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFVzZSBhIHR1cGxlIGZvciBiZXR0ZXIgY29tcHJlc3Npb24uXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxudHlwZSBMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F6eUxvYWRFbnRyeSA9IFsgSFRNTEltYWdlRWxlbWVudCwgU2xpZGVDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBIVE1MU3BhbkVsZW1lbnQgXTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCBmb3IgbGF6aWx5IGxvYWRpbmcgaW1hZ2VzLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gTGF6eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMb2FkIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBMYXp5TG9hZCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IExhenlMb2FkQ29tcG9uZW50IHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBjb25zdCB7IG9uLCBvZmYsIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCBpc1NlcXVlbnRpYWwgPSBvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXp5TG9hZCA9PT0gJ3NlcXVlbnRpYWwnO1xcclxcbiAgY29uc3QgZXZlbnRzICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICA9IFsgRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEIF07XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgZGF0YSBvZiBpbWFnZXMuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBsZXQgZW50cmllczogTGF6eUxvYWRFbnRyeVtdID0gW107XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICAgIGlmICggb3B0aW9ucy5sYXp5TG9hZCApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgaW5pdCgpO1xcclxcbiAgICAgIG9uKCBFVkVOVF9SRUZSRVNILCBpbml0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFuZCBzdGFydCBsb2FkaW5nIGltYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuXFxyXFxuICAgKiBCZSBhd2FyZSB0aGF0IGByZWZyZXNoYCBhbHNvIGNhbGxzIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzIG1ldGhvZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGVtcHR5KCBlbnRyaWVzICk7XFxyXFxuICAgIHJlZ2lzdGVyKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIGlzU2VxdWVudGlhbCApIHtcXHJcXG4gICAgICBsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZE5leHQoKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBvZmYoIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMgKTtcXHJcXG4gICAgICBvbiggZXZlbnRzLCBjaGVjayApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjaGVjaygpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBGaW5kcyBpbWFnZXMgYW5kIHJlZ2lzdGVyIHRoZW0gYXMgZW50cmllcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBjcmVhdGluZyBzcGlubmVyIGVsZW1lbnRzLlxcclxcbiAgICogTm90ZSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdCBzcGlubmVyIGNhbiBiZSBhbHJlYWR5IGF2YWlsYWJsZSBiZWNhdXNlIG9mIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmcmVzaCgpYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVnaXN0ZXIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBDb21wb25lbnRzLlNsaWRlcy5mb3JFYWNoKCBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPT4ge1xcclxcbiAgICAgIHF1ZXJ5QWxsPEhUTUxJbWFnZUVsZW1lbnQ+KCBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uuc2xpZGUsIElNQUdFX1NFTEVDVE9SICkuZm9yRWFjaCggaW1nID0+IHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBjb25zdCBzcmMgICAgPSBnZXRBdHRyaWJ1dGUoIGltZywgU1JDX0RBVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBX0FUVFJJQlVURSApO1xcclxcbiAgICAgICAgY29uc3Qgc3Jjc2V0ID0gZ2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZSggaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUgKTtcXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpZiAoIHNyYyAhPT0gaW1nLnNyYyB8fCBzcmNzZXQgIT09IGltZy5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jjc2V0ICkge1xcclxcbiAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jbGFzc2VzLnNwaW5uZXI7XFxyXFxuICAgICAgICAgIGNvbnN0IHBhcmVudCAgICA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbWcucGFyZW50RWxlbWVudDtcXHJcXG4gICAgICAgICAgY29uc3Qgc3Bpbm5lciAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNoaWxkKCBwYXJlbnQsIGAuJHsgY2xhc3NOYW1lIH1gICkgfHwgY3JlYXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3NwYW4nLCBjbGFzc05hbWUsIHBhcmVudCApO1xcclxcblxcclxcbiAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW50cmllcy5wdXNoKCBbIGltZywgU2xpZGUsIHNwaW5uZXIgXSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgaW1nLnNyYyB8fCBkaXNwbGF5KCBpbWcsICdub25lJyApO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIH1cXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBob3cgY2xvc2UgZWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW1hZ2UgaXMgZnJvbSB0aGUgYWN0aXZlIHNsaWRlLCBhbmQgZGV0ZXJtaW5lcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2hldGhlciB0byBzdGFydCBsb2FkaW5nIG9yIG5vdC5cXHJcXG4gICAqIFRoZSBsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBgKzFgIGlzIGZvciB0aGUgY3VycmVudCBwYWdlLlxcclxcbiAgICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gY2hlY2soKTogdm9pZCB7XFxyXFxuICAgIGVudHJpZXMgPSBlbnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llcy5maWx0ZXIoIGRhdGEgPT4ge1xcclxcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMucGVyUGFnZSAqICggKCBvcHRpb25zLnByZWxvYWRQYWdlcyB8fCAxICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICsgMSApIC0gMTtcXHJcXG4gICAgICByZXR1cm4gZGF0YVsgMSBdLmlzV2l0aGluKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlLmluZGV4LCBkaXN0YW5jZSApID8gbG9hZCggZGF0YSApIDogdHJ1ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZW50cmllcy5sZW5ndGggfHwgb2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiggZXZlbnRzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTdGFydHMgbG9hZGluZyB0aGUgaW1hZ2UgaW4gdGhlIHByb3ZpZGVkIGRhdGEuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBkYXRhIC0gQSBMYXp5TG9hZEVudHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGxvYWQoIGRhdGE6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBMYXp5TG9hZEVudHJ5ICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBbIGltZyBdID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RhdGE7XFxyXFxuXFxyXFxuICAgIGFkZENsYXNzKCBkYXRhWyAxIF0uc2xpZGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJDTEFTU19MT0FESU5HICk7XFxyXFxuICAgIGJpbmQoIGltZywgJ2xvYWQgZXJyb3InLCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXBwbHkoIG9uTG9hZCwgZGF0YSApICk7XFxyXFxuXFxyXFxuICAgIHNldEF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWJ1dGUoIGltZywgJ3NyYycsIGdldEF0dHJpYnV0ZSggaW1nLCBTUkNfREFUQV9BIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRUUklCVVRFICkgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBpbWcsICdzcmNzZXQnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZ2V0QXR0cmlidXRlKCBpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoIGltZywgU1JDX0RBVEFfQVRUUklCVVRFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoIGltZywgU1JDU0VUX0RBVEFfQVRUUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQlVURSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVkIHdoZW4gdGhlIGltYWdlIGlzIGxvYWRlZCBvciBhbnkgZXJyb3Igb2NjdXJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGF0YSAtIEEgTGF6eUxvYWRFbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnkgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIGUgICAgLSBBbiBFdmVudCBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbkxvYWQoIGRhdGE6IExhenknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTG9hZEVudHJ5LCBlOiBFdmVudCApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgWyBpbWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBTbGlkZSBdID0gZGF0YTtcXHJcXG5cXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSwgQ0xBU1NfTE9BRElORyApO1xcclxcblxcclxcbiAgICBpZiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlLnR5cGUgIT09ICdlcnJvcicgKSB7XFxyXFxuICAgICAgcmVtb3ZlKCBkYXRhWyAyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJdICk7XFxyXFxuICAgICAgZGlzcGxheSggaW1nLCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGltZywgU2xpZGUgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCggRVZFTlRfUkVTSVpFICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzU2VxdWVudGlhbCAmJiBsb2FkTmV4dCgpO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogU3RhcnRzIGxvYWRpbmcgYSBuZXh0IGltYWdlLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gbG9hZE5leHQoKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbnRyaWVzLmxlbmd0aCAmJiBsb2FkKCBlbnRyaWVzLnNoaWZ0KCkgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGRlc3Ryb3k6IGFwcGx5KCBlbXB0eSwgZW50cmllcyApLFxcclxcbiAgICBjaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ssXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBUlJPV19MRUZULCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQVJST1dfUklHSFQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXJyb3dzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1wb3J0IHtcXHJcXG4gIEFSSUFfQ09OVFJPTFMsXFxyXFxuICBBUklBX0xBQkVMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIEFSSUFfT1JJRU5UQVRJT04sXFxyXFxuICBBUklBX1NFTEVDVEVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gIFJPTEUsXFxyXFxuICBUQUJfSU5ERVgsXFxyXFxufSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RhbnRzL2F0dHJpYnV0ZXMnO1xcclxcbmltcG9ydCB7IENMQVNTX0FDVElWRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIENMQVNTX1BBR0lOQVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMnO1xcclxcbmltcG9ydCB7IFRUQiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kaXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRU5UX0VORF9JTkRFWF9DIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hBTkdFRCxcXHJcXG4gIEVWRU5UX01PVkUsXFxyXFxuICBFVkVOVF9QQUdJTkFUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTl9NT1VOVEVELFxcclxcbiAgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVELFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIEVWRU5UX1JFRlJFU0gsXFxyXFxuICBFVkVOVF9TQ1JPTEwsXFxyXFxuICBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfU0NST0xMRUQsXFxyXFxuICBFVkVOVF9VUERBVEVELFxcclxcbn0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgUyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBhZGRDbGFzcyxcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBhcHBseSxcXHJcXG4gIGNlaWwsXFxyXFxuICBjcmVhdGUsXFxyXFxuICBkaXNwbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIGVtcHR5LFxcclxcbiAgZm9jdXMsXFxyXFxuICBmb3JtYXQsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcHJldmVudCxcXHJcXG4gIHJlbW92ZSxcXHJcXG4gIHJlbW92ZUF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUsXFxyXFxuICByZW1vdmVDbGFzcyxcXHJcXG4gIHNldEF0dHJpYnV0ZSxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuICBzbGljZSxcXHJcXG59IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHsgbm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL25vcm1hbGl6IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVLZXkvbm9ybWFsaXplS2V5JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGludGVyZmFjZSBmb3IgdGhlIFBhZ2luYXRpb24gY29tcG9uZW50LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtcXHJcXG4gIGdldEF0KCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg6IG51bWJlciApOiBQYWdpbmF0aW9uSXRlbTtcXHJcXG4gIHVwZGF0ZSgpOiB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIGRhdGEgb2YgdGhlIHBhZ2luYXRpb24uXFxyXFxuICpcXHJcXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbkRhdGEge1xcclxcbiAgbGlzdDogSFRNTFVMaXN0RWxlbWVudDtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtcXHJcXG59XFxyXFxuXFxyXFxuLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGVhY2ggcGFnaW5hdGlvbiBpdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbS5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25JdGVtIHtcXHJcXG4gIGxpOiBIVE1MTElFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudDtcXHJcXG4gIGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFnZTogbnVtYmVyO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBvbmVudCBmb3IgdGhlIHBhZ2luYXRpb24gVUkgKGEgc2xpZGUgcGlja2VyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykuXFxyXFxuICpcXHJcXG4gKiBAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwMjEvTk9URS13YWktYXJpYS1wcmFjdGljZXMtMS4yLTIwMjExMTI5LyNncm91cGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZC1jYXJvdXNlbC1lbGVtZW50c1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgUGFnaW5hdGlvbiBjb21wb25lbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gUGFnaW5hdGlvbiggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucyApOiBQYWdpbmF0aW9uQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG4gIGNvbnN0IHsgb24sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0LCBiaW5kIH0gPSBldmVudDtcXHJcXG4gIGNvbnN0IHsgU2xpZGVzLCBFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsIENvbnRyb2xsZXIgfSA9IENvbXBvbmVudHM7XFxyXFxuICBjb25zdCB7IGhhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGb2N1cywgZ2V0SW5kZXgsIGdvIH0gPSBDb250cm9sbGVyO1xcclxcbiAgY29uc3QgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uOiBwbGFjZWhvbGRlciB9ID0gRWxlbWVudHM7XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHBhZ2luYXRpb24gaXRlbXMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBjb25zdCBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHBhZ2luYXRpb24gZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0OiBIVE1MVUxpc3RFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB8IG51bGw7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llciBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgcGFnaW5hdGlvbkNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzOiBzdHJpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveSgpO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIFsgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidORF9JTkRFWF9DSEFOR0VEIF0sIG1vdW50ICk7XFxyXFxuXFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBlbmFibGVkID0gb3B0aW9ucy5wYWdpbmF0aW9uO1xcclxcbiAgICBwbGFjZWhvbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXIgJiYgZGlzcGxheSggcGxhY2Vob2xkZXIsIGVuYWJsZWQgPyAnJyA6ICdub25lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBlbmFibGVkICkge1xcclxcbiAgICAgIG9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggWyBFVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVEIF0sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cGRhdGUgKTtcXHJcXG4gICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHVwZGF0ZSgpO1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX1BBR0lOQVRJT05fTU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVU5URUQsIHsgbGlzdCwgaXRlbXMgfSwgZ2V0QXQoIFNwbGlkZS5pbmRleCApICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBsaXN0ICkge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZW1vdmUoIHBsYWNlaG9sZGVyID8gc2xpY2UoIGxpc3QuY2hpbGRyZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBsaXN0ICk7XFxyXFxuICAgICAgcmVtb3ZlQ2xhc3MoIGxpc3QsIHBhZ2luYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uQ2xhc3NlcyApO1xcclxcbiAgICAgIGVtcHR5KCBpdGVtcyApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBsaXN0ID0gbnVsbDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBldmVudC5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveSgpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlcyB0aGUgcGFnaW5hdGlvbiBlbGVtZW50IGFuZCBhcHBlbmRzIGl0IHRvIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugc2xpZGVyLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjcmVhdGVQYWdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbigpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBsZW5ndGggfSA9IFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIGNvbnN0IHsgY2xhc3NlcywgaTE4biwgcGVyUGFnZSB9ID0gb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnM7XFxyXFxuICAgIGNvbnN0IG1heCA9IGhhc0ZvY3VzKCkgPyBDb250cm9sbGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRFbmQoKSArIDEgOiBjZWlsKCBsZW5ndGggLyBwZXJQYWdlICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgICBsaXN0ID0gcGxhY2Vob2xkZXIgfHwgY3JlYXRlKCAndWwnLCBjbGFzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlcy5wYWdpbmF0aW9uLCBFbGVtZW50cy50cmFjay5wYXJlbnRFbGVtZW50ICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBhZGRDbGFzcyggbGlzdCwgKCBwYWdpbmF0aW9uQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgPSBgJHsgQ0xBU1NfUEFHSU5BVElPTiB9LS0keyBnZXREaXJlY3Rpb24oKSB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImAgKSApO1xcclxcbiAgICBzZXRBdHRyaWJ1dGUoIGxpc3QsIFJPTEUsICd0YWJsaXN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBsaXN0LCBBUklBX0xBQkVMLCBpMThuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zZWxlY3QgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBsaXN0LCBBUklBX09SSUVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRBVElPTiwgZ2V0RGlyZWN0aW9uKCkgPT09IFRUQiA/ICd2ZXJ0aWNhbCcgOiAnJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG5cXHJcXG4gICAgZm9yICggbGV0IGkgPSAwOyBpIDwgbWF4OyBpKysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICkge1xcclxcbiAgICAgIGNvbnN0IGxpICAgICAgID0gY3JlYXRlKCAnbGknLCBudWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibCwgbGlzdCApO1xcclxcbiAgICAgIGNvbnN0IGJ1dHRvbiAgID0gY3JlYXRlKCAnYnUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHRvbicsIHsgY2xhc3M6IGNsYXNzZXMucGFnZSwgdHlwZTogJ2J1dHRvbicgfSwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpICk7XFxyXFxuICAgICAgY29uc3QgY29udHJvbHMgPSBTbGlkZXMuZ2V0SW4oIGkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykubWFwKCBTbGlkZSA9PiBTbGlkZS5zbGlkZS5pZCApO1xcclxcbiAgICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0ZXh0ICAgICA9ICEgaGFzRm9jdXMoKSAmJiBwZXJQYWdlID4gMSA/IGkxOG4ucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2VYIDogaTE4bi5zbGlkZVg7XFxyXFxuXFxyXFxuICAgICAgYmluZCggYnV0dG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibiwgJ2NsaWNrJywgYXBwbHkoIG9uQ2xpY2ssIGkgKSApO1xcclxcblxcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoIG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkICkge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgIGJpbmQoIGJ1dHRvbiwgJ2tleWRvd24nLCBhcHBseSggb25LZXlkb3duLCBpICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICk7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpLCBST0xFLCAncHJlc2VudGF0aW9uJyApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoIGJ1dHRvbiwgUk9MRSwgJ3RhYicgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJidXR0b24sIEFSSUFfQ09OVFJPTFMsIGNvbnRyb2xzLmpvaW4oICcgJyApICk7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBBUklBX0xBQkVMLCBmb3JtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB0ZXh0LCBpICsgMSApICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBidXR0b24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBUQUJfSU5ERVgsIC0xICk7XFxyXFxuXFxyXFxuICAgICAgaXRlbXMucHVzaCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3sgbGksIGJ1dHRvbiwgcGFnZTogaSB9ICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidja3MgZWFjaCBwYWdpbmF0aW9uIGRvdC5cXHJcXG4gICAqIE1vdmVzIHRoZSBmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gdGhlIGFjdGl2ZSBzbGlkZSBmb3IgYWNjZXNzaWJpbGl0eS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1dBSS90dXRvcmlhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzL2Nhcm91c2Vscy9mdW5jdGlvbmFsaXR5L1xcclxcbiAgICpcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gcGFnZSAtIEEgY2xpY2tlZCBwYWdlIGluZGV4LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gb25DbGljayggcGFnZTogbnVtYmVyICk6IHZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgZ28oIGA+JHsgcGFnZSB9YCwgdHJ1ZSApO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gYW55IGtleSBpcyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc3NlZCBvbiB0aGUgcGFnaW5hdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjEvTk9URS13YWktYXJpYS1wcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3RpY2VzLTEuMi0yMDIxMTEyOS8ja2V5Ym9hcmQtaW50ZXJhY3Rpb24tMjFcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHBhcmFtIHBhZ2UgLSBBIHBhZ2UgaW5kZXguXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHBhcmFtIGUgICAgLSBBIEtleWJvYXJkRXZlbnQgb2JqZWN0LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gb25LZXlkb3duKCBwYWdlOiBudW1iZXIsIGU6IEtlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lib2FyZEV2ZW50ICk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0ZW1zO1xcclxcbiAgICBjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IGRpciA9IGdldERpcmVjdGlvbigpO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbGV0IG5leHRQYWdlID0gLTE7XFxyXFxuXFxyXFxuICAgIGlmICgga2V5ID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gcmVzb2x2ZSggQVJST1dfUklHSFQsIGZhbHNlLCBkaXIgKSApIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgbmV4dFBhZ2UgPSArK3BhZ2UgJSBsZW5ndGg7XFxyXFxuICAgIH0gZWxzZSBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBrZXkgPT09IHJlc29sdmUoIEFSUk9XX0xFRlQsIGZhbHNlLCBkaXIgKSApIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgbmV4dFBhZ2UgPSAoIC0tcGFnZSArIGxlbmd0aCApICUgbGVuZ3RoOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgfSBlbHNlIGlmICgga2V5ID09PSAnSG9tZScgKSB7XFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgIG5leHRQYWdlID0gMDtcXHJcXG4gICAgfSBlbHNlIGlmICgga2V5ID09PSAnRW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZCcgKSB7XFxyXFxuICAgICAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbIG5leHRQYWdlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcblxcclxcbiAgICBpZiAoIGl0ZW0gKSB7XFxyXFxuICAgICAgZm9jdXMoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtLmJ1dHRvbiApO1xcclxcbiAgICAgIGdvKCBgPiR7IG5leHRQYWdlIH1gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICAgIHByZXZlbnQoIGUsIHRydWUgKTtcXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbGF0ZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXJlY3Rpb24gZm9yIHBhZ2luYXRpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjdGlvbiBnZXREaXJlY3Rpb24oKTogT3B0aW9uc1snZGlyZWN0aW9uJ10ge1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIG9wdGlvbnMucGFnaW5hdGlvbkRpcmVjdGlvbiB8fCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5kaXJlY3Rpb247XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBSZXR1cm5zIHRoZSBwYWdpbmF0aW9uIGl0ZW0gYXQgdGhlIHNwZWNpZmllZCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBwYWdpbmF0aW9uIGl0ZW0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldEF0KCBpbmRleDogbnVtYmVyICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBQYWdpbmF0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XFxyXFxuICAgIHJldHVybiBpdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXNbIENvbnRyb2xsZXIudG9QYWdlKCBpbmRleCApIF07XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBVcGRhdGVzIHRoZSBwYWdpbmF0aW9uIHN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IHByZXYgPSBnZXRBdCggZ2V0SW5kZXgoIHRydWUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgY29uc3QgY3VyciA9IGdldEF0KCBnZXRJbmRleCgpICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIHByZXYgKSB7XFxyXFxuICAgICAgY29uc3QgeyBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0dG9uIH0gPSBwcmV2O1xcclxcbiAgICAgIHJlbW92ZUNsYXNzKCBidXR0b24sIENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19BQ1RJVkUgKTtcXHJcXG4gICAgICByZW1vdmVBdHRyaWJ1dGUoIGJ1dHRvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfU0VMRUNURUQgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGJ1dHRvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBQl9JTkRFWCwgLTEgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpZiAoIGN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyICkge1xcclxcbiAgICAgIGNvbnN0IHsgYnV0dG9uIH0gPSBjdXJyO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBhZGRDbGFzcyggYnV0dG9uLCBDTEFTU19BQ1RJVkUgKTtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKCBidXR0b24sIEFSSUFfU0VMRUNURUQsIHRydWUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuICAgICAgc2V0QXR0cmlidXRlKCBidXR0b24sIFRBQl9JTkRFWCwgJycgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG5cXHJcXG4gICAgZW1pdCggRVZFTlRfUEFHSU5BVElPTl9VUEQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCwgeyBsaXN0LCBpdGVtcyB9LCBwcmV2LCBjdXJyICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgaXRlbXMsXFxyXFxuICAgIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gICAgZ2V0QXQsXFxyXFxuICAgIHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBTQ1JPTExfTEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU1RFTkVSX09QVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGlzdGVuZXItIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9wdGlvbnMnO1xcclxcbmltcG9ydCB7IE1PVklORyB9IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5pbXBvcnQgeyBhYnMsIHByZXZlbnQsIHRpbWVPZiB9IGZyb20gJy4uLy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ1dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgZm9yIHRoZSBXaGVlbCBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBXaGVlbENvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIG9ic2VydmluZyB0aGUgbW91c2UgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZWVsIGFuZCBtb3ZpbmcgdGhlIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgV2hlZWwgY29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFdoZWVsKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBPcHRpb25zICk6IFdoZWVsQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgYmluZCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEhvbGRzIHRoZSBsYXN0IHRpbWUgd2hlbiB0aGUgd2hlZWwgbW92ZXMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsYXN0VGltZSA9IDA7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICAgIGlmICggb3B0aW9ucy53aGVlbCApIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgYmluZCggQ29tcG9uZW50cy5FbGVtZW50cy50cmFjaywgJ3doZWVsJywgb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV2hlZWwsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TICk7XFxyXFxuICAgIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgdXNlciByb3RhdGVzIHRoZSBtb3VzZSB3aGVlbCBvbiB0aGUgc2xpZGVyLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgV2hlZWxFdmVudCBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbldoZWVsKCBlOiBXaGVlbEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBlLmNhbmNlbGFibGUgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHsgZGVsdGFZIH0gPSBlO1xcclxcbiAgICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xcclxcbiAgICAgIGNvbnN0IHRpbWVTdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXAgPSB0aW1lT2YoIGUgKTtcXHJcXG4gICAgICBjb25zdCBtaW4gICAgICAgPSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy53aGVlbE1pblRocmVzaG9sZCB8fCAwO1xcclxcbiAgICAgIGNvbnN0IHNsZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncCAgICAgPSBvcHRpb25zLndoZWVsU2xlZXAgfHwgMDtcXHJcXG5cXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKCBhYnMoIGRlbHRhWSApID4gbWluICYmIHRpbWVTdGFtcCAtIGxhc3RUaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZSA+IHNsZWVwICkge1xcclxcbiAgICAgICAgU3BsaWRlLmdvKCBiYWNrd2FyZHMgPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJzwnIDogJz4nICk7XFxyXFxuICAgICAgICBsYXN0VGltZSA9IHRpbWVTdGFtIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3A7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHNob3VsZFByZXZlbnQoIGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMgKSAmJiBwcmV2ZW50KCBlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IHNob3VsZCBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWVsIGV2ZW50IG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gYmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2t3YXJkcyAtIFNldCB0aGlzIHRvIGB0cnVlYCBmb3IgYmFja3dhcmRzIGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHNob3VsZFByZXZlbnQoIGJhY2t3YXJkczogYm9vbGVhbiApOiBib29sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiB7XFxyXFxuICAgIHJldHVybiAhIG9wdGlvbnMucmVsZWFzZVdoZWVsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHx8IFNwbGlkZS5zdGF0ZS5pcyggTU9WSU5HIClcXHJcXG4gICAgICB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50cy5Db250cm9sbGVyLmdldEFkamFjZW50KCBiYWNrd2FyZHMgKSAhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09IC0xO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50LFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQVJJQV9BVE9NSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJDLCBBUklBX0JVU1ksIEFSSUFfTElWRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXR0cmlidXRlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NfU1IgfSBmcm9tICcuLi8uLi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7IEVWRU5UX0FVVE9QTEFZX1AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVTRSwgRVZFTlRfQVVUT1BMQVlfUExBWSwgRVZFTlRfTU9WRUQsIEVWRU5UX1NDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlJPTExFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBFdmVudEludGVyZmFjZSwgUmVxdWVzdEludGVydmFsIH0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9ydCB7IGFwcGVuZCwgYXBwbHksIGNyZWF0ZSwgcmVtb3ZlLCByZW1vdmVBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmlidXRlLCBzZXRBdHRyaWJ1dGUgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgTGl2ZSBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBMaXZlQ29tcG9uZW50IGV4dGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgZGlzYWJsZSggZGlzYWJsZWQ6IGJvb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFuICk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIERlbGF5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJlbW92aW5nIHRoZSBTUiBmaWVsZCBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIFdpbmRvd3MgTmFycmF0b3IuXFxyXFxuICovXFxyXFxuY29uc3QgU1JfUkVNT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUxfREVMQVkgPSA5MDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBmb3IgaW1wbGVtZW50aW5nIExpdmUgUmVnaW9uIHRvIHRoZSBzbGlkZXIuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9BUklBX0xpdmVfUmVnaW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSA0LjAuMFxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIEEgTGl2ZSBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgZnVuY3Rpb24gTGl2ZSggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IExpdmVDb21wb25lbnQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGNvbnN0IHsgb24gfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBjb25zdCB7IHRyYWNrIH0gPSBDb21wb25lbnRzLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBsaXZlIHJlZ2lvbiBpcyBlbmFibGVkIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbnN0IGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJiYgISBvcHRpb25zLmlzTmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmlnYXRpb247XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBzcGFuIGVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IGZvciB0aGUgU1Igb25seSB0ZXh0LlxcclxcbiAgICovXFxyXFxuICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgc3IgPSBjcmVhdGUoICdzcGFuJywgQ0xBU1NfU1IgKTtcXHJcXG5cXHJcXG4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBSZXF1ZXN0SW50ZXJ2YWwgaW5zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBpbnRlcnZhbCA9IFJlcXVlc3RJbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJ2YWwoIFNSX1JFTU9WQUxfREVMQVksIGFwcGx5KCB0b2dnbGUsIGZhbHNlICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKiAtIEpBV1MgbmVlZHMgYGFyaWEtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21pY2AgdG8gbWFrZSB0aGUgYGFyaWEtYnVzeWAgd29yay5cXHJcXG4gICAqIC0gSW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVkaWF0ZWx5IHJlbW92aW5nIHRoZSBTUiBtYWtlcyBXaW5kb3dzIE5hcnJhdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzaWxlbnQsIGhlbmNlIHJlcXVpcmVzIHRoZSBkZWxheSBhcm91bmQgNTBtcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCBlbmFibGVkICkge1xcclxcbiAgICAgIGRpc2FibGUoICEgQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuQXV0b3BsYXkuaXNQYXVzZWQoKSApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWNrLCBBUklBX0FUT01JQywgdHJ1ZSApO1xcclxcbiAgICAgIHNyLnRleHRDb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJudCA9ICdceGUyXHg4MFx4YTYnO1xcclxcblxcclxcbiAgICAgIG9uKCBFVkVOVF9BIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VUT1BMQVlfUExBWSwgYXBwbHkoIGRpc2FibGUsIHRydWUgKSApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvbiggRVZFTlRfQVVUT1BMQVlfUEFVU0UsIGFwcGx5KCBkaXNhYmxlLCBmYWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcbiAgICAgIG9uKCBbIEVWRU5UX01PVkVELCBFVkVOVF9TQ1JPTExFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXSwgYXBwbHkoIHRvZ2dsZSwgdHJ1ZSApICk7XFxyXFxuICAgIH1cXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRvZ2dsZXMgdGhlIFNSIGZpZWxkIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgYGFyaWEtYnVzeWAuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYWN0aXZhdGUgdGhlIGZpZWxkIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvZ2dsZSggYWN0aXZlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCB0cmFjaywgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQlVTWSwgYWN0aXZlICk7XFxyXFxuXFxyXFxuICAgIGlmICggYWN0aXZlICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBhcHBlbmQoIHRyYWNrLCBzciApO1xcclxcbiAgICAgIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbC5zdGFydCgpO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoIHNyICk7XFxyXFxuICAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlc3Ryb3lzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpOiB2b2lkIHtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidXRlKCB0cmFjaywgWyBBUkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQV9MSVZFLCBBUklBX0FUT01JQywgQVJJQV9CVVNZIF0gKTtcXHJcXG4gICAgcmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSggc3IgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGVzL2VuYWJsZXMgdGhlIGxpdmUgcmVnaW9uLlxcclxcbiAgICogRG9lcyBub3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyB3aGVuIHRoZSBgbGl2ZWAgb3B0aW9uIGlzIG5vdCBlbmFibGVkLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gZGlzYWJsZWQgLSBgdHJ1ZWAgdG8gZGlzYWJsZSB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGxpdmUgcmVnaW9uIG9yIGBmYWxzZWAgdG8gZW5hYmxlIGl0IGFnYWluLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gZGlzYWJsZSggZGlzYWJsZWQ6IGJvb2xlYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBpZiAoIGVuYWJsZWQgKSB7XFxyXFxuICAgICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJldEF0dHJpYnV0ZSggdHJhY2ssIEFSSUFfTElWRSwgZGlzYWJsZWQgPyAnb2ZmJyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiOiAncG9saXRlJyApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICByIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRpc2FibGUsXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95LFxcclxcbiAgfTtcXHJcXG59IiwiaW1wb3J0IHsgT3B0aW9ucyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJmcm9tICcuLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NFUyB9IGZyb20gJy4vYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXNzZXMnO1xcclxcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuL2kxOG4nO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29sbGVjdGlvbiBvZiBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCBvcHRpb25zLlxcclxcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGxlY3Rpb24gZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZXMgbm90IGNvbnRhaW4gYWxsIG9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IERFRkFVTFRTOiBPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInB0aW9ucyA9IHtcXHJcXG4gIHR5cGUgICAgICAgICAgICAgIDogJ3NsaWRlJywiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICByb2xlICAgICAgICAgICAgICA6ICdyZWdpb24nLFxcclxcbiAgc3BlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkICAgICAgICAgICAgIDogNDAwLFxcclxcbiAgcGVyUGFnZSAgICAgICAgICAgOiAxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIGNsb25lU3RhdHVzICAgICAgIDogdHJ1ZSxcXHJcXG4gIGFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgICA6IHRydWUsXFxyXFxuICBwYWdpbmF0aW9uICAgICAgICA6IHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxcclxcbiAgcGFnaW5hdGlvbktleWJvYXJkOiB0cnVlLFxcclxcbiAgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsICAgICAgICAgIDogNTAwMCxcXHJcXG4gIHBhdXNlT25Ib3ZlciAgICAgIDogdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWUsXFxyXFxuICBwYXVzZU9uRm9jdXMgICAgICA6IHRydWUsXFxyXFxuICByZXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRQcm9ncmVzcyAgICAgOiB0cnVlLFxcclxcbiAgZWFzaW5nICAgICAgICAgICAgOiAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImN1YmljLWJlemllcigwLjI1LCAxLCAwLjUsIDEpJyxcXHJcXG4gIGRyYWcgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA6IHRydWUsXFxyXFxuICBkaXJlY3Rpb24gICAgICAgICA6ICdsdHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyxcXHJcXG4gIHRyaW1TcGFjZSAgICAgICAgIDogdHJ1ZSxcXHJcXG4gIGZvY3VzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFibGVOb2RlcyAgICA6ICdhLCBidXR0b24sIHRleHRhcmVhLCBpbnB1dCwgc2VsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjdCwgaWZyYW1lJyxcXHJcXG4gIGxpdmUgICAgICAgICAgICAgIDogdHJ1ZSxcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjbGFzc2VzICAgICAgICAgICA6IENMQVNTRVMsXFxyXFxuICBpMThuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgICAgOiBJMThOLFxcclxcbiAgcmVkdWNlZE1vdGlvbjoge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgc3BlZWQgICAgICA6IDAsXFxyXFxuICAgIHJld2luZFNwZWVkOiAwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgYXV0b3BsYXkgICA6ICdwYXVzZScsXFxyXFxuICB9LFxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ259OyIsIi8qKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGkxOG4gc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ3MuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInhwb3J0IGNvbnN0IEkxOE4gPSB7XFxyXFxuICBwcmV2ICAgICAgOiAnUHJldmlvdXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInNsaWRlJyxcXHJcXG4gIG5leHQgICAgICA6ICdOZXh0IHNsaWRlJyxcXHJcXG4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJmaXJzdCAgICAgOiAnR28gdG8gZmlyc3Qgc2xpZGUnLFxcclxcbiAgbGFzdCAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6ICdHbyB0byBsYXN0IHNsaWRlJyxcXHJcXG4gIHNsaWRlWCAgICA6ICdHbyB0byBzbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUgJXMnLFxcclxcbiAgcGFnZVggICAgIDogJ0dvIHRvIHBhZ2UgJXMnLFxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gIHBsYXkgICAgICA6ICdTdGFydCBhdXRvcGxheScsXFxyXFxuICBwYXVzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgIDogJ1BhdXNlIGF1dG9wbGF5JyxcXHJcXG4gIGNhcm91c2VsICA6ICdjYXJvdSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzZWwnLFxcclxcbiAgc2xpZGUgICAgIDogJ3NsaWRlJyxcXHJcXG4gIHNlbGVjdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgOiAnU2VsZWN0IGEgc2xpZGUgdG8gc2hvdycsXFxyXFxuICBzbGlkZUxhYmVsOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyVzIG9mICVzJywgLy8gWyBzbGlkZSBudW1iZXIgXSAvIFsgc2xpZGUgc2l6ZSBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbn07XFxyXFxuIiwiaW1wb3J0IHsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFRlJFU0ggfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IHsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlJztcXHJcXG5pbXBvcnQgeyBDb21wb25lbnRzLCBPcHRpb25zLCBUcmFuc2l0aW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBuZXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidFRpY2ssIG5vb3AgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIHRoZSBmYWRlIHRyYW5zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gQSBUcmFuc2l0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBmdW5jdGlvbiBGYWRlKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogVHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnQge1xcclxcbiAgY29uc3QgeyBTbGlkZXMgfSA9IENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQoKTogdm9pZCB7XFxyXFxuICAgIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKS5vbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVGUkVTSCBdLCBpbml0ICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudC5cXHJcXG4gICAqIE9mZnNldHMgYWxsIHNsaWRlcyBmb3Igc3RhY2tpbmcgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZW0gb250byB0aGUgaGVhZCBvZiB0aGUgbGlzdC5cXHJcXG4gICAqIFRoZSBgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaWNrYCBkaXNhYmxlcyB0aGUgaW5pdGlhbCBmYWRlIHRyYW5zaXRpb24gb2YgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBmaXJzdCBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICAgIFNsaWRlcy5mb3JFYWNoKCBTbGlkZSA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgIFNsaWRlLnN0eWxlKCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZVgoLSQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyAxMDAgKiBTbGlkZS5pbmRleCB9JSlgICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0YXJ0cyB0aGUgdHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQSBzbGlkZSBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggdG8gYmUgYWN0aXZlLlxcclxcbiAgICogQHBhcmFtIGRvbmUgIC0gVGhlIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnNpdGlvbiBlbmRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdGFydCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4OiBudW1iZXIsIGRvbmU6ICgpID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBTbGlkZXMuc3R5bGUoICd0cmFuc2l0aW9uJywgYG9wYWNpdHkgJHsgb3B0aW9ucyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BlZWQgfW1zICR7IG9wdGlvbnMuZWFzaW5nIH1gICk7XFxyXFxuICAgIG5leHRUaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjayggZG9uZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG1vdW50LFxcclxcbiAgICBzdGFydCxcXHJcXG4gICAgY2FuY2VsOiBub29wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IFNMSURFIH0gZnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IHsgQ29tcG9uZW50cywgT3B0aW9ucywgVHJhbnNpdGlvbkNvbXBvbmVudCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYWJzLCBhcHBseSwgc3R5IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgY29tcG9uZW50IGZvciB0aGUgc2xpZGUgdHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBBIFRyYW5zaXRpb24gY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFNsaWRlKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogVHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25Db21wb25lbnQge1xcclxcbiAgY29uc3QgeyBNb3ZlLCBDb250cm9sbGVyLCBTY3JvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBsaXN0IH0gPSBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cy5FbGVtZW50cztcXHJcXG4gIGNvbnN0IHRyYW5zaXRpb24gPSBhcHBseSggc3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxlLCBsaXN0LCAndHJhbnNpdGlvbicgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEhvbGRzIHRoZSBgZG9uZWAgY2FsbGJhY2sgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBsZXQgZW5kQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICAgIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKS5iaW5kKCBsaXN0LCAndHJhIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5zaXRpb25lbmQnLCBlID0+IHtcXHJcXG4gICAgICBpZiAoIGUudGFyZ2V0ID09PSBsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdCAmJiBlbmRDYWxsYmFjayApIHtcXHJcXG4gICAgICAgIGNhbmNlbCgpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgIGVuZENhbGxiYWNrKCk7XFxyXFxuICAgICAgfVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdGFydHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSB0cmFuc2l0aW9uLlxcclxcbiAgICogVGhlIE1vdmUgY29tcG9uZW50IGNhbGxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzIG1ldGhvZCBqdXN0IGJlZm9yZSB0aGUgc2xpZGVyIG1vdmVzLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBIGRlc3RpbmF0aW9uIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneC5cXHJcXG4gICAqIEBwYXJhbSBkb25lICAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhhdCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJhbnNpdGlvbiBlbmRzLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc3RhcnQoIGluZGV4OiBudW1iZXIsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb25lOiAoKSA9PiB2b2lkICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBkZXN0aW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSBNb3ZlLnRvUG9zaXRpb24oIGluZGV4LCB0cnVlICk7XFxyXFxuICAgIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBwb3NpdGlvbiAgICA9IE1vdmUuZ2V0UG9zaXRpb24oKTtcXHJcXG4gICAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHNwZWVkICAgICAgID0gZ2V0U3BlZWQoIGluZGV4ICk7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIGFicyggZGVzdGluYXRpb24gLSBwb3NpdGlvbiApID49IDEgJiYgc3BlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkID49IDEgKSB7XFxyXFxuICAgICAgaWYgKCBvcHRpb25zLnVzZVNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgICBTY3JvbGwuc2Nyb2xsKCBkZXN0aW5hdGlvbiwgc3BlZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBmYWxzZSwgZG9uZSApO1xcclxcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdHJhbnNpdGlvbiggYHRyYW5zZm9ybSAkeyBzcGVlZCB9bXMgJHsgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZWFzaW5nIH1gICk7XFxyXFxuICAgICAgICBNb3ZlLnRyYW5zbGF0ZSggZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCB0cnVlICk7XFxyXFxuICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBNb3ZlLmp1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wKCBpbmRleCApO1xcclxcbiAgICAgIGRvbmUoKTtcXHJcXG4gICAgfVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FuY2VscyB0aGUgdHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNhbmNlbCgpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIHRyYW5zaXRpb24oICcnICk7XFxyXFxuICAgIFNjcm9sbC5jYW5jZWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSB0cmFuc2l0aW9uIHNwZWVkLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggLSBBIGRlc3RpbmF0aW9uIGluZGV4LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZ2V0U3BlZWQoIGluZGV4OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNvbnN0IHsgcmV3aW5kU3BlZWQgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoIFNwbGlkZS5pcyggU0xJREUgKSAmJiByZXdpbmRTcGVlZCApIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgY29uc3QgcHJldiA9IENvbnRyb2xsZXIuZ2V0SW5kZXgoIHRydWUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgY29uc3QgZW5kICA9IENvbnRyb2xsZXIuZ2V0RW5kKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICAgIGlmICggKCBwcmV2ID09PSAwICYmIGluZGV4ID49ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmQgKSB8fCAoIHByZXYgPj0gZW5kICYmIGluZGV4ID09PSAwICkgKSB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcmV0dXJuIHJld2luZFNwZWVkO1xcclxcbiAgICAgIH1cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIG9wdGlvbnMuc3BlZWQ7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzdGFydCxcXHJcXG4gICAgY2FuY2VsLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsImltcG9ydCAqIGFzIENvbXBvbmVudENvbnN0cnVjdG9ycyBmcm9tIFwnLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvbXBvbmVudHMnO1xcclxcbmltcG9ydCB7IFNsaWRlTWF0Y2hlciB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb21wb25lbnRzL1NsaWRlcy9TbGlkZXMnO1xcclxcbmltcG9ydCB7IENMQVMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU19JTklUSUFMSVpFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuaW1wb3J0IHsgREVGQVVMVFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImF1bHRzJztcXHJcXG5pbXBvcnQgeyBFVkVOVF9ERVNUUk9ZLCBFVkVOVF9NT1VOVEVEIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgRVZFTlRfUkVBRFksIEVWRU5UX1JFRlJFU0ggfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgREFUQV9BVFRSSUJVVEUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcbmltcG9ydCB7IENSRUFURUQsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJERVNUUk9ZRUQsIElETEUsIFNUQVRFUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UsIEV2ZW50SW50ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZmFjZU9iamVjdCwgU3RhdGUsIFN0YXRlT2JqZWN0IH0gZnJvbSAnLi4vLi4vY29uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgRmFkZSwgU2xpZGUgfSBmcm9tICcuLi8uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4vdHJhbnNpdGlvbnMnO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0aW9uLCBDb21wb25lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250Q29uc3RydWN0b3IsIENvbXBvbmVudHMsIEV2ZW50TWFwLCBPcHRpb25zLCBTeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuY1RhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhZGRDbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3MsIGFzc2VydCwgYXNzaWduLCBlbXB0eSwgZm9yT3duLCBnZXRBdHRyaWJ1dGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLCBpc1N0cmluZywgbWVyZ2UsIHF1ZXJ5LCBzbGljZSB9IGZyb20gJy4uLy4uL3V0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlscyc7XFxyXFxuaW1wb3J0IHsgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZIH0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImZyb20gJy4uLy4uL2NvbnN0YW50cy9hdHRyaWJ1dGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGZyb250ZW5kIGNsYXNzIGZvciB0aGUgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGNsYXNzIFNwbGlkZSB7XFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDaGFuZ2VzIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGFsbCBTcGxpZGUgaW5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlcy5cXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIGRlZmF1bHRzOiBPcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHt9O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ygc3RhdGUgbnVtYmVycy5cXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIHJlYWRvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidseSBTVEFURVMgPSBTVEFURVM7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdCBlbGVtZW50IHdoZXJlIHRoZSBTcGxpZGUgaXMgYXBwbGllZC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIHJlYWRvbmx5IHJvb3Q6IEhUTUxFbGVtZW50O1xcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxcclxcbiAgICogVGhlIEV2ZW50QnVzT2JqZWN0IG9iamVjdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIHJlYWRvbmx5IGV2ZW50OiBFdmVudEludGVyZmFjZU9iamVjdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBFdmVudEludGVyZmFjZSgpO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbGxlY3Rpb24gb2YgYWxsIGNvbXBvbmVudCBvYmplY3RzLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgcmVhZG9ubHkgQ29tcG9uZW50czogQ29tcG9uZW50cyA9IHt9IGFzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgU3RhdGVPYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgcmVhZG9ubHkgc3RhdGU6IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZU9iamVjdCA9IFN0YXRlKCBDUkVBVEVEICk7XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBBbiBhcnJheSB3aXRoIFN5bmNUYXJnZXQgb2JqZWN0cyBmb3Igc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBpbnN0YW5jZXMgdG8gc3luYyB3aXRoLlxcclxcbiAgICovXFxyXFxuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZG9ubHkgc3BsaWRlczogU3luY1RhcmdldFtdID0gW107XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICAgKiBUaGUgY3VycmVudCBvcHRpb25zLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgcHJpdmF0ZSByZWFkb25seSBfbzogT3B0aW9ucyA9IHt9O1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgYWxsIGNvbXBvbmVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBwcml2YXRlIF9DOiBDb21wb25lbnRzO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgZXh0ZW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgX0U6IFJlY29yZDxzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLCBDb21wb25lbnRDb25zdHJ1Y3Rvcj4gPSB7fTtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHByaXZhdGUgX1Q6IENvbXBvbmVudENvbnN0cnVjdG9yO1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogVGhlIFNwbGlkZSBjb25zdHJ1Y3Rvci5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldCAgLSBUaGUgc2VsZWN0b3IgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGFyZ2V0IGVsZW1lbnQsIG9yIHRoZSBlbGVtZW50IGl0c2VsZi5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3RydWN0b3IoIHRhcmdldDogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8IEhUTUxFbGVtZW50LCBvcHRpb25zPzogT3B0aW9ucyApIHtcXHJcXG4gICAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHJvb3QgPSBpc1N0cmluZyggdGFyZ2V0ICkgPyBxdWVyeTxIVE1MRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+KCBkb2N1bWVudCwgdGFyZ2V0ICkgOiB0YXJnZXQ7XFxyXFxuICAgIGFzc2VydCggcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3QsIGAkeyByb290IH0gaXMgaW52YWxpZC5gICk7XFxyXFxuXFxyXFxuICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnJvb3QgPSByb290O1xcclxcblxcclxcbiAgICBvcHRpb25zID0gbWVyZ2UoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgbGFiZWwgICAgIDogZ2V0QXR0cmlidXRlKCByb290LCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIl9MQUJFTCApIHx8ICcnLFxcclxcbiAgICAgIGxhYmVsbGVkYnk6IGdldEF0dHJpYnV0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUoIHJvb3QsIEFSSUFfTEFCRUxMRURCWSApIHx8ICcnLFxcclxcbiAgICB9LCBERUZBIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VMVFMsIFNwbGlkZS5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSApO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgdHJ5IHtcXHJcXG4gICAgICBtZXJnZSggb3B0aW9ucywgSlNPTi5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyc2UoIGdldEF0dHJpYnV0ZSggcm9vdCwgREFUQV9BVFRSSUJVVEUgKSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9IGNhdGNoICggZSApIHtcXHJcXG4gICAgICBhc3NlcnQoIGZhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSwgJ0ludmFsaWQgSlNPTicgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICB0aGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5fbyA9IE9iamVjdC5jcmVhdGUoIG1lcmdlKCB7fSwgb3B0aW9ucyApICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhbmNlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBFeHRlbnNpb25zIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCBleHRlbnNpb25zLlxcclxcbiAgICogQHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbSBUcmFuc2l0aW9uIC0gT3B0aW9uYWwuIEEgVHJhbnNpdGlvbiBjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRoaXNgXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBtb3VudCggRXh0ZW5zaW9ucz86IFJlY29yZDxzdHJpbmcsIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRDb25zdHJ1Y3Rvcj4sIFRyYW5zaXRpb24/OiBDb21wb25lbnRDb25zdHJ1YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgKTogdGhpcyB7XFxyXFxuICAgIGNvbnN0IHsgc3RhdGUsIENvbXBvbmVudHMgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSB0aGlzO1xcclxcbiAgICBhc3NlcnQoIHN0YXRlLmlzKCBbIENSRUFURUQsIERFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJUUk9ZRUQgXSApLCAnQWxyZWFkeSBtb3VudGVkIScgKTtcXHJcXG5cXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXRlLnNldCggQ1JFQVRFRCApO1xcclxcblxcclxcbiAgICB0aGlzLl9DID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHM7XFxyXFxuICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19UIHx8ICggdGhpcy5pcyggRkFERSApID8gRmFkZSA6IFNsaWRlICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ29uc3RydWN0b3JzID0gYXNzaWduKCB7fSwgQ29tcG9uZW50Q29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVjdG9ycywgdGhpcy5fRSwgeyBUcmFuc2l0aW9uOiB0aGlzLl9UIH0gKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvck93biggQ29uc3RydWN0b3JzLCAoIENvbXBvbmVudCwga2V5ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0+IHtcXHJcXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBDb21wb25lbnQoIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDb21wb25lbnRzLCB0aGlzLl9vICk7XFxyXFxuICAgICAgQ29tcG9uZW50c1sga2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSBdID0gY29tcG9uZW50O1xcclxcbiAgICAgIGNvbXBvbmVudC5zZXR1cCAmJiBjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50LnNldHVwKCk7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZm9yT3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiggQ29tcG9uZW50cywgY29tcG9uZW50ID0+IHtcXHJcXG4gICAgICBjb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLm1vdW50ICYmIGNvbXBvbmVudC5tb3VudCgpO1xcclxcbiAgICB9ICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLmVtaXQoIEVWRU5UX01PVU5URUQgKTtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGFkZENsYXNzKCB0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBzdGF0ZS5zZXQoIElETEUgKTtcXHJcXG4gICAgdGhpcy5lbWl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfUkVBRFkgKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTeW5jcyB0aGUgc2xpZGVyIHdpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoIHRoZSBwcm92aWRlZCBvbmUuXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsZWQgYmVmb3JlIHRoZSBgbW91bnQoKWAuXFxyXFxuICAgKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBleGFtcGxlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHByaW1hcnkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgPSBuZXcgU3BsaWRlKCk7XFxyXFxuICAgKiB2YXIgc2Vjb25kYXJ5ID0gbmV3IFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUoKTtcXHJcXG4gICAqXFxyXFxuICAgKiBwcmltYXJ5LnN5bmMoIHNlY29uZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcnkgKTtcXHJcXG4gICAqIHByaW1hcnkubW91bnQoKTtcXHJcXG4gICAqIHNlY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRhcnkubW91bnQoKTtcXHJcXG4gICAqIGBgYFxcclxcbiAgICpcXHJcXG4gICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gc3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgc3luYyggc3BsaWRlOiBTcGxpZGUgKTogdGhpcyB7XFxyXFxuICAgIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnNwbGlkZXMucHVzaCggeyBzcGxpZGUgfSApO1xcclxcbiAgICBzcGxpZGUuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXMucHVzaCggeyBzcGxpZGU6IHRoaXMsIGlzUGFyZW50OiB0cnVlIH0gKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIGlmICggdGhpcy5zdGF0ZS5pcyggSURMRSApICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB0aGlzLl9DLlN5bmMucmVtb3VudCgpO1xcclxcbiAgICAgIHNwbGlkZS5DbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBNb3ZlcyB0aGUgc2xpZGVyIHdpdGggdGhlIGZvbGxvd2luZyBjb250cm9sIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0ZXJuLlxcclxcbiAgICpcXHJcXG4gICAqIHwgUGF0dGVybiB8IERlc2NyaXB0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB8XFxyXFxuICAgKiB8LS0tfC0tLXxcXHJcXG4gICAqIHwgYGlgIHwgR29lcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidG8gdGhlIHNsaWRlIGBpYCB8XFxyXFxuICAgKiB8IGAnKyR7aX0nYCB8IEluY3JlbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibnRzIHRoZSBzbGlkZSBpbmRleCBieSBgaWAgfFxcclxcbiAgICogfCBgJy0ke2l9J2AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgRGVjcmVtZW50cyB0aGUgc2xpZGUgaW5kZXggYnkgYGlgIHxcXHJcXG4gICAqIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGAnPidgIHwgR29lcyB0byB0aGUgbmV4dCBwYWdlIHxcXHJcXG4gICAqIHwgYCc8J2AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgR29lcyB0byB0aGUgcHJldmlvdXMgcGFnZSB8XFxyXFxuICAgKiB8IGA+JHtpfWAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgR29lcyB0byB0aGUgcGFnZSBgaWAgfFxcclxcbiAgICpcXHJcXG4gICAqIEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBtb3N0IGNhc2VzLCBgJz4nYCBhbmQgYCc8J2Agbm90YXRpb25zIGFyZSBlbm91ZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoIHRvIGNvbnRyb2wgdGhlIHNsaWRlclxcclxcbiAgICogYmVjYXVzZSB0aGV5IHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZWN0IGBwZXJQYWdlYCBhbmQgYHBlck1vdmVgIG9wdGlvbnMuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBleGFtcGxlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzcGxpZGUgPSBuZXcgU3BsaWRlKCk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZXMgdG8gdGhlIHNsaWRlIDE6XFxyXFxuICAgKiBzcGxpZGUuZ28oIDEgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogLy8gSW5jcmVtZW50cyB0aGUgaW5kZXg6XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICogc3BsaWRlLmdvKCAnKzInICk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gRyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvZXMgdG8gdGhlIG5leHQgcGFnZTpcXHJcXG4gICAqIHNwbGlkZS5nbyggJz4nIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIEdvZXMgdG8gdGhlIHBhZ2UgMjpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgKiBzcGxpZGUuZ28oICc+MicgKTtcXHJcXG4gICAqIGBgYFxcclxcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gY29udHJvbCAtIEEgY29udHJvbCBwYXR0ZXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZ28oIGNvbnRyb2w6IG51bWJlciB8IHN0cmluZyApOiB0aGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHRoaXMuX0MuQ29udHJvbGxlci5nbyggY29udHJvbCApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBSZWdpc3RlcnMgYW4gZXZlbnQgaGFuZGxlci5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQGV4YW1wbGVcXHJcXG4gICAqIGBgYHRzXFxyXFxuICAgKiB2YXIgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSA9IG5ldyBTcGxpZGUoKTtcXHJcXG4gICAqXFxyXFxuICAgKiAvLyBMaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVucyB0byBhIHNpbmdsZSBldmVudDpcXHJcXG4gICAqIHNwbGlkZS5vbiggJ21vdmUnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZnVuY3Rpb24oKSB7fSApO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIExpc3RlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzIHRvIG11bHRpcGxlIGV2ZW50czpcXHJcXG4gICAqIHNwbGlkZS5vbiggJ21vdmUgciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlc2l6ZScsIGZ1bmN0aW9uKCkge30gKTtcXHJcXG4gICAqXFxyXFxuICAgKiAvLyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQXBwZW5kcyBhIG5hbWVzcGFjZTpcXHJcXG4gICAqIHNwbGlkZS5vbiggJ21vdmUubXkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiTmFtZXNwYWNlIHJlc2l6ZS5teU5hbWVzcGFjZScsIGZ1bmN0aW9uKCkge30gKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGEgZG90KC4pIHRvIGFwcGVuZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICBvbjxLIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOiBLLCBjYWxsYmFjazogRXZlbnRNYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwWyBLIF0gKTogdGhpcztcXHJcXG4gIG9uKCBldmVudHM6IHN0cmluZyB8IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6IHRoaXM7XFxyXFxuICBvbiggZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcyB7XFxyXFxuICAgIHRoaXMuZXZlbnQub24oIGV2ZW50cywgY2FsbGJhY2sgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBhbGwgaGFuZGxlcnMgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgc3BlY2lmaWVkIGV2ZW50IG9yIGV2ZW50cy5cXHJcXG4gICAqIElmIHlvdSB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FudCB0byBvbmx5IHJlbW92ZSBhIHBhcnRpY3VsYXIgaGFuZGxlciwgdXNlIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UgdG8gaWRlbnRpZnkgaXQuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHNwbGlkZSA9IG5ldyBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlKCk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gUmVtb3ZlcyBhbGwgaGFuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXJzIGFzc2lnbmVkIHRvIFxcIm1vdmVcXCI6XFxyXFxuICAgKiBzcGxpZGUub2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZiggJ21vdmUnICk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gT25seSByZW1vdmVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBoYW5kbGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6XFxyXFxuICAgKiBzcGxpZGUub2ZmKCAnbW92ZS5teU5hbWVzcGFjZScgKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FuIGV2ZW50IG5hbWUgb3IgbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gVXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhIGRvdCguKSB0byBhcHBlbmQgYSBuYW1lc3BhY2UuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gYHRoaXNgXFxyXFxuICAgKi9cXHJcXG4gIG9mZjxLIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOiBLIHwgS1tdIHwgc3RyaW5nIHwgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZ1tdICk6IHRoaXMge1xcclxcbiAgICB0aGlzLmV2ZW50Lm9mZiggZXZlbnRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIEVtaXRzIGFuIGV2ZW50IGFuZCB0cmlnZ2VycyByZWdpc3RlcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCBoYW5kbGVycy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnQgLSBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXZlbnQgbmFtZSB0byBlbWl0LlxcclxcbiAgICogQHBhcmFtIGFyZ3MgIC0gT3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbmFsLiBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIGhhbmRsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZW1pdDxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssIC4uLmFyZ3M6IFBhcmFtZXRlcnM8RXZlbnRNYXBbIEsgXT4gKTogdGhpcztcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBlbWl0KCBldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSApOiB0aGlzOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGVtaXQoIGV2ZW50OiBzdHJpbmcgKTogdGhpcyB7XFxyXFxuICAgIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zLCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZmVyLXNwcmVhZFxcclxcbiAgICB0aGlzLmV2ZW50LmVtaXQoIGV2ZW50LCAuLi5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2UoIGFyZ3VtZW50cywgMSApICk7XFxyXFxuICAgIHJldHVybiB0aGlzO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5zZXJ0cyBhIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAZXhhbXBsZVxcclxcbiAgICogYGBgdHNcXHJcXG4gICAqIHZhciBzcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbmV3IFNwbGlkZSgpO1xcclxcbiAgICogc3BsaWRlLm1vdW50KCk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIC8vIEFkZHMgdGhlIHNsaWRlIGJ5IHRoZSBIVE1MOlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAqIHNwbGlkZS5hZGQoICc8bGk+PC9saT4gKTtcXHJcXG4gICAqXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogLy8gb3IgYWRkcyB0aGUgZWxlbWVudDpcXHJcXG4gICAqIHNwbGlkZS5hZGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGknICkgKTtcXHJcXG4gICAqICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc2xpZGVzIC0gQSBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudCwgYW4gSFRNTCBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgc2xpZGUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBhbiBhcnJheSB3aXRoIHRoZW0uXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbmFsLiBBbiBpbmRleCB0byBpbnNlcnQgYSBzbGlkZSBhdC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcbiAgYWRkKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRWxlbWVudD4sIGluZGV4PzogbnVtYmVyICk6IHRoaXMge1xcclxcbiAgICB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQy5TbGlkZXMuYWRkKCBzbGlkZXMsIGluZGV4ICk7XFxyXFxuICAgIHJldHVybiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzIHRoYXQgbWF0Y2ggdGhlIG1hdGNoZXJcXHJcXG4gICAqIHRoYXQgY2FuIGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBhbiBpbmRleCwgYW4gYXJyYXkgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBtYXRjaGVyIC0gQW4gaW5kZXgsIGFuIGFycmF5IHdpdGggaW5kaWNlcywgYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3Igc3RyaW5nLCBvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIHJlbW92ZSggbWF0Y2hlcjogU2xpZGVNYXRjaGVyICk6IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHtcXHJcXG4gICAgdGhpcy5fQy5TbGlkZXMucmVtb3ZlKCBtYXRjaGVyICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIENoZWNrcyB0aGUgc2xpZGVyIHR5cGUuXFxyXFxuICAgKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSB0eXBlIC0gQSB0eXBlIHRvIHRlc3QuXFxyXFxuICAgKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyZW50IG9uZSwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBpcyggdHlwZTogc3RyaW5nICk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuX28udHlwZSA9PT0gdHlwZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJlZnJlc2hlcyB0aGUgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICByZWZyZXNoKCk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzIHtcXHJcXG4gICAgdGhpcy5lbWl0KCBFVkVOVF9SRUZSRVNIICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIERlc3Ryb3lzIHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBjb21wbGV0ZWx5IC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgU3BsaWRlIHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxsIG5vdCByZW1vdW50IHRoZSBzbGlkZXIgYnkgYnJlYWtwb2ludHMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEByZXR1cm4gYHRoaXNgXFxyXFxuICAgKi9cXHJcXG4gIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95KCBjb21wbGV0ZWx5ID0gdHJ1ZSApOiB0aGlzIHtcXHJcXG4gICAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQsIHN0YXRlIH0gPSB0aGlzO1xcclxcblxcclxcbiAgICBpZiAoIHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyggQ1JFQVRFRCApICkge1xcclxcbiAgICAgIC8vIFBvc3Rwb25lcyBkZXN0cnVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcmVxdWVzdGVkIGJlZm9yZSB0aGUgc2xpZGVyIGJlY29tZXMgcmVhZHkuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIEV2ZW50SW50ZXJmYWNlKCB0aGlzICkub24oIEVWRU5UX1JFQURZLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5kZXN0cm95LmJpbmQoIHRoaXMsIGNvbXBsZXRlbHkgKSApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSBlbHNlIHtcXHJcXG4gICAgICBmb3JPd24oIHRoaXMuX0MsIGNvbXBvbmVudCA9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgICAgICAgY29tcG9uZW50LmRlc3Ryb3kgJiYgY29tcG9uZW50LmRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95KCBjb21wbGV0ZWx5ICk7XFxyXFxuICAgICAgfSwgdHJ1ZSApO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBldmVudC5lbWl0KCBFVkVOVF9ERVNUUk9ZICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGV2ZW50LmRlc3Ryb3koKTtcXHJcXG4gICAgICBjb21wbGV0ZWx5ICYmIGVtcHR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggdGhpcy5zcGxpZGVzICk7XFxyXFxuICAgICAgc3RhdGUuc2V0KCBERVNUUk9ZRUQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gb2JqZWN0IHdpdGggdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXRlc3Qgb3B0aW9ucy5cXHJcXG4gICAqL1xcclxcbiAgZ2V0IG9wdGlvbnMoKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE9wdGlvbnMge1xcclxcbiAgICByZXR1cm4gdGhpcy5fbztcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIE1lcmdlcyBvcHRpb25zIHRvIHRoZSBjdXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCBvcHRpb25zIGFuZCBlbWl0cyBgdXBkYXRlZGAgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggbmV3IG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAgICovXFxyXFxuICBzZXQgb3B0aW9ucyggb3B0aW9uczogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMgKSB7XFxyXFxuICAgIHRoaXMuX0MuTWVkaWEuc2V0KCBvcHRpb25zLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSwgdHJ1ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB3aXRob3V0IGNsb25lcy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHNsaWRlcy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0aGlzLl9DLlNsaWRlcy5nZXRMZW5ndGgoIHRydWUgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGFjdGl2ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgYWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZSBzbGlkZSBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZ2V0IGluZGV4KCk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIge1xcclxcbiAgICByZXR1cm4gdGhpcy5fQy5Db250cm9sbGVyLmdldEluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCgpO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iXSwibmFtZXMiOlsiTUVESUFfUFJFRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFUlNfUkVEVUNFRF9NT1RJT04iLCJNT1ZJTkciLCJTQ1JPTExJTkciLCJTVEFURVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiQ1JFQVRFRCIsIk1PVU5URUQiLCJJRExFIiwiRFJBR0dJTkciLCJERVNUUk9ZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VEIiwiZW1wdHkiLCJhcnJheSIsImxlbmd0aCIsInNsaWNlIiwiYXJyYXlMaWtlIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInN0YXJ0IiwiZW5kIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiZnVuYyIsImJpbmQiLCJhcmd1bWVudHMiLCJub29wIiwibmV4dFRpY2siLCJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0VGltZW91dCIsInJhZiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInR5cGVPZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJ0eXBlIiwic3ViamVjdCIsImlzT2JqZWN0IiwiaXNOdWxsIiwiaXNBcnJheSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpc0Z1bmN0aW9uIiwiaXNTdHJpbmciLCJpc1VuZGVmaW5lZCIsImlzSFRNTEVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50Iiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3Iiwid2luZG93IiwiSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTUxFbGVtZW50IiwiZSIsInRvQXJyYXkiLCJ2YWx1ZSIsImZvckVhY2giLCJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzIiwiaXRlcmF0ZWUiLCJpbmNsdWRlcyIsImluZGV4T2YiLCJwdXNoIiwiaXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21zIiwidG9nZ2xlQ2xhc3MiLCJlbG0iLCJjbGFzc2VzIiwiYWRkIiwibmFtZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc0xpc3QiLCJhZGRDbGFzcyIsInNwbGl0IiwiYXBwZW5kIiwicGFyZW50IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImNoaWxkcmVuIiwiYXBwZW5kQ2hpbGQiLCJiZWZvcmUiLCJub2RlcyIsInJlZiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJub2RlIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsIm1hdGNoZXMiLCJzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IiLCJmaWx0ZXIiLCJjaGlsZCIsImZpcnN0RWxlbWVudENoaWxkIiwib3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbktleXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yT3duIiwib2JqZWN0IiwicmlnaHQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywicmV2ZXJzZSIsImtleSIsImFzc2lnbiIsInNvdXJjZSIsIm1lcmdlIiwib21pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJyZW1vdmVBdHRyaWJ1dGUiLCJlbG1zIiwiYXR0cnMiLCJhdHRyIiwic2V0QXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZSIsIlN0cmluZyIsImNyZWF0ZSIsInRhZyIsImRvY3VtZW50IiwiY3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZUVsZW1lbnQiLCJzdHlsZSIsInByb3AiLCJnZXRDb21wdXRlZFN0eWxlIiwiZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BsYXkiLCJmb2N1cyIsInByZXZlbnRTY3JvbGwiLCJnZXRBdHRyaWJ1dGUiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGFzQ2xhc3MiLCJjbGFzc05hbWUiLCJjb250YWlucyIsInJlY3QiLCJ0YXJnZXQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicmVtb3ZlIiwicmVtb3ZlQ2hpbGQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicicGFyc2VIdG1sIiwiaHRtbCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJib2R5IiwicHJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInF1ZXJ5IiwicXVlcnlTZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IiLCJxdWVyeUFsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJyZW1vdmVDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3MiLCJ0aW1lT2YiLCJ0aW1lU3RhbXAiLCJ1bml0IiwiUFJPSkVDVF9DT0RFIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEFfQVRUUklCVVRFIiwiYXNzZXJ0IiwiY29uZGl0aW9uIiwibWVzc2FnZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFcnJvciIsIm1pbiIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImNlaWwiLCJhYnMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwcm94aW1hdGVseUVxdWFsIiwieCIsInkiLCJlcHNpbG9uIiwiYmV0d2VlbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJudW1iZXIiLCJleGNsdXNpdmUiLCJtaW5pbXVtIiwibWF4aW11bSIsImNsYW1wIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInNpZ24iLCJmb3JtYXQiLCJzdHJpbmciLCJyZXBsYWNlbWVudHMiLCJyZXBsYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQiLCJyZXBsYWNlIiwicGFkIiwiaWRzIiwiRXZlbnRCaW5kZXIiLCJsaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZXJzIiwiZm9yRWFjaEV2ZW50IiwidGFyZ2V0cyIsImV2ZW50cyIsImV2ZW50TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTIiwiZnJhZ21lbnQiLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJldmVudCIsIm5hbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BhY2UiLCJpc0V2ZW50VGFyZ2V0IiwicmVtb3ZlciIsInJlbW92ZUV2ZW50TGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInVuYmluZCIsImxpc3RlbmVyIiwiZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BhdGNoIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY3JlYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50IiwiaW5pdEN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImRlc3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ295IiwiZGF0YSIsIkVWRU5UX01PVU5URUQiLCJFVkVOVF9NT1ZFIiwiRVZFTlRfTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVkVEIiwiRVZFTlRfQ0xJQ0siLCJFVkVOVF9BQ1RJVkUiLCJFVkVOVF9JTkFDVEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkUiLCJFVkVOVF9WSVNJQkxFIiwiRVZFTlRfSElEREVOIiwiRVZFTlRfUkVGUkVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0giLCJFVkVOVF9VUERBVEVEIiwiRVZFTlRfUkVTSVpFIiwiRVZFTlRfUkVTSVpFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJFVkVOVF9TQ1JPTEwiLCJFVkVOVF9TQ1JPTExFRCIsIkVWRU5UX0RFU1RST1knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEIiwiRVZFTlRfQVVUT1BMQVlfUExBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1kiLCJFVkVOVF9BVVRPUExBWV9QQVVTRSIsIkVWRU5UX0xBWllMT0FEX0xPQURFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJFVkVOVF9TTElERV9LRVlET1dOIiwiRVZFTlRfU0hJRlRFRCIsIkV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZSIsIlNwbGlkZSIsImJ1cyIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYmluZGVyIiwib24iLCJqb2luIiwib2ZmIiwiZW1pdCIsIlJlcXVlc3RJbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWwiLCJpbnRlcnZhbCIsIm9uSW50ZXJ2YWwiLCJvblVwZGF0ZSIsImxpbWl0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInN0YXJ0VGltZSIsImlkIiwibm93IiwiRGF0ZSIsInJhdGUiLCJwYXVzZWQiLCJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQiLCJ1cGRhdGUiLCJwYXVzZSIsImNhbmNlbCIsImNhbmNlbEFuaW1hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGcmFtZSIsInJlc3VtZSIsInJld2luZCIsInNldCIsInRpbWUiLCJpc1BhdXNlZCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInN0YXRlIiwiaXMiLCJzdGF0ZXMiLCJBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1ciLCJBUlJPV19MRUZUIiwiQVJST1dfUklHSFQiLCJBUlJPV19VUCIsIkFSUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPV19ET1dOIiwiVFRCIiwiT1JJRU5UQVRJT05fTUFQIiwid2lkdGgiLCJsZWZ0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIlgiLCJZIiwiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCIsIlJPTEUiLCJUQUJfSU5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VYIiwiQVJJQV9QUkVGSVgiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9DVVJSRU5UIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIkFSSUFfU0VMRUNURUQiLCJBUklBX0xBQkVMIiwiQVJJQV9MQUJFTExFREJZIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIkFSSUFfSElEREVOIiwiQVJJQV9PUklFTlRBVElPTiIsIkFSSUFfUk9MRURFU0NSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lQVElPTiIsIkFSSUFfTElWRSIsIkFSSUFfQlVTWSIsIkFSSUFfQVRPTUlDIiwiQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMTF9BVFRSSUJVVEVTIiwiQ0xBU1NfUFJFRklYIiwiQ0xBU1NfUk9PVCIsIkNMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19UUkFDSyIsIkNMQVNTX0xJU1QiLCJDTEFTU19TTElERSIsIkNMQVNTX0NMT05FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIkNMQVNTX0NPTlRBSU5FUiIsIkNMQVNTX0FSUk9XUyIsIkNMQVNTX0FSUk9XIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIkNMQVNTX0FSUk9XX1BSRVYiLCJDTEFTU19BUlJPV19ORVhUIiwiQ0xBU1NfUEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0lOQVRJT04iLCJDTEFTU19QQUdJTkFUSU9OX1BBR0UiLCJDTEFTU19QUk9HUkVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfQkFSIiwiQ0xBU1NfVE9HR0xFIiwiQ0xBU1NfU1IiLCJDTEFTU19BQ1RJVkUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciU1RBVFVTX0NMQVNTX1BSRUZJWCIsIkNMQVNTX1BSRVYiLCJDTEFTU19ORVhUIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIkNMQVNTX1ZJU0lCTEUiLCJDTEFTU19MT0FESU5HIiwiQ0xBU1NfRk9DVVNfSU4iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiQ0xBU1NfT1ZFUkZMT1ciLCJTVEFUVVNfQ0xBU1NFUyIsIlBPSU5URVJfRE9XTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfRVZFTlRTIiwiUE9JTlRFUl9NT1ZFX0VWRU5UUyIsIlBPSU5URVJfVVBfRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyIsIlNMSURFIiwiTE9PUCIsIkZBREUiLCJTbGlkZSIsImluZGV4Iiwic2xpZGVJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgiLCJzbGlkZSIsImRlc3Ryb3llZCIsIkNvbXBvbmVudHMiLCJyb290IiwiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTmF2aWdhdGlvbiIsInVwZGF0ZU9uTW92ZSIsImkxOG4iLCJwYWdpbmF0aW9uIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInNsaWRlRm9jdXMiLCJyZXNvbHZlIiwiRGlyZWN0aW9uIiwic3R5bGVzIiwibGFiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIiwiaXNDbG9uZSIsImNvbnRhaW5lciIsImluaXROYXZpZ2F0aW9uIiwiY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xzIiwic3BsaWRlcyIsIm1hcCIsInNwbGlkZSIsIlNsaWRlcyIsImdldEF0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInNsaWRlWCIsIm9uTW92ZSIsImN1cnIiLCJoaWRkZW4iLCJhY3RpdmUiLCJpc0FjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUiLCJzZWxmIiwidmlzaWJsZSIsInRyYWNrUmVjdCIsIkVsZW1lbnRzIiwidCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWNrIiwic2xpZGVSZWN0IiwiZm9jdXNhYmxlTm9kZXMiLCJhY3RpdmVFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsImNsb25lU3RhdHVzIiwibW91bnQiLCJzbGlkZUxhYmVsIiwidXNlQ29udGFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lciIsIl9zdHlsZSIsImlzV2l0aGluIiwiZnJvbSIsImRpc3RhbmNlIiwiZGlmZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSIsIlNDUk9MTF9MSVNURU5FUl9PUFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OUyIsInBhc3NpdmUiLCJjYXB0dXJlIiwiTk9STUFMSVpBVElPTl9NQVAiLCJTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhY2ViYXIiLCJSaWdodCIsIkxlZnQiLCJVcCIsIkRvd24iLCJub3JtYWxpemVLZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IiwiS0VZQk9BUkRfRVZFTlQiLCJTUkNfREFUQV9BVFRSSUJVVEUiLCJTUkNTRVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0RBVEFfQVRUUklCVVRFIiwiSU1BR0VfU0VMRUNUT1IiLCJUUklHR0VSX0tFWVMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYnJlYWtwb2ludHMiLCJyZWR1Y2VkTW90aW9uIiwicXVlcmllcyIsImNvbXBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWx5IiwicmVnaXN0ZXIiLCJxdWVyeUxpc3QiLCJtYXRjaE1lZGlhIiwiZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIsIm1lcmdlZCIsInJlZHVjZSIsImVudHJ5IiwicmVmcmVzaCIsIm9wdHMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYmFzZSIsIm5vdGlmeSIsImdldFByb3RvdHlwZU9mIiwic2V0dXAiLCJpc01pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJtZWRpYVF1ZXJ5Iiwic29ydCIsIm4iLCJtIiwiZW5hYmxlIiwiYXhpc09ubHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwibWF0Y2giLCJvZmZzZXQiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsInRvVXBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyQ2FzZSIsIm9yaWVudCIsImxpc3QiLCJpc1VzaW5nS2V5IiwiZWxlbWVudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicic2xpZGVzIiwicm9vdENsYXNzZXMiLCJ0cmFja0NsYXNzZXMiLCJmaW5kIiwiYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cyIsInByZXYiLCJuZXh0IiwiYmFyIiwidG9nZ2xlIiwicHJlZml4Iiwicm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiLCJ0YWdOYW1lIiwiY2Fyb3VzZWwiLCJjb25jYXQiLCJnZXRDbGFzc2VzIiwibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsbGVkYnkiLCJjbG9zZXN0Iiwibm9kZVR5cGUiLCJwYXJlbnRFbGVtZW50IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRyYWciLCJpbml0IiwiU2xpZGUxIiwiU2xpZGUyIiwiZ2V0IiwiZXhjbHVkZUNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXMiLCJtYXRjaGVyIiwiZ2V0SW4iLCJwYWdlIiwiQ29udHJvbGxlciIsInRvSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4IiwiaGFzRm9jdXMiLCJwZXJQYWdlIiwiZm9yRWFjaEl0ZW0iLCJpbWFnZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1nIiwicmVtb3ZlTm9kZSIsImdldExlbmd0aCIsImlzRW5vdWdoIiwidmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpY2FsIiwicm9vdFJlY3QiLCJvdmVyZmxvdyIsInN0eWxlU2xpZGVzIiwiY3NzUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGRpbmciLCJyZXNpemUiLCJmb3JjZSIsIm5ld1JlY3QiLCJoZWlnaHQiLCJjc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSGVpZ2h0IiwiZ2FwIiwiYXV0b1dpZHRoIiwiZml4ZWRXaWR0aCIsImNzc1NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NpemUiLCJmaXhlZEhlaWdodCIsImF1dG9IZWlnaHQiLCJpc092ZXJmbG93IiwicCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGRpbmciLCJoZWlnaHRSYXRpbyIsImxpc3RTaXplIiwic2xpZGVTaXplIiwid2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhvdXRHYXAiLCJnZXRHYXAiLCJ0b3RhbFNpemUiLCJzbGlkZXJTaXplIiwicGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlRmxvYXQiLCJkdXJhdGlvbiIsImdldFBhZGRpbmciLCJjbG9uZUNvdW50IiwiYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lcyIsInJlbW91bnQiLCJvYnNlcnZlIiwiY29tcHV0ZUNsb25lQ291bnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VuZXJhdGUiLCJpc0hlYWQiLCJjbG9uZSIsImNsb25lTm9kZSIsIkxheW91dCIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJmaXhlZFNpemUiLCJUcmFuc2l0aW9uIiwicmVwb3NpdGlvbiIsImlzQnVzeSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTY3JvbGwiLCJqdW1wIiwidHJhbnNsYXRlIiwidG9Qb3NpdGlvbiIsInBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsInByZXZlbnRMb29wIiwiZGVzdGluYXRpb24iLCJleGNlZWRlZE1heCIsImdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RFbmQiLCJzaGlmdCIsImJhY2t3YXJkcyIsImV4Y2VzcyIsImdldExpbWl0IiwicycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUiLCJnZXRQb3NpdGlvbiIsIm1pbkRpc3RhbmNlIiwiSW5maW5pdHkiLCJpIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInRyaW1taW5nIiwidHJpbVNwYWNlIiwibW92ZSIsImRlc3QiLCJzaGlmdGVkIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4Y2VlZGVkTGltaXQiLCJleGNlZWRlZE1pbiIsImVuZEluZGV4Iiwic2xpZGVDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQiLCJwZXJNb3ZlIiwiTW92ZSIsIm9taXRFbmQiLCJpc0xvb3AiLCJpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSIsImdldE5leHQiLCJnZXRBZGphY2VudCIsImdldFByZXYiLCJjdXJySW5kZXgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywicHJldkluZGV4Iiwib25SZXNpemVkIiwiY29tcHV0ZURlc3RJbmRleCIsImxvbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwIiwic25hcFBhZ2UiLCJ0b1BhZ2UiLCJzZXRJbmRleCIsIndhaXRGb3JUcmFuc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIsImdvIiwiY29udHJvbCIsImFsbG93U2FtZUluZGV4IiwiaW5kaWNhdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIl9yZWYiLCJzY3JvbGwiLCJzbmFwIiwiZ2V0SW5kZXgiLCJ0b0Rlc3QiLCJjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlZCIsIndyYXBwZXJDbGFzc2VzIiwicGxhY2Vob2xkZXIiLCJ3cmFwcGVyIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImVuYWJsZWQiLCJjcmVhdGVBcnJvdyIsImFycm93IiwiYXJyb3dQYXRoIiwibmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbmRleCIsInByZXZMYWJlbCIsIm5leHRMYWJlbCIsImxhc3QiLCJmaXJzdCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlZCIsImhvdmVyZWQiLCJmb2N1c2VkIiwiYXV0b3BsYXkiLCJzdG9wcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCIsInBsYXkiLCJyZXNldFByb2dyZXNzIiwic3RvcCIsImF1dG9Ub2dnbGUiLCJwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2VPbkhvdmVyIiwicGF1c2VPbkZvY3VzIiwiY292ZXIiLCJzcmMiLCJmcmljdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24iLCJvblNjcm9sbGVkIiwibm9Db25zdHJhaW4iLCJub0Rpc3RhbmNlIiwiY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFyIiwib25FbmQiLCJ0byIsInQiLCJlYXNpbmdGdW5jIiwicG93IiwiYmFzZVBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbiIsImJhc2VFdmVudCIsInByZXZCYXNlRXZlbnQiLCJpc0ZyZWUiLCJkcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2dpbmciLCJjbGlja1ByZXZlbnRlZCIsIk1lZGlhIiwiZXhjZWVkZWQiLCJkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJsZSIsIm9uUG9pbnRlckRvd24iLCJpc1RvdWNoIiwibm9EcmFnIiwiaXNUb3VjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hFdmVudCIsImJ1dHRvbiIsIm9uUG9pbnRlck1vdmUiLCJvblBvaW50ZXJVcCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzYXZlIiwidGhyZXNob2xkcyIsImlzT2JqIiwibW91c2UiLCJjYW5jZWxhYmxlIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRpZmZDb29yZCIsImV4cGlyZWQiLCJkaWZmVGltZSIsImhhc0V4Y2VlZGVkIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWdNaW5UaHJlc2hvbGQiLCJ0b3VjaCIsInZlbG9jaXR5IiwiZmxpY2tQb3dlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJmbGlja01heFBhZ2VzIiwicmV3aW5kQnlEcmFnIiwib25DbGljayIsIm9ydGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2dvbmFsIiwiY29vcmRPZiIsImdldEJhc2VFdmVudCIsImNoYW5nZWRUb3VjaGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIlRvdWNoRXZlbnQiLCJpc0RyYWdnaW5nIiwia2V5Ym9hcmQiLCJvbktleWRvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIiwiX2Rpc2FibGVkIiwiaXNTZXF1ZW50aWFsIiwibGF6eUxvYWQiLCJlbnRyaWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsInNyY3NldCIsInNwaW5uZXIiLCJsb2FkTmV4dCIsImNoZWNrIiwicHJlbG9hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RQYWdlcyIsImxvYWQiLCJvbkxvYWQiLCJwYWdpbmF0aW9uQ2xhc3NlcyIsImRpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJnZXREaXJlY3Rpb24iLCJuZXh0UGFnZSIsIml0ZW0iLCJwYWdpbmF0aW9uRGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbiIsInNlbGVjdCIsImxpIiwiY2xhc3MiLCJ0ZXh0IiwicGFnZVgiLCJwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnaW5hdGlvbktleWJvYXJkIiwiaXNQYXJlbnQiLCJzeW5jIiwibGFzdFRpbWUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicib25XaGVlbCIsInNsZWVwIiwiZGVsdGFZIiwid2hlZWxNaW5UaHJlc2hvbGQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2hlZWxTbGVlcCIsInJlbGVhc2VXaGVlbCIsIndoZWVsIiwibGl2ZSIsInNyIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F1dG9wbGF5IiwidGV4dENvbnRlbnQiLCJERUZBVUxUUyIsInNwZWVkIiwiZWFzaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyIsInJld2luZFNwZWVkIiwiRmFkZSIsImRvbmUiLCJlbmRDYWxsYmFjayIsInQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uIiwidXNlU2Nyb2xsIiwidGhpcyIsIl9vIiwiX0UiLCJfU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsImRlZmF1bHRzIiwiSlNPTiIsInBhcnNlIiwiRXh0ZW5zaW9ucyIsIl90aGlzIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIl9DIiwiX1QiLCJDb21wb25lbnRDb25zdHJ1Y3RvcnMiLCJDb21wb25lbnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50IiwiU3luYyIsIl90aGlzJGV2ZW50Il0sIm1hcHBpbmdzIjoiOzs7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzs7Ozt5Q0FLTyxJQUFNQSxFQUErQixtQ0NhL0JDLEVBQVMsRUFLVEMsR0FBWSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpQlpDLEVBQVMsQ0FDcEJDLFFBdENxQixFQXVDckJDLFFBbENxQixFQW1DckJDLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTlCa0IsRUErQmxCTCxPQUFBQSxFQUNBQyxVQUFBQSxHQUNBSyxTQWxCc0IsRUFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J0QkMsVUFkdUIsQ0FPSCxFQ25DZixTQUFTQyxFQUFPQyxHQUNyQkEsRUFBTUMsTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsQ0FDakIsQ0NFZ0IsU0FBQUMsRUFBVUMsRUFBeUJDLEVBQWdCQyxHQUNqRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBT0MsTUFBTUMsVUFBVUwsTUFBTU0sS0FBTUwsRUFBV0MsRUFBT0MsQ0FBOUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQ1QsQ0NhTyxTQUFTSSxFQUFPQyxHQUVyQixPQUFPQSxFQUFLQyxLQUFMRixNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUMsRUFBVyxDQUFBLE1BQVNSLE9BQUFBLEVBQU9VLFVBQVcsQ0FBWCxFQUFsQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDRixDQ3hCb0IsU0FBUEMsTUNLTixJQUFNQyxFQUF1RUMsV0NMN0UsU0FBU0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUtOLEdBQ25CLE9BQU9PLHNCQUF1QlAsRUFDaEMsQ0NPQSxTQUFTUSxFQUFRQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBY0MsR0FDN0IsT0FBTyxPQUFPQSxJQUFZRCxDQUM1QixDQVNPLFNBQVNFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVRCxHQUN4QixNQUFPLENBQUVFLEVBQVFGLENBQUEsR0FBYUYsRUFBUSxTQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UsQ0FBbEIsQ0FDaEMsQ0FTTyxJQUFNRyxFQUFxRGpCLE1BQU1pQixRQVMzREMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQTZEZixFQUFPUyxFQUFRLFVBQVIsRUFTcEVPLEVBQXNEaEIsRUFBT1MsRUFBUSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUixFQVM3RFEsR0FBNERqQixFQUFPUyxFQUFRLFdBQVIsRUFTekUsU0FBU0ksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFGLEdBQ3RCLE9BQW1CLE9BQVpBLENBQ1QsQ0FVTyxTQUFTTyxFQUFlUCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDekIsSUFDRixPQUFPQSxhQUF1QkEsRUFBa0JRLGNBQWNDLGFBQWVDLFFBQVNDLFcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUd4RixPQUZVQyxHQUNELE1BQUEsQ0FBQSxDQUNULENBQ0YsQ0M5RU8sU0FBU0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVlDLEdBQzFCLE9BQU9YLEVBQVNXLENBQUEsRUFBVUEsRUFBUSxDQUFFQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdEMsQ0NIZ0IsU0FBQUMsRUFBWUMsRUFBaUJDLEdBQ2xDSixFQUFBRyxDQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTRCxRQUFTRSxDQUFsQixDQUNYLENDRmdCLFNBQUFDLEVBQWF0QyxFQUFZa0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ2hDLE1BQXlCLENBQUEsRUFBekJsQyxFQUFNdUMsUUFBU0wsQ0FBZixDQUNULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQ0FnQixTQUFBTSxFQUFTeEMsRUFBWXlDLEdBRTVCLE9BRFB6QyxFQUFNd0MsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU54QyxNQUFBQSxFQUFlaUMsRUFBU1EsQ0FBQSxDQUF4QixFQUNPekMsQ0FDVCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NKZ0IsU0FBQTBDLEVBQWFDLEVBQWNDLEVBQTRCQyxHQUNoRUYsR0FDSFIsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLEVBQVMsU0FBUUUsR0FDbkJBLEdBQ0hILEVBQUlJLFVBQVdGLEVBQU0sTUFBUSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVUFBWUMsQ0FBekMsQ0FFRixDQUpGLENBTUosQ0NSZ0IsU0FBQUUsRUFBVUwsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NDLEdBQ3pCRixFQUFBQyxFQUFLbEIsRUFBVW1CLEdBQVlBLEVBQVFLLE1BQU8sRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWYsRUFBdUJMLEVBQVMsQ0FBQSxDQUEzRCxDQUNmLENDSGdCLFNBQUFNLEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUFpQkMsR0FDdkNqQixFQUFTaUIsRUFBVUQsRUFBT0UsWUFBWTFDLEtBQU13JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsQ0FBekIsQ0FBbkIsQ0FDRixDQ0ZnQixTQUFBRyxFQUFRQyxFQUFzQkMsR0FDNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDckIsRUFBU29CLEVBQU8sU0FBUUUsR0FDaEIsSUFBQU4sR0FBV0ssR0FBT0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU9DLFdBRTFCUCxHQUNJQSxFQUFBUSxhQUFjRixFQUFNRCxDQUFwQixDQUVULENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05GLENBT0YsQ0NOZ0IsU0FBQUksR0FBU2pCLEVBQTRCa0IsR0FDNUMsT0FBQWxDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFlZ0IsQ0FBZixJQUEwQkEsRUFBQSxtQkFBOEJBLEVBQUlpQixTQUFVcEQsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU1tQyxFQUFLa0IsQ0FBdkQsQ0FDbkMsQ0NEZ0IsU0FBQVQsRUFBaUNELEVBQXFCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1UsR0FDOURULEVBQVdELEVBQVNqRCxFQUFPaUQsRUFBT0MsUUFBZCxFQUFrQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDckQsT0FBQVMsRUFBV1QsRUFBU1UsT0FBUSxTQUFBQyxHQUFBLE9BQVNILEdBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFPRixFQUF6QixDQUFqQlQsRUFBeURBLENBQzdFLENDSmdCLFNBQUFXLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E4QlosRUFBcUJVLEdBQ2pFLE9BQU9BLEVBQVdULEVBQWFELEVBQVFVLENBQVIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQW9CLEdBQU1WLEVBQU9hLGlCQUNsRSxDQ1ZPLElBQU1DLEVBQVVDLE9BQU9DLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1NkLFNBQUFDLEVBQ2RDLEVBQ0FoQyxFQUNBaUMsR0FFS0QsSUFDREMsRUFBUUwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVNJLENBQUEsRUFBU0UsUUFBbEIsRUFBOEJOLEVBQVNJLENBQUEsR0FBV2xDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFTLFNBQU9xQyxHQUNsRSxjQUFSQSxHQUF1Qm5DLEVBQVVnQyxFQUFRRyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0EsQ0FBekIsQ0FDdkIsQ0FGQSxDQU1OLENDa0JPLFNBQVNDLEdBQTBCSixHQVFqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsT0FOUG5FLEVBQU9VLFVBQVcsQ0FBbEIsRUFBc0J1QixRQUFTLFNBQVV1QyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDL0JOLEVBQUFNLEVBQVEsU0FBRXhDLEVBQU9zQyxHQUN2QkgsRUFBUUcsR0FBUUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFGLEVBQ3hCLENBRk0sQ0FHUixDQUpGLEVBTU9ILENBQ1QsQ0NDTyxTQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBeUJOLEdBY2hDLE9BWlBuRSxFQUFPVSxVQUFXLENBQWxCLEVBQXNCdUIsUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsU0FBVXVDLEdBQy9CTixFQUFBTSxFQUFRLFNBQUV4QyxFQUFPc0MsR0FDbEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakQsRUFBU1csQ0FBVCxFQUNLbUMsRUFBQUcsR0FBUXRDLEVBQU1oQyxNQUFkLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NFbUIsR0FBVWEsQ0FBQSxFQUNwQm1DLEVBQVFHLEdBQVFHLEVBQU8sR0FBSXRELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFVZ0QsRUFBUUcsRUFBUixFQUFrQkgsRUFBUUcsR0FBUSxHQUFJdEMsQ0FBM0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBRWhCbUMsRUFBUUcsR0FBUXRDLENBRWxCLENBUk0sQ0FTUixDQVZGLEVBWU9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsQ0FDVCxDQ3pEZ0IsU0FBQU8sR0FBTVAsRUFBZ0JGLEdBQ3BDaEMsRUFBU2dDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFRRixFQUFTSSxDQUFULEVBQW1CLFNBQU9HLEdBQ3pDLE9BQU9ILEVBQVFHLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNmLENBRkYsQ0FHRixDQ0xnQixTQUFBSyxFQUFpQkMsRUFBMkJDLEdBQzFENUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVMyQyxFQUFNLFNBQU9uQyxHQUNwQlIsRUFBUzRDLEVBQU8sU0FBUUMsR0FDZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyQyxHQUFBQSxFQUFJa0MsZ0JBQWlCRyxDQUFyQixDQUNQLENBRkYsQ0FHQSxDQUonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRixDQUtGLENDRWdCLFNBQUFDLEVBQ2RILEVBQ0FDLEVBQ0E3QyxHQUVLYixHQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBELENBQVYsRUFDS1gsRUFBQVcsRUFBTyxTQUFFN0MsRUFBT1ksR0FDUm1DLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSCxFQUFNaEMsRUFBTVosQ0FBWixDQUNkLENBRk0sRUFJUkMsRUFBUzJDLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQU9uQyxHQUNwQnJCLEVBQVFZLENBQVIsR0FBNkIsS0FBVkEsRUFBZTJDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQmxDLEVBQUtvQyxDQUFMLEVBQWVwQyxFQUFJc0MsYUFBY0YsRUFBT0csT0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoRCxDQUFSLENBQXpCLENBQ2xFLENBRkYsQ0FJSixDQ05nQixTQUFBaUQsRUFDZEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQ0FMLEVBQ0E1QixHQUVNUixFQUFNMEMsU0FBU0MsY0FBZUYsQ0FBeEIsRUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0wsT0FORkwsSUFDT3RELEVBQUFzRCxDQUFBLEVBQVUvQixFQUF5QmlDLEdBQWZ0QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBS29DLENBQUwsRUFHdEI1QixHQUFBRCxFQUFRQyxFQUFRUixDQUFoQixFQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSEEsQ0FDVCxDQ1pnQixTQUFBNEMsRUFDZDVDLEVBQ0E2QyxFQUNBdEQsR0FFSyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQVIsR0FBYVEsQ0FBYixFQUNJLE9BQUF1RCxpQkFBa0I5QyxDQUFsQixFQUF5QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2QyxHQUczQmxFLEVBQVFZLENBQUEsSUFDVFMsRUFBQTRDLE1BQU9DLE1BQWF0RCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFFNUIsQ0M5QmdCLFNBQUF3RCxHQUFTL0MsRUFBa0IrQyxHQUNsQ0gsRUFBQTVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFLLFVBQVcrQyxDQUFoQixDQUNULENDTk8sU0FBU0MsR0FBT2hELEdBQ2hCQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQSxXQUFpQkEsWUFBakIsR0FBeUNBLEVBQUlnRCxNQUFPLENBQUVDLGNBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsQ0FBakIsQ0FBWCxDQUNoRCxDQ0RnQixTQUFBQyxFQUFjbEQsRUFBY3FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNuQyxPQUFBckMsRUFBSWtELGFBQWNiLENBQWxCLENBQ1QsQ0NBZ0IsU0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjLEdBQVVuRCxFQUFjb0QsR0FDdEMsT0FBT3BELEdBQU9BLEVBQUlJLFVBQVVpRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBVUQsQ0FBeEIsQ0FDaEIsQ0NMTyxTQUFTRSxFQUFNQyxHQUNwQixPQUFPQSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT0Msc0JBQWQsQ0FDRixDQ0NPLFNBQVNDLEVBQVE3QyxHQUN0QnBCLEVBQVNvQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTyxTQUFRRSxHQUNqQkEsR0FBUUEsRUFBS0MsWUFDWEQsRUFBQUMsV0FBVzInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxZQUFhNUMsQ0FBeEIsQ0FFUCxDQUpGLENBS0YsQ0NKTyxTQUFTNkMsR0FBa0NDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUN6QyxPQUFBeEMsSUFBVSxJQUFJeUMsV0FBWUMsZ0JBQWlCRixFQUFNLFdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2QyxFQUFxREcsSUFBL0QsQ0FDVCxDQ05nQixTQUFBQyxFQUFTM0UsRUFBVTRFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNqQzVFLEVBQUU2RSxlQUFGLEVBRUtELElBQ0g1RSxFQUFFNEUsZ0JBQUYsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E1RSxFQUFFOEUseUJBQUYsRUFFSixDQ0xnQixTQUFBQyxHQUFvQzVELEVBQTRCVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDdkUsT0FBQVYsR0FBVUEsRUFBTzZELGNBQWVuRCxDQUF0QixDQUNuQixDQ0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0IsU0FBQW9ELEdBQXVDOUQsRUFBNEJVLEdBQ2pGLE9BQU9BLEVBQVczRCxFQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lELEVBQU8rRCxpQkFBa0JyRCxDQUF6QixDQUFBLEVBQXdDLEVBQ3RFLENDSmdCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFBc0QsRUFBYXhFLEVBQWNDLEdBQzVCRixFQUFBQyxFQUFLQyxFQUFTLENBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQWQsQ0FDZixDQ05PLFNBQVN3RSxHQUFRcEYsR0FDdEIsT0FBT0EsRUFBRXFGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUNYLENDSU8sU0FBU0MsRUFBTXBGLEdBQ3BCLE9BQU9ULEVBQVVTLEdBQVVBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRQSxFQUFZQSxFQUFaLEtBQXlCLEVBQzlELENDUk8sSUFBTXFGLEdBQWUsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2ZDLFVBQTBCRCxHQ0h2QixTQUFBRSxHQUFRQyxFQUFnQkMsR0FDdEMsR0FBSyxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBRUQsRUFDTCxNQUFNLElBQUlFLE1BQVlMLElBQUFBLFNBQW1CSSxHQUFXLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwRCxDQUVKLENDYk8sSUFBUUUsRUFBK0JDLEtBQS9CRCxJQUFLRSxHQUEwQkQsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTFCQyxJQUFLQyxHQUFxQkYsS0FBckJFLE1BQU9DLEdBQWNILEtBQWRHLEtBQU1DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRSixLQUFSSSxJQ1l0QixTQUFBQyxHQUFvQkMsRUFBV0MsRUFBV0MsR0FDaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidELE9BQUFKLEVBQUtFLEVBQUlDLENBQVQsRUFBZUMsQ0FDeEIsQ0NITyxTQUFTQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBU0MsRUFBZ0JKLEVBQVdDLEVBQVdJLEdBQ3ZELElBQUFDLEVBQVViLEVBQUtPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFHQyxDQUFILEVBQ2ZNLEVBQVVaLEdBQUtLLEVBQUdDLENBQUgsRUFDckIsTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU9JLEVBQ0hDLEVBQVVGLEdBQVVBLEVBQVNHLEVBQzdCRCxHQUFXRixHQUFVQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBVUcsQ0FDckMsQ0NMZ0IsU0FBQUMsRUFBT0osRUFBZ0JKLEVBQVdDLEdBQzFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFBSyxFQUFVYixFQUFLTyxFQUFHQyxDQUFILEVBQ2ZNLEVBQVVaLEdBQUtLLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFHQyxDQUFILEVBQ3JCLE9BQU9SLEVBQUtFLEdBQUtXLEVBQVNGLENBQWQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXdCRyxDQUF4QixDQUNkLENDVE8sU0FBU0UsR0FBTVQsR0FDcEIsT0FBYyxFQUFKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsSUFBYUEsRUFBSSxFQUM3QixDQ0VnQixTQUFBVSxHQUFRQyxFQUFnQkMsR0FLLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BSlA3RyxFQUFTNkcsRUFBYyxTQUFlQyxHQUNwQ0YsRUFBU0EsRUFBT0csUUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsS0FBaEIsR0FBMEJELENBQTFCLENBQ1QsQ0FGRixFQUlPRixDQUNULENDVk8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVNJLEdBQUtYLEdBQ25CLE9BQU9BLEVBQVMsR0FBVUEsSUFBQUEsS0FBZ0JBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUM1QyxDQ0RBLElBQU1ZLEdBQThCLEdDdUI3QixTQUFTQyxLQUtkLElBQUlDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFvRixHQXVGL0UsU0FBQUMsRUFDUEMsRUFDQUMsRUFDQXBILEdBRUFGLEVBQVNxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsRUFBUyxTQUFVdEQsR0FDaEJBLEdBQUEvRCxFQUFTc0gsRUFBUSxTQUFBQSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDekJBLEVBQU94RyxNQUFPLEdBQWR3RyxFQUFvQnRILFFBQVMsU0FBV3VILEdBQ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0MsRUFBV0QsRUFBUXpHLE1BQU8sR0FBZixFQUNqQlosRUFBVTZELEVBQVF5RCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxHQUFLQSxFQUFVLEVBQTNDLENBQ0EsQ0FIRkYsQ0FJQSxDQUxRLENBTVYsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUEYsQ0FRRixDQVVPLE1BQUEsQ0FDTDlJLEtBaEdGLFNBQ0U2SSxFQUNBQyxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUcsRUFDQUMsR0FFQU4sRUFBY0MsRUFBU0MsRUFBUSxTQUFFdkQsRUFBUTRELEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPQyxHQUM5QyxJQUFNQyxFQUFnQixxQkFBc0I5RCxFQUN0QytELEVBQVVELEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidaOUQsRUFBT2dFLG9CQUFvQnZKLEtBQU11RixFQUFRNEQsRUFBT0YsRUFBVUMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTFELEVBQ0EzRCxFQUFBLGVBQTJCdkYsS0FBTXVGLEVBQVEwRCxDQUF6QyxFQUVZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksRUFBQTlELEVBQU9pRSxpQkFBa0JMLEVBQU9GLEVBQVVDLENBQTFDLEVBQXNEMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidELEVBQUEsWUFBeUIwRCxDQUF6QixFQUN0RU4sRUFBVTlHLEtBQU0sQ0FBRTBELEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRNEQsRUFBT0MsRUFBV0gsRUFBVUssRUFBdEQsQ0FDQSxDQVJGLENBU0YsRUFrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZFRyxPQXpFTyxTQUFRWixFQUF1QkMsRUFBMkJHLEdBQ2pFTCxFQUFjQyxFQUFTQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUSxTQUFFdkQsRUFBUTRELEVBQU9DLEdBQ2xDVCxFQUFBQSxFQUFVeEYsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVEsU0FBWXVHLEdBQ3hDLE1BQUtBLENBQUFBLEVBQUFBLEVBQVUsS0FBUW5FLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsQm1FLEVBQVUsS0FBUVAsR0FDbEJPLEVBQVUsS0FBUU4sR0FDZEgsR0FBWVMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVUsS0FBUVQsS0FFckNTLEVBQVUsR0FBVixFQUNPLENBQUEsRUFJVCxDQVhVLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVlaLENBYkYsQ0FjRixFQTJERUMsU0FoRE8sU0FBYXBFLEVBQXFCL0UsRUFBY29KJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNuRCxJQUFBdkksRUFXRyxNQVJxQixZQUF2QixPQUFPd0ksWUFDVnhJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJLElBQUl3SSxZQUFhckosRUFBTSxDQUFFc0osUUFIZixDQUFBLEVBR3dCRixPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsQ0FBWCxDQUF2QixHQUVBdkksRUFBQXFELFNBQVNxRixZQUFhLGFBQXRCLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGQyxnQkFBaUJ4SixFQU5MLENBQUEsRUFNb0IsQ0FBQSxFQUFPb0osQ0FBekMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0ZyRSxFQUFPMEUsY0FBZTVJLENBQXRCLEVBQ09BLENBQ1QsRUFvQ0U2SSxRQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRixXQUNFdkIsRUFBVW5ILFFBQVMsU0FBUTJJLEdBQUVBLEVBQU0sR0FBTixDQUFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUEzQyxFQUNBL0ssRUFBT3VKLENBQVAsQ0FDRixDQUVPLENBTVQsQ0N4Sk8sSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU15QixFQUEyQixVQUUzQkMsRUFBMkIsT0FDM0JDLEdBQTJCLFFBQzNCQyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMkIsUUFDM0JDLEdBQTJCLFNBQzNCQyxHQUEyQixXQUMzQkMsR0FBMkIsVUFDM0JDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUEyQixTQUMzQkMsRUFBMkIsVUFDM0JDLEVBQTJCLFVBQzNCQyxHQUEyQixTQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDM0JDLEdBQTJCLFVBSTNCQyxHQUEyQixTQUMzQkMsRUFBMkIsV0FFM0JDLEVBQTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixVQUszQkMsR0FBMkIscUJBQzNCQyxHQUEyQixnQkFFM0JDLEdBQTJCLGlCQUMzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JDLEdBQTJCLGtCQUczQkMsR0FBMEIsS0FDMUJDLEdBQTBCLEtDQ2hDLFNBQVNDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFnQkMsR0FLOUIsSUFBTUMsRUFBTUQsRUFBU0EsRUFBT3ZDLE1BQU13QyxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWpILFNBQVNrSCx1QkFBakQsRUFLTUMsRUFBU25ELEdBQWYsRUE2QkEsT0FKS2dEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNIQSxFQUFPdkMsTUFBTTJDLEdBQUlaLEVBQWVXLEVBQU8zQixPQUF2Q3dCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUdLNUgsR0FBUStILEVBQVEsQ0FDckJGLElBQUFBLEVBQ0FHLEdBdkJPLFNBQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEQsRUFBMkJHLEdBQy9CNEMsRUFBQTdMLEtBQU0yTCxFQUFLckssRUFBU3dILENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQVNpRCxLQUFNLEdBQXhCLEVBQStCLFNBQUsxSyxHQUMzQzRILEVBQUFuSicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBT21KLEVBQVVySSxFQUFTUyxFQUFFdUksTUFBRixFQUFhdkksRUFBRXVJLE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTLEVBQWxELENBQ1QsQ0FGSyxDQUdULEVBb0JFb0MsSUFBS2xNLEVBQU8rTCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3BDLE9BQVFrQyxDQUF0QixFQUNMTSxLQWJGLFNBQWU5QyxHQUViMEMsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsQyxTQUFVZ0MsRUFBS3hDLEVBQU81SixFQUFPVSxVQUFXLENBQVgsQ0FBcEMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0YsQ0FNdUIsRUFNekIsQ0NuRE8sU0FBU2lNLEdBQ2RDLEVBQ0FDLEVBQ0FDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQyxHQUVNLElBS0ZDLEVBVUFDLEVBZklDLEVBQVFDLEtBQVJELElBVUpFLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLEVBVVBDLEVBQVMsQ0FBQSxFQUtUQyxFQUFRLEVBS1osU0FBU0MsSUFDUCxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSyxDQUFFRixFQUFTLENBSWQsR0FIQUQsRUFBT1IsRUFBV2pGLEdBQU91RixFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUFBQUEsR0FBY0osRUFBVSxDQUFoQyxFQUFzQyxFQUMvREUsR0FBWUEsRUFBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNLEdBRVQsR0FBUkEsSUFDUVAsRUFBQSxFQUNYRyxFQUFZRSxFQUFaLEVBRUtILEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTLEVBQUVPLEdBQVNQLEdBQ3ZCLE9BQU9TLEVBQVAsRUFJSlAsRUFBS25NLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FLeU0sRUFDWixDQUNGLENBaUJBLFNBQVNDLElBQ0VILEVBQUEsQ0FBQSxDQUNYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQWlCQSxTQUFTSSxJQUNQUixHQUFNUyxxQkFBc0JULEdBR25CSSxFQUFBLEVBREEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQURBRyxFQUFBLEVBR1gsQ0FvQk8sTUFBQSxDQUNMbE4sTUF2REYsU0FBZ0J5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04sR0FDZEEsR0FBVUYsRUFBVixFQUNBVCxFQUFZRSxFQUFJLEdBQU1TLEVBQVNQLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPUixFQUFXLEdBQ3JDUyxFQUFBLENBQUEsRUFDWkosRUFBWW5NLEVBQUt5TSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDbkIsRUFtREVLLE9BdkNGLFdBQ0VaLEVBQVlFLEVBQVosRUFDWUUsRUFBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFUE4sR0FDSEEsRUFBVU0sQ0FBVixDQUVKLEVBaUNFSSxNQUFBQSxFQUNBQyxPQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFDQUksSUFsQkYsU0FBY0MsR0FDRGxCLEVBQUFrQixDQUNiLEVBaUJFQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FWRixXQUNTLE9BQUFWLENBQ1QsQ0FFTyxDQVFULENDbElPLFNBQVNXLEVBQU9DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUlyQixJQUFJQyxFQUFRRCxFQXNCTCxNQUFBLENBQUVKLElBZlQsU0FBYzdMLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNKa00sRUFBQWxNLENBQ1YsRUFhY21NLEdBSmQsU0FBYUMsR0FDWCxPQUFPaE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVVMLEVBQVNxTSxDQUFULEVBQW1CRixDQUFuQixDQUNuQixDQUVPLENBQ1QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDN0NBLElBQU1HLEVBQVEsUUFDREMsR0FBa0JELEVBQXhCLE9BQ01FLEdBQWtCRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBeEIsUUFDTUcsRUFBa0JILEVBQXhCLEtBQ01JLEVBQWtCSixFQUF4QixPQ1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUssR0FBTSxNQ1FOQyxFQUFrQixDQUM3QkMsTUFBWSxDQUFFLFVBQ2RDLEtBQVksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQUUsTUFBTyxTQUNyQnpLLE1BQVksQ0FBRSxTQUFVLFFBQ3hCOEQsRUFBWSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRSxLQUNkNEcsRUFBWSxDQUFFLEtBQ2RDLEVBQVksQ0FBRSxLQUNkQyxVQUFZLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFFUixFQUFVRCxJQUN4QlUsV0FBWSxDQUFFUixFQUFZSCxHQVJHLEVDckJ4QixJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTVksRUFBWSxPQUNaQyxFQUFZLFdBR1pDLEVBQXVCLFFBQ3ZCQyxHQUEyQkQsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWpDLFdBQ01FLEdBQTJCRixFQUFqQyxVQUNNRyxHQUEyQkgsRUFBakMsV0FDTUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQTJCSixFQUFqQyxRQUNNSyxHQUEyQkwsRUFBakMsYUFDTU0sR0FBMkJOLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FqQyxTQUNNTyxHQUEyQlAsRUFBakMsY0FDTVEsR0FBMkJSLEVBQWpDLGtCQUNNUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBMkJULEVBQWpDLE9BQ01VLEdBQTJCVixFQUFqQyxPQUNNVyxHQUEyQlgsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWpDLFNBU01ZLEdBQWlCLENBQzVCZCxFQUNBQyxFQXhCdUIsV0EwQnZCRSxHQUNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsR0FDQUUsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsSUMzQklLLEVBQW1CNUksRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQXpCLEtBWWE2SSxHQUF3QjdJLEdBQ3hCOEksR0FBNEJGLEVBQWxDLFFBQ01HLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUE0QkgsRUFBbEMsT0FDTUksR0FBNEJKLEVBQWxDLFFBQ01LLEdBQTRCRCxHQUFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsVUFDTUUsR0FBNEJGLEdBQWxDLGNBQ01HLEdBQTRCUCxFQUFsQyxTQUNNUSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBNEJSLEVBQWxDLFFBQ01TLEdBQTRCRCxHQUFsQyxTQUNNRSxHQUE0QkYsR0FBbEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQ01HLEdBQTRCWCxFQUFsQyxhQUNNWSxHQUE0QkQsR0FBbEMsU0FFTUUsR0FEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzRCYixFQUFsQyxXQUNBLFFBQ01jLEdBQTRCZCxFQUFsQyxTQUlNZSxHQUE0QmYsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWxDLEtBRU1nQixHQUE0QkMsWUFDNUJDLEdBQTRCRCxVQUM1QkUsR0FBNEJGLFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUM1QkcsR0FBNEJILGFBQzVCSSxHQUE0QkosYUFDNUJLLEdBQTRCTCxjQUM1Qk0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQTRCTixjQU81Qk8sR0FBaUIsQ0FDNUJSLEdBQ0FJLEdBQ0FGLEdBQ0FDLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRSxHQUNBQyxHQUNBQyxJQ3RESyxJQWNNRSxHQUFzQix1QkFPdEJDLEdBQXNCLHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkFRdEJDLEdBQW9CLHFDQzdCMUIsSUFBTUMsR0FBUSxRQU9SQyxHQUFPLE9BT1BDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFPLE9DbUViLFNBQVNDLEdBQU83RixFQUFnQjhGLEVBQWVDLEVBQW9CQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbEUsSUFhRkMsRUFiRXhJLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQW5CMkMsR0FBSUcsRUFBZTlDLEVBQWY4QyxLQUFNak0sRUFBU21KLEVBQVRuSixLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVjRSLEVBQThCbEcsRUFBOUJrRyxXQUFZQyxFQUFrQm5HLEVBQWxCbUcsS0FBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczSSxFQUFZd0MsRUFBWnhDLFFBQ2xCNEksRUFBNkQ1SSxFQUE3RDRJLGFBQWNDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUErQzdJLEVBQS9DNkksYUFBY0MsRUFBaUM5SSxFQUFqQzhJLEtBQU1DLEVBQTJCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9JLEVBQTNCK0ksV0FBWUMsRUFBZWhKLEVBQWZnSixXQUM5Q0MsRUFBWVAsRUFBVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRLFVBQXZCRCxRQUNGRSxFQUFZbk4sRUFBY3dNLEVBQU8sT0FBUCxFQUMxQlksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVlwTixFQUFjd00sRUFBTzNDLEVBQVAsRUFDMUJ3RCxFQUF5QixDQUFBLEVBQWJkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNaZSxFQUFZcFAsR0FBT3NPLEVBQVAsSUFBbUI1QixFQUFuQixFQWtEbEIsUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMyQyxJQUNQLElBQU1DLEVBQVdoSCxFQUFPaUgsUUFBUUMsSUFBSyxTQUFVck4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ3ZDZ00sRUFBUWhNLEVBQU9zTixPQUFPakIsV0FBV2tCLE9BQU9DLE1BQU92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FBdkMsRUFDUEQsT0FBQUEsRUFBUUEsRUFBTUcsTUFBTWxGLEdBQUssRUFDaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLENBSGVkLEVBR2JLLEtBQU0sR0FIT0wsRUFLSHBILEVBQUFvTixFQUFPM0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVk1RyxHQUFRNkosRUFBS2dCLFFBQVVULEVBQVVkLEVBQWFELEdBQVUsQ0FBaEQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQTNCLEVBQ0FsTixFQUFBb04sRUFBTzlDLEdBQWU4RCxDQUF0QixFQUNkcE8sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWNvTixFQUFPakQsRUFBTXlELEVBQWEsU0FBVyxFQUFuRCxFQUNjQSxHQUFBaE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWlCd04sRUFBT3ZDLEVBQXhCLENBQ2hCLENBS0EsU0FBUzhELElBQ0F0QixHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRTdFLEVBQUEsQ0FFWCxDQUtBLFNBQVNBLElBQ1AsSUFDaUJvRyxFQTZCWEMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaEJBQyxFQWRDekIsSUFDVXVCLEVBQVN4SCxFQUFoQjhGLE9BYUo0QixFQUFTQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZixLQUVnQmxPLEdBQVV1TSxFQUFPbEIsRUFBakIsSUFDRHpPLEVBQUEyUCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT2xCLEdBQWM0QyxDQUFyQixFQUNiOU8sRUFBY29OLEVBQU83QyxHQUFjaUQsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCc0IsR0FBVSxFQUE3RCxFQUNNbkgsRUFBQW1ILEVBQVM1SSxHQUFlQyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0I2SSxDQUF4QyxHQVVGQyxFQWdEUixXQUNPN0gsR0FBQUEsRUFBT2dDLEdBQUk0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsRUFBWDVGLEVBQ0gsT0FBTzJILEVBQVAsRUFHRixJQUFNRyxFQUFZbE8sRUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTSxFQUFXNkIsU0FBU0MsS0FBMUIsRUFDWkMsRUFBWXJPLEVBQU1vTSxHQUNsQnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCxFQUFZK0QsRUFBUyxPQUFRLENBQUEsQ0FBUixFQUNyQnhPLEVBQVl3TyxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxRQUFTLENBQUEsQ0FBVCxFQUUzQixPQUFPOUssR0FBT21NLEVBQVdwRixFQUFYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUF1QjlHLEdBQU1xTSxFQUFXdkYsS0FDakQvRyxHQUFPc00sRUFBV2hRLEVBQWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixHQUErQjJELEdBQU1rTSxFQUFXN1AsRUFBakIsQ0FDdEMsRUE1REUsRUFDTXdQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFTLENBQUVJLElBQWEsQ0FBRUYsS0FBY2QsR0FFdkM3RyxFQUFPK0IsTUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEdBQUksQ0FBRTlPLEVBQVFDLEdBQTNCNk0sR0FDU3BILEVBQUFvTixFQUFPekMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQWFrRSxHQUFVLEVBQTlCLEVBR0Y3TyxFQUFBZ0MsR0FBVW9MLEVBQU94SSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUTBLLGdCQUFrQixFQUEzQyxFQUFpRGxGLEVBQVd5RSxFQUFTLENBQUEsRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBMUUsRUFFVGpCLEdBQ0g1TixFQUFjb04sRUFBT2hELEVBQVd5RSxFQUFTLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEVBQUssQ0FBOUMsRUFHR0ksSUFBWXBPLEdBQVV1TSxFQUFPZCxFQUFqQixJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRjdPLEVBQUEyUCxFQUFPZCxHQUFlMkMsQ0FBdEIsRUFDUHRILEVBQUFzSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVTdJLEdBQWdCQyxHQUFjMkksQ0FBeEMsR0FHREMsR0FBVzdPLFNBQVNtUCxnQkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWtCbkMsSUFDckNILEVBQVFLLEVBQVdrQixPQUFPQyxNQUFPckgsRUFBTzhGLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FoQyxJQUNMeE0sR0FBT3VNLEVBQU1HLEtBQU5ILEVBNUNoQnhQLEVBQWEyUCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBT2hCLEdBQVljLElBQVUwQixFQUFPLENBQWpELEVBQ0FuUixFQUFhMlAsRUFBT2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVlhLElBQVUwQixFQUFPLENBQWpELEVBRUosQ0E2REEsU0FBU0csSUFDRCxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU0gsRUFBU3hILEVBQWhCOEYsTUFDUixPQUFPMEIsSUFBUzFCLEdBQVd0SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUTRLLGFBQWVaLElBQVN6QixDQUM3RCxDQXNDQSxJQUFNNkIsRUFBTyxDQUNYOUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQUFBLEVBQ0FDLFdBQUFBLEVBQ0FDLE1BQUFBLEVBQ0FjLFVBQUFBLEVBQ0FEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxRQUFBQSxFQUNBd0IsTUFyTEYsV0FDU3hCLElBQ0xiLEVBQU1sRixHQUFTcUYsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUtyRixHQUFhaEUsU0FBQUEsR0FBS2dKLEVBQVEsQ0FBYixFQUNqQ2xOLEVBQWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb04sRUFBT2pELEVBQU13RCxFQUFhLFdBQWEsT0FBckQsRUFDYzNOLEVBQUFvTixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3ZDLEdBQXNCNkMsRUFBS04sS0FBbEMsRUFDZHBOLEVBQWNvTixFQUFPM0MsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVl1RCxHQUFTbkssR0FBUTZKLEVBQUtnQyxXQUFZLENBQUV4QyxFQUFRLEVBQUcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOUYsRUFBT3BNLE9BQTdDLENBQTFDLEdBVUZVLEVBQU0wUixFQUFPLFFBQVM1UixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT21NLEVBQU0xQixHQUFhK0ksQ0FBMUIsQ0FBdEIsRUFDQXRULEVBQU0wUixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTyxVQUFXNVIsRUFBT21NLEVBQU1WLEdBQXFCK0gsQ0FBbEMsQ0FBeEIsRUFDQXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSCxFQUFJLENBQUV4QixHQUFha0IsR0FBZVAsR0FBa0I2QixDQUFwRCxFQUNBaEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUlYLEdBQTBCc0gsQ0FBOUIsRUFFS1YsR0FDSGpHLEVBQUl6QixFQUFZNEksQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWhCLENBWkosRUE2S0UvSSxRQTFKRixXQUNjeUgsRUFBQSxDQUFBLEVBQ1p4SSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTWUsUUFBTixFQUNBMUQsRUFBYWtMLEVBQU9WLEVBQXBCLEVBQ0E5TSxFQUFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J3TixFQUFPbkMsRUFBeEIsRUFDY2pMLEVBQUFvTixFQUFPLFFBQVNXLENBQWhCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNBL04sRUFBQW9OLEVBQU8zQyxHQUFZdUQsR0FBUyxFQUE1QixDQUNoQixFQW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSkV4RixPQUFBQSxFQUFBbEksTUExRE8sU0FBT0MsRUFBY3RELEVBQXdCMFMsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BEQyxFQUFVRCxHQUFnQnpCLEdBQWVkLEVBQU83TSxFQUFNdEQsQ0FBdEQsQ0FDRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUEwREU0UyxTQXBCTyxTQUFVQyxFQUFjQyxHQU8vQixPQU5JQyxFQUFPL00sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUs2TSxFQUFPNUMsQ0FBUCxHQUdkOEMsRUFESy9CLEdBQWFySixDQUFBQSxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lFLFFBQVV6QixDQUFBQSxFQUFPZ0MsR0FBSTJELEVBQVgzRixFQUkvQjRJLEVBSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFcE4sRUFBS29OLEVBQU01SSxFQUFPcE0sT0FBU2dWLENBQXRCLElBR0NELENBQ2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixDQUVhLEVBYU4sT0FBQWYsQ0FDVCxDQzlSTyxJQUFNaUIsR0FBOEIxTixFQUFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsWUNIQSxJQUFNMk4sR0FBMEIsQ0FBRUMsUUFBUyxDQUFBLEVBQU9DLFFBQVMsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsQ0FBM0IsRUNJaEMsSUFBTUMsR0FBb0IsQ0FDL0JDLFNBQVUsSUFDVkMsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVUvRyxHQUNWZ0gsS0FBVWpILEdBQ1ZrSCxHQUFVaEgsRUFDVmlILEtBQVVoSCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FMcUIsRUFlMUIsU0FBU2lILEdBQWNwUixHQUU1QixPQURBQSxFQUFNL0MsRUFBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrQyxDQUFBLEVBQVFBLEVBQU1BLEVBQUlBLElBQzNCOFEsR0FBbUI5USxJQUFTQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDckMsQ0NKQSxJQUFNcVIsR0FBaUIsVUNmaEIsSUFBTUMsR0FBeUJ0TyxFQUEvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsUUFPTXVPLEdBQTRCRCxHQUFsQyxVQU9NRSxHQUFBLElBQXNCRixHQUF0QixPQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaURDLEdBQWpELElDV2IsSUFBTUUsR0FBZSxDQUFFLElBQUssb0RDRFosU0FBTzUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQUFnQmtHLEVBQXdCMUksR0FDdkQsSUFBRXVFLEVBQVUvQixFQUFWK0IsTUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Y4SCxFQUFnQnJNLEVBQVFxTSxhQUFlLEdBQ3ZDQyxFQUFnQnRNLEVBQVFzTSxlQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUIsR0FDekMzSixFQUFnQm5ELEdBQXRCLEVBS00rTSxFQUE4QyxHQXVCcEQsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVN2TCxFQUFTd0wsR0FDWEEsR0FDSDdKLEVBQU8zQixRQUFQLENBRUosQ0FRUyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQXlMLEVBQVV6TSxFQUFrQjlDLEdBQzdCd1AsRUFBWUMsV0FBWXpQLEdBQ3ZCeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGLEVBQUE3TCxLQUFNNFYsRUFBVyxTQUFVOUksQ0FBM0IsRUFDUDJJLEVBQVE1VCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBTSxDQUFFcUgsRUFBUzBNLEVBQXpCLENBQ0YsQ0FLQSxTQUFTOUksSUFDRCxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQTZFLEVBQVlsRSxFQUFNQyxHdEVyREgsQ3NFcURILEVBQ1pvSSxFQUFZNU0sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVE0TSxVQUNwQkMsRUFBU04sRUFBUU8sT0FBaUIsU0FBRUQsRUFBUUUsR0FDekMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQUFqUyxFQUFPK1IsRUFBUUUsRUFBTyxHQUFJaFQsUUFBVWdULEVBQU8sR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBakQsQ0FDVCxFQUFHLEVBRlksRUFJZmhTLEdBQU1pRixDQUFOLEVBQ0FrRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBSzJJLENBQUwsRUFFSzdNLEVBQVFnQixRQUNYd0IsRUFBT3hCLFFBQTZCLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFwQmhCLEVBQVFnQixPQUF4QndCLEVBQ1VpRyxHQUNWekgsRUFBUyxDQUFBLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FULEVBQ0F3QixFQUFPcUksTUFBUHJJLEdBRWNvSyxJQUFBNU0sRUFBUTRNLFdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcEssRUFBT3dLLFFBQTVCLENBRWxCLENBMEJTLFNBQUE5SSxFQUFLK0ksRUFBZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWdCQyxHQUMzQ3JTLEVBQU9rRixFQUFTaU4sQ0FBaEIsRUFDQUMsR0FBUXBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPVCxPQUFPK1MsZUFBZ0JwTixDQUF2QixFQUFrQ2lOLENBQWxDLEVBRVZFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBQSxHQUFZNUksRUFBTUMsR3RFbElKLENzRWtJRixHQUNmaEMsRUFBT08sS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU1wQixFQUFlM0IsQ0FBNUJ3QyxDQUVKLENBRU8sTUFBQSxDQUNMNkssTUE3RkYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dBQ1EsSUFBQUMsRUFBK0IsUUFBdkJ0TixFQUFRdU4sV0FFdEJuVCxFQUFTaVMsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVQsRUFDR21CLEtBQU0sU0FBRUMsRUFBR0MsR0FBTCxPQUFZSixFQUFRLENBQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFJLENBQUNDLEVBQUksQ0FBQ0EsRUFBSSxDQUFDRCxDQUFwQyxDQURULEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VHblYsUUFBUyxTQUFPcUMsR0FDZjhSLEVBQVVKLEVBQWExUixHQUF2QixLQUFtQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyUyxFQUFRLE1BQVEsT0FBbkQsVUFBb0UzUyxFQUFwRSxLQUFBLENBQ0EsQ0FKSiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFNQThSLEVBQVVILEVBQWU3VyxDQUF6QixFQUNPbU8sRUFBQSxDQUNULEVBbUZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzVDLFFBQUFBLEVBQ0E4TCxPQTVCRixTQUFpQmEsR0FDVmhCLFdBQVlsWCxDQUFaLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEyQ3NFLFVBQ3JDNFQsRUFBQTdTLEVBQU9rRixFQUFTc00sQ0FBaEIsRUFBa0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndlIsR0FBTWlGLEVBQVM1RixFQUFTa1MsQ0FBVCxHQUU5RCxFQXlCRXBJLElBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUpLLENBTVQsWVpyR2dCLFNBQVcxQixFQUFnQmtHLEVBQXdCMUksR0E4QjFELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBLENBQ0xpSixRQXZCTyxTQUFTdE4sRUFBY2lTLEVBQW9CaEIsR0FFNUMsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF0RSxFRDdDUyxTQzRDZnNFLEVBQVlBLEdBQWE1TSxFQUFRNE0sWUFDSWdCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FlaEIsSUFBYzdILEdBQU0sRUFBSSxDQUFBLEVBQTVCLEVBRXpDLE9BQUFDLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpQnJKLElBQVVxSixFQUFpQnJKLEdBQVEyTSxJQUN0RDNNLEVBQUswRCxRQUFTLG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkFBcUIsU0FBRXdPLEVBQU9DLEdBQ3ZDMU8sRUFBYzRGLEVBQWlCNkksRUFBTUUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1lBQU4sR0FBdUJ6RixJQUFXdUYsRUFDaEUsT0FBUyxFQUFUQyxFQUFhMU8sRUFBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0TyxPQUFRLENBQXBCLEVBQXdCQyxZQUF4QixFQUF3QzdPLEVBQVkvSSxNQUFPLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFuQixFQUF5QitJLENBQ3JGLENBSEMsQ0FJUCxFQWVFOE8sT0FORixTQUFpQjdWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNmLE9BQU9BLEdEOURRLFFDOERFMkgsRUFBUTRNLFVBQW9CLEVBQUksQ0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDbkQsQ0FFTyxDQUlULFdhRWdCLFNBQVVwSyxFQUFnQmtHLEVBQXdCMUksR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hFLElBdUJJd0ssRUFLQTJELEVBS0FDLEVBakNpQjdMLEVBQUFBLEVBQWdCQyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBN0JJLElBQUFBLEdBQUk5TCxJQUFBQSxLQUNKNlIsRUFBU25HLEVBQVRtRyxLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUcsRUFBUzlJLEVBQVQ4SSxLQUNGdUYsRUFBOEIsR0FLOUJDLEVBQXdCLEdBSzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkMsRUFBd0IsR0FLeEJDLEVBQXlCLEdBb0I3QixTQUFTbkIsSUEyREM3QyxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lFLEVBQVdqSSxJQUFBQSxFQUFYLEVBQ0EySCxFQUFBalUsR0FBT3NRLEVBQVAsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQW1CL0QsRUFBbkIsRUFFQTdJLEdBQUE0TSxHQUFTMkQsRUFBTSxrQ0FBZixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUnhWLEVBQU0yVixFQUFRL1UsRUFBVTRVLEVBQUEsSUFBV3pILEdBQVgsU0FBaUNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFqQyxHQUFBLENBQXhCLEVBRVFwTSxFQUFBLENBQ05tVSxPQUFZN0gsR0FDWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrQyxXQUFZOUIsR0FDWjBILEtBQVk1SCxHQUNaNkgsS0FBWTVILEdBQ1o2SCxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWTFILEdBQ1oySCxPQUFZMUgsRUFOTixFQU9MLFNBQUVsTCxFQUFXdkIsR0FDSjBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBMVQsR0FBUThULEVBQU0sSUFBS3ZTLENBQUwsQ0FDeEIsQ0FUTSxFQVdSdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEdBQVF5VCxFQUFVLENBQUUxRixLQUFBQSxFQUFNNkIsTUFBQUEsRUFBTzJELEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxFQUFNRyxPQUFBQSxDQUFyQixDQUFsQixFQVNBLElBQU1oTCxFQUFPcUYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUtyRixJckI1TGYsU0FBbUJ5TCxHQUNqQixNQUFBLEdBQUlBLEVBQVd6UCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBT0MsR0FBS3dQLElBQWF4UCxHQUFLd1AsSUFBWSxHQUFNLENBQXpDLENBQy9CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncUIwTHNDclIsRUFBVixFQUNsQnNSLEVBQU9oUCxFQUFRZ1AsS0FFckJyRyxFQUFLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JGLEdBQU1BLEVBQ0xrSCxFQUFBbEgsR0FBS2tILEVBQU1sSCxJQUFVQSxFQUFyQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FDRDZLLEVBQUE3SyxHQUFNNkssRUFBSzdLLElBQVVBLEVBQXJCLFFBRUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUV0SCxFQUFjMk0sRUFBTXBELElBQTJCLFlBQWpCb0QsRUFBS3NHLFNBQXlCRCxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDbkQ1VCxFQUFBdU4sRUFBTXBELEVBQU15SixDQUFaLEVBR0Y1VCxFQUFBdU4sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU0xQyxHQUFzQjZDLEVBQUtvRyxRQUFqQyxFQUNBOVQsRUFBQStTLEVBQU01SSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTSxjQUFaLEVBOUZQM0IsRUFBQSxDQUNULENBd0JBLFNBQVM1QyxFQUFTd0wsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ1YsSUFBQXRSLEVBQVFtTCxHQUFlOEksT0FBUSxPQUF2QixFQUVkalosRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvWSxDQUFQLEVBQ0FoUixFQUFhcUwsRUFBTTRGLENBQW5CLEVBQ0FqUixFQUFha04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU9nRSxDQUFwQixFQUNBeFQsRUFBaUIsQ0FBRXdQLEVBQU8yRCxHQUFRalQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQWxDLEVBQ0FGLEVBQWlCMk4sRUFBTTZELEVBQWF0UixFQUFRLENBQUUsUUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrSyxHQUF2RCxDQUNGLENBS0EsU0FBU3JDLElBQ1B0RyxFQUFhcUwsRUFBTTRGLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFuQixFQUNBalIsRUFBYWtOLEVBQU9nRSxDQUFwQixFQUVBRCxFQUFlYSxFQUFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdJLElBQzNCaUksRUFBZVksRUFBWTVJLElBRTNCck4sRUFBVXdQLEVBQU00RixDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaEIsRUFDQXBWLEVBQVVxUixFQUFPZ0UsQ0FBakIsRUFFY3BULEVBQUF1TixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTTlDLEdBQVk3RixFQUFRb0osS0FBMUIsRUFDQWhPLEVBQUF1TixFQUFNN0MsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lCOUYsRUFBUXFQLFVBQS9CLENBQ2hCLENBb0RBLFNBQVNaLEVBQU16VSxHQUNQbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQU1vRSxHQUFvQnlMLEVBQU0zTyxDQUFOLEVBQ2hDLE9BQU9sQixHQ3JOSywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU29TLEVBQW1CbFIsR0FDckMsR0FBQXJDLEVBQVl1VCxFQUFLb0UsT0FBakIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0ksT0FBQXBFLEVBQUtvRSxRQUFTdFYsQ0FBZCxFQUtELElBRlIsSUFBSWxCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEwQm9TLEVBRXRCcFMsR0FBd0IsSUFBakJBLEVBQUl5VyxVQUNaeFYsQ0FBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVNqQixFQUFLa0IsQ0FBZCxHQUlMbEIsRUFBTUEsRUFBSTBXLGNBR0wsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ExVyxDQUNULEVEcU0yQkEsRUFBVXlOLElBQUFBLEVBQVYsSUFBOEJvQyxFQUFPNycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQLEVBQU0sS0FBQSxDQUNwRSxDQVNBLFNBQVNzVyxFQUFZbEMsR0FDWixNQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNEQSxFQUFXbE4sS0FBQUEsRUFBUTFJLEtBQ25CNFYsRUFGQyxLQUVVbE4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1E0TSxVQUN2QjVNLEVBQVF5UCxNQUFZdkMsRUFIZixjQUlMbE4sRUFBUTRJLGNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvQnNFLEVBSnZCLFFBS0xBLElBQVMzRyxJQUFjZSxHQUUzQixDQUVBLE9BQU8xTSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBUXlULEVBQVUsQ0FDdkJoQixNQUFBQSxFQUNBeEMsTUF4SEYsV0FDRWpJLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJbEIsRUFBZVYsQ0FBbkIsRUFDQTRCLEVBQUlsQixFQUFlMkwsQ0FBbkIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6SyxFQUFJakIsRUFBZWlDLENBQW5CLEVBRU05TSxFQUFBMEUsU0FBY3VNLEdBQWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxXQUFBLFNBQUs1UCxHQUN2RGlXLEVBQXdCLFlBQVhqVyxFQUFFYixJQUNkLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLENBQUVrVSxRQUFTLENBQUEsQ0FBWCxDQUZHLEVBSUExVSxFQUFBNlIsRUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVUFBVyxXQUNyQjlQLEVBQWE4UCxFQUFNZixHQUFnQixDQUFDLENBQUV3RyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEMsQ0FDQSxDQUZJLENBR1IsRUE2R0VwTixRQUFBQSxDQUh1QixFQUszQixTRTdLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dCLFNBQVF3QixFQUFnQmtHLEVBQXdCMUksR0FDOUQsSUFBMkJ1QyxFQUFBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JDLEdBQW5DSSxJQUFBQSxHQUFJRyxJQUFBQSxLQUFNak0sSUFBQUEsS0FDVncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWCxLQUFpQjVGLEVBQVc2QixVQUE1QitELE9BQVFILElBQUFBLEtBS1Z2RSxFQUEyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsR0FjakMsU0FBUzhGLElBQ0FwQixFQUFBaFcsUUFBUyxTQUFFa1EsRUFBT0YsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQXVCbUUsRUFBQWpFLEVBQU9GLEVBQU8sQ0FBRyxDQUFqQixDQUFxQixDQUE5RCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDVCxDQUtBLFNBQVN0SCxJQUNQMUksRUFBUyxTQUFBK1AsR0FBV0EsRUFBTXJIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxRQUFOcUgsQ0FBa0IsQ0FBdEMsRUFDQW5TLEVBQU8wVCxDQUFQLENBQ0YsQ0FpQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLFNBQUE2QyxFQUFVakUsRUFBb0JGLEVBQWVDLEdBQzlDL04sRUFBUzZOLEdBQU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN0YsRUFBUThGLEVBQU9DLEVBQVlDLENBQWxDLEVBQ2ZoTyxFQUFPcVEsTUFBUCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQWpCLEVBQU9qUixLQUFNNkIsQ0FBYm9QLEVBQ0FBLEVBQU80RCxLQUFNLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbUMsRUFBUUMsR0FBVixPQUFzQkQsRUFBT3JILE1BQVFzSCxFQUFPdEgsS0FBNUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQWJzQixDQUNGLENBU0EsU0FBU2lHLEVBQUtDLEdBQ1osT0FBT0EsRUFBZ0I3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRUFBUSxTQUFBb08sR0FBQSxNQUFTLENBQUVBLEVBQU1nQixPQUFqQixDQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUE2Qk8sQ0FDOUQsQ0FtRVMsU0FBQXRSLEVBQVNFLEVBQTBCc1gsR0FDckNELEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQyxDQUFBLEVBQWdCeFgsUUFBU0UsQ0FBekIsQ0FDUCxDQVVBLFNBQVN5QixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUThWLEdBQ2YsT0FBT25HLEVBQU8zUCxPQUFRdEMsRUFBWW9ZLEdBQzlCQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQSxTQUFBMUgsR0FBQSxPQUFTelEsRUFBVW1ZLEdBQ2pCaFcsR0FBU3NPLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxNQUFPdUgsR0FDdEJ0WCxFQUFVTCxFQUFTMlgsR0FBVzFILEVBQU1DLEtBQXBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUZGLENBRkdzQixDQU1ULENBd0RPLE1BQUEsQ0FDTGlCLE1Bbk1GLFdBQ082RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQSxFQUNMOU0sRUFBSWxCLEVBQWVWLENBQW5CLEVBQ0E0QixFQUFJbEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWVnTyxDQUFuQixDQUNGLEVBZ01FMU8sUUFBQUEsRUFDQTRDLE9BN0tGLFdBQ0V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0wsRUFBUyxTQUFBK1AsR0FBV0EsRUFBTXpFLE9BQU55RSxDQUFpQixDQUFyQyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDRixFQTRLRW9FLFNBQUFBLEVBQ0FvRCxJQUFBQSxFQUNBRyxNQTNJRixTQUFnQkMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ1IsSUFBRUMsRUFBZXhILEVBQWZ3SCxXQUNGNUgsRUFBUTRILEVBQVdDLFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTRixDQUFwQixFQUNSL1IsRUFBUWdTLEVBQVdFLFdBQWEsRUFBSXBRLEVBQVFxUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFDM0MsT0FBQXBXLEVBQVEsU0FBQW9PLEdBQUEsT0FBUzNKLEdBQVMySixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUMsTUFBT0EsRUFBT0EsRUFBUXBLLEVBQU0sQ0FBbENtSyxDQUFsQixDQUFSLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NULEVBdUlFd0IsTUE5SEYsU0FBZ0J2QixHQUNQLE9BQUFyTyxFQUFRcU8sQ0FBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBaUIsRUFDMUIsRUE2SEV0UCxJQXJITyxTQUFLSixFQUFtRDBQLEdBQy9EZ0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWExWCxFQUFPLFNBQVM0UCxHQUt0QixJQWtFZTFQLEVBQWNpSCxFQUU5QjNKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQXBFQzBCLEVBSEgwUSxFQURHNVEsRUFBVTRRLENBQVYsRUFDSy9MLEdBQVcrTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FHREEsQ0FBZixLQUNHN08sRUFBTTJVLEVBQVFoRyxJQUNkN08sRUFBUStPLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPN08sR0FBUU4sRUFBUThVLEVBQU0zRixDQUFkLEVBQ25CclAsRUFBQXFQLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPeEksRUFBUWpILFFBQVF5UCxLQUF2QixFQStEUTFQLEVBOURIMFAsRUE4RGlCeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJLEVBOURWbkosRUFBT21NLEVBQU1uQixFQUFiLEVBK0RwQjJPLEVBQVNuVCxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVXRFLEVBQUssS0FBTCxHQUNuQjFDLEVBQVdtYSxFQUFYbmEsUUFHSm1hLEVBQU9qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ksUUFBUyxTQUFPa1ksR0FDZjFaLEVBQUEwWixFQUFLLGFBQWMsV0FDZHBhLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxHQUNFMkosRUFBQSxDQUVYLENBSkksQ0FLTixDQU5GLEVBUVNBLEVBQUEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInekVULENBWEYsRUFhQWdELEVBQU1yQixDQUFOLENBQ0YsRUFzR0VuRixPQTlGRixTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBaUJ3VCxHQUNIVSxFQUFBeFcsRUFBUThWLENBQVIsRUFBa0JyRyxJQUFLLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBckIsR0FBQSxPQUFTQSxFQUFNRyxLQUFmLENBQXZCLENBQUEsRUFDWnpGLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckIsQ0FBTixDQUNGLEVBNEZFcEosUUFDQUEsRUFDQTJCLE9BQUFBLEVBQ0F5QixNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EzRE8sU0FBT0MsRUFBY3RELEVBQXdCMFMsR0FDcER6UyxFQUFTLFNBQUErUCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV0EsRUFBTTNNLE1BQU9DLEVBQU10RCxFQUFPMFMsQ0FBMUIxQyxDQUEyQyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL0QsQ0FDRixFQTBERXFJLFVBMUJGLFNBQW9CWixHQUNYLE9BQUFBLEVBQWdCeEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWdCMUUsR0FBVHhULE1BQ2hDLEVBeUJFdWEsU0FsQkYsV0FDUy9HLE9BQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPeFQsT0FBUzRKLEVBQVFxUSxPQUNqQyxDQUVPLENBZ0JULFNDclFnQixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUTdOLEVBQWdCa0csRUFBd0IxSSxHQUM5RCxJQVNJNFEsRUFLQUMsRUFLQUMsRUFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JJbE8sS0FBbUJMLEVBQWdCQyxJQUFuQ0ksR0FBSTlMLElBQUFBLEtBQU1pTSxJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsS0FDVjZHLEVBQVdsQixFQUFYa0IsT0FDQVgsRUFBWVAsRUFBV1EsVUFBdkInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCxRQUNBTixLQUFzQkQsRUFBVzZCLFVBQWpDNUIsS0FBTTZCLElBQUFBLE1BQU8yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsSUFBQUEsS0FDYnRFLEVBQThCRCxFQUE5QkMsTUFBY2tILEVBQWdCbkgsRUFBdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCbE8sTUErQmYsU0FBU2dVLElBQ1BrQixFQUFXNVEsRUFBUTRNLFlBQWM3SCxHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakNySixFQUFPaU4sRUFBTSxXQUFZbEwsRUFBTXVDLEVBQVFpRixLQUFSLENBQS9CJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNBdkosRUFBTzhPLEVBQU92QixFQUFTLGFBQUEsRUFBaUIrSCxFQUFZLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLENBQVosQ0FBeEMsRUFDQXRWLEVBQU84TyxFQUFPdkIsRUFBUyxjQUFBLEVBQWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQitILEVBQVksQ0FBQSxDQUFaLENBQXpDLEVBRUFDLEVBQVEsQ0FBQSxDQUFSLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGLENBUUEsU0FBU0EsRUFBUUMsR0FDVCxJQUFBQyxFQUFVL1UsRUFBTXVNLEdBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqQnVJLENBQUFBLEdBQVNMLEVBQVM1TCxRQUFVa00sRUFBUWxNLE9BQVM0TCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU08sU0FBV0QsRUFBUUMsU0FDckUxVixFQUFBOE8sRUFBTyxTQXFDbEIsV0FDRSxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSTRHLEVBQVMsR0FFUlIsSUFFSGhULEdBREF3VCxFQUFTQyxFQUFULEVBQ2dCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtQ0FBaEIsRUFDQUQsRUFBa0JBLFFBQUFBLEVBQWNKLE1BQUFBLEVBQVksQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBWixFQUFoQyxNQUEyREEsRUFBWSxDQUFBLEdBQXZFLEtBR0ssT0FBQUksQ0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1QsR0EvQ1csRUFFUEwsRUFBYTlILEVBQVMsZUFBaUJ4TCxFQUFNdUMsRUFBUXNSLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFSLENBQTdDLEVBQ2FQLEVBQUEsUUE2RFIvUSxFQUFRdVIsVUFDWCxLQUNBOVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU11QyxFQUFRd1IsVUFBZCxJQUFnQ1osRUFBVyxHQUFLYSxJQS9EckMsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FWLEVBQUEsU0F1RVJ0VCxFQUFNdUMsRUFBUTBSLFdBQWQsSUFDQWQsRUFBYTVRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRMlIsV0FBYSxLQUFPRixJQUFtQkosS0F4RXhCLENBQUEsQ0FBNUIsRUFFRlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUFNLEVBQ1hwTyxFQUFNbEIsRUFBTixFQUVLaVAsS0FBZUEsRUFBV2MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsS0FDaEIvWSxFQUFBOFAsRUFBTWQsR0FBZ0JpSixDQUF0QixFQUNiL04sRXRCdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGZ0MsV3NCdUZWK04sQ0FBdEIsR0FHTixDQVVBLFNBQVNFLEVBQVl2VyxHQUNiLEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFFb1gsRUFBWTdSLEVBQVo2UixRQUNGbFcsRUFBT3NOLEVBQVN4TyxFQUFRLFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FVLE1BQTNCLEVBQ04sT0FBQW9YLEdBQ0ZwVSxFQUFNb1UsRUFBU2xXLEtBQVluRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBVXFhLEdBQVksRUFBSUEsS0FDckQsS0FDUCxDQXdCQSxTQUFTUixJQUNBLE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBNVQsRUFBTXVDLEVBQVFvUixRQUFVaFYsRUFBTStSLENBQU4sRUFBYWxKLE1BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRakYsRUFBUThSLFdBQXJELENBQ1QsQ0E0QkEsU0FBU0wsSUFDRCxJQUFBSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTTdULEVBQU11QyxFQUFRc1IsR0FBUixFQUNYLE1BQUEsY0FBY0EsU0FBY0EsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTVCLE1BQXlDdFIsRUFBUXFRLFNBQVcsSUFBTWlCLFNBQWNBLEdBQWhGLEdBQ1QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBT0EsU0FBU1MsSUFDUCxPQUFPM1YsRUFBTStSLENBQUEsRUFBUWxGLEVBQVMsTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVQsRUFDdkIsQ0FVUyxTQUFBK0ksRUFBVzFKLEVBQWdCMkosR0FDNUI1SixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUXdCLEVBQU92QixHQUFTLENBQVQsRUFDZCxPQUFBRCxFQUNIak0sRUFBTWlNLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FNRyxLQUFOLEVBQWVTLEVBQVMsT0FBQSxJQUFnQmdKLEVBQWEsRUFBSUMsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDL0QsQ0FDTixDQVdTLFNBQUFDLEVBQVc3SixFQUFlMkosR0FDM0IsSUFJRS8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUpGbUQsRUFBUXdCLEVBQU92QixHQUVyQixPQUFLRCxHQUNHNU4sRUFBUTJCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNaU0sRUFBTUcsS0FBTixFQUFlUyxFQUFTLFVBQ3RDL0QsRUFBUTlJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNK1IsQ0FBTixFQUFjbEYsRUFBUyxTQUM5QjVLLEVBQUs1RCxFQUFReUssSUFBVysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUFhLEVBQUlDLE1BRzNDLENBQ1QsQ0FVQSxTQUFTRSxFQUFZSCxHQUNaLE9BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBRSxFQUFXM1AsRUFBT3BNLE9BQVMsQ0FBM0IsRUFBaUMrYixFQUFXLEdBQU1ILCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFXLEVBQUdDLENBQUgsQ0FDdEUsQ0FPQSxTQUFTQyxJQUNELElBQUE3SixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUXdCLEVBQU8sR0FDZCxPQUFBeEIsR0FBU2dLLFdBQVkzVyxFQUFPMk0sRUFBTUcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01BQU9TLEVBQVMsYUFBQSxDQUF0QixJQUE2QyxDQUNsRixDQW9CQSxTQUFTMkksSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1AsT0FBT3BQLEVBQU9nQyxHQUFJNEQsRUFBWDVGLEdBQXFCNFAsRUFBWSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxDQUFBLEVBQVNMLEVBQWpELENBQ0YsQ0FFTyxNQUFBLENBQ0xsSCxNQWxORixXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MxQ2MsSUFDZGhVLEVBQ0F5YixFQUVNclAsRUR1Q0N5TSxFQUFBLEVBQ0w1WSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTW1CLE9BQVEsZUMzQ2hCcEIsRUQyQ3lDRCxFQUFPbU0sRUFBTW5CLElDeENoRHEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFXRCxHQUFpQnNQLEdBQVksRUFBR3piLEVBQU0sS0FBTSxDQUEzQixFQUUzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsV0FDSW9NLEVBQUFtQixTQUFBLEdBQWNuQixFQUFTMU0sTUFBdkIsQ0FDWCxFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvQ0UsRUFDQXFNLEVBQUksQ0FBRWpCLEVBQWVELEdBQWlCZ08sQ0FBdEMsRUFDQTknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUFJaEIsR0FBY3FQLENBQWxCLENBQ0YsRUE4TUVBLE9BQUFBLEVBQ0FjLFNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUNBQyxVQUFBQSxFQUNBSSxXQUFBQSxFQUNBRCxVQUFBQSxFQUNBSSxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyQkYsU0FBcUI5WCxHQUNaLE9BQUE0WCxXQUFZM1csRUFBTzhPLEVBQU92QixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxXQUFXeE8sRUFBUSxRQUFVLFFBQTdDLENBQW5CLEdBQW1GLENBQzVGLEVBb0JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21YLFdBQUFBLENBUkssQ0FVVCxTRXhQZ0IsU0FBUXBQLEVBQWdCa0csRUFBd0IxSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDeEQsSUFhRndTLEVBYkV2UyxFQUFRc0MsRUFBZ0JDLEdBQ3RCSSxFQUFPM0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVAyQyxHQUNBMkgsRUFBcUI3QixFQUFyQjZCLFNBQVVYLEVBQVdsQixFQUFYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tCLE9BQ1ZYLEVBQVlQLEVBQVdRLFVBQXZCRCxRQUtGd0osRUFBd0IsR0FXOUIsUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVM1SCxJQUlBLEdBSFBqSSxFQUFJbEIsRUFBZWdSLENBQW5CLEVBQ0E5UCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSSxDQUFFakIsRUFBZUMsSUFBZ0IrUSxDQUFyQyxFQUVPSCxFQUFhSSxJQUF3QixDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDMUNDLElBd0NlbFAsRUF4Q0w2TyxFQXlDTmxFLEVBQVMxRSxFQUFPaUcsSUFBUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBYXhaLE1BQTVCLEVBQ1FELEVBQVdrWSxFQUFYbFksT0FFUixHQUFLQSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxDQUNKLEtBQUFrWSxFQUFPbFksT0FBU3VOLEdBQ3RCaEwsRUFBTTJWLEVBQVFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFkLEVBR0YzVixFQUFNMlYsRUFBT2pZLE1BQU8sQ0FBQ3NOLENBQWYsRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCMkssRUFBT2pZLE1BQU8sRUFBR3NOLENBQWpCLENBQTlCLEVBQXlEckwsUUFBUywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBRStQLEVBQU9DLEdBQ3pFLElBQU13SyxFQUFTeEssRUFBUTNFLEVBQ2pCb1AsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBZ0JILFNBQVdqYSxFQUFrQndQLEdBQzlCeUssRUFBUWphLEVBQUlrYSxVQUFXLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLENBQWYsRUFHUCxPQUZHN1osRUFBQTRaLEVBQU8vUyxFQUFRakgsUUFBUWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSxLQUF2QixFQUNWQSxFQUFNelAsR0FBU2QsRUFBT21HLEtBQUtyRixHQUEzQixTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBd0NoRSxHQUFLZ0osRUFBUSxDQUFiLEVBQ2pDeUssQ0FDVCxFQXJCZ0MxSyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTUcsTUFBT0YsQ0FBeEIsRUFDTndLLEVBQUFyWixFQUFRc1osRUFBT3pFLEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQUk5RixLQUEzQixFQUFxQ25QLEVBQVFrUixFQUFTNEQsS0FBTTRFLENBQXZCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUM5Q3BhLEVBQU04WixFQUFRTSxDQUFkLEVBQ09uSixFQUFBNkMsU0FBVXNHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPekssRUFBUTNFLEdBQVVtUCxFQUFTLEVBQUkxYyxHQUFVaVMsRUFBTUMsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWhFLENBQ1AsQ0FORixDQU9GLENBdkRFSSxFQUFXdUssT0FBT2hDLE9BQVEsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsQ0FBMUJ2SSxDQUNGLENBQ0YsQ0FLQSxTQUFTZ0ssSUFDQzFSLEVBQUEsRUFDRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2SixFQUFBLENBQ1IsQ0FLQSxTQUFTN0osSUFDUHpFLEVBQVFrVyxDQUFSLEVBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmMsRUFBT3VjLENBQVAsRUFDQXhTLEVBQU1lLFFBQU4sQ0FDRixDQUtBLFNBQVMyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1IsSUFDUCxJQUFNaFAsRUFBUWlQLEVBQWQsRUFFS0osSUFBZTdPLElBQ2I2TyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBYTdPLEdBQVMsQ0FBRUEsSUFDM0IxRCxFQUFNOEMsS0FBTXJCLENBQVosQ0FHTiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0ErQ0EsU0FBU2tSLElBQ0gsSUFLSU0sRUFMRlQsRUFBV3pTLEVBQVh5UyxPQVVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsT0FSQWpRLEVBQU9nQyxHQUFJMkQsRUFBWDNGLEVBRUszSyxHQUFhNGEsQ0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLElBR3ZCQSxHQUZNUyxFQUFhbFQsRUFBU2lKLEVBQVMsWUFBQSxJQUFvQlAsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVd1SyxPQUFPakIsVUFBVyxDQUE3QnRKLElBQ3pCdEssR0FBTWhDLEVBQU1tTyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU0MsS0FBVCxFQUFrQnZCLEVBQVMsT0FBVCxHQUF1QmlLLENBQXJELEdBQ1BsVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBU2lKLEVBQVMsV0FBVCxJQUE0QnpHLEVBQU9wTSxRQTlIakQsRUE4SDZENEonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFxUSxTQUp6Rm9DLEVBQVMsRUFPSkEsQ0FDVCxDQUVPLE1BQUEsQ0FDTDVIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFBQSxFQUNBN0osUUFBQUEsQ0FGSyxDQUlULE9DNUdnQixTQUFNd0IsRUFBZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCa0csRUFBd0IxSSxHQUM1RCxJQVNJbVQsRUFUaUI1USxFQUFBQSxFQUFnQkMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTdCSSxJQUFBQSxHQUFJRyxJQUFBQSxLQUNKbUIsRUFBUTFCLEVBQU8rQixNQUFmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0wsSUFDQThOLEtBQTJEdEosRUFBV3VLLFFBQXRFakIsVUFBV08sSUFBQUEsV0FBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLElBQUFBLFVBQVdKLElBQUFBLFNBQVVLLElBQUFBLFdBQzVDbkosS0FBb0JQLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFXUSxXQUEvQkQsUUFBU2lGLElBQUFBLE9BQ1RDLEtBQWdCekYsRUFBVzZCLFVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EzQjRELEtBQU0zRCxJQUFBQSxNQW9CZCxTQUFTNEksSUFDQTFLLEVBQVd3SCxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV21ELFdBQzNCM0ssRUFBVzRLLE9BQU94UCxPQUFsQjRFLEVBQ0E2SyxFQUFNL1EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU84RixLQUFiLEVBQ0FJLEVBQVdrQixPQUFPaEcsT0FBbEI4RSxFQUVKLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJytCQSxTQUFTNkssRUFBTWpMLEdBQ0ZrTCxFQUFBQyxFQUFZbkwsRUFBTyxDQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFuQixDQUFBLENBQ2IsQ0FRUyxTQUFBa0wsRUFBV0UsRUFBa0JDLEdBQzdCblInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU9nQyxHQUFJNEQsRUFBWDVGLElBQ0NvUixFQUFjRCxFQUFjRCxFQVd0QyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZUEsR0FDUmxSLENBQUFBLElBQ0c4RixFQUNBdUwsRUFGSHJSLEVBQU9nQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSTJELEVBQVgzRixJQUNHOEYsRUFBYzZILEVBQVN1RCxHQUN2QkcsRUFBY3ZMLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRSSxFQUFXd0gsV0FBVzRELE9BQWxELEdBQ29CeEwsRUFBUSxHQUVSdUwsS0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BILEVBQUFLLEVBQU9MLEVBQVVHLENBQWpCLEdBRWYsQ0FFTyxPQUFBSCxDQUNULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQXZCdURBLENBQU4sRUFDN0NoWSxFQUFPeVMsRUFBTSxZQUFiLFlBQXVDbEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsR0FBQSxFQUFXMkssSUFBQUEsRUFBM0QsS0FBQSxFQUNhRixJQUFBRSxHQUFlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdRLEVBQU1ULElBRXRDLENBNkJTLFNBQUF5UixFQUFPTCxFQUFrQk0sR0FDMUIsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFDLEVBQVNQLEVBQVdRLEVBQVVGLENBQVYsRUFDcEJHLEVBQVMvQixFQUFmLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUVPLE9BREtzQixHQUFBeEYsRUFBUWlHLEdBQVMvVixHQUFNQyxFQUFLNFYsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFBV0UsQ0FBdEIsR0FBZ0MsRUFBakQsR0FBMkRILEVBQVksRUFBSSxDQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUV6RixDQUtBLFNBQVNsUSxJQUNJMFAsRUFBQVksRUFBQSxFQUFlLENBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWYsRUFDWGpCLEVBQVdyUCxPQUFYLENBQ0YsQ0FTQSxTQUFTcU0sRUFBU3VELEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01oQixJQUxNLElBQUE5SixFQUFTbEIsRUFBV2tCLE9BQU9pRyxJQUEzQixFQUVGdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidILEVBQWMsRUFDZCtMLEVBQWNDLEVBQUFBLEVBRVJDLEVBQUksRUFBR0EsRUFBSTMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSyxFQUFPeFQsT0FBUW1lLENBQU0sR0FBQSxDQUNsQyxJQUFBaE0sRUFBYXFCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRMkssR0FBSWpNLE1BQ3pCNkMsRUFBYTlNLEVBQUtvVixFQUFZbEwsRUFBWSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUF4QixFQUFpQ21MLENBQWpDLEVBRXhCLEdBQUt2SSxFQUFBQSxHQUFZa0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBSWYsTUFIY0EsRUFBQWxKLEVBQ0E3QyxFQUFBQyxDQUlsQixDQUVPLE9BQUFEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUNULENBVVMsU0FBQW1MLEVBQVluTCxFQUFla00sR0FDNUIsSUFBQWQsRUFBVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4RixFQUFRaUUsRUFBVzdKLEVBQVEsQ0FBUixHQWtDckJBLEVBbEMyQ0EsRUFvQ3onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxZQURUeE0sRUFBVWtFLEVBQVZsRSxRQUNzQmlXLEVBQWFDLEVBQUFBLEVBQVcxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBTyxDQUFBLENBQVAsR0FBa0IsRUFBSSxDQUFDeE0sRUFBUWtXLEVBQVcxSicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBWCxHQUFzQixJQW5DcEdrTSxPQUFBQSxHQW9CTWQsRUFwQldBLEVBc0JYQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFEUjFULEVBQVF5VSxXQUFhalMsRUFBT2dDLEdBQUkwRCxFQUFYMUYsRUFDYnpEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPMlUsRUFBVSxFQUFHeEYsRUFBUWtFLEVBQVksQ0FBQSxHQUFTTCxFQUFTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUF0QyxDQUFwQixFQUdOMkIsR0F6QjhCQSxDQUN2QyxDQU9BLFNBQVNVLElBQ0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQUFsUCxFQUFPK0QsRUFBUyxRQUNmLE9BQUE3TSxFQUFNK1IsQ0FBTixFQUFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pKLEdBQVM5SSxFQUFNb08sQ0FBTixFQUFldEYsR0FBU2dKLEVBQVFxRSxFQUFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLENBQUEsQ0FBcEIsQ0FDeEQsQ0FrQ0EsU0FBUzJCLEVBQVVoVyxHQUNWLE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBdVYsRUFBWXZWLEVBQU13SyxFQUFXd0gsV0FBVzRELE9BQXRCcEwsRUFBaUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUcsQ0FBQyxDQUFFMUksRUFBUXlVLFNBQWpFLENBQ1QsQ0ErQk8sTUFBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTDVKLE1BaE9GLFdBQ0VzSSxFQUFhekssRUFBV3lLLFdBQ3hCdlEsRUFBSSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTFCLEVBQWVXLEdBQWVGLEVBQWVELEdBQWlCMFIsQ0FBcEUsQ0FDRixFQThORXNCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxLQXZNRixTQUFlQyxFQUFjck0sRUFBZXFHLEVBQWM1TyxHQStLMUQsSUFBbUJpVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDWFksRUEvS0RELElBQVNyTSxJQThLRzBMLEVBOUt1QnJGLEVBQVBnRyxFQSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSzNCQyxFQUFVMUcsRUFBUTZGLEVBQU9LLEVBQVAsRUFBc0JKLENBQXRCLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ2pCQSxFQUNRLEdBQVhZLEVBQ0FBLEdBQVd6RyxFQUFNbEYsRUFBUyxhQUFULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUE2QjdNLEVBQU1vTyxDQUFBLEVBQVN2QixFQUFTLE9BQVQsTUFqTHhEbkYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDUDBQLEVBQVdPLEVBQU9LLElBQXNCekYsRUFBUGdHLEdBQWUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBaEQsR0FHRnpRLEVBQUt4TyxDQUFMLEVBQ01xTixFQUFBNUIsRUFBWW1ILEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcUcsRUFBTWdHLENBQXpCLEVBRUt4QixFQUFBNWMsTUFBTytSLEVBQU8sV0FDdkInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEUsRTdFdkZjLEM2RXVGZCxFQUNNbkIsRUFBQTNCLEdBQWFrSCxFQUFPcUcsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01nRyxDQUExQixFQUNONVUsR0FBWUEsRUFBWixDQUNBLENBSlMsQ0FLYixFQTBMRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3VCxLQUFBQSxFQUNBQyxVQUFBQSxFQUNBTyxNQUFBQSxFQUNBalEsT0FBQUEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FxTSxRQUFBQSxFQUNBc0QsV0FBQUEsRUFDQVcsWUFBQUEsRUFDQUYsU0FBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0FXLGNBbEJPLFNBQWUzVyxFQUEyQndWLEdBQ2pEQSxFQUFXN2IsR0FBYTZiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLEVBQWFVLEVBQTFCLEVBQTBDVixFQUMvQyxJQUFBb0IsRUFBc0IsQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBUjVXLEdBQWdCZ1EsRUFBUXdGLENBQVIsRUFBcUJ4RixFQUFRZ0csRUFBVSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxDQUFBLENBQWxCLEVBQ25ETCxFQUFzQixDQUFBLElBQVIzVixHQUFpQmdRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRd0YsQ0FBUixFQUFxQnhGLEVBQVFnRyxFQUFVLENBQUEsQ0FBQSxDQUFsQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDMUQsT0FBT1ksR0FBZWpCLENBQ3hCLEVBY0VULFdBQUFBLENBWkssQ0FjVCxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsUWdCLFNBQVk1USxFQUFnQmtHLEVBQXdCMUksR0FDbEUsSUFrQkkrVSxFQVVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFLQUMsRUFLQTVFLEVBdENpQjlOLEVBQUFBLEVBQWdCQyxHQUE3QkksSUFBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQUlHLElBQUFBLEtBQ0ptUyxFQUFTeE0sRUFBVHdNLEtBQ0FkLEVBQXNDYyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdENkLFlBQWFGLEVBQXlCZ0IsRUFBekJoQixTQUFVVCxFQUFleUIsRUFBZnpCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXQUN2QjlDLEtBQXdCakksRUFBV2tCLFFBQW5DK0csU0FBVUQsSUFBQUEsVUFDVnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxFQUFZblYsRUFBWm1WLFFBQ0ZDLEVBQVU1UyxFQUFPZ0MsR0FBSTJELEVBQVgzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUFDVjZTLEVBQVU3UyxFQUFPZ0MsR0FBSTBELEVBQVgxRixFQUNWOFMsRUFBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxZSxFQUFPMmUsRUFBYSxDQUFBLENBQWIsRUFDakJDLEVBQVU1ZSxFQUFPMmUsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWEsQ0FBQSxDQUFiLEVBS25CRSxFQUFZelYsRUFBUXpKLE9BQVMsRUFVN0JtZixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBWUQsRUErQmhCLFNBQVMvRixJQUNQc0YsRUFBYXRFLEVBQVcsQ0FBQSxHQUN4QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1RSxFQUFhalYsRUFBUWlWLFFBQ3JCNUUsRUFBYXJRLEVBQVFxUSxRQUNyQjBFLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFhakIsRUFBYixFQUVBLElBQU14TCxFQUFRdkosRUFBTzBXLEVBQVcsRUFBR04sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVVKLEVBQVdDLEVBQWEsQ0FBaEQsRUFFaEIxTSxJQUFVbU4sSUFDREEsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduTixFQUNaNE0sRUFBSzlCLFdBQUwsRUFFSixDQU1BLFNBQVN1QyxJQUNGWixJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWpCLEtBQ2hCL1EsRTFCckZpQyxJMEJxRmpDLENBRUosQ0E0RVMsU0FBQXdTLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FhNUcsRUFBZWlGLEdBQ25DLElBQU1qVixFQUFTc1csSUFBYTdFLEVBQWEsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBSUMsR0FDdkNzRSxFQUFTaUIsRUFBa0JILEVBQVk5VyxHQUFXZ1EsRUFBTywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBSyxFQUFBLEdBQUs4RyxFQUFXLEVBQUlSLEdBQVc3RSxFQUFmLEVBQW5ELEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0U1QixNQUFTLEtBQVR1RSxHQUFlVSxHQUNiLENBQUUvVyxHQUFvQjhWLElBQWVGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVLENBQUV2RixHQUFRLEdBQ3JEQSxFQUFPLEVBQUlvRyxFQUlmbkIsRUFBY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU9rQixFQUFNbEIsQ0FBTixDQUM5QixDQWdCUyxTQUFBaUIsRUFBa0JqQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBY3pKLEVBQWM0SyxHQUNoRCxJQUNHeE4sRUErQkQsT0FoQ0ZxSSxFQUFBLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjUCxFQUFBLElBQ1g5SCxFQTBDVixTQUFrQ3FNLEdBQ2hDLEdBQUtVLEdBQWlDLFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF0QnJWLEVBQVF5VSxXQUF3QkUsSUFBU2MsRUFHdkQsSUFGQSxJQUFNL0IsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dVLEVBQWpCLEVBRVFWLElBQWFELEVBQVlrQixFQUFNLENBQUEsQ0FBbEIsR0FBNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCalcsR0FBU2lXLEVBQU0sRUFBR25TLEVBQU9wTSxPQUFTLEVBQUcsQ0FBRTRKLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRaUUsTUFBdEMsR0FDakQwUSxFQUFBYyxFQUFZLEVBQUVkLEVBQU8sRUFBRUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBSTNCLE9BQUFBLENBQ1QsRUFwRDJDQSxNQUV4QkEsSUFDRnpKLEVBQUF5SixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUEsRUFBQXJNLEVBQ0F3TixFQUFBLENBQUEsR0FHUm5CLEVBQU8sR0FBWUksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVBKLEVBS1hBLEVBSkdNLEdBQWF2VyxDQUFBQSxHQUFTLEVBQUdpVyxFQUFNekosJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU0sQ0FBQSxDQUFmLEdBQXlCeE0sQ0FBQUEsR0FBU3FXLEVBQVU3SixFQUFNeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQU0sQ0FBQSxDQUF0QixFQUd4RFMsRUFDSVUsRUFDSG5CLEVBQU8sRUFBSSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBSUssRUFBYTNFLEdBQVdBLEdBQVkyRSxFQUNuREwsRUFDTTNVLEVBQVFpRSxPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDWDBRLEVBQU8sRUFBSUksRUFBVyxFQUV0QixDQUFBLEVBVEY1RSxFQUFTNEYsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVFwQixDQUFBLENBQWpCLEVBYUptQixHQUFZbkIsSUFBU3pKLElBQ3hCeUosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU94RSxFQUFTNEYsRUFBUTdLLENBQUEsR0FBV3lKLEVBQU96SixFQUFPLEdBQUssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01BSW5EeUosRUFBQSxDQUFBLEVBR0ZBLENBQ1QsQ0E2QkEsU0FBU2tCLEVBQU12TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDYixPQUFPOE0sR0FBVzlNLEVBQVEwTSxHQUFlQSxHQUFjLEVBQUkxTSxDQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN0QsQ0FVQSxTQUFTd0wsSUFHQyxJQUZSLElBQUl0ZCxFQUFNd2UsR0FBZTVFLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEdBQWdCZ0YsR0FBVUgsRUFBWSxFQUFJNUUsR0FFM0Q4RSxHQUFtQixFQUFSMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLEtBQ1osR0FBQWlkLEVBQVl1QixFQUFhLEVBQUcsQ0FBQSxDQUE1QixJQUF1Q3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFZamQsRUFBSyxDQUFBLENBQUwsRUFBYyxDQUNwRUEsQ0FBQSxHQUNBLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGLENBR0YsT0FBT3VJLEVBQU92SSxFQUFLLEVBQUd3ZSxFQUFhLENBQXJCLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoQixDQVNBLFNBQVM3RSxFQUFTRixHQUNoQixPQUFPbFIsRUFBT3FSLEVBQVMsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUlILEVBQU9JLEVBQVVKLEVBQU0sRUFBRzhFLEVBQ3ZELENBU0EsU0FBU2dCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRek4sR0FDZixPQUFPOEgsSUFDSHBTLEVBQUtzSyxFQUFPeU0sQ0FBUCxFQUNMNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLElBQWtCNFcsR0FBVHpNLEVBQW9CME0sRUFBYSxFQUFJMU0sR0FBVStILENBQS8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxDQUNmLENBbUJBLFNBQVMyRixFQUFVMU4sR0FDWkEsSUFBVW1OLElBQ0RDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBRCxFQUNBQSxFQUFBbk4sRUFFaEIsQ0FnQkEsU0FBUzhILElBQ1AsTUFBTyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRXZZLEdBQWFtSSxFQUFRbEUsS0FBckIsR0FBZ0NrRSxFQUFRNEksWUFDbkQsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0EsU0FBU3lLLElBQ0E3USxPQUFBQSxFQUFPK0IsTUFBTUMsR0FBSSxDQUFFOU8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFDLEdBQTNCNk0sR0FBNEMsQ0FBQyxDQUFFeEMsRUFBUWlXLGlCQUNoRSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTyxNQUFBLENBQ0xwTCxNQTVTRixXQUNPNkUsRUFBQSxFQUNMOU0sRUFBSSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWpCLEVBQWVELEUxQnhEYyxNMEJ3RDRCZ08sQ0FBL0QsRUFDQTlNLEVBQUlmLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FlOFQsQ0FBbkIsQ0FDRixFQXlTRU8sR0FqUU8sU0FBSUMsRUFBMEJDLEVBQTBCcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLEdBQzFELElBRUd1SSxFQUZEK0ssS0FJUSxDQUFBLEdBRlAvSyxFQUFRdU4sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRFJsQixFQWlDVixTQUFnQndCLEdBQ2QsSUFBSTdOLEVBQVFtTixFQUVQLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQ09ZLEVBQVcxWCxFQURsQi9HLEVBQVV1ZSxDQUFWLEdBQ0dHLEVBQTBCSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUXRJLE1BQU8saUJBQWYsR0FBc0MsR0FBNUR3SSxFQUFKQyxFQUFBLEdBQWUzWCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZjJYLEVBQUEsR0FFYSxNQUFkRCxHQUFtQyxNQUFkQSxFQUNoQi9OLEVBQUFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04sRUFBa0JILEdBQVksRUFBS1ksR0FBQUEsR0FBYyxDQUFDMVgsR0FBVSxJQUFNOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLENBQWxFLEVBQ2dCLE1BQWRZLEVBQ1YvTixFQUFRM0osRUFBU3dSLEVBQVMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUN4UixDQUFELEVBQVkyVyxFQUFTLENBQUEsR0FDdkIsTUFBZGUsSUFDVi9OLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRa04sRUFBUyxDQUFBLEtBR25CbE4sRUFBUThNLEVBQVNlLEVBQVVwWCxFQUFPbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYLEVBQVMsRUFBR3BCLENBQVosQ0FDcEMsQ0FFTyxPQUFBek0sQ0FDVCxFQW5EeUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNk4sT0FHQUMsR0FBa0I5TixJQUFVbU4sS0FDL0NPLEVBQVUxTixDQUFWLEVBQ0E0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBS1IsS0FBTUMsRUFBTXJNLEVBQU9vTixFQUFXM1YsQ0FBbkMsRUFHTixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3UEV3VyxPQTlPRixTQUFpQjNDLEVBQXFCdEIsRUFBbUJrRSxFQUFnQnpXLEdBQ3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTJJLEVBQVc0SyxPQUFPaUQsT0FBUTNDLEVBQWF0QixFQUFVa0UsRUFBTSxXQUNyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsSUFBTWxPLEVBQVF1TixFQUFNWCxFQUFLL0UsUUFBU2lFLEVBQWQsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQUNwQjRCLEVBQVViLEVBQVVuWCxFQUFLc0ssRUFBT3lNLENBQVosRUFBeUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInek0sQ0FBN0MsRUFDQXZJLEdBQVlBLEVBQVosQ0FDQSxDQUpGMkksQ0FLRixFQXlPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0U0TSxRQUFBQSxFQUNBRSxRQUFBQSxFQUNBRCxZQUFBQSxFQUNBekIsT0FBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0FrQyxTQUFBQSxFQUNBUyxTQS9CRixTQUFtQjlILEdBQ2pCLE9BQU9BLEVBQU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK0csRUFBWUQsQ0FDNUIsRUE4QkV0RixRQUFBQSxFQUNBNEYsT0FBQUEsRUFDQVcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BeERGLFNBQWlCOUMsR0FFZixPQURNdEUsRUFBVTRGLEVBQUsvRSxRQUFTeUQsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWQsRUFDVHlCLEVBQVV0VyxFQUFPdVEsRUFBUyxFQUFHeUYsQ0FBbkIsRUFBZ0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInekYsQ0FDbkQsRUFzREVjLFNBQUFBLEVBQ0FpRCxPQUFBQSxDQWRLLENBZ0JULFNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzNWZ0IsU0FBUTdRLEVBQWdCa0csRUFBd0IxSSxHQUN4RCxJQXdCRjJXLEVBS0FDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQTdCRTNXLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRUFBbkIyQyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSTlMLEVBQWVtSixFQUFmbkosS0FBTWlNLEVBQVM5QyxFQUFUOEMsS0FDVmhLLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FrQmlILEVBQWxCakgsUUFBUytQLEVBQVM5SSxFQUFUOEksS0FDVHlCLEVBQXlCNycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQXpCNkIsU0FBVTJGLEVBQWV4SCxFQUFmd0gsV0FDRjJHLEVBQXVCdE0sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQS9CbUUsT0FBcUJsRSxFQUFVRCxFQUFWQyxNQUt6QnNNLEVBQVVELEVBS1ZsSSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3BFLEVBQVNvRSxLQUtoQkMsRUFBT3JFLEVBQVNxRSxLQWVkRixFQUFzQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLNUMsU0FBUzdELElBaUJQLElBQU1rTSxFQUFVL1csRUFBUTBPLE9BRW5CcUksQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEdBQWVwSSxHQUFRQyxJQXVENUJrSSxFQUFVRCxHQUFldmIsRUFBUSxNQUFPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZDLEVBQVEyVixNQUF2QixFQUN6QkMsRUFBVXFJLEVBQWEsQ0FBQSxHQUN2QnBJLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVb0ksRUFBYSxDQUFBLEdBQ2JMLEVBQUEsQ0FBQSxFQUVWdGQsRUFBUXlkLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTLENBQUVuSSxFQUFNQyxFQUF6QixFQUNFaUksR0FBZXBkLEVBQVFxZCxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RNLENBQVQsR0F6RHBCbUUsR0FBUUMsSUFDWGhVLEdBQVE4VCxFQUFRLENBQUVDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFBQSxFQUFNQyxLQUFBQSxDQUFSLENBQWhCLEVBQ1MvUyxHQUFBaWIsRUFBU0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVUsR0FBSyxNQUF4QixFQUNUNWQsRUFBVTJkLEVBQVdGLEVBQXFCL1AsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21CN0csS0FBQUEsRUFBUTRNLFNBQXJFLEVBRUttSyxJQTRCUG5VLEVBQUksQ0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxQixFQUFlRSxHQUFhTSxFQUFlSyxFM0J0SGQsTTJCc0h5RDZCLENBQTVGLEVBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOU0sRUFBTThYLEVBQU0sUUFBU2hZLEVBQU9zZixFQUFJLEdBQUosQ0FBNUIsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FwZixFQUFNNlgsRUFBTSxRQUFTL1gsRUFBT3NmLEVBQUksR0FBSixDQUE1QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic1Qld0UyxFQUFBLEVBQ1B4SSxFQUFjLENBQUV1VCxFQUFNQyxHQUFRbEosR0FBZTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxFQUFNbEgsRUFBbkQsRUFDTVAsRTNCM0cwQixpQjJCMkdKNEwsRUFBTUMsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzVCLElBOUJWaE0sRUFBSWpCLEVBQWUrUSxDQUFuQixDQUNGLENBS0EsU0FBU0EsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0MxUixFQUFBLEVBQ0Y2SixFQUFBLENBQ1IsQ0E2QkEsU0FBUzdKLElBQ1BmLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFNZSxRQUFOLEVBQ0ExRCxFQUFhd1osRUFBU0YsQ0FBdEIsRUFFS0QsR0FDSHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRc2EsRUFBYyxDQUFFbEksRUFBTUMsR0FBU2tJLENBQXZDLEVBQ0FuSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBT0MsRUFBTyxNQUVkNVQsRUFBaUIsQ0FBRTJULEVBQU1DLEdBQVF2SSxFQUFqQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FFSixDQWdCQSxTQUFTNlAsRUFBSUMsR0FDQWpHLEVBQUFnRyxHQUFJQyxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQWIsQ0FDYixDQXVCQSxTQUFTYSxFQUFhckksR0FLcEIsT0FBT2xTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUpPLGtCQUFtQjFELEVBQVFrZSxNQUEzQixLQUFzQ3RJLEVBQU81VixFQUFRNFYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQU81VixFQUFRNlYsTUFBcEUsa0lBRUc1TyxFQUFRa1gsV0NyTFQseUZEbUxoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsT0FLRixDQUtBLFNBQVN0VCxJQUNQLElBRVE4UixFQUNBeUIsRUFDQUMsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBTEgxSSxHQUFRQyxJQUNMdEcsRUFBWTlGLEVBQU84RixNQUNuQm9OLEVBQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneEYsRUFBV3NGLFFBQXZCLEVBQ0EyQixFQUFZakgsRUFBV29GLFFBQXZCLEVBQ0E4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBd0IsQ0FBQSxFQUFaMUIsR0FBa0JwTixFQUFRb04sRUFBWTVNLEVBQUt3TycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBT3hPLEVBQUs2RixLQUNuRTBJLEVBQXdCLENBQUEsRUFBWkYsR0FBMEJBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFSN08sRUFBb0JRLEVBQUt5TyxNQUFRek8sRUFBSzhGLEtBRTFFRCxFQUFLNkksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVc5QixFQUFZLEVBQzVCOUcsRUFBSzRJLFNBQVdMLEVBQVksRUFFZC9iLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBdVQsRUFBTTlJLEdBQVl1UixDQUFsQixFQUNBaGMsRUFBQXdULEVBQU0vSSxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWXdSLENBQWxCLEVBRWR0VSxFM0I5TGtDLGlCMkI4TE40TCxFQUFNQyxFQUFNOEcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVd5QixDQUFuRCxFQUVKLENBRU8sTUFBQSxDQUNMekksT0FBQUEsRUFDQTdELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBQSxFQUNBN0osUUFBQUEsRUFDQTRDLE9BQUFBLENBSkssQ0FNVCxXRXRMZ0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQVVwQixFQUFnQmtHLEVBQXdCMUksR0FDaEUsSUFTSXlYLEVBS0FDLEVBZHVCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25WLEVBQUFBLEVBQWdCQyxHQUFuQ0ksSUFBQUEsR0FBSTlMLElBQUFBLEtBQU1pTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBQUEsS0FDWkUsRUFBV0QsR0FBaUJoRCxFQUFRaUQsU0FBVVQsRUFBTzBULEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFHcGYsS0FBTTBMLEVBQVEsR0FBeEJBLEVBaUhwRCxTQUEyQmlCLEdBQ25CLElBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFb0wsRUFBUXRFLEVBQVJzRSxJQUNSQSxHQUFPblQsRUFBT21ULEVBQUssUUFBbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLElBQVBwTCxFQUFoQyxHQUFBLEVBQ0FWLEU3Qm5Jb0MsbUI2Qm1JTlUsQ0FBOUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQ0YsQ0FySGtDLEVBQzFCVyxFQUFhbkIsRUFBYm1CLFNBQ0FtRyxFQUF5QzdCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUF6QzZCLFNBQXNCNUIsS0FBbUJELEVBQS9CNkIsVUFBWTVCLEtBQU1tRyxJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsT0FDNUI2SSxFQUFhM1gsRUFBYjJYLFNBZ0JKQyxFQUF1QixVQUFiRCxFQTYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2QsU0FBU0UsSUFDRnpULEtBQWNzRSxFQUFXa0IsT0FBTytHLGFBQzFCMU4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ExTSxNQUFPLENBQUV5SixFQUFROFgsYUFBakIsRUFDVEosRUFBVUQsRUFBVUcsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVUsQ0FBQSxFQUN2QmhVLEVBQUEsRUFDUGIsRUFBTWIsRUFBTixFQUVKLENBT1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQUEyQixFQUFPa1UsR0FDZEgsRUFBVSxDQUFDLEVBREdHLEVBQW9CLEtBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQXBCQSxFQUFPLENBQUEsRUFDUkEsR0FDTm5VLEVBQUEsRUFFQVEsTUFDTG5CLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFTWSxNQUFULEVBQ0FkLEVBQU1aLEVBQU4sRUFFSixDQU1BLFNBQVM2VixJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUosSUFDTEgsR0FBV0MsRUFBVTdULEVBQU8sQ0FBQSxDQUFQLEVBQWlCZ1UsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RDLEVBRUosQ0FLQSxTQUFTalUsSUFDRmtMLElBQ1VqVyxFQUFBaVcsRUFBUXhILCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFjLENBQUVzUSxDQUF4QixFQUNieGMsRUFBYzBULEVBQVFqSixHQUFZN0YsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVE4SSxLQUFNOE8sRUFBVSxPQUFTLFFBQW5FLEVBRUosQ0FrQkEsU0FBUzdOLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRekIsR0FDVEQsRUFBUUssRUFBV2tCLE9BQU9DLE1BQU92QixDQUF6QkksRUFDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6RixFQUFBaUIsSUFBS21FLEdBQVMsQ0FBQ3JNLEVBQWNxTSxFQUFNRyxNQUFPNkMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQTNCLEdBQXdEckwsRUFBUWlELFFBQS9FLENBQ1gsQ0FFTyxNQUFBLENBQ0w0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsTUExR0YsV0FDTzhNLElBWUEzWCxFQUFRaVksY0FDTG5oQixFQUFBNlIsRUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsd0JBQXlCLFNBQUt4USxHQUN4Q3NmLEVBQXFCLGVBQVh0ZixFQUFFYixLQUNEMGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFBLENBQ1gsQ0FISSxFQU1IaFksRUFBUWtZLGNBQ0xwaEIsRUFBQTZSLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLG1CQUFvQixTQUFLeFEsR0FDbkN1ZixFQUFxQixZQUFYdmYsRUFBRWIsS0FDRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwZ0IsRUFBQSxDQUNYLENBSEksRUFNSGxKLEdBQ0doWSxFQUFBZ1ksRUFBUSxRQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxXQUNYOEksRUFBQUMsRUFBQSxFQUFTaFUsRUFBTyxDQUFBLENBQVAsQ0FDbkIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBRkksRUFLUmpCLEVBQUksQ0FBRXpCLEVBQVlXLEdBQWNKLEdBQWlCdUIsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnQixNQUExRCxFQUNBckIsRUFBSXpCLEVBQVk0SSxDQUFoQixFQS9CRStFLEdBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMVQsRUFBYzBULEVBQVFwSixHQUFlNkUsRUFBU0MsTUFBTWxILEVBQXRDLEVBQ3hCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NVLEdBQVdDLEVBQVgsRUFDT2pVLEVBQUEsRUFFWCxFQW9HRTVDLFFBQVNpQyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU2EsT0FDbEIrVCxLQUFBQSxFQUNBaFUsTUFBQUEsRUFDQU8sU0FBQUEsQ0FMSywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FPVCxRQ3RKZ0IsU0FBTzVCLEVBQWdCa0csRUFBd0IxSSxHQUM3RCxJQUFRNEMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9MLEVBQWdCQyxDQUFoQixFQUFQSSxHQWlCUixTQUFTdVYsRUFBT0EsR0FDZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6UCxFQUFXa0IsT0FBT3RSLFFBQVMsU0FBUytQLEdBQ2xDLElBQU1tSSxFQUFNdFcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQXlCbU8sRUFBTWlCLFdBQWFqQixFQUFNRyxNQUFPLEtBQWhDLEVBRWhDZ0ksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQU9BLEVBQUk0SCxLQUNORCxFQUFBQSxFQUFPM0gsRUFBS25JLENBQVo4UCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVixDQU5GelAsQ0FPRixDQVNTLFNBQUFvRyxFQUFRcUosRUFBZ0IzSCxFQUF1Qm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSSxHQUN0REEsRUFBTTNNLE1BQU8sYUFBY3ljLEVBQXdDM0gsK0JBQUFBLEVBQUk0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsSUFBVyxLQUFBLEdBQUksQ0FBQSxDQUF0RixFQUNTdmMsR0FBQTJVLEVBQUsySCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUSxPQUFTLEVBQXRCLENBQ1gsQ0FFTyxNQUFBLENBQ0x0TixNQW5DRixXQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTzdLLEVBQVFtWSxRQUNYdlYsRUFBSVIsR0FBdUJ4TCxFQUFPa1ksRUFBUSxDQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFmLENBQTNCLEVBQ0lsTSxFQUFBLENBQUUxQixFQUFlUyxFQUFlRCxHQUFpQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5SyxFQUFPdWhCLEVBQU8sQ0FBQSxDQUFQLENBQXhELEVBRVIsRUErQkVuWCxRQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BLLEVBQU91aEIsRUFBTyxDQUFBLENBQVAsQ0FGWCxDQUlULFNDeENnQixTQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzNWLEVBQWdCa0csRUFBd0IxSSxHQUM5RCxJQVNJaUQsRUFLQWxELEVBZGlCd0MsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFBLEVBQWdCQyxHQUE3QkksSUFBQUEsR0FBSUcsSUFBQUEsS0FDS21CLEVBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMUIsRUFBbkIrQixNQUFTTCxJQUNUZ1IsRUFBU3hNLEVBQVR3TSxLQUNBZCxFQUFvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RjLEVBQXBEZCxZQUFhRixFQUF1Q2dCLEVBQXZDaEIsU0FBVVcsRUFBNkJLLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic3QkwsY0FBZXJCLEVBQWMwQixFQUFkMUIsVUFDeEM2QixFQUFVN1MsRUFBT2dDLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFJMEQsRUFBWDFGLEVBZVo2VixFQUFXLEVBbUJmLFNBQVM5QixFQUNQM0MsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0QixFQUNBa0UsRUFDQThCLEVBQ0FDLEdBRUEsSUFNUXpLLEVBTkY1QyxFQUFPaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQWIsRUFVTW9FLEdBUkFDLEVBQUEsRUFFRGpDLENBQUFBLEdBQVluQixHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYVIsRUFBZixJQUNQVixFQUFTekwsRUFBV3VLLE9BQU9iLFdBQTNCLEVBQ0F0RSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUzlPLEdBQU00VSxDQUFBLEVBQWdCTyxFQUFPaFcsR0FBT0UsRUFBS3VWLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQWdCTyxJQUFVLEVBQ3BFUCxFQUFBc0IsRUFBS3pCLFdBQVkvSyxFQUFXd0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQVd3RyxPQUFROUMsRUFBY08sQ0FBNUN6TCxDQUFqQixFQUF3RW9GLEdBR3JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hQLEdBQW9CNE0sRUFBTTBJLEVBQWEsQ0FBdkMsR0FFUnlFLEVBQUEsRUFDQS9GLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFBa0csRUFBYSxFQUFJbEcsR0FBWXBVLEdBQUtHLEVBQUt1VixFQUFjMUksR0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEV2QyxJQU9ELEdEeURnQixFQUM3Qm5MLEVBQUF1WSxFQUNBclYsRUFBQUQsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lCc1AsRUFBVW9HLEVBQU85aEIsRUFBT2dOLEVBQVFzSCxFQUFNMEksRUFBYTJFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFsQyxFQUFpRCxDQUFuRixFQUVYclUsRUFBS3ZPLEVBQUwsRUFDQW9OLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakIsRUFBTixFQUNBbUIsRUFBUzFNLE1BQVQsQ0FDRixDQUtBLFNBQVNtaUIsSUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1B4VSxFbkYxRmdCLENtRjBGaEIsRUFDQW5FLEdBQVlBLEVBQVosRUFDQWdELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNaEIsQ0FBTixDQUNGLENBVUEsU0FBUzZCLEVBQVFzSCxFQUFjeU4sRUFBWUosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWtDOVUsR0FDM0UsSUFBTWlRLEVBQVdVLEVBQWpCLEVBRU1oSixHQURXRixHQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lOLEVBQUt6TixJQXdDaEIwTixFQXhDaUNuVixHQXlDeENvVixFQUFlN1ksRUFBZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2WSxZQUNZQSxFQUFZRCxHQUFNLEVBQUkzYSxLQUFLNmEsSUFBSyxFQUFJRixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxDQUFqQixHQXpDZGxGLEdBQWEyRSxFQUV6QzdFLEVBQVdFLEVBQVd0SSxDQUF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFFS2lLLEdBQVcsQ0FBRWtELEdBQWUxRCxNQUNuQndELEdDekdhLEdEMkdwQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoYSxFQUFLK00sQ0FBTCxFQ3pIMEIsSUQwSHJCbUwsRUFBQXJDLEVBQVVXLEVBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsRUFBekIsRUNuSGUsSURtSHFDLENBQUEsRUFBTzlVLEVBQVUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBckUsRUFHZCxDQUtBLFNBQVMwWSxJQUNGeFYsR0FDSEEsRUFBU2EsT0FBVCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFSixDQUtBLFNBQVNBLElBQ0ZiLEdBQVksQ0FBRUEsRUFBU21CLGFBQ3BCcVUsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDQUMsRUFBQSxFQUVWLENBY08sTUFBQSxDQUNMN04sTUE1R0YsV0FDRWpJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFJekIsRUFBWXNYLENBQWhCLEVBQ0E3VixFQUFJLENBQUVqQixFQUFlRCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUJvQyxDQUF0QyxDQUNGLEVBMEdFOUMsUUFBU3lYLEVBQ1RsQyxPQUFBQSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXpTLE9BQUFBLENBSkssQ0FNVCxPRXhJZ0IsU0FBTXRCLEVBQWdCa0csRUFBd0IxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksR0FDNUQsSUFTSStZLEVBS0FDLEVBS0FDLEVBS0FDLEVBS0FDLEVBV0FDLEVBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBNUIsRUFLQW5iLEVBbEQrQmtHLEVBQUFBLEVBQWdCQyxHQUEzQ0ksSUFBQUEsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUlHLElBQUFBLEtBQU1qTSxJQUFBQSxLQUFNeUosSUFBQUEsT0FDaEJnRSxFQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9CLEVBQVYrQixNQUNBMlEsRUFBcUV4TSxFQUFyRXdNLEtBQU01QixFQUErRDVLLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEvRDRLLE9BQVFwRCxFQUF1RHhILEVBQXZEd0gsV0FBd0IxRixFQUErQjlCLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEzQzZCLFNBQVlDLE1BQWtCc0MsRUFBYXBFLEVBQXRCMlEsTUFBU3ZNLE9BQ3hEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdELEtBQW9CUCxFQUFXUSxXQUEvQkQsUUFBU2lGLElBQUFBLE9BQ1RrRyxFQUErQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjLEVBQS9CZCxZQUFhUyxFQUFrQkssRUFBbEJMLGNBK0JqQnlFLEVBQVcsQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFnQ2YsU0FBUzVKLElBQ0QsSUFBRUQsRUFBU3pQLEVBQVR5UCxLQUNSOEosRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MsQ0FBRTlKLENBQVgsRUFDQXlKLEVBQWtCLFNBQVR6SixDQUNYLENBVUEsU0FBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrSixFQUFlcmhCLEdBR3RCLElBQ1FzaEIsRUE0UFlwZCxFQUNacWQsRUFoUVNOLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLENBQUEsRUFFVjVCLElBQ0NpQyxFQUFVRSxFQUFjeGhCLEdBNFBaa0UsRUExJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BBbEUsRUFBRWtFLE9BMlBkcWQsRUFBVzFaLEVBQVgwWixPQUVDM2YsR0FBU3NDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFhNkssR0FBdEIsTUFBbURKLEVBQW5ELEdBQ0E0UyxHQUFZM2YsR0FBU3NDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRcWQsQ0FBUnJkLEdBOVBNb2QsQ0FBQUEsR0FBYXRoQixFQUFFeWhCLFNBQ3hDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFKLEVBQVdtRCxTQVdoQnZXLEVBQVMzRSxFQUFHLENBQUEsQ0FBWixHQVZBa0UsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCb2QsRUFBVWpQLEVBQVF2UyxPQUNsQ2toQixFQUFnQjVVLEVBQU1DLEdBQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUU5TyxFQUFRQyxHQUFwQixFQUNBc2pCLEVBQUEsS0FFVm5pQixFQUFBdUYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVEyTCxHQUFxQjZSLEVBQWV2TyxFQUE1QyxFQUNBeFUsRUFBQXVGLEVBQVE0TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBbUI2UixFQUFheE8sRUFBeEMsRUFDTjRKLEVBQUtwUixPQUFMLEVBQ0F3UCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBT3hQLE9BQVAsRUFDQWlXLEVBQU01aEIsQ0FBTixJQU1SLENBT0EsU0FBUzBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBZTFoQixHQU10QixJQXNHb0JBLEVBQ002aEIsRUFDcEJDLEVBQ0FDLEVBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvQi9oQixFQTFIbkJvTSxFQUFNQyxHckZySE8sQ3FGcUhiLElBQ0xELEVBQU1MLEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckZ0SFksQ3FGc0hsQixFQUNBbkIsRWpDdElrQyxNaUNzSWxDLEdBR0c1SyxFQUFFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpQixhQUNBaEIsR0FDSGpFLEVBQUsxQixVQUFXdUYsRUFBMEJxQixFQUFXamlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLEdBaU56Q21oQixHQUFZOVcsRUFBT2dDLEdBQUkwRCxFQUFYMUYsRXhCcFcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUixFd0JvV3dDLEVBak54RCxFQUVNNlgsRXhCOUljLEl3QjhJQUMsRUFBVW5pQixDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUN4Qm9pQixFQUFjakIsS0FBZUEsRUFBV3pFLE1BRXpDd0YsR0FBV0UsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ2RSLEVBQU01aEIsQ0FBTixFQUdlaWhCLEVBQUEsQ0FBQSxFQUNqQnJXLEVqQ3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSmdDLFVpQ29KaEMsRUFDQWpHLEVBQVMzRSxDQUFULEdBeUdHa0csRUFBSytiLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RjamlCLEVBdkdPQSxFQXdHMUIsRUFBd0JrRyxFQUFLK2IsRUFBV2ppQixFQUFHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLENBQWQsQ0FBQSxJQWhCaEJBLEVBdkZRQSxFQXdGRjZoQixFQUFlaGEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWpDd2EsaUJBQ0ZQLEVBQVF6aUIsR0FBVXdpQixHQUNsQkUsRUFBUUQsR0FBU0QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVdFLE9BQVMsRUFDckNPLEdBQVVSLEVBQVFELEVBQVdTLE1BQVEsQ0FBQ1QsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCLEdBM0Z4RGIsRUE0Rkc5YSxFQUFLK2IsRUFBV2ppQixFQUFoQixHQUEwQncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEIsRUFBY3hoQixDQUFBLEVBQU1zaUIsRUFBUVAsR0EzRnpEcGQsRUFBUzNFLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FULEdBR04sQ0FVQSxTQUFTMmhCLEVBQWEzaEIsR0FNcEIsSUF5Q011aUIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5RyxFQUNBM1AsRUFoRERNLEVBQU1DLEdyRnhKUyxDcUZ3SmYsSUFDSEQsRUFBTUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElyRnhLUSxDcUZ3S2QsRUFDQW5CLEVqQ3ZLa0MsU2lDdUtsQyxHQUdHb1csSUEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDdkYsRUFzRVIsU0FBNkI4RyxHQUMzQixPQUFPdEcsRUFBZ0JwVixFQUFBQSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTTBiLENBQUEsRUFBYTFjLEVBQ3hDSyxFQUFLcWMsQ0FBQSxHQUFlMWEsRUFBUTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSxZQUFjLEtBQzFDekIsRUFBUzVFLEVBQUFBLEVBQVc1TCxFQUFXdUssT0FBT2xCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxZQUFlL1IsRUFBUTRhLGVBQWlCLEVBRnRDLENBSTVDLEVBM0UwQ0YsRUFtRDFDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUEwQnZpQixHQUN4QixHQUFLcUssRUFBT2dDLEdBQUkyRCxFQUFYM0YsR0FBcUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUU4VyxFQUFXLENBQy9CLElBQUFuVixFQUFPbVcsRUFBVW5pQixHQUVsQixHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQWdNLEdBQVFBLEV4QjlRUyxJd0IrUWIsT0FBQWlXLEVBQVdqaUIsQ0FBWCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUJnTSxDQUU1QixDQUVPLE9BQUEsQ0FDVCxFQS9EZWhNLEVBdkNMQSxJQTBDRjgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTCxFQUFjakUsRUFBUWlFLFFBQVVqRSxFQUFRNmEsYUFFOUMvTixFQUFRLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQVIsRUFFS29NLEVBQ0hoSixFQUFXcUcsT0FBUTNDLEVBQWEsRUFBRzVULEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRd1csSUFBM0MsRUFDVWhVLEVBQU9nQyxHQUFJNEQsRUFBWDVGLEVBQ1YwTixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV2dHLEdBQUloSSxFQUFRbFAsR0FBTTBiLENBQUEsQ0FBZCxFQUE2QixFQUFNelcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVMsSUFBTSxJQUFVQSxFQUFTLElBQU0sR0FBMUYsRUFDVXpCLEVBQU9nQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSTBELEVBQVgxRixHQUFzQjhXLEdBQVlyVixFQUM1Q2lNLEVBQVdnRyxHQUFJckInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWUsQ0FBQSxDQUFmLEVBQXdCLElBQU0sR0FBN0MsRUFFQTNFLEVBQVdnRyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSWhHLEVBQVd3RyxPQUFROUMsQ0FBbkIsRUFBa0MsQ0FBQSxDQUFqRCxFQUdGOScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHLEVBQVEsQ0FBQSxDQUFSLEVBdkRFaFEsRUFBUzNFLENBQVQsR0FHTW9JLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbEUsRUFBUTJMLEdBQXFCNlIsQ0FBN0IsRUFDQXRaLEVBQUFsRSxFQUFRNEwsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21CNlIsQ0FBM0IsRUFDR1gsRUFBQSxDQUFBLENBQ2IsQ0FRQSxTQUFTMkIsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczaUIsR0FDWCxDQUFFcWYsR0FBWTRCLEdBQ2pCdGMsRUFBUzNFLEVBQUcsQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBWixDQUVKLENBT0EsU0FBUzRoQixFQUFNNWhCLEdBQ0c4Z0IsRUFBQUQsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQUE3Z0IsRUFDaEI0Z0IsRUFBZ0IzRSxFQUFoQixDQUNGLENBZ0dTLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0csRUFBV2ppQixFQUE0QjRpQixHQUN2QyxPQUFBQyxFQUFTN2lCLEVBQUc0aUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQVosRUFBMkJDLEVBQVNDLEVBQWM5aUIsQ0FBQSxFQUFLNGlCLEVBQ2hFLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBLFNBQVNULEVBQVVuaUIsR0FDakIsT0FBT29GLEdBQVFwRixHQUFNb0YsR0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwZCxFQUFjOWlCLENBQWQsQ0FBQSxDQUMvQixDQVVBLFNBQVM4aUIsRUFBYzlpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDZCxPQUFBNmdCLElBQWM3Z0IsR0FBSzhnQixHQUFpQkQsQ0FDN0MsQ0FXUyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQWdDLEVBQVM3aUIsRUFBNEI0aUIsR0FDbkMsT0FBQXBCLEVBQWN4aEIsQ0FBZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBb0JBLEVBQUUraUIsZUFBZ0IsR0FBTS9pQixHQUFhOFEsT0FBQUEsRUFBUzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUixFQUFhLElBQU0sR0FBNUIsRUFDcEUsQ0FtQ0EsU0FBU3BCLEVBQWN4aEIsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsTUFBc0IsYUFBdEIsT0FBT2dqQixZQUE4QmhqQixhQUFhZ2pCLFVBQzNELENBZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCQSxTQUFTNUIsRUFBU2xoQixHQUNMbWYsRUFBQW5mLENBQ2IsQ0FFTyxNQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNMd1MsTUEvVEYsV0FDUS9ULEVBQUEwVCxFQUFPeEMsR0FBcUJoUixHQUFNc1UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWxDLEVBQ0F4VSxFQUFBMFQsRUFBT3ZDLEdBQW1CalIsR0FBTXNVLEVBQWhDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNBeFUsRUFBQTBULEVBQU96QyxHQUFxQnlSLEVBQWVsTyxFQUEzQyxFQUNOeFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU0wVCxFQUFPLFFBQVNzUSxFQUFTLENBQUV0UCxRQUFTLENBQUEsQ0FBWCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBL0IsRUFDTTFVLEVBQUEwVCxFQUFPLFlBQWExTixDQUFwQixFQUNOOEYsRUFBSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBRTFCLEVBQWVTLEdBQWlCK04sQ0FBdEMsQ0FDRixFQXlURTZKLFFBQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBNkIsV0FoQkYsV0FDUyxPQUFBakMsQ0FDVCxDQVdPLENBS1QsV2xCeFhnQixTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVTNXLEVBQWdCa0csRUFBd0IxSSxHQUNoRSxJQU9JM0QsRUFLQW1iLEVBWnlCaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWLEVBQUFBLEVBQWdCQyxHQUFyQ0ksSUFBQUEsR0FBSTlMLElBQUFBLEtBQU15SiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBQUEsT0FDVm9JLEVBQVNuRyxFQUFUbUcsS0FDQU0sRUFBWVAsRUFBV1EsVUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZCRCxRQXlCUixTQUFTeUcsSUFDRCxJQUFFMkwsRUFBYXJiLEVBQWJxYixTQUVIQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFDTWhmLEVBQWEsV0FBYmdmLEVBQXdCcGpCLE9BQVMwUSxFQUNwQzdSLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndUYsRUFBUTJQLEdBQWdCc1AsQ0FBeEIsRUFFVixDQUtBLFNBQVN0YSxJQUNQVCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUWxFLEVBQVEyUCxFQUFoQixDQUNGLENBZUEsU0FBU2pDLElBQ1AsSUFBTXdSLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFZL0QsRUFDUEEsRUFBQSxDQUFBLEVBQ1h2Z0IsRUFBVSxXQUFtQnVnQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQStELENBQVksQ0FBekMsQ0FDRixDQU9BLFNBQVNELEVBQVduakIsR0FDWHFmLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDN2MsRUFBTW9SLEdBQWM1VCxNQUViOFEsRUFBU3RFLEVBQUEsRUFDcEJuQyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTzBULEdBQUksR0FBWDFULEVBQ1U3SCxJQUFRc08sRUFBU3JFLEVBQUEsR0FDM0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEMsRUFBTzBULEdBQUksR0FBWDFULEVBR04sQ0FFTyxNQUFBLENBQ0xxSSxNQS9EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsV0FDTzZFLEVBQUEsRUFDTDlNLEVBQUlqQixFQUFlWCxDQUFuQixFQUNBNEIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUlqQixFQUFlK04sQ0FBbkIsRUFDQTlNLEVBQUl6QixFQUFZNEksQ0FBaEIsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0YsRUEyREUvSSxRQUFBQSxFQUNBdVksUUFsQ0YsU0FBa0JsaEIsR0FDTG1mLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbmYsQ0FDYixDQTZCTyxDQUtULFdtQi9EZ0IsU0FBVW1LLEVBQWdCa0csRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCMUksR0FDaEUsSUFBZ0N1QyxFQUFBQSxFQUFnQkMsR0FBeENJLElBQUFBLEdBQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxJQUFBQSxJQUFLaE0sSUFBQUEsS0FBTWlNLElBQUFBLEtBQ2pCeVksRUFBb0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VBQXJCeGIsRUFBUXliLFNBQ3ZCN2IsRUFBZSxDQUFFd0IsR0FBYVcsR0FLaEMyWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBMkIsR0FnQi9CLFNBQVNoTSxJQUNQeFosRUFBT3dsQixDQUFQLEVBaUJBaFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVdrQixPQUFPdFIsUUFBUyxTQUFTK1AsR0FDbENqTCxHQUE0QmlMLEVBQU1HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFPMkQsRUFBekMsRUFBMEQ3VCxRQUFTLFNBQU9rWSxHQUNsRSxJQUFBNEgsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNwYyxFQUFjd1UsRUFBS3ZFLEVBQUwsRUFDdkIwUCxFQUFTM2YsRUFBY3dVLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLdEUsRUFBTCxFQUV4QmtNLElBQVE1SCxFQUFJNEgsS0FBT3VELElBQVduTCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSW1MLFNBQy9CemYsRUFBWThELEVBQVFqSCxRQUFRNmlCLFFBRTVCQSxFQUFZMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoQixHQURaWixFQUFZa1gsRUFBSWhCLGtCQUNnQnRULElBQWtCWixFQUFRLE9BQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWSxFQUFXNUMsQ0FBM0IsRUFFeERvaUIsRUFBUS9pQixLQUFNLENBQUU2WCxFQUFLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25JLEVBQU91VCxFQUE1QixFQUNJcEwsRUFBQTRILEtBQU92YyxHQUFTMlUsRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBTCxFQUV0QixDQVpGLENBYUEsQ0FkRjlILEdBZEs4UyxFQUNNSyxHQUVUL1knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUtsRCxDQUFMLEVBQ0FnRCxFQUFJaEQsRUFBUWtjLENBQVosRUFDTUEsSUFKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0csQ0FNYixDQTRCQSxTQUFTQSxLQUNHSixFQUFBQSxFQUFRemhCLE9BQVEsU0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnSCxHQUNoQyxJQUFNa0ssRUFBV25MLEVBQVFxUSxVQUFjclEsRUFBUStiLGNBQWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixHQUFNLEdBQU0sRUFDcEUsTUFBQTlhLENBQUFBLEVBQU0sR0FBSWdLLFNBQVV6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksRUFBTzhGLE1BQU82QyxDQUFsQyxHQUErQzZRLEVBQU0vYSxDQUFBLENBQzVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUhRLEdBS0Y3SyxRQUFVME0sRUFBS2xELEVBQ3pCLENBT0EsU0FBU29jLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL2EsR0FDUCxJQUFFdVAsRUFBUXZQLEVBQVYsR0FFSTlILEVBQUE4SCxFQUFNLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJdUgsTUFBT2IsRUFBakIsRUFDVjdRLEVBQU0wWixFQUFLLGFBQWM1WixFQUFPcScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsQixFQUFRaGIsQ0FBUixDQUFoQyxFQUVBN0YsRUFBY29WLEVBQUssTUFBT3hVLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjd1UsRUFBS3ZFLEVBQUwsQ0FBeEMsRUFDQTdRLEVBQWNvVixFQUFLLFNBQVV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1UsRUFBY3dVLEVBQUt0RSxFQUFMLENBQTNDLEVBQ0FsUixFQUFpQndWLEVBQUt2RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBdEIsRUFDQWpSLEVBQWlCd1YsRUFBS3RFLEVBQXRCLENBQ0YsQ0FRUyxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQStQLEVBQVFoYixFQUFxQjlJLEdBQzlCLElBQUVxWSxFQUFldlAsRUFBakIsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09vSCxFQUFVcEgsRUFBakIsR0FFTzNELEVBQUErSyxFQUFNRyxNQUFPYixFQUFiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUVHLFVBQVh4UCxFQUFFYixPQUNMaUYsRUFBUTBFLEVBQU0sRUFBZCxFQUNBcEYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVMyVSxFQUFLLEVBQWQsRUFDTXpOLEVBQUFYLEdBQXVCb08sRUFBS25JLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E1QixFQUNOdEYsRUFBTW5CLEVBQU4sR0FHRjRaLEdBQWdCSyxFQUFoQixDQUNGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUtBLFNBQVNBLElBQ1BILEVBQVF0bEIsUUFBVTRsQixFQUFNTixFQUFRM0gsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVIsQ0FBTixDQUNwQixDQUVPLE1BQUEsQ0FDTGxKLE1BekdGLFdBQ083SyxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3liLFdBQ04vTCxFQUFBLEVBQ0w5TSxFQUFJbEIsRUFBZWdPLENBQW5CLEVBRUosRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBcUdFMU8sUUFBU3BLLEVBQU9WLEVBQU93bEIsQ0FBUCxFQUNoQkksTUFBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSEssQ0FLVCxhQzdGZ0IsU0FBWXRaLEVBQWdCa0csRUFBd0IxSSxHQUM1RCxJQWVGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21PLEVBS0ErTixFQXBCRWpjLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQW5CMkMsR0FBSUcsRUFBZTlDLEVBQWY4QyxLQUFNak0sRUFBU21KLEVBQVRuSiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FDVjhTLEVBQWlDbEIsRUFBakNrQixPQUFRVyxFQUF5QjdCLEVBQXpCNkIsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1UyRixFQUFleEgsRUFBZndILFdBQ2xCRSxFQUEyQkYsRUFBM0JFLFNBQVVxRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUJ2RyxFQUFqQnVHLFNBQVVQLEVBQU9oRyxFQUFQZ0csR0FDcEJqTixFQUFZUCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBV1EsVUFBdkJELFFBQ1k0TixFQUFnQnRNLEVBQTVCeEIsV0FLRm5RLEVBQTBCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQWlDaEMsU0FBU29JLElBQ0ZtTixJQUNINVIsRUFBUXNhLEVBQWN4Z0IsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4WCxFQUFLNVUsUUFBWixFQUF5QjRVLENBQS9DLEVBQ0E3USxFQUFhNlEsRUFBTSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTixDQUFuQixFQUNBaG1CLEVBQU8wQyxDQUFQLEVBQ091VixFQUFBLE1BR1RsTyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTWUsUUFBTixDQUNGLENBK0NBLFNBQVM4WixFQUFTN0ssR0FDWmlHLEVBQUtqRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBQUEsRUFBUyxDQUFBLENBQWQsQ0FDTixDQVVTLFNBQUFxTCxFQUFXckwsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWM5WCxHQUMxQixJQUFFL0IsRUFBV3dDLEVBQVh4QyxPQUNGdUUsRUFBTW9SLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FjNVQsR0FDcEJna0IsRUFBTUMsRUFBWixFQUVJQyxFQUFXLENBQUEsRUFZVEMsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVkQzaEIsSUFBUXNPLEVBQVNyRSxHQUFhLENBQUEsRUFBT3VYLENBQTdCLEVBQ1gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxFQUFXLEVBQUVwTSxFQUFPN1osRUFDVnVFLElBQVFzTyxFQUFTdEUsR0FBWSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUFPd1gsQ0FBNUIsRUFDTEUsR0FBQSxFQUFFcE0sRUFBTzdaLEdBQVdBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNmLFNBQVJ1RSxFQUNDMGhCLEVBQUEsRUFDTyxRQUFSMWhCLElBQ1YwaEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVdqbUIsRUFBUyxHQUdUd0MsRUFBT3lqQixJQUVmQyxJQUNIeGdCLEdBQU93Z0IsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUsxQyxNQUFaLEVBQ0ExRCxFQUFBLElBQVNtRyxDQUFULEVBQ0F2ZixFQUFTMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFLEVBQUcsQ0FBQSxDQUFaLEVBRUosQ0FLQSxTQUFTaWtCLElBQ0EsT0FBQXBjLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRdWMscUJBQXVCdmMsRUFBUTRNLFNBQ2hELENBU0EsU0FBUy9DLEVBQU92QixHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDUCxPQUFBMVAsRUFBT3NYLEVBQVc2RixPQUFRek4sQ0FBbkIsRUFDaEIsQ0FLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBUzFFLElBQ1AsSUFXVWdXLEVBWEpqTCxFQUFPOUUsRUFBTzRNLEVBQVUsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsQ0FBQSxDQUFqQixFQUNQek0sRUFBT0gsRUFBTzRNLEdBQUEsRUFFZjlILElBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VIclIsRUFEUXNjLEVBQVdqTCxFQUFYaUwsT0FDYXRTLEVBQXJCLEVBQ0F0TSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUI0ZSxFQUFRaFUsRUFBekIsRUFDY3hLLEVBQUF3ZSxFQUFRcFUsRUFBVyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxDQUF0QixHQUdYd0UsSUFFSDdRLEVBRFF5Z0IsRUFBVzVQLEVBQVg0UCxPQUNVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RTLEVBQWxCLEVBQ2NsTSxFQUFBd2UsRUFBUWhVLEdBQWUsQ0FBQSxDQUF2QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQXhLLEVBQUF3ZSxFQUFRcFUsRUFBVyxFQUFuQixHQUdoQnpDLEVuQ2pQb0MscUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbUNpUEosQ0FBRW9MLEtBQUFBLEVBQU12VixNQUFBQSxDQUFSLEVBQWlCK1YsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00zRSxDQUF2RCxDQUNGLENBRU8sTUFBQSxDQUNMcFIsTUFBQUEsRUFDQWlTLE1BNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKRixTQUFTQSxJQUNDN0osRUFBQSxFQUNSNEIsRUFBSSxDQUFFakIsRUFBZUQsRW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xGYyxNbUNrRjRCbUosQ0FBL0QsRUFFQSxJQUFNa00sRUFBVS9XLEVBQVErSSxXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FHeEIsR0FGQThOLEdBQWVoYixHQUFTZ2IsRUFBYUUsRUFBVSxHQUFLLE1BQTVCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUVuQkEsRUFBVSxDQUNiblUsRUFBSSxDQUFFekIsRUFBWVcsR0FBY0MsR0FBa0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNkIsQ0FBbEQsRUF5QkksSUFBRXhOLEVBQVdvTSxFQUFYcE0sT0FDQTJDLEVBQTJCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lILEVBQTNCakgsUUFBUytQLEVBQWtCOUksRUFBbEI4SSxLQUFNdUgsRUFBWXJRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFacVEsUUFDakJuUyxFQUFNa1MsSUFBYUYsRUFBVzRELE9BQVcsRUFBQSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSTFWLEdBQU1oSSxFQUFTaWEsQ0FBVCxFQUl6RGxYLEVBRkFnVixFQUFPMEksR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2YixFQUFRLEtBQU12QyxFQUFRZ1EsV0FBWXdCLEVBQVNDLE1BQU1nRixhQUF6QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFFWjBNLEVBQXdCalYsR0FBeEIsS0FBK0NtVixHQUFqRSxFQUNjaGhCLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK1MsRUFBTTVJLEVBQU0sU0FBWixFQUNBbkssRUFBQStTLEVBQU10SSxHQUFZaUQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUswVCxNQUF2QixFQUNkcGhCLEVBQWMrUyxFQUFNbkksR0FBa0JvVyxFQUFtQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyWCxJQUFBQSxHQUFNLFdBQWEsRUFBNUUsRUFFQSxJQUFBLElBQVV3UCxFQUFJLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFHQSxFQUFJclcsRUFBS3FXLENBQU0sR0FBQSxDQUM5QixJQUFNa0ksRUFBV25oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBUSxLQUFNLEtBQU02UyxDQUFwQixFQUNYeUwsRUFBV3RlLEVBQVEsU0FBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBRW9oQixNQUFPM2pCLEVBQVFrWCxLQUFNM1ksS0FBTSxRQUE3QixFQUF5Q20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbEIsQ0FBbkQsRUFDbkJqVCxFQUFXSSxFQUFPb0csTUFBT3VFLENBQWQsRUFBa0I3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssSUFBSyxTQUFBckIsR0FBQSxPQUFTQSxFQUFNRyxNQUFNbEYsRUFBckIsQ0FBdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQ1hxWixFQUFXLENBQUV2TSxFQUFTLEdBQWUsRUFBVkMsRUFBY3ZILEVBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOFQsTUFBUTlULEVBQUtnQixPQUVqRWhULEVBQU04aUIsRUFBUSxRQUFTaGpCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPa2tCLEVBQVN2RyxDQUFULENBQTlCLEVBRUt2VSxFQUFRNmMsb0JBQ1gvbEIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU04aUIsRUFBUSxVQUFXaGpCLEVBQU8wa0IsRUFBVy9HLENBQVgsQ0FBaEMsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR1luWixFQUFBcWhCLEVBQUlsWCxFQUFNLGNBQVYsRUFDQW5LLEVBQUF3ZSxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JVLEVBQU0sS0FBZCxFQUNkbkssRUFBY3dlLEVBQVFsVSxHQUFlOEQsRUFBUzNHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFNLEdBQWYsQ0FBckMsRUFDQXpILEVBQWN3ZSxFQUFRL1QsR0FBWTVHLEdBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMGQsRUFBTXBJLEVBQUksQ0FBbEIsQ0FBbEMsRUFDY25aLEVBQUF3ZSxFQUFRcFUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVcsQ0FBRyxDQUF0QixFQUVkNU0sRUFBTUQsS0FBTSxDQUFFOGpCLEdBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFJN0MsT0FBQUEsRUFBUTNKLEtBQU1zRSxDQUFwQixDQUFaLENBQ0YsQ0FyRFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM1EsRUFBQSxFQUNEYixFbkN0RzRCLHFCbUNzR0YsQ0FBRW9MLEtBQUFBLEVBQU12JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YsTUFBQUEsQ0FBUixFQUFpQmlSLEVBQU9ySCxFQUFPOEYsS0FBUDlGLENBQWxELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUNSLENBQ0YsRUFnSkV4QixRQUFBQSxFQUNBNkksTUFBQUEsRUFDQWpHLE9BQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxDQUxLLENBT1QsT2xCcE9nQixTQUFNcEIsRUFBZ0JrRyxFQUF3QjFJLEdBQ3REJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFFNEksRUFBNkI1SSxFQUE3QjRJLGFBQWNJLEVBQWVoSixFQUFmZ0osV0FLaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCcEosRUFBaUMsR0FLdkMsU0FBU2lMLElBbURULElBQ1E1SyxFQUNFMkMsRUFwRFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQUFPaUgsUUFBUW5SLFFBQVMsU0FBVStELEdBQ3pCQSxFQUFPeWdCLFdBQ050JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2EsRUFBQUEsRUFBUW5HLEVBQU9zTixNQUFmbkgsRUFDQXVhLEVBQUExZ0IsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTixPQUFRbkgsQ0FBZixFQUVSLENBTEZBLEVBT0tvRyxJQTRDQzNJLEVBQVFzQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZ0JDLElBQ3RCSSxFQUFPM0MsRUFBUDJDLElBRUp2QixHQUFheVosQ0FBakIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0FsWSxFQUFJUCxHQUFxQmlaLENBQXpCLEVBQ0ExWSxFQUFJLENBQUUxQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZVMsR0FBaUJpQyxDQUF0QyxFQUVBaEUsRUFBT2pILEtBQU1zSCxDQUFiLEVBQ00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUFBOEMsS0FBTWQsR0FBMEJPLEVBQU9pSCxPQUF2QyxFQWpEUixDQUtBLFNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTekksSUFDUHBCLEVBQU90SCxRQUFTLFNBQVMySCxHQUFFQSxFQUFNZSxRQUFOLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFrQixDQUE3QyxFQUNBOUssRUFBTzBKLENBQVAsQ0FDRixDQWtCUyxTQUFBbWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU1wVCxFQUFnQnROLEdBQ3ZCNEQsRUFBUXNDLEVBQWdCb0gsR0FFOUIxSixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTTJDLEdBQUl6QixFQUFZLFNBQUVtSCxFQUFPcUcsRUFBTWdHLEdBQ25DdFksRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU82WixHQUFJN1osRUFBT21JLEdBQUkyRCxFQUFYLEVBQW9Cd00sRUFBT3JNLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF0QyxDQUNBLENBRkYsRUFJQTFJLEVBQU9qSCxLQUFNc0gsQ0FBYixDQUNGLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3FCQSxTQUFTMkQsSUFDTzhFLEVBQUFBLEVBQVc2QixTQUFTNEQsS0FBTW5JLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrQmhHLEVBQVE0TSxZQUFjN0gsR0FBTSxXQUFhLEVBQXJGMkQsQ0FDaEIsQ0FPQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU29TLEVBQVN6UyxHQUNoQjdGLEVBQU8wVCxHQUFJN04sRUFBTUMsS0FBakI5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsQ0FDRixDQVFTLFNBQUE4WSxFQUFXalQsRUFBdUJsUSxHQUNwQ00sRUFBVTJULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFjTCxHQUFjNVQsQ0FBQSxDQUE1QixJQUNiMmlCLEVBQVN6UyxDQUFULEVBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndkwsRUFBUzNFLENBQVQsRUFFSixDQUVPLE1BQUEsQ0FDTGtWLE1BQU96VyxFQUNMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzhSLEVBQVcyUSxNQUFNblYsSUFDakIsQ0FBRThFLFdBQVluUixHQUFhbVIsQ0FBYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBNEJKLEVBQWVJLENBQXpELEVBQ0EsQ0FBQSxDQUhLLEVBS1A2QixNQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQTdKLFFBQUFBLEVBQ0EwUixRQTFFRixXQUNVMVIsRUFBQSxFQUNGNkosRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsQ0FDUixDQStETyxDQVVULFFtQnBJZ0IsU0FBT3JJLEVBQWdCa0csRUFBd0IxSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDN0QsSUFBUWxKLEVBQVN5TCxFQUFnQkMsQ0FBaEIsRUFBVDFMLEtBS0prbUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVcsRUFnQmYsU0FBU0MsRUFBUzlrQixHQUNoQixJQUVRNmIsRUFDQXhXLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBUSxFQUNBa2YsRUFrQmNsSixFQXZCakI3YixFQUFFZ2lCLGFBRUNuRyxHQURFbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQVdobEIsRUFBWGdsQixRQUNtQixFQUNyQjNmLEVBQVlELEdBQVFwRixHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEI2RixFQUFZZ0MsRUFBUW9kLG1CQUFxQixFQUN6Q0YsRUFBWWxkLEVBQVFxZCxZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBYyxFQUVuQ2hmLEVBQUs4ZSxHQUFXbmYsR0FBOEJrZixFQUF2QjFmLEVBQVl3ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFDdEN4YSxFQUFPMFQsR0FBSWxDLEVBQVksSUFBTSxHQUE3QnhSLEVBQ1d3YSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQXhmLEdBY093VyxFQVhMQSxFQVlSaFUsRUFBUXNkLGNBQ1o5YSxDQUFBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTytCLE1BQU1DLEdBQUk5TyxDQUFqQjhNLEdBQ21ELENBQUEsSUFBbkRrRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV3dILFdBQVdxRixZQUFhdkIsQ0FBbkN0TCxHQWQyQjVMLEVBQVMzRSxDQUFULEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUVsQyxDQWVPLE1BQUEsQ0FDTDBTLE1BMUNGLFdBQ083SyxFQUFRdWQsT0FDWHptJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBTTRSLEVBQVc2QixTQUFTQyxNQUFPLFFBQVN5UyxFQUFTM1IsRUFBbkQsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRUosQ0FxQ08sQ0FHVCxPQzlDZ0IsU0FBTTlJLEVBQWdCa0csRUFBd0IxSSxHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNUQsSUFBUTRDLEVBQU9MLEVBQWdCQyxDQUFoQixFQUFQSSxHQUNBNEgsRUFBVTlCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFXNkIsU0FBckJDLE1BS0Z1TSxFQUFVL1csRUFBUXdkLE1BQVEsQ0FBRXhkLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRNEksYUFLcEM2VSxFQUFLbmlCLEVBQVEsT0FBUStMLEVBQVIsRUFLYnBFLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFXRCxHQWhDTSxHQWdDNkJwTSxFQUFPa1ksRUFBUSxDQUFBLENBQVIsQ0FBekIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBd0JsQyxTQUFTQSxFQUFRNUUsR0FDRDlPLEVBQUFvUCxFQUFPckUsR0FBVytELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFsQixFQUVUQSxHQUNIN1EsRUFBUW1SLEVBQU9pVCxDQUFmLEVBQ0F4YSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUzFNLE1BQVQsSUFFQWdHLEVBQVFraEIsQ0FBUixFQUNBeGEsRUFBU2EsT0FBVCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFSixDQWdCQSxTQUFTeVYsRUFBUy9CLEdBQ1hULEdBQ0gzYixFQUFjb1AsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0RSxHQUFXc1IsRUFBVyxNQUFRLFFBQW5ELENBRUosQ0FFTyxNQUFBLENBQ0wzTSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUFsREYsV0FDT2tNLElBQ0h3QyxFQUFTLENBQUU3USxFQUFXZ1YsU0FBU3RaLFVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EvQixFQUNjaEosRUFBQW9QLEVBQU9wRSxHQUFhLENBQUEsQ0FBcEIsRUFDZHFYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFHRSxZQUFjLElBRWpCL2EsRUFBSVYsR0FBcUJ0TCxFQUFPMmlCLEVBQVMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsQ0FBaEIsQ0FBekIsRUFDQTNXLEVBQUlULEdBQXNCdkwsRUFBTzJpQixFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQWhCLENBQTFCLEVBQ0EzVyxFQUFJLENBQUV4QixHQUFhVyxHQUFrQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduTCxFQUFPa1ksRUFBUSxDQUFBLENBQVIsQ0FBNUMsRUFFSixFQXlDRXlLLFFBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUNBdlksUUFwQkYsV0FDRWhHLEVBQWlCd1AsRUFBTyxDQUFFdEUsR0FBV0UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQWFELEdBQWxELEVBQ0E1SixFQUFRa2hCLENBQVIsQ0FDRixDQWNPLENBS1QsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdkdhRyxHQUFvQixDQUMvQnRtQixLQUFvQixRQUNwQjBYLEtBQW9CLFNBQ3BCNk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQW9CLElBQ3BCeE4sUUFBb0IsRUFDcEJ6RixZQUFvQixDQUFBLEVBQ3BCOEQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BQW9CLENBQUEsRUFDcEIzRixXQUFvQixDQUFBLEVBQ3BCOFQsbUJBQW9CLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQ3BCNVosU0FBb0IsSUFDcEJnVixhQUFvQixDQUFBLEVBQ3BCQyxhQUFvQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBQSxFQUNwQkosY0FBb0IsQ0FBQSxFQUNwQmdHLE9BQW9CLGdDQUNwQnJPLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FvQixDQUFBLEVBQ3BCN0MsVUFBb0IsTUFDcEI2SCxVQUFvQixDQUFBLEVBQ3BCLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLGVBQW9CLDZDQUNwQjhTLEtBQW9CLENBQUEsRUFDcEJ6a0IsUTlCcUNxQixDQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckJ5UCxNQUFZOUIsR0FDWnFNLE1BQVlwTSxHQUNaK0gsT0FBWTdILEdBQ1pvUSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBWW5RLEdBQ1o2SCxLQUFZNUgsR0FDWjZILEtBQVk1SCxHQUNaK0IsV0FBWTlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNaZ0osS0FBWS9JLEdBQ1owVSxRQXhDdUN0VixFQUFsQyxTQStCZ0IsRThCcEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckJ3QyxLQzFCa0IsQ0FDbEI2RixLQUFZLGlCQUNaQyxLQUFZLGFBQ1oySSxNQUFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxvQkFDWkQsS0FBWSxtQkFDWnhOLE9BQVksaUJBQ1o4UyxNQUFZLGdCQUNaL0UsSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVksaUJBQ1poVSxNQUFZLGlCQUNacUwsU0FBWSxXQUNaMUcsTUFBWSxRQUNaZ1UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQVkseUJBQ1oxUixXQUFZLFVBWk0sRUQyQmxCd0IsY0FBZSxDQUNidVIsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2EsRUFDYkUsWUFBYSxFQUNicEcsU0FBYSxPQUhBLENBckJnQixFRU9qQixTQUFBcScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHLEdBQU14YixFQUFnQmtHLEVBQXdCMUksR0FDdEQsSUFBRTRKLEVBQVdsQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWGtCLE9BY1IsU0FBUzhGLElBQ1A5RixFQUFPdFIsUUFBUyxTQUFTK1AsR0FDdkJBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNM00sTUFBTywyQkFBNkIsSUFBTTJNLEVBQU1DLE1BQXRELElBQUEsQ0FDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FGRixDQUdGLENBYU8sTUFBQSxDQUNMdUMsTUEzQkYsV0FDRXRJLEVBQWdCQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBaEIsRUFBeUJJLEdBQUksQ0FBRTFCLEVBQWVRLEdBQWlCZ08sQ0FBL0QsQ0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUEwQkVuWixNQVBPLFNBQU8rUixFQUFlMlYsR0FDN0JyVSxFQUFPbE8sTUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsYUFBZCxXQUF3Q3NFLEVBQVE2ZCxNQUFoRCxNQUE2RDdkLEVBQVE4ZCxNQUFyRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQTdtQixFQUFVZ25CLENBQVYsQ0FDRixFQUtFbmEsT0FBUTlNLEVBSEgsQ0FLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1QsQ0NyQ2dCLFNBQUFxUixHQUFPN0YsRUFBZ0JrRyxFQUF3QjFJLEdBQzdELElBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJa2UsRUFQSWhKLEVBQTZCeE0sRUFBN0J3TSxLQUFNaEYsRUFBdUJ4SCxFQUF2QncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSCxXQUFZb0QsRUFBVzVLLEVBQVg0SyxPQUNsQm5GLEVBQVN6RixFQUFXNkIsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BCNEQsS0FDRmdRLEVBQWF2bkIsRUFBTzhFLEVBQU95UyxFQUFNLFlBQXBCLEVBZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEbkIsU0FBU3JLLElBQ1BxYSxFQUFZLEVBQVosRUFDQTdLLEVBQU94UCxPQUFQLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNGLENBc0JPLE1BQUEsQ0FDTCtHLE1BaEVGLFdBQ0V0SSxFQUFnQkMsQ0FBaEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQXlCMUwsS0FBTXFYLEVBQU0sZ0JBQWlCLFNBQUtoVyxHQUNwREEsRUFBRWtFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFXOFIsR0FBUStQLElBQ2pCcGEsRUFBQSxFQUNLb2EsRUFBQSxFQUVkLENBTEYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBTUYsRUEwREUzbkIsTUFqRE8sU0FBTytSLEVBQWUyVixHQUM3QixJQUFNckssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWNzQixFQUFLekIsV0FBWW5MLEVBQU8sQ0FBQSxDQUF4QixFQUNkb0wsRUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3QixFQUFLZCxZQUFuQixFQUNBeUosRUE2QlIsU0FBbUJ2VixHQUNYLElBQUV5ViwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZ0IvZCxFQUFoQitkLFlBRVIsR0FBS3ZiLEVBQU9nQyxHQUFJMEQsRUFBWDFGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFzQnViLEVBQWMsQ0FDakMsSUFBQXBQLEVBQU91QixFQUFXdUcsU0FBVSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUFyQixFQUNQamdCLEVBQU8wWixFQUFXNEQsT0FBbEIsRUFFTixHQUFnQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBVG5GLEdBQXVCblksR0FBVDhSLEdBQTRCOVIsR0FBUm1ZLEdBQXlCLElBQVZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0csRUFDL0MsT0FBQXlWLENBRVgsQ0FFQSxPQUFPL2QsRUFBUTZkLEtBQ2pCLEVBMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDZ0N2VixHQUVRLEdBQWpDakssRUFBS3VWLEVBQWNGLElBQTRCLEdBQVRtSyxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEM3ZCxFQUFRb2UsVUFDWDlLLEVBQU9pRCxPQUFRM0MsRUFBYWlLLEVBQU8sQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFBT0ksQ0FBMUMsR0FFWUUsZUFBY04sRUFBZCxNQUEyQjdkLEVBQVE4ZCxNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbkMsRUFDUDVJLEVBQUExQixVQUFXSSxFQUFhLENBQUEsQ0FBeEIsRUFDU3NLLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBRCxJQUdoQi9JLEVBQUszQixLQUFNakwsQ0FBWCxFQUNLMlYsRUFBQSxFQUVUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQWlDRW5hLE9BQUFBLENBSEssQ0FLVCxDQy9FYXRCLGFBOERYLFNBQWFuRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFBOEIyRCxHQTNDM0NxZSxLQUFTcGUsTUFBOEJzQyxFQUF2QyxFQUtBOGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQVMzVixXQUF5QixHQUt6QjJWLEtBQUE5WixNQUFxQkYsRTlGOUNULEc4Rm1EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JCZ2EsS0FBUzVVLFFBQXdCLEdBS2pDNFUsS0FBaUJDLEVBQWMsR0FVL0JELEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRRSxFQUEyQyxHQWMzQzVWLEVBQU8vUSxFQUFVeUUsQ0FBQSxFQUFXYSxHQUFvQjEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixTQUFVYSxDQUFWLEVBQXFCQSxFQUNuRXVCLEdBQUErSyxFQUFVQSxFQUFWLGNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBSVIzSSxFQUFVbEYsRUFBTyxDQUNmc08sTUFBWXBOLEVBSGRxaUIsS0FBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxVixLQUFPQSxFQUdzQjlDLEVBQXBCLEdBQW9DLEdBQ2hEd0osV0FBWXJULEVBQWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMk0sRUFBTTdDLEVBQXBCLEdBQXlDLEVBRnRDLEVBR2Q4WCxHQUFVWSxFQUFPQyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVXplLEdBQVcsRUFIeEIsRUFLYixJQUNGbEYsRUFBT2tGLEVBQVMwZSxLQUFLQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBTzNpQixFQUFjMk0sRUFBTWhMLEVBQWhDLENBQWhCLENBR0YsT0FGVXhGLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNSeUYsR0FBUSxDQUFBLEVBQU8sY0FBZixDQUNGLENBRUF5Z0IsS0FBS0MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tqa0IsT0FBT2lCLE9BQVFSLEVBQU8sR0FBSWtGLEVBQTFCLENBQ1osNEJBVUE2SycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBQSxTQUFPK1QsRUFBbUR6TCxHQUEwQyxJQUFBMEwsRUFBQVIsS0FDMUY5WiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBc0I4WixLQUF0QjlaLE1BQU9tRSxFQUFlMlYsS0FBZjNWLFdBNEJSLE9BM0JQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlLLEdBQVEyRyxFQUFNQyxHQUFJLEM5RjdHQyxFQThCRSxFOEYrRWIsRUFBb0MsaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCQUE1QyxFQUVBRCxFQUFNTCxJOUYvR2EsQzhGK0duQixFQUVBbWEsS0FBS1MsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUtwVyxFQUNMMlYsS0FBQVUsRUFBSzVMLEdBQWNrTCxLQUFLVSxJQUFRVixLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdaLEdBQUk0RCxFQUFULEVBQWtCNFYsR0FBTzNWLElBQ3pEZ1csS0FBQUUsRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLLEdBQWNQLEtBQUtFLEVBSXJCaGtCLEVBRmFLLEdBQVEsR0FBSW9rQixHQUF1QlgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUtFLEVBQUksQ0FBRXBMLFdBQVlrTCxLQUFLVSxDQUFuQixDQUFwQyxFQUVQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFFRSxFQUFXdGtCLEdBQzNCdWtCLEVBQVlELEVBQVdKLEVBQU1uVyxFQUFZbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLEVBQUtQLENBQWxDLEdBQ2xCNVYsRUFBWS9OLEdBQVF1a0IsR0FDVjdSLE9BQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNlIsRUFBVTdSLE1BQW5CLENBQ1YsQ0FKTSxFQU1SOVMsRUFBUW1PLEVBQVksU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F3VyxHQUNyQkEsRUFBQXJVLE9BQVNxVSxFQUFVclUsTUFBbkIsQ0FDVixDQUZGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUlBd1QsS0FBS3RiLEtBQU03QixDQUFYLEVBRVUvSCxFQUFBa2xCLEtBQUsxViwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS2xDaEdzQnBCLGdCa0NnRzNCLEVBRVZoRCxFQUFNTCxJOUYzSFUsQzhGMkhoQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQW1hLEtBQUt0YixLMUN4SStCLE8wQ3dJcEMsRUFFT3NiLElBQ1QsSUFvQkF0QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBQSxTQUFNcFQsR0FTRyxPQVJQMFUsS0FBSzVVLFFBQVE5USxLQUFNLENBQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ1IsT0FBQUEsQ0FBRixDQUFuQixFQUNBQSxFQUFPRixRQUFROVEsS0FBTSxDQUFFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dSLE9BQVEwVSxLQUFNdkIsU0FBVSxDQUFBLENBQTFCLENBQXJCLEVBRUt1QixLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSzlaLE1BQU1DLEc5RnZKQSxDOEZ1SlgsSUFDRTZaLEtBQUFTLEVBQUdLLEtBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInek0sUUFBUixFQUNFL0ksRUFBQWpCLFdBQVd5VyxLQUFLek0sUUFBaEIsR0FHRjJMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUNULElBc0NBbkksR0FBQSxTQUFJQyxHQUVLLE9BREZrSSxLQUFBUyxFQUFHNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLFdBQVdnRyxHQUFJQyxDQUFsQixFQUNFa0ksSUFDVCxJQTBCQXpiLEdBQUEsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUloRCxFQUEyQkcsR0FFdEIsT0FERnNlLEtBQUFwZSxNQUFNMkMsR0FBSWhELEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRRyxDQUFsQixFQUNFc2UsSUFDVCxJQXFCQXZiLElBQUEsU0FBK0JsRCxHQUV0QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FERnllLEtBQUFwZSxNQUFNNkMsSUFBS2xELENBQVgsRUFDRXllLElBQ1QsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWUF0YixLQUFBLFNBQU05QyxHQUFzQixJQUFBbWYsRUFHbkIsT0FERm5mLEVBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFBQSxPQUFNOEMsS0FBTTlDLE1BQUFBLEVBQUFBLENBQUFBLEdBQVU1SixPQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFBT1UsVUFBVyxDQUFYLENBQWxDLENBQUEsRUFDT3NuQixJQUNULElBc0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXJsQixJQUFBLFNBQUtzVixFQUE0RGhHLEdBRXhELE9BRFArVixLQUFLUyxFQUFHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xWLE9BQU81USxJQUFLc1YsRUFBUWhHLENBQTVCLEVBQ08rVixJQUNULElBUUE5aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BQUEsU0FBUXdULEdBRUMsT0FERnNPLEtBQUFTLEVBQUdsVixPQUFPck4sT0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVF3VCxDQUFsQixFQUNFc08sSUFDVCxJQVNBN1osR0FBQSxTQUFJbE4sR0FDSyxPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSttQixLQUFLQyxFQUFHaG5CLE9BQVNBLENBQzFCLElBT0EwVixRQUFBLFdBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLE9BRFBxUixLQUFLdGIsS0FBTXJCLENBQVgsRUFDTzJjLElBQ1QsSUFTQXJkLFEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLFNBQVN3TCxHQUEwQixLQUFBLElBQTFCQSxJQUFBQSxFQUFhLENBQUEsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsSUFBRXZNLEVBQWlCb2UsS0FBakJwZSxNQUFPc0UsRUFBVThaLEtBQVY5WixNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnQlIsT0FkRkEsRUFBTUMsRzlGMVZRLEM4RjBWZCxFQUVhakMsRUFBQThiLElBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU96YixHMUM5VlcsUTBDOFZNeWIsS0FBS3JkLFFBQVFsSyxLQUFNdW5CLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FNN1IsQ0FBekIsQ0FBeEIsR0FFUmpTLEVBQUE4akIsS0FBS1MsRUFBSSxTQUFhSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDbEJBLEVBQUFsZSxTQUFXa2UsRUFBVWxlLFFBQVN3TCxDQUFuQixHQUNwQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBQSxDQUZLLEVBSVJ2TSxFQUFNOEMsS0FBTWYsQ0FBWixFQUNBL0IsRUFBTWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQU4sRUFDY3dMLEdBQUF0VyxFQUFPbW9CLEtBQUs1VSxPQUFaLEVBQ2RsRixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTUwsSTlGdlVhLEM4RnVVbkIsR0FHS21hLElBQ1QsMkJBT0EsV0FDRSxPQUFPQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBS0MsQ0FDZCxNQU9BLFNBQWF0ZSxHQUNYcWUsS0FBS1MsRUFBR3pGLE1BQU1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YsSUFBS2xFLEVBQVMsQ0FBQSxFQUFNLENBQUEsQ0FBbEMsQ0FDRixxQkFPQSxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDRSxPQUFPcWUsS0FBS1MsRUFBR2xWLE9BQU84RyxVQUFXLENBQUEsQ0FBMUIsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1Qsb0JBT0EsV0FDUyxPQUFBMk4sS0FBS1MsRUFBRzVPLFdBQVd1RyxTQUFuQixDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVCxRQTVYSyxTQUFNalUsRUFJSmljLFNBQW9CLEdBSmhCamMsRUFTSzVNLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQSJ9JywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5taW4uanMubWFwJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ319LAogMzY6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy8qIVxuICogU3BsaWRlLmpzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgOiBNSVRcbiAqIENvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xuJ3UiCiAgICAgICAgICAgICAgICAgICAgICAgIGIic2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3RvciwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3RvdHlwZSIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsICIKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTiA9ICIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSI7XG52YXIgQ1JFQVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQgPSAxO1xudmFyIE1PVU5URUQgPSAyO1xudmFyIElETEUgPSAzO1xudmFyIE1PVklOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0cgPSA0O1xudmFyIFNDUk9MTElORyA9IDU7XG52YXIgRFJBR0dJTkcgPSA2O1xudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidERVNUUk9ZRUQgPSA3O1xudmFyIFNUQVRFUyA9IHtcbiAgQ1JFQVRFRDogQ1JFQVRFRCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gIE1PVU5URUQ6IE1PVU5URUQsXG4gIElETEU6IElETEUsXG4gIE1PVklORzogTU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVklORyxcbiAgU0NST0xMSU5HOiBTQ1JPTExJTkcsXG4gIERSQUdHSU5HOiBEUkFHR0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkcsXG4gIERFU1RST1lFRDogREVTVFJPWUVEXG59O1xuXG5mdW5jdGlvbiBlbXB0eShhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5TGlrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jKSB7XG4gIHJldHVybiBmdW5jLmJpbmQuYXBwbHkoZnVuYywgW251bGxdLmNvbmNhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoc2xpY2UoYXJndW1lbnRzLCAxKSkpO1xufVxuXG52YXIgbmV4dFRpY2sgPSBzZXRUaW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW91dDtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUsIHN1YmplY3QpIHtcbiAgcmV0dXJuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3Qoc3ViJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QpIHtcbiAgcmV0dXJuICFpc051bGwoc3ViamVjdCkgJiYgdHlwZU9mKCJvYmplY3QiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgc3ViamVjdCk7XG59XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgImZ1bmN0aW9uIik7XG52YXIgaXNTdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYXBwbHkodHlwZU9mLCAic3RyaW5nIik7XG52YXIgaXNVbmRlZmluZWQgPSBhcHBseSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZU9mLCAidW5kZWZpbmVkIik7XG5cbmZ1bmN0aW9uIGlzTnVsbChzdWJqZWN0KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICByZXR1cm4gc3ViamVjdCA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQoc3ViamVjdCkge1xuICB0cnkge1xuICAgIHJldHVybiBzdWJqZWN0IGlucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YW5jZW9mIChzdWJqZWN0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93JwogICAgICAgICAgICAgICAgICAgICAgICBiJykuSFRNTEVsZW1lbnQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWVzLCBpdGVyYXRlZSkge1xuICB0b0FycmF5KHZhbHVlcykuZm9yRWFjaChpdGVyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBhcnJheS5pbmRleE9mKHZhbHVlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBwdXNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcnJheSwgaXRlbXMpIHtcbiAgYXJyYXkucHVzaC5hcHBseShhcnJheSwgdG9BcnJheShpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbXMpKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xtLCBjbGFzc2VzLCBhZGQpIHtcbiAgaWYgKGVsbSkge1xuICAgIGZvckVhY2goY2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZWxtLmNsYXNzTGlzdFthZGQgPyAiYWRkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxtLCBjbGFzc2VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB0b2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gY2xhc3Nlcy5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmQocCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudCwgY2hpbGRyZW4pIHtcbiAgZm9yRWFjaChjaGlsZHJlbiwgcGFyZW50LmFwcGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDaGlsZC5iaW5kKHBhcmVudCkpO1xufVxuXG5mdW5jdGlvbiBiZWZvcmUobm9kZXMsIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWYpIHtcbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCA9IChyZWYgfHwgbm9kZSkucGFyZW50Tm9kZTtcblxuICAgIGlmIChwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50KSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIHJlZik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZWxtLCBzZWxlY3Rvcikge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxtKSAmJiAoZWxtWyJtc01hdGNoZXNTZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYiciXSB8fCBlbG0ubWF0Y2hlcykuY2FsbChlbG0sIHNlbGVjdG9yKTtcbn1cblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgdmFyIGNoaWxkcmVuMiA9IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQgPyBzbGljZShwYXJlbnQuY2hpbGRyZW4pIDogW107XG4gIHJldHVybiBzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgPyBjaGlsZHJlbjIuZmlsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0Y2hlcyhjaGlsZCwgc2VsZWN0b3IpO1xuICB9KSA6IGNoaWxkcmVuMjtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGNoaWxkKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpWzBdIDogcGFyZW50LmZpcnN0RWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RDaGlsZDtcbn1cblxudmFyIG93bktleXMgPSBPYmplY3Qua2V5cztcblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zvck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkge1xuICBpZiAob2JqZWN0KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvd25LZXlzKG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGtleSAhPT0gIl9fcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3RvX18iICYmIGl0ZXJhdGVlKG9iamVjdFtrZXldLCBrZXkpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbihvYmplY3QpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9KTtcbiAgfSk7XG4gIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBtZXJnZShvYmplY3QpIHtcbiAgc2xpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKGFyZ3VtZW50cywgMSkuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3bihzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBpZiAoaXNBcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUuc2xpY2UoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBvYmplY3RbaycKICAgICAgICAgICAgICAgICAgICAgICAgYidleV0gPSBtZXJnZSh7fSwgaXNPYmplY3Qob2JqZWN0W2tleV0pID8gb2JqZWN0W2tleV0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJzoge30sIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iamVjdFtrZXldJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzKSB7XG4gIGZvckVhY2goa2V5cycKICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgb3duS2V5cyhvYmplY3QpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgZGVsZXRlIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rba2V5XTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZShlbG1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgYXR0cnMpIHtcbiAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2goYXR0cnMsIGZ1bmN0aW9uIChhdHRyKSB7XG4gICAgICBlbG0gJiYgZWxtLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCB2YWx1ZSkge1xuICBpZiAoaXNPYmplY3QoYXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzKSkge1xuICAgIGZvck93bihhdHRycywgZnVuY3Rpb24gKHZhbHVlMiwgbmFtZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIHNldEF0dHJpYnV0ZShlbG1zLCBuYW1lLCB2YWx1ZTIpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfSBlbHNlIHtcbiAgICBmb3JFYWNoKGVsbXMsIGZ1bmN0aW9uIChlbG0pIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpc051bGwodmFsdWUpIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoZWxtLCBhdHRycykgOiBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlKHRhZywgYXR0cnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJlbnQpIHtcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgaWYgKGF0dHJzKSB7XG4gICAgaXNTdHJpbmcoYXR0cnMpID8gYWRkQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzKGVsbSwgYXR0cnMpIDogc2V0QXR0cmlidXRlKGVsbSwgYXR0cnMpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZXR1cm4gZWxtO1xufVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsbSlbcHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BdO1xuICB9XG5cbiAgaWYgKCFpc051bGwodmFsdWUpKSB7XG4gICAgZWxtLnN0eWxlW3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wXSA9ICIiICsgdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGxheShlbG0sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNwbGF5Mikge1xuICBzdHlsZShlbG0sICJkaXNwbGF5IiwgZGlzcGxheTIpO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gZm9jdXMoZWxtKSB7XG4gIGVsbVsic2V0QWN0aXZlIl0gJiYgZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbVsic2V0QWN0aXZlIl0oKSB8fCBlbG0uZm9jdXMoe1xuICAgIHByZXZlbnRTY3JvbGw6IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhdHRyKTtcbn1cblxuZnVuY3Rpb24gaGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NsYXNzKGVsbSwgY2xhc3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJiYgZWxtLmNsYXNzTGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVjdCh0YXJnZXQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIHJldHVybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24gKG5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKSB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBwYXJzZUh0bWwoaHRtbCkge1xuICByZXR1cm4gY2hpbGQobmV3IEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaHRtbCIpLmJvZHkpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gcHJldmVudChlLCBzdG9wUHJvcGFnYXRpb24pIHtcbiAgZS5wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmVudERlZmF1bHQoKTtcblxuICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVlcnkocGFyZW50LCBzZWxlY3Rvcikge1xuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiBxdWVyeUFsbChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IgPyBzbGljZShwYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA6IFtdO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZU9mKGUpIHtcbiAgcmV0dXJuIGUudGltZVN0YW1wO1xufVxuXG5mdW5jdGlvbiB1bmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCh2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyB2YWx1ZSArICJweCIgOiAiIjtcbn1cblxudmFyIFBST0pFQ1RfQ09ERSA9ICJzcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIjtcbnZhciBEQVRBX0FUVFJJQlVURSA9ICJkYXRhLSIgKyBQUk9KRUNUX0NPREUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigiWyIgKyBQUk9KRUNUX0NPREUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJysgIl0gIiArIChtZXNzYWdlIHx8ICIiKSk7XG4gIH1cbn1cblxudmFyIG1pbiA9IE1hdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm1pbixcbiAgICBtYXggPSBNYXRoLm1heCxcbiAgICBmbG9vciA9IE1hdGguZmxvb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIGNlaWwgPSBNYXRoLmNlaWwsXG4gICAgYWJzID0gTWF0aC5hYnM7XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBhcHByb3hpbWF0ZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikge1xuICByZXR1cm4gYScKICAgICAgICAgICAgICAgICAgICAgICAgYidicyh4IC0geSkgPCBlcHNpbG9uO1xufVxuXG5mdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHgsIHksIGV4Y2x1c2l2ZSkge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW0gPCBudW1iZXIgJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBudW1iZXIgPD0gbWF4aW11bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAobnVtYmVyLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCwgeSkge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgdmFyIG1heGltdW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbWF4KHgsIHkpO1xuICByZXR1cm4gbWluKG1heChtaW5pbXVtLCBudW1iZXIpLCBtYXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW11bSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4gKyh4ID4gMCkgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKyh4IDwgMCk7XG59XG5cbmZ1bmN0aW9uIGNhbWVsVG9LZWJhYihzdHJpbmcpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBzdHJpbmcucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgIiQxLSQyIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdChzdHJpbmcsIHJlcGxhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlbWVudHMpIHtcbiAgZm9yRWFjaChyZXBsYWNlbWVudHMsIGZ1bmN0aW9uIChyZXBsYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgiJXMiLCAiIiArIHJlcGxhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlbWVudCk7XG4gIH0pO1xuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBwYWQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcikge1xuICByZXR1cm4gbnVtYmVyIDwgMTAgPyAiMCIgKyBudW1iZXIgOiAiIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XG59XG5cbnZhciBpZHMgPSB7fTtcblxuZnVuY3Rpb24gdW5pcXVlSWQocHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpeCkge1xuICByZXR1cm4gIiIgKyBwcmVmaXggKyBwYWQoaWRzW3ByZWZpeF0gPSAoaWRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1twcmVmaXhdIHx8IDApICsgMSk7XG59XG5cbmZ1bmN0aW9uIEV2ZW50QmluZGVyKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGJpbmQodGFyZ2V0cywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50cywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBmb3JFYWNoRXZlbnQodGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBpc0V2ZW50VGFyZ2V0ID0gKCJhZGRFdmVudExpc3RlbmVyIiBpbiB0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KTtcbiAgICAgIHZhciByZW1vdmVyID0gaXNFdmVudFRhcmdldCA/IHRhcmdldC5yZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlRXZlbnRMaXN0ZW5lci5iaW5kKHRhcmdldCwgZXZlbnQsIGNhbGxiYWNrLCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgOiB0YXJnZXRbInJlbW92ZUxpc3RlbmVyIl0uYmluZCh0YXJnZXQsIGNhbGxiYWNrKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpc0V2ZW50VGFyZ2V0ID8gdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBjYWxsYmFjaywgb3B0aW9ucykgOiB0YXJnZXRbImFkZExpc3RlbmVyIl0oY2FsbGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrKTtcbiAgICAgIGxpc3RlbmVycy5wdXNoKFt0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsYmFjaywgcmVtb3Zlcl0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdW5iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCh0YXJnZXRzLCBldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgZm9yRWFjaEV2ZW50KHRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JnZXRzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChsaXN0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyWzBdID09PSB0YXJnZXQgJiYgbGlzdGVuZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInWzFdID09PSBldmVudCAmJiBsaXN0ZW5lclsyXSA9PT0gbmFtZXNwYWNlICYmICghY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrIHx8IGxpc3RlbmVyWzNdID09PSBjYWxsYmFjaykpIHtcbiAgICAgICAgICBsaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJbNF0oKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBkaXNwYXRjaCh0YXJnZXQsIHR5cGUsIGRldGFpbCkge1xuICAgIHZhciBlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgYnViYmxlcyA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIEN1c3RvbUV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCA9PT0gImZ1bmN0aW9uIikge1xuICAgICAgZSA9IG5ldyBDdXN0b21FdmVudCh0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJywge1xuICAgICAgICBidWJibGVzOiBidWJibGVzLFxuICAgICAgICBkZXRhaWw6IGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhaWxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlID0gZG9jdW1lbnQuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO1xuICAgICAgZS5pbml0Q3VzdG9tRXZlbnQodCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIHRhcmdldC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzcGF0Y2hFdmVudChlKTtcbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoRXZlbnQodGFyZ2V0cywgZXZlbnRzLCBpdGVyYXRlZSkge1xuICAgIGZvckVhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIHRhcmdldCAmJiBmb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaChldmVudHMsIGZ1bmN0aW9uIChldmVudHMyKSB7XG4gICAgICAgIGV2ZW50czIuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCIgIikuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROUykge1xuICAgICAgICAgIHZhciBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ21lbnQgPSBldmVudE5TLnNwbGl0KCIuIik7XG4gICAgICAgICAgaXRlcmF0ZWUodGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCwgZnJhZ21lbnRbMF0sIGZyYWdtZW50WzFdKTtcbiAgICAgICAgfSk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgZGF0YVs0XSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgICBlbXB0eShsaXN0ZW5lcnMpO1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgYmluZDogYmluZCxcbiAgICB1bmJpbmQ6IHVuYmluZCxcbiAgICBkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2g6IGRpc3BhdGNoLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbiAgfTtcbn1cblxudmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9NT1VOVEVEID0gIm1vdW50ZWQiO1xudmFyIEVWRU5UX1JFQURZID0gInJlYWR5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfTU9WRSA9ICJtb3ZlIjtcbnZhciBFVkVOVF9NT1ZFRCA9ICJtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZWQiO1xudmFyIEVWRU5UX0NMSUNLID0gImNsaWNrIjtcbnZhciBFVkVOVF9BQ1RJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFID0gImFjdGl2ZSI7XG52YXIgRVZFTlRfSU5BQ1RJVkUgPSAiaW5hY3RpdmUiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9WSVNJQkxFID0gInZpc2libGUiO1xudmFyIEVWRU5UX0hJRERFTiA9ICJoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZGVuIjtcbnZhciBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xudmFyIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19VUERBVEVEID0gInVwZGF0ZWQiO1xudmFyIEVWRU5UX1JFU0laRSA9ICJyZXNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBFVkVOVF9SRVNJWkVEID0gInJlc2l6ZWQiO1xudmFyIEVWRU5UX0RSQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gImRyYWciO1xudmFyIEVWRU5UX0RSQUdHSU5HID0gImRyYWdnaW5nIjtcbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfRFJBR0dFRCA9ICJkcmFnZ2VkIjtcbnZhciBFVkVOVF9TQ1JPTEwgPSAic2Nyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCI7XG52YXIgRVZFTlRfU0NST0xMRUQgPSAic2Nyb2xsZWQiO1xudmFyIEVWRU5UX08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVSRkxPVyA9ICJvdmVyZmxvdyI7XG52YXIgRVZFTlRfREVTVFJPWSA9ICJkZXN0cm95IjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgRVZFTlRfQVJST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XG52YXIgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1BBR0lOQVRJT05fTU9VTlRFRCA9ICJwYWdpbmF0aW9uOm1vdW50ZWQiO1xudmFyIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9QQUdJTkFUSU9OX1VQREFURUQgPSAicGFnaW5hdGlvbjp1cGRhdGVkIjtcbnZhciBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gIm5hdmlnYXRpb246bW91bnRlZCI7XG52YXIgRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX0FVVE9QTEFZX1BMQVkgPSAiYXV0b3BsYXk6cGxheSI7XG52YXIgRVZFTlRfQVVUT1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFZX1BMQVlJTkcgPSAiYXV0b3BsYXk6cGxheWluZyI7XG52YXIgRVZFTlRfQVVUT1BMQVknCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlIjtcbnZhciBFVkVOVF9MQVpZTE9BRF9MT0FERUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gImxhenlsb2FkOmxvYWRlZCI7XG52YXIgRVZFTlRfU0xJREVfS0VZRE9XTiA9ICJzayInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEVWRU5UX1NISUZURUQgPSAic2giO1xudmFyIEVWRU5UX0VORF9JTkRFWF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0hBTkdFRCA9ICJlaSI7XG5cbmZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBidXMgPSBTcGxpZGUyID8gU3BsaWRlMi5ldmVudC5idXMgOiBkb2N1bWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICB2YXIgYmluZGVyID0gRXZlbnRCaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyKCk7XG5cbiAgZnVuY3Rpb24gb24oZXZlbnRzLCBjYWxsYmFjaykge1xuICAgIGJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXIuYmluZChidXMsIHRvQXJyYXkoZXZlbnRzKS5qb2luKCIgIiksIGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgICAgY2FsbGJhY2suYXBwbHkoY2FsbGJhY2ssIGlzQXJyYXkoZS5kZXRhaWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA/IGUuZGV0YWlsIDogW10pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZXZlbnQpIHtcbiAgICBiaW5kZXIuZGlzcGF0Y2goYnVzLCBldmVudCwgc2xpY2UoYXJndScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50cywgMSkpO1xuICB9XG5cbiAgaWYgKFNwbGlkZTIpIHtcbiAgICBTcGxpZGUyLmV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5vbihFVkVOVF9ERVNUUk9ZLCBiaW5kZXIuZGVzdHJveSk7XG4gIH1cblxuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGFzc2lnbihiaW5kZXIsIHtcbiAgICBidXM6IGJ1cyxcbiAgICBvbjogb24sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9mZjogYXBwbHkoYmluZGVyLnVuYmluZCwgYnVzKSxcbiAgICBlbWl0OiBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdFxuICB9KTtcbn1cblxuZnVuY3Rpb24gUmVxdWVzdEludGVydmFsKGludGVydmFsLCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25JbnRlcnZhbCwgb25VcGRhdGUsIGxpbWl0KSB7XG4gIHZhciBub3cgPSBEYXRlLm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3c7XG4gIHZhciBzdGFydFRpbWU7XG4gIHZhciByYXRlID0gMDtcbiAgdmFyIGlkO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHBhdXNlZCA9IHRydWU7XG4gIHZhciBjb3VudCA9IDA7XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHVwZGF0ZSgpIHtcbiAgICBpZiAoIXBhdXNlZCkge1xuICAgICAgcmF0ZSA9IGludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbCA/IG1pbigobm93KCkgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwsIDEpIDogMTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBvblVwZGF0ZSAmJiBvblVwZGF0ZShyYXRlKTtcblxuICAgICAgaWYgKHJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID49IDEpIHtcbiAgICAgICAgb25JbnRlcnZhbCgpO1xuICAgICAgICBzdGFydFRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbm93KCk7XG5cbiAgICAgICAgaWYgKGxpbWl0ICYmICsrY291bnQgPj0gbGltaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJ0KHJlc3VtZSkge1xuICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcbiAgICBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lID0gbm93KCkgLSAocmVzdW1lID8gcmF0ZSAqIGludGVydmFsIDogMCk7XG4gICAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdXNlZCA9IGZhbHNlO1xuICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcGF1c2UoKSB7XG4gICAgcGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiByZXdpbmQoKSB7XG4gICAgc3RhcnRUaW1lID0gbm93KCk7XG4gICAgcmF0ZSA9IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKG9uVXBkYXRlKSB7XG4gICAgICBvblVwZGF0ZShyYXRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlkICYmIGNhbmNlbEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltYXRpb25GcmFtZShpZCk7XG4gICAgcmF0ZSA9IDA7XG4gICAgaWQgPSAwO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0KHRpbWUpIHtcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJ2YWwgPSB0aW1lO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNQYXVzZWQoKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBwYXVzZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgcmV3aW5kOiByZXdpbmQsXG4gICAgcGF1c2U6IHBhdXNlLFxuICAgIGNhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWw6IGNhbmNlbCxcbiAgICBzZXQ6IHNldCxcbiAgICBpc1BhdXNlZDogaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG59XG5cbmZ1bmN0aW9uIFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlID0gaW5pdGlhbFN0YXRlO1xuXG4gIGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXMoc3RhdGVzKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBpbmNsdWRlcyh0b0FycmF5KHN0YXRlcyksIHN0YXRlKTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4ge1xuICAgIHNldDogc2V0LFxuICAgIGlzOiBpc1xuICB9O1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gVGhyb3R0bGUoZnVuYywgZHVyYXRpb24pIHtcbiAgdmFyIGludGVydmFsID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiB8fCAwLCBmdW5jLCBudWxsLCAxKTtcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJ2YWwuaXNQYXVzZWQoKSAmJiBpbnRlcnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wuc3RhcnQoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gTWVkaWEoU3BsaWRlMiwgQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9IFNwbGlkZTIuc3RhdGU7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgYnJlYWtwb2ludHMgPSBvcHRpb25zLmJyZWFrcG9pbnRzIHx8IHt9O1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlZHVjZWRNb3Rpb24gPSBvcHRpb25zLnJlZHVjZWRNb3Rpb24gfHwge307XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcbiAgdmFyIHF1ZXJpZXMgPSBbXTtcblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gc2V0dXAoKSB7XG4gICAgdmFyIGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gIm1pbiI7XG4gICAgb3duS2V5cyhicmVha3BvaW50cykuc29ydChmdW5jdGlvbiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sIG0pIHtcbiAgICAgIHJldHVybiBpc01pbiA/ICtuIC0gK20gOiArbSAtICtuO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHJlZ2lzdGVyKGJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50c1trZXldLCAiKCIgKyAoaXNNaW4gPyAibWluIiA6ICJtYXgiKSArICItd2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiIgKyBrZXkgKyAicHgpIik7XG4gICAgfSk7XG4gICAgcmVnaXN0ZXIocmVkdWNlZE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Rpb24sIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pO1xuICAgIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkge1xuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoY29tcGxldGVseSkge1xuICAgICAgYmluZGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIob3B0aW9uczIsIHF1ZXJ5KSB7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBxdWVyeUxpc3QgPSBtYXRjaE1lZGlhKHF1ZXJ5KTtcbiAgICBiaW5kZXIuYmluZChxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnlMaXN0LCAiY2hhbmdlIiwgdXBkYXRlKTtcbiAgICBxdWVyaWVzLnB1c2goW29wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMiwgcXVlcnlMaXN0XSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkZXN0cm95ZWQgPSBzdGF0ZS5pcyhERVNUUk9ZRUQpO1xuICAgIHZhciBkaXJlY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIG1lcmdlZCA9IHF1ZXJpZXMucmVkdScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZShmdW5jdGlvbiAobWVyZ2VkMiwgZW50cnkpIHtcbiAgICAgIHJldHVybiBtZXJnZShtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2VkMiwgZW50cnlbMV0ubWF0Y2hlcyA/IGVudHJ5WzBdIDoge30pO1xuICAgIH0sIHt9KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgb21pdChvcHRpb25zKTtcbiAgICBzZXQobWVyZ2VkKTtcblxuICAgIGlmIChvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5kZXN0cm95KSB7XG4gICAgICBTcGxpZGUyLmRlc3Ryb3kob3B0aW9ucy5kZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JveSA9PT0gImNvbXBsZXRlbHkiKTtcbiAgICB9IGVsc2UgaWYgKGRlc3Ryb3llZCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGRlc3Ryb3kodHJ1ZSk7XG4gICAgICBTcGxpZGUyLm1vdW50KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3Rpb24gIT09IG9wdGlvbnMuZGlyZWN0aW9uICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUyLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGVuYWJsZSkge1xuICAgIGlmIChtYXRjaE1lZGlhKE1FRElBX1BSRUZFUlNfUkVEVUNFRF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTU9USU9OKS5tYXRjaGVzKSB7XG4gICAgICBlbmFibGUgPyBtZXJnZShvcHRpb25zLCByZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWNlZE1vdGlvbikgOiBvbWl0KG9wdGlvbnMsIG93bktleXMocmVkdWNlZE1vdGlvbikpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXQob3B0cywgYmFzZSwgbm90aWZ5KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIG1lcmdlKG9wdGlvbnMsIG9wdHMpO1xuICAgIGJhc2UgJiYgbWVyZ2UoT2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdC5nZXRQcm90b3R5cGVPZihvcHRpb25zKSwgb3B0cyk7XG5cbiAgICBpZiAobm90JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmeSB8fCAhc3RhdGUuaXMoQ1JFQVRFRCkpIHtcbiAgICAgIFNwbGlkZTIuZW1pdChFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfVVBEQVRFRCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXA6IHNldHVwLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgcmVkdWNlOiByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkdWNlLFxuICAgIHNldDogc2V0XG4gIH07XG59XG5cbnZhciBBUlJPVyA9ICJBcnJvdyI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEFSUk9XX0xFRlQgPSBBUlJPVyArICJMZWZ0IjtcbnZhciBBUlJPV19SSUdIJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1QgPSBBUlJPVyArICJSaWdodCI7XG52YXIgQVJST1dfVVAgPSBBUlJPVyArICJVcCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSUk9XX0RPV04gPSBBUlJPVyArICJEb3duIjtcbnZhciBMVFIgPSAibHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciI7XG52YXIgUlRMID0gInJ0bCI7XG52YXIgVFRCID0gInR0YiI7XG52YXIgT1JJRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FUSU9OX01BUCA9IHtcbiAgd2lkdGg6IFsiaGVpZ2h0Il0sXG4gIGxlZnQ6IFsidG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsICJyaWdodCJdLFxuICByaWdodDogWyJib3R0b20iLCAibGVmdCJdLFxuICB4OiBbJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ5Il0sXG4gIFg6IFsiWSJdLFxuICBZOiBbIlgiXSxcbiAgQXJyb3dMZWZ0OiBbQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidXX1VQLCBBUlJPV19SSUdIVF0sXG4gIEFycm93UmlnaHQ6IFtBUlJPV19ET1dOLCBBUlJPVycKICAgICAgICAgICAgICAgICAgICAgICAgYidfTEVGVF1cbn07XG5cbmZ1bmN0aW9uIERpcmVjdGlvbihTcGxpZGUyLCBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczIsIG9wdGlvbnMpIHtcbiAgZnVuY3Rpb24gcmVzb2x2ZShwcm9wLCBheGlzT25seSwgZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbikge1xuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XG4gICAgdmFyIGluZGV4ID0gZGlyZWN0aW9uID09PSBSVEwgJiYgIWF4aXNPbmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSA/IDEgOiBkaXJlY3Rpb24gPT09IFRUQiA/IDAgOiAtMTtcbiAgICByZXR1cm4gT1JJRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEFUSU9OX01BUFtwcm9wXSAmJiBPUklFTlRBVElPTl9NQVBbcHJvcF1baW5kZXhdIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wLnJlcGxhY2UoL3dpZHRofGxlZnR8cmlnaHQvaSwgZnVuY3Rpb24gKG1hdGNoLCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zmc2V0KSB7XG4gICAgICB2YXIgcmVwbGFjZW1lbnQgPSBPUklFTlRBVElPTl9NQVBbbWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoLnRvTG93ZXJDYXNlKCldW2luZGV4XSB8fCBtYXRjaDtcbiAgICAgIHJldHVybiBvZmZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ID4gMCA/IHJlcGxhY2VtZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVwbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VtZW50LnNsaWNlKDEpIDogcmVwbGFjZW1lbnQ7XG4gICAgfSk7XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gb3JpZW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICogKG9wdGlvbnMuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcmVjdGlvbiA9PT0gUlRMID8gMSA6IC0xKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc29sdmU6IHJlc29sdmUsXG4gICAgb3JpZW50OiBvcmllbnRcbiAgfTtcbn1cblxudmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBST0xFID0gInJvbGUiO1xudmFyIFRBQl9JTkRFWCA9ICJ0YWJpbmRleCI7XG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RJU0FCTEVEID0gImRpc2FibGVkIjtcbnZhciBBUklBX1BSRUZJWCA9ICJhcmlhLSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSSUFfQ09OVFJPTFMgPSBBUklBX1BSRUZJWCArICJjb250cm9scyI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEFSSUFfQ1VSUkVOVCA9IEFSSUFfUFJFRklYICsgImN1cnJlbnQiO1xudmFyIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1NFTEVDVEVEID0gQVJJQV9QUkVGSVggKyAic2VsZWN0ZWQiO1xudmFyIEFSSUFfTEFCRUwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQVJJQV9QUkVGSVggKyAibGFiZWwiO1xudmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1BSRUZJWCArICJsYWJlbGxlZGJ5IjtcbnZhciBBUklBX0hJRERFTiA9IEFSSUFfUFJFRkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInWCArICJoaWRkZW4iO1xudmFyIEFSSUFfT1JJRU5UQVRJT04gPSBBUklBX1BSRUZJWCArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JpZW50YXRpb24iO1xudmFyIEFSSUFfUk9MRURFU0NSSVBUSU9OID0gQVJJQV9QUkVGSVgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgInJvbGVkZXNjcmlwdGlvbiI7XG52YXIgQVJJQV9MSVZFID0gQVJJQV9QUkVGSVggKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImxpdmUiO1xudmFyIEFSSUFfQlVTWSA9IEFSSUFfUFJFRklYICsgImJ1c3kiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBBUklBX0FUT01JQyA9IEFSSUFfUFJFRklYICsgImF0b21pYyI7XG52YXIgQUxMX0FUVFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUJVVEVTID0gW1JPTEUsIFRBQl9JTkRFWCwgRElTQUJMRUQsIEFSSUFfQ09OVFJPTFMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0NVUlJFTlQsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwgQVJJQV9ISUREJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOLCBBUklBX09SSUVOVEFUSU9OLCBBUklBX1JPTEVERVNDUklQVElPTl07XG52YXIgQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1BSRUZJWCA9IFBST0pFQ1RfQ09ERSArICJfXyI7XG52YXIgU1RBVFVTX0NMQVNTX1BSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VGSVggPSAiaXMtIjtcbnZhciBDTEFTU19ST09UID0gUFJPSkVDVF9DT0RFO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19UUkFDSyA9IENMQVNTX1BSRUZJWCArICJ0cmFjayI7XG52YXIgQ0xBU1NfTElTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1QgPSBDTEFTU19QUkVGSVggKyAibGlzdCI7XG52YXIgQ0xBU1NfU0xJREUgPSBDTEFTU19QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYICsgInNsaWRlIjtcbnZhciBDTEFTU19DTE9ORSA9IENMQVNTX1NMSURFICsgIi0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lIjtcbnZhciBDTEFTU19DT05UQUlORVIgPSBDTEFTU19TTElERSArICJfX2NvbnRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZXIiO1xudmFyIENMQVNTX0FSUk9XUyA9IENMQVNTX1BSRUZJWCArICJhcnJvd3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBDTEFTU19BUlJPVyA9IENMQVNTX1BSRUZJWCArICJhcnJvdyI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0FSUk9XX1BSRVYgPSBDTEFTU19BUlJPVyArICItLXByZXYiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19BUlJPV19ORVhUID0gQ0xBU1NfQVJST1cgKyAiLS1uZXh0IjtcbnZhciBDTEFTU19QQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5BVElPTiA9IENMQVNTX1BSRUZJWCArICJwYWdpbmF0aW9uIjtcbnZhciBDTEFTU19QQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5BVElPTl9QQUdFID0gQ0xBU1NfUEFHSU5BVElPTiArICJfX3BhZ2UiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTUyA9IENMQVNTX1BSRUZJWCArICJwcm9ncmVzcyI7XG52YXIgQ0xBU1NfUFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0dSRVNTX0JBUiA9IENMQVNTX1BST0dSRVNTICsgIl9fYmFyIjtcbnZhciBDTEFTU19UT0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0xFID0gQ0xBU1NfUFJFRklYICsgInRvZ2dsZSI7XG52YXIgQ0xBU1NfVE9HR0xFX1BMQVknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQ0xBU1NfVE9HR0xFICsgIl9fcGxheSI7XG52YXIgQ0xBU1NfVE9HR0xFX1BBVVNFID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1RPR0dMRSArICJfX3BhdXNlIjtcbnZhciBDTEFTU19TUElOTkVSID0gQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1BSRUZJWCArICJzcGlubmVyIjtcbnZhciBDTEFTU19TUiA9IENMQVNTX1BSRUZJWCArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3IiO1xudmFyIENMQVNTX0lOSVRJQUxJWkVEID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdGlhbGl6ZWQiO1xudmFyIENMQVNTX0FDVElWRSA9IFNUQVRVU19DTEFTU19QUkVGSVgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgImFjdGl2ZSI7XG52YXIgQ0xBU1NfUFJFViA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInInByZXYiO1xudmFyIENMQVNTX05FWFQgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgIm5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBDTEFTU19WSVNJQkxFID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJ2aXNpYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSI7XG52YXIgQ0xBU1NfTE9BRElORyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibG9hZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmciO1xudmFyIENMQVNTX0ZPQ1VTX0lOID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJmb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXMtaW4iO1xudmFyIENMQVNTX09WRVJGTE9XID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcmZsb3ciO1xudmFyIFNUQVRVU19DTEFTU0VTID0gW0NMQVNTX0FDVElWRSwgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1ZJU0lCTEUsIENMQVNTX1BSRVYsIENMQVNTX05FWFQsIENMQVNTX0xPQURJTkcsIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19GT0NVU19JTiwgQ0xBU1NfT1ZFUkZMT1ddO1xudmFyIENMQVNTRVMgPSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZTogQ0xBU1NfU0xJREUsXG4gIGNsb25lOiBDTEFTU19DTE9ORSxcbiAgYXJybycKICAgICAgICAgICAgICAgICAgICAgICAgYid3czogQ0xBU1NfQVJST1dTLFxuICBhcnJvdzogQ0xBU1NfQVJST1csXG4gIHByZXY6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19BUlJPV19QUkVWLFxuICBuZXh0OiBDTEFTU19BUlJPV19ORVhULFxuICBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaW5hdGlvbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgcGFnZTogQ0xBU1NfUEFHSU5BVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidfUEFHRSxcbiAgc3Bpbm5lcjogQ0xBU1NfU1BJTk5FUlxufTtcblxuZnVuY3Rpb24gY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlc3QoZnJvbSwgc2VsZWN0b3IpIHtcbiAgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJykpIHtcbiAgICByZXR1cm4gZnJvbS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgfVxuXG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZWxtID0gZnJvbTtcblxuICB3aGlsZSAoZWxtICYmIGVsbS5ub2RlVHlwZSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEpIHtcbiAgICBpZiAobWF0Y2hlcyhlbG0sIHNlbGVjdG9yKSkge1xuICAgICAgYnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrO1xuICAgIH1cblxuICAgIGVsbSA9IGVsbS5wYXJlbnRFbGVtZW50O1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHJldHVybiBlbG07XG59XG5cbnZhciBGUklDVElPTiA9IDU7XG52YXIgTE9HJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19JTlRFUlZBTCA9IDIwMDtcbnZhciBQT0lOVEVSX0RPV05fRVZFTlRTID0gInRvdWNoc3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IG1vdXNlZG93biI7XG52YXIgUE9JTlRFUl9NT1ZFX0VWRU5UUyA9ICJ0b3VjaG1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdXNlbW92ZSI7XG52YXIgUE9JTlRFUl9VUF9FVkVOVFMgPSAidG91Y2hlbmQgdG91Y2hjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2VsIG1vdXNldXAgY2xpY2siO1xuXG5mdW5jdGlvbiBFbGVtZW50cyhTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZSA9IEV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlLm9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UuYmluZDtcblxuICB2YXIgcm9vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBTcGxpZGUyLnJvb3Q7XG4gIHZhciBpMThuID0gb3B0aW9ucy5pMThuO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGVsZW1lbnRzID0ge307XG4gIHZhciBzbGlkZXMgPSBbXTtcbiAgdmFyIHJvb3RDbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcyA9IFtdO1xuICB2YXIgdHJhY2tDbGFzc2VzID0gW107XG4gIHZhciB0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBsaXN0O1xuICB2YXIgaXNVc2luZ0tleTtcblxuICBmdW5jdGlvbiBzZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3AoKSB7XG4gICAgY29sbGVjdCgpO1xuICAgIGluaXQoKTtcbiAgICB1cGRhdGUoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOVF9SRUZSRVNILCBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSk7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgc2V0dXApO1xuICAgIG9uKEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9VUERBVEVELCB1cGRhdGUpO1xuICAgIGJpbmQoZG9jdW1lbnQsIFBPSU5URVJfRE9XJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05fRVZFTlRTICsgIiBrZXlkb3duIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlzVXNpbmdLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V5ID0gZS50eXBlID09PSAia2V5ZG93biI7XG4gICAgfSwge1xuICAgICAgY2FwdHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IHRydWVcbiAgICB9KTtcbiAgICBiaW5kKHJvb3QsICJmb2N1c2luIiwgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uICgpIHtcbiAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAhIWlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VzaW5nS2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRlbHkpIHtcbiAgICB2YXIgYXR0cnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoInN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSIpO1xuICAgIGVtcHR5KHNsaWRlcyk7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCwgcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3RDbGFzc2VzKTtcbiAgICByZW1vdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcmVtb3ZlQXR0cmlidXRlKFt0cmFjaywgbGlzdF0sIGF0dHJzKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVtb3ZlQXR0cmlidXRlKHJvb3QsIGNvbXBsZXRlbHkgPyBhdHRycyA6IFsic3R5bGUiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQVJJQV9ST0xFREVTQ1JJUFRJT05dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCwgcm9vdENsYXNzZXMpO1xuICAgIHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICByb290Q2xhc3NlcyA9IGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzc2VzKENMQVNTX1JPT1QpO1xuICAgIHRyYWNrQ2xhc3NlcyA9IGdldENsYXNzZXMoQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1RSQUNLKTtcbiAgICBhZGRDbGFzcyhyb290LCByb290Q2xhc3Nlcyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGFkZENsYXNzKHRyYWNrLCB0cmFja0NsYXNzZXMpO1xuICAgIHNldEF0dHJpYnV0ZShybycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCwgQVJJQV9MQUJFTCwgb3B0aW9ucy5sYWJlbCk7XG4gICAgc2V0QXR0cmlidXRlKHJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBBUklBX0xBQkVMTEVEQlksIG9wdGlvbnMubGFiZWxsZWRieSk7XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY29sbGVjdCgpIHtcbiAgICB0cmFjayA9IGZpbmQoIi4iICsgQ0xBU1NfVFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNLKTtcbiAgICBsaXN0ID0gY2hpbGQodHJhY2ssICIuIiArIENMQVNTX0xJU1QpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBhc3NlcnQodHJhY2sgJiYgbGlzdCwgIkEgdHJhY2svbGlzdCBlbGVtZW50IGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXNzaW5nLiIpO1xuICAgIHB1c2goc2xpZGVzLCBjaGlsZHJlbihsaXN0LCAiLiIgKyBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfU0xJREUgKyAiOm5vdCguIiArIENMQVNTX0NMT05FICsgIikiKSk7XG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3bih7XG4gICAgICBhcnJvd3M6IENMQVNTX0FSUk9XUyxcbiAgICAgIHBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduOiBDTEFTU19QQUdJTkFUSU9OLFxuICAgICAgcHJldjogQ0xBU1NfQVJST1dfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsXG4gICAgICBuZXh0OiBDTEFTU19BUlJPV19ORVhULFxuICAgICAgYmFyOiBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJPR1JFU1NfQkFSLFxuICAgICAgdG9nZ2xlOiBDTEFTU19UT0dHTEVcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgZnVuY3Rpb24gKGNsYXNzTmFtZSwga2V5KSB7XG4gICAgICBlbGVtZW50c1trZXldID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmQoIi4iICsgY2xhc3NOYW1lKTtcbiAgICB9KTtcbiAgICBhc3NpZ24oZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLCB7XG4gICAgICByb290OiByb290LFxuICAgICAgdHJhY2s6IHRyYWNrLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxpc3Q6IGxpc3QsXG4gICAgICBzbGlkZXM6IHNsaWRlc1xuICAgIH0pO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmFyIGlkID0gcm9vdC5pZCB8fCB1bmlxdWVJZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoUFJPSkVDVF9DT0RFKTtcbiAgICB2YXIgcm9sZSA9IG9wdGlvbnMucm9sZTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdC5pZCA9IGlkO1xuICAgIHRyYWNrLmlkID0gdHJhY2suaWQgfHwgaWQgKyAiLXRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjayI7XG4gICAgbGlzdC5pZCA9IGxpc3QuaWQgfHwgaWQgKyAiLWxpc3QiO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghZ2V0QXR0cmlidXRlKHJvb3QsIFJPTEUpICYmIHJvb3QudGFnTmFtZSAhPT0gIicKICAgICAgICAgICAgICAgICAgICAgICAgYidTRUNUSU9OIiAmJiByb2xlKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUocm9vdCwgUk9MRSwgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbGUpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX1JPTEVERVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1JJUFRJT04sIGkxOG4uY2Fyb3VzZWwpO1xuICAgIHNldEF0dHJpYnV0ZShsaXN0LCBST0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSwgInByZXNlbnRhdGlvbiIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZChzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgICB2YXIgZWxtID0gcXVlcnkocm9vdCwgc2VsZWN0b3IpO1xuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gZWxtICYmIGNsb3Nlc3QoZWxtLCAiLiIgKyBDTEFTU19ST09UKSA9PT0gcm9vdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyBlbG0gOiB2b2lkIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDbGFzc2VzKGJhc2UpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuIFtiYXNlICsgIi0tIiArIG9wdGlvbnMudHlwZSwgYmFzZSArICItJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJiBiYXNlICsgIi0tZHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmIGJhc2UgKyAiLS1uYXYiLCBiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSA9PT0gQ0xBU1NfUk9PVCAmJiBDTEFTU19BQ1RJVkVdO1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICBzZXR1cDogc2V0dXAsXG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH0pO1xufVxuXG52YXIgU0xJREUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gInNsaWRlIjtcbnZhciBMT09QID0gImxvb3AiO1xudmFyIEZBREUgPSAiZmFkZSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG5mdW5jdGlvbiBTbGlkZSQxKFNwbGlkZTIsIGluZGV4LCBzbGlkZUluZGV4LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUpIHtcbiAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgb24gPSBldmVudC5vbixcbiAgICAgIGVtaXQgPSBldmVudC5lbWl0LFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBldmVudC5iaW5kO1xuICB2YXIgQ29tcG9uZW50cyA9IFNwbGlkZTIuQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMsXG4gICAgICByb290ID0gU3BsaWRlMi5yb290LFxuICAgICAgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgPSBTcGxpZGUyLm9wdGlvbnM7XG4gIHZhciBpc05hdmlnYXRpb24gPSBvcHRpb25zLmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc05hdmlnYXRpb24sXG4gICAgICB1cGRhdGVPbk1vdmUgPSBvcHRpb25zLnVwZGF0ZU9uTW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUsXG4gICAgICBpMThuID0gb3B0aW9ucy5pMThuLFxuICAgICAgcGFnaW5hdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBvcHRpb25zLnBhZ2luYXRpb24sXG4gICAgICBzbGlkZUZvY3VzID0gb3B0aW9ucy5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVGb2N1cztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzLkRpcmVjdGlvbi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eWxlIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbGFiZWwgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTEFCRUwpO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzQ2xvbmUgPSBzbGlkZUluZGV4ID4gLTE7XG4gIHZhciBjb250YWluZXIgPSBjaGlsZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gIHZhciBkZXN0cm95ZWQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmICghaXNDbG9uZSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLmlkID0gcm9vdC5pZCArICItc2xpZGUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2V0QXR0cmlidXRlKHNsaWRlLCBST0xFLCBwYWdpbmF0aW9uID8gInRhYnBhbmVsIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAiZ3JvdXAiKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ST0xFREVTQ1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVBUSU9OLCBpMThuLnNsaWRlKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFCRUwsIGxhYmVsIHx8IGZvcm1hdChpMThuLnNsaWRlTGFiZWwsIFtpbmRleCArIDEsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUyLmxlbmd0aF0pKTtcbiAgICB9XG5cbiAgICBsaXN0ZW4oKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgYmluZChzbGlkZSwgImNsaWNrIiwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KGVtaXQsIEVWRU5UX0NMSUNLLCBzZWxmKSk7XG4gICAgYmluZChzbGlkZSwgImtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lkb3duIiwgYXBwbHkoZW1pdCwgRVZFTlRfU0xJREVfS0VZRE9XTiwgc2VsZikpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbihbRVZFTlRfTU9WRUQsIEVWRU5UX1NISUZURUQsIEVWRU5UX1NDUk9MTEVEXSwgdXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGF0ZSk7XG4gICAgb24oRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVELCBpbml0TmF2aWdhdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24pO1xuXG4gICAgaWYgKHVwZGF0ZU9uTW92ZSkge1xuICAgICAgb24oRVZFTlRfTU9WJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIG9uTW92ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBldmVudC5kZXN0cm95KCk7XG4gICAgcmVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZUNsYXNzKHNsaWRlLCBTVEFUVVNfQ0xBU1NFUyk7XG4gICAgcmVtb3ZlQXR0cmlidXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZSwgQUxMX0FUVFJJQlVURVMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgInN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSIsIHN0eWxlcyk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMLCBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FiZWwgfHwgIiIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdE5hdmlnYXRpb24oKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBjb250cm9scyA9IFNwbGlkZTIuc3BsaWRlcy5tYXAoZnVuY3Rpb24gKHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQpIHtcbiAgICAgIHZhciBTbGlkZTIgPSB0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcy5nZXRBdChpbmRleCk7XG4gICAgICByZXR1cm4gU2xpZGUyID8gU2xpZGUyLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5pZCA6ICIiO1xuICAgIH0pLmpvaW4oIiAiKTtcbiAgICBzZXRBdHRyaWJ1dGUocycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLCBBUklBX0xBQkVMLCBmb3JtYXQoaTE4bi5zbGlkZVgsIChpc0Nsb25lID8gc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlSW5kZXggOiBpbmRleCkgKyAxKSk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UUk9MUywgY29udHJvbHMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlRm9jdXMgPyAiYnV0dG9uIiA6ICIiKTtcbiAgICBzbGlkZUZvY3VzICYmIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OKTtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgaWYgKCFkZXN0cm95ZWQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmICghZGVzdHJveWVkKSB7XG4gICAgICB2YXIgY3VyciA9IFNwbGlkZTIuaW5kZXg7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdXBkYXRlQWN0aXZpdHkoKTtcbiAgICAgIHVwZGF0ZVZpc2liaWxpdHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfUFJFViwgaW5kZXggPT09IGN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JyIC0gMSk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfTkVYVCwgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PSBjdXJyICsgMSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXR5KCkge1xuICAgIHZhciBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xuXG4gICAgaWYgKGFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUgIT09IGhhc0NsYXNzKHNsaWRlLCBDTEFTU19BQ1RJVkUpKSB7XG4gICAgICB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlQ2xhc3Moc2xpZGUsIENMQVNTX0FDVElWRSwgYWN0aXZlKTtcbiAgICAgIHNldEF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUoc2xpZGUsIEFSSUFfQ1VSUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpO1xuICAgICAgZW1pdChhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkUsIHNlbGYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KCkge1xuICAgIHZhciB2aXNpYmxlID0gaXNWaXNpYmxlKCk7XG4gICAgdmFyIGhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWN0aXZlKCkgfHwgaXNDbG9uZSk7XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFTcGxpZGUyLnN0YXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0hJRERFTiwgaGlkZGVuIHx8ICIiKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgc2V0QXR0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCBvcHRpb25zLmZvYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1c2FibGVOb2RlcyB8fCAiIiksIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAiIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKHNsaWRlRm9jdXMpIHtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAwKTtcbiAgICB9XG5cbiAgICBpZiAodicKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2libGUgIT09IGhhc0NsYXNzKHNsaWRlLCBDTEFTU19WSVNJQkxFKSkge1xuICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19WSVNJQkxFLCB2aXNpYmxlKTtcbiAgICAgIGVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KHZpc2libGUgPyBFVkVOVF9WSVNJQkxFIDogRVZFTlRfSElEREVOLCBzZWxmKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgaWYgKCF2aXNpYmxlICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9PSBzbGlkZSkge1xuICAgICAgdmFyIFNsaWRlMiA9IENvbXBvbmVudHMuU2xpZGVzLmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdChTcGxpZGUyLmluZGV4KTtcbiAgICAgIFNsaWRlMiAmJiBmb2N1cyhTbGlkZTIuc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZSQxKHByb3AsIHZhbHVlLCB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ29udGFpbmVyKSB7XG4gICAgc3R5bGUodXNlQ29udGFpbmVyICYmIGNvbnRhaW5lciB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc2xpZGUsIHByb3AsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQWN0aXZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgY3VyciA9IFNwbGlkZTIuaW5kZXg7XG4gICAgcmV0dXJuIGN1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidyID09PSBpbmRleCB8fCBvcHRpb25zLmNsb25lU3RhdHVzICYmIGN1cnIgPT09IHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNWaXNpYmxlKCkge1xuICAgIGlmIChTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMi5pcyhGQURFKSkge1xuICAgICAgcmV0dXJuIGlzQWN0aXZlKCk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciB0cmFja1JlY3QgPSByZWN0KENvbXBvbmVudHMuRWxlbWVudHMudHJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB2YXIgc2xpZGVSZWN0ID0gcmVjdChzbGlkZSk7XG4gICAgdmFyIGxlZnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gcmVzb2x2ZSgibGVmdCIsIHRydWUpO1xuICAgIHZhciByaWdodCA9IHJlc29sdmUoInJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCIsIHRydWUpO1xuICAgIHJldHVybiBmbG9vcih0cmFja1JlY3RbbGVmdF0pIDw9IGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsKHNsaWRlUmVjdFtsZWZ0XSkgJiYgZmxvb3Ioc2xpZGVSZWN0W3JpZ2h0XSkgPD0gY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWwodHJhY2tSZWN0W3JpZ2h0XSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1dpdGhpbihmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbSwgZGlzdGFuY2UpIHtcbiAgICB2YXIgZGlmZiA9IGFicyhmcm9tIC0gaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcblxuICAgIGlmICghaXNDbG9uZSAmJiAob3B0aW9ucy5yZXdpbmQgfHwgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaXMoTE9PUCkpKSB7XG4gICAgICBkaWZmID0gbWluKGRpZmYsIFNwbGlkZTIubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCAtIGRpZmYpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWZmIDw9IGRpc3RhbmNlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIHZhciBzZWxmID0ge1xuICAgIGluZGV4OiBpbmRleCxcbiAgICBzbGlkZUluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDogc2xpZGVJbmRleCxcbiAgICBzbGlkZTogc2xpZGUsXG4gICAgY29udGFpbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogY29udGFpbmVyLFxuICAgIGlzQ2xvbmU6IGlzQ2xvbmUsXG4gICAgbW91bnQ6IG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzdHlsZTogc3R5bGUkMSxcbiAgICBpc1dpdGhpbjogaXNXaXRoaW5cbiAgfTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBzZWxmO1xufVxuXG5mdW5jdGlvbiBTbGlkZXMoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UyID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UyLm9uLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UyLmVtaXQsXG4gICAgICBiaW5kID0gX0V2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZTIuYmluZDtcblxuICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgc2xpZGVzID0gX0NvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyRFbGVtZW50cy5zbGlkZXMsXG4gICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0O1xuICB2YXIgU2xpZGVzMiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpbml0KCk7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKEVWRU5UX1JFRlJFU0gsIGluaXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgc2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlLCBpbmRleCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJlZ2lzdGVyKHNsaWRlLCBpbmRleCwgLTEpO1xuICAgIH0pO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBTbGlkZTIuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KFNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXMyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBmb3JFYWNoJDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIFNsaWRlMi51cGRhdGUoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgaW5kZXgsIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4KSB7XG4gICAgdmFyIG9iamVjdCA9IFNsaWRlJDEoU3BsaWRlMiwgaW5kZXgsIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUluZGV4LCBzbGlkZSk7XG4gICAgb2JqZWN0Lm1vdW50KCk7XG4gICAgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIucHVzaChvYmplY3QpO1xuICAgIFNsaWRlczIuc29ydChmdW5jdGlvbiAoU2xpZGUxLCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyKSB7XG4gICAgICByZXR1cm4gU2xpZGUxLmluZGV4IC0gU2xpZGUyLmluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldChleGNsdWRlQ2xvbmVzKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBleGNsdWRlQ2xvbmVzID8gZmlsdGVyKGZ1bmN0aW9uIChTbGlkZTIpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICByZXR1cm4gIVNsaWRlMi5pc0Nsb25lO1xuICAgIH0pIDogU2xpZGVzMicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbihwYWdlKSB7XG4gICAgdmFyIENvbnRyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcjtcbiAgICB2YXIgaW5kZXggPSBDb250cm9sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlci50b0luZGV4KHBhZ2UpO1xuICAgIHZhciBtYXggPSBDb250cm9sbGVyLmhhc0ZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpID8gMSA6IG9wdGlvbnMucGVyUGFnZTtcbiAgICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoU2xpZGUyKSB7XG4gICAgICByZXR1cm4gYmV0d2VlbihTbGlkZTIuaW5kZXgsIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgaW5kZXggKyBtYXggLSAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChpbmRleCkge1xuICAgIHJldHVybiBmaWx0ZXIoaW5kZXgpWzBdO1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGFkZChpdGVtcywgaW5kZXgpIHtcbiAgICBmb3JFYWNoKGl0ZW1zLCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKHNsaWRlKSB7XG4gICAgICBpZiAoaXNTdHJpbmcoc2xpZGUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzbGlkZSA9IHBhcnNlSHRtbChzbGlkZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNIVE1MRWxlbWVudChzbGlkZSkpIHtcbiAgICAgICAgdmFyIHJlZiA9IHNsaWRlc1tpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhdO1xuICAgICAgICByZWYgPyBiZWZvcmUoc2xpZGUsIHJlZikgOiBhcHBlbmQobGlzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlKTtcbiAgICAgICAgYWRkQ2xhc3Moc2xpZGUsIG9wdGlvbnMuY2xhc3Nlcy5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUpO1xuICAgICAgICBvYnNlcnZlSW1hZ2VzKHNsaWRlLCBhcHBseShlbWl0LCBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVTSVpFKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZW1pdChFVkVOVF9SRUZSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmUkMShtYXRjaGVyKSB7XG4gICAgcmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShmaWx0ZXIobWF0Y2hlcikubWFwKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gU2xpZGUyLnNsaWRlO1xuICAgIH0pKTtcbiAgICBlbWl0KEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvckVhY2gkMShpdGVyYXRlZSwgZXhjbHVkZUNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXMpIHtcbiAgICBnZXQoZXhjbHVkZUNsb25lcykuZm9yRWFjaChpdGVyYXRlZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyKG1hdGNoZXIpIHtcbiAgICByZXR1cm4gUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlczIuZmlsdGVyKGlzRnVuY3Rpb24obWF0Y2hlcikgPyBtYXRjaGVyIDogZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChTbGlkZTIpIHtcbiAgICAgIHJldHVybiBpc1N0cmluZyhtYXRjaGVyKSA/IG1hdGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKFNsaWRlMi5zbGlkZSwgbWF0Y2hlcikgOiBpbmNsdWRlcyh0b0FycmF5KG1hdGNoZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSwgU2xpZGUyLmluZGV4KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmVyKSB7XG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIuc3R5bGUocHJvcCwgdmFsdWUsIHVzZUNvbnRhaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb2JzZXJ2ZUltYWdlcyhlbG0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjYWxsYmFjaykge1xuICAgIHZhciBpbWFnZXMgPSBxdWVyeUFsbChlbG0sICJpbWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgdmFyIGxlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2d0aCkge1xuICAgICAgaW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoISAtLWxlbmd0aCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMZW5ndGgoZXhjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZGVDbG9uZXMpIHtcbiAgICByZXR1cm4gZXhjbHVkZUNsb25lcyA/IHNsaWRlcy5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIDogU2xpZGVzMi5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Vub3VnaCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIFNsaWRlczIubGVuZ3RoID4gb3B0aW9ucy5wZXJQYWdlO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIHJlZ2lzdGVyOiByZWdpc3RlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgZ2V0OiBnZXQsXG4gICAgZ2V0SW46IGdldEluLFxuICAgIGdldEF0OiBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXQsXG4gICAgYWRkOiBhZGQsXG4gICAgcmVtb3ZlOiByZW1vdmUkMSxcbiAgICBmb3JFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaDogZm9yRWFjaCQxLFxuICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIHN0eWxlOiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGUsXG4gICAgZ2V0TGVuZ3RoOiBnZXRMZW5ndGgsXG4gICAgaXNFbm91Z2g6IGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Vub3VnaFxuICB9O1xufVxuXG5mdW5jdGlvbiBMYXlvdXQoU3BsaWRlMiwgQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UzID0gRXZlbnRJbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UzLm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UzLmJpbmQsXG4gICAgICBlbWl0ID0gX0V2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZTMuZW1pdDtcblxuICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24ucmVzb2x2ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBfQ29tcG9uZW50czIkRWxlbWVudHMyID0gQ29tcG9uZW50czIuRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgcm9vdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czIucm9vdCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0cmFjayA9IF9Db21wb25lbnRzMiRFbGVtZW50czIudHJhY2ssXG4gICAgICBsaXN0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF9Db21wb25lbnRzMiRFbGVtZW50czIubGlzdDtcbiAgdmFyIGdldEF0ID0gU2xpZGVzLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdCxcbiAgICAgIHN0eWxlU2xpZGVzID0gU2xpZGVzLnN0eWxlO1xuICB2YXIgdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpY2FsO1xuICB2YXIgcm9vdFJlY3Q7XG4gIHZhciBvdmVyZmxvdztcblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbW91bnQoKSB7XG4gICAgaW5pdCgpO1xuICAgIGJpbmQod2luZG93LCAicmVzaScKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSBsb2FkIiwgVGhyb3R0bGUoYXBwbHkoZW1pdCwgRVZFTlRfUkVTSVpFKSkpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sIGluaXQpO1xuICAgIG9uKEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRVNJWkUsIHJlc2l6ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2ZXJ0aWNhbCA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XG4gICAgc3R5bGUocm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsICJtYXhXaWR0aCIsIHVuaXQob3B0aW9ucy53aWR0aCkpO1xuICAgIHN0eWxlKHRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcmVzb2x2ZSgicGFkZGluZ0xlZnQiKSwgY3NzUGFkZGluZyhmYWxzZSkpO1xuICAgIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSh0cmFjaywgcmVzb2x2ZSgicGFkZGluZ1JpZ2h0IiksIGNzc1BhZGRpbmcodHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICByZXNpemUodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemUoZm9yYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgdmFyIG5ld1JlY3QgPSByZWN0KHJvb3QpO1xuXG4gICAgaWYgKGZvcmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCByb290UmVjdC53aWR0aCAhPT0gbmV3UmVjdC53aWR0aCB8fCByb290UmVjdC5oZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0ICE9PSBuZXdSZWN0LmhlaWdodCkge1xuICAgICAgc3R5bGUodHJhY2ssICJoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwgY3NzVHJhY2tIZWlnaHQoKSk7XG4gICAgICBzdHlsZVNsaWRlcyhyZXNvbHZlKCJtYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2luUmlnaHQiKSwgdW5pdChvcHRpb25zLmdhcCkpO1xuICAgICAgc3R5bGVTbGlkZXMoIicKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCIsIGNzc1NsaWRlV2lkdGgoKSk7XG4gICAgICBzdHlsZVNsaWRlcygiaGVpZ2h0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGNzc1NsaWRlSGVpZ2h0KCksIHRydWUpO1xuICAgICAgcm9vdFJlY3QgPSBuZXdSZWN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQoRVZFTlRfUkVTSVpFRCk7XG5cbiAgICAgIGlmIChvdmVyZmxvdyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IChvdmVyZmxvdyA9IGlzT3ZlcmZsb3coKSkpIHtcbiAgICAgICAgdG9nZ2xlQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHJvb3QsIENMQVNTX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICAgIGVtaXQoRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNzc1BhZGRpbmcocmlnaHQpIHtcbiAgICB2YXIgcGFkZGluZyA9IG9wdGlvbnMucGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRpbmc7XG4gICAgdmFyIHByb3AgPSByZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCIpO1xuICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQocGFkZGluZ1twcm9wXSB8fCAoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0KHBhZGRpbmcpID8gMCA6IHBhZGRpbmcpKSB8fCAiMHB4IjtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjc3NUcmFja0hlaWdodCgpIHtcbiAgICB2YXIgaGVpZ2h0ID0gIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICBoZWlnaHQgPSBjc3NIZWlnaHQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICBhc3NlcnQoaGVpZ2h0LCAiaGVpZ2h0IG9yIGhlaWdodFJhdGlvIGlzIG1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzaW5nLiIpO1xuICAgICAgaGVpZ2h0ID0gImNhbGMoIiArIGhlaWdodCArICIgLSAiICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1BhZGRpbmcoZmFsc2UpICsgIiAtICIgKyBjc3NQYWRkaW5nKHRydWUpICsgIikiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgZnVuY3Rpb24gY3NzSGVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCgpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWdodCB8fCByZWN0KGxpc3QpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy53aWR0aCAqIG9wdGlvbnMuaGVpZ2h0UmF0aW8pO1xuICB9XG5cbiAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1NsaWRlV2lkdGgoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b1dpZHRoID8gbnVsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiB1bml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKHZlcnRpY2FsID8gIiIgOiBjc3NTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplKCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3NzU2xpZGVIZWlnaHQoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB1bml0KG9wdGlvbnMuZml4ZWRIZWlnaHQpIHx8ICh2ZXJ0aWNhbCA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLmF1dG9IZWlnaHQgPyBudWxsIDogY3NzU2xpZGVTaXplKCkgOiBjc3NIZWlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3NzU2xpZGVTaXplKCkge1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwID0gdW5pdChvcHRpb25zLmdhcCk7XG4gICAgcmV0dXJuICJjYWxjKCgxMDAlIiArICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwICYmICIgKyAiICsgZ2FwKSArICIpLyIgKyAob3B0aW9ucy5wZXJQYWdlIHx8IDEpICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrIChnYXAgJiYgIiAtICIgKyBnYXApICsgIikiO1xuICB9XG5cbiAgZnVuY3Rpb24gbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RTaXplKCkge1xuICAgIHJldHVybiByZWN0KGxpc3QpW3Jlc29sdmUoIndpZHRoIicKICAgICAgICAgICAgICAgICAgICAgICAgYicpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWRlU2l6ZShpbmRleCwgd2l0aG91dEdhcCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdChpbmRleCB8fCAwKTtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlID8gcmVjdChTbGlkZS5zbGlkZSlbcmVzb2x2ZSgid2lkdGgiKV0gKyAod2l0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRHYXAgPyAwIDogZ2V0R2FwKCkpIDogMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbFNpemUoaW5kZXgsIHdpdGhvdXRHYXApIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdChpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgpO1xuXG4gICAgaWYgKFNsaWRlKSB7XG4gICAgICB2YXIgcmlnaHQgPSByZWN0KFNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSlbcmVzb2x2ZSgicmlnaHQiKV07XG4gICAgICB2YXIgbGVmdCA9IHJlY3QoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3QpW3Jlc29sdmUoImxlZnQiKV07XG4gICAgICByZXR1cm4gYWJzKHJpZ2h0IC0gbGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpICsgKHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkpO1xuICAgIH1cblxuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWRlclNpemUod2l0aG91dEdhcCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gdG90YWxTaXplKFNwbGlkZTIubGVuZ3RoIC0gMSkgLSB0b3RhbFNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKDApICsgc2xpZGVTaXplKDAsIHdpdGhvdXRHYXApO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEdhcCgpIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdCgwKTtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2xpZGUuc2xpZGUsIHJlc29sdmUoIm1hcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5SaWdodCIpKSkgfHwgMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcocmlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGUodHJhY2ssIHJlc29sdmUoInBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RkaW5nIiArIChyaWdodCA/ICJSaWdodCIgOiAiTGVmdCIpKSkpIHx8IDA7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gaXNPdmVyZmxvdygpIHtcbiAgICByZXR1cm4gU3BsaWRlMi5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoRkFERSkgfHwgc2xpZGVyU2l6ZSh0cnVlKSA+IGxpc3RTaXplKCk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gICAgcmVzaXplOiByZXNpemUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGxpc3RTaXplOiBsaXN0U2l6ZSxcbiAgICBzbGlkZVNpemU6IHNsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgc2xpZGVyU2l6ZTogc2xpZGVyU2l6ZSxcbiAgICB0b3RhbFNpemU6IHRvdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbFNpemUsXG4gICAgZ2V0UGFkZGluZzogZ2V0UGFkZGluZyxcbiAgICBpc092ZXJmbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdzogaXNPdmVyZmxvd1xuICB9O1xufVxuXG52YXIgTVVMVElQTElFUiA9IDI7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBDbG9uZXMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicub247XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbiAgdmFyIHJlc29sdmUgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gIHZhciBjbG9uZXMgPSBbXTtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBjbG9uZUNvdW50O1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIG9uKEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9SRUZSRVNILCByZW1vdW50KTtcbiAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0laRV0sIG9ic2VydmUpO1xuXG4gICAgaWYgKGNsb25lQ291bnQgPSBjb21wdXRlQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lQ291bnQoKSkge1xuICAgICAgZ2VuZXJhdGUoY2xvbmVDb3VudCk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuTGF5b3V0LnJlc2l6ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVtb3VudCgpIHtcbiAgICBkZXN0cm95KCk7XG4gICAgbW91bnQoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHJlbW92ZShjbG9uZXMpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbXB0eShjbG9uZXMpO1xuICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvYnNlcnZlKCkge1xuICAgIHZhciBjb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuXG4gICAgaWYgKGNsb25lQ291bnQgIT09IGNvdW50KSB7XG4gICAgICBpZiAoYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lQ291bnQgPCBjb3VudCB8fCAhY291bnQpIHtcbiAgICAgICAgZXZlbnQuZW1pdChFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVGUkVTSCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2VuZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlKGNvdW50KSB7XG4gICAgdmFyIHNsaWRlcyA9IFNsaWRlcy5nZXQoKS5zbGljZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgbGVuZ3RoID0gc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICB3aGlsZSAoc2xpZGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBwdXNoKHNsaWRlcywgc2xpZGVzKTtcbiAgICAgIH1cblxuICAgICAgcHVzaChzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLnNsaWNlKC1jb3VudCksIHNsaWRlcy5zbGljZSgwLCBjb3VudCkpLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChTbGlkZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGlzSGVhZCA9IGluZGV4IDwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvdW50O1xuICAgICAgICB2YXIgY2xvbmUgPSBjbG9uZURlZXAoU2xpZGUuc2xpZGUsIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCk7XG4gICAgICAgIGlzSGVhZCA/IGJlZm9yZShjbG9uZSwgc2xpZGVzWzBdLnNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgOiBhcHBlbmQoRWxlbWVudHMubGlzdCwgY2xvbmUpO1xuICAgICAgICBwdXNoKGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMsIGNsb25lKTtcbiAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKGNsb25lLCBpbmRleCAtIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCArIChpc0hlYWQgPyAwIDogbGVuZ3RoKSwgU2xpZGUuaW5kZXgpO1xuICAgICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lRGVlcChlbG0sIGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBjbG9uZSA9IGVsbS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgYWRkQ2xhc3MoY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lLCBvcHRpb25zLmNsYXNzZXMuY2xvbmUpO1xuICAgIGNsb25lLmlkID0gU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdC5pZCArICItY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgcmV0dXJuIGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCkge1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmVzMiA9IG9wdGlvbnMuY2xvbmVzO1xuXG4gICAgaWYgKCFTcGxpZGUyLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMT09QKSkge1xuICAgICAgY2xvbmVzMiA9IDA7XG4gICAgfSBlbHNlIGlmIChpc1VuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZmluZWQoY2xvbmVzMikpIHtcbiAgICAgIHZhciBmaXhlZFNpemUgPSBvcHRpb25zW3JlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbHZlKCJmaXhlZFdpZHRoIildICYmIENvbXBvbmVudHMyLkxheW91dC5zbGlkZVNpemUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJzApO1xuICAgICAgdmFyIGZpeGVkQ291bnQgPSBmaXhlZFNpemUgJiYgY2VpbChyZWN0KEVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50cy50cmFjaylbcmVzb2x2ZSgid2lkdGgiKV0gLyBmaXhlZFNpemUpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lczIgPSBmaXhlZENvdW50IHx8IG9wdGlvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSAmJiBTcGxpZGUyLmxlbmd0aCB8fCBvcHRpb25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVzMjtcbiAgfVxuXG4gIHJldHVybiB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBNb3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0V2ZW50SW50ZXJmYWNlNCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0V2ZW50SW50ZXJmYWNlNC5vbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNC5lbWl0O1xuXG4gIHZhciBzZXQgPSBTcGxpZGUyLnN0YXRlLnNldDtcbiAgdmFyIF9DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIkTGF5b3V0ID0gQ29tcG9uZW50czIuTGF5b3V0LFxuICAgICAgc2xpZGVTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVTaXplLFxuICAgICAgZ2V0UGFkZGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgPSBfQ29tcG9uZW50czIkTGF5b3V0LmdldFBhZGRpbmcsXG4gICAgICB0b3RhbFNpemUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0NvbXBvbmVudHMyJExheW91dC50b3RhbFNpemUsXG4gICAgICBsaXN0U2l6ZSA9IF9DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIkTGF5b3V0Lmxpc3RTaXplLFxuICAgICAgc2xpZGVyU2l6ZSA9IF9Db21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIkTGF5b3V0LnNsaWRlclNpemU7XG4gIHZhciBfQ29tcG9uZW50czIkRGlyZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgcmVzb2x2ZSA9IF9Db21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czIkRGlyZWN0aW8ucmVzb2x2ZSxcbiAgICAgIG9yaWVudCA9IF9Db21wb25lbnRzMiREJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW8ub3JpZW50O1xuICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzMyA9IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5FbGVtZW50cyxcbiAgICAgIGxpc3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0LFxuICAgICAgdHJhY2sgPSBfQ29tcG9uZW50czIkRWxlbWVudHMzLnRyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaztcbiAgdmFyIFRyYW5zaXRpb247XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zaXRpb24gPSBDb21wb25lbnRzMi5UcmFuc2l0aW9uO1xuICAgIG9uKFtFVkVOVF9NTycKICAgICAgICAgICAgICAgICAgICAgICAgYidVTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXBvc2l0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcG9zaXRpb24oKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghQ29tcG9uZW50czIuQ29udHJvbGxlci5pc0J1c3koKSkge1xuICAgICAgQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNjcm9sbC5jYW5jZWwoKTtcbiAgICAgIGp1bXAoU3BsaWRlMi5pbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgQ29tcG9uZW50czIuU2xpZGVzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBtb3ZlKGRlc3QsIGluZGV4LCBwcmV2LCBjYWxsYmFjaykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoZGVzdCAhPT0gaW5kZXggJiYgY2FuU2hpZnQoZGVzdCA+IHByZXYpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgY2FuY2VsKCk7XG4gICAgICB0cmFuc2xhdGUoc2hpZnQoZ2V0UG9zaXRpb24oKSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QgPiBwcmV2KSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgc2V0KE1PVklORyk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQoRVZFTlRfTU9WRSwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgIFRyYW5zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0YXJ0KGluZGV4LCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXQoSURMRSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdChFVkVOVF9NT1ZFRCwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgICAgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBqdW1wKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCkge1xuICAgIHRyYW5zbGF0ZSh0b1Bvc2l0aW9uKGluZGV4LCB0cnVlKSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHBvc2l0aW9uLCBwcmV2ZW50TG9vcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICBpZiAoIVNwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIHZhciBkZXN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gPSBwcmV2ZW50TG9vcCA/IHBvc2l0aW9uIDogbG9vcChwb3NpdGlvbik7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc3R5bGUobGlzdCwgInRyYW5zZm9ybSIsICJ0cmFuc2xhdGUiICsgcmVzb2x2ZSgiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1giKSArICIoIiArIGRlc3RpbmF0aW9uICsgInB4KSIpO1xuICAgICAgcG9zaXRpb24gIT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0aW5hdGlvbiAmJiBlbWl0KEVWRU5UX1NISUZURUQpO1xuICAgIH1cbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBsb29wKHBvc2l0aW9uKSB7XG4gICAgaWYgKFNwbGlkZTIuaXMoTE9PUCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICB2YXIgaW5kZXggPSB0b0luZGV4KHBvc2l0aW9uKTtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZXhjZWVkZWRNYXggPSBpbmRleCA+IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZCgpO1xuICAgICAgdmFyIGV4Y2VlZGVkTWluID0gaW5kZXggPCAwO1xuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGV4Y2VlZGVkTWluIHx8IGV4Y2VlZGVkTWF4KSB7XG4gICAgICAgIHBvc2l0aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNoaWZ0KHBvc2l0aW9uLCBleGNlZWRlZE1heCk7XG4gICAgICB9XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBwb3NpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoaWZ0KHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgYmFja3dhcmRzKSB7XG4gICAgdmFyIGV4Y2VzcyA9IHBvc2l0aW9uIC0gZ2V0TGltaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGJhY2t3YXJkcyk7XG4gICAgdmFyIHNpemUgPSBzbGlkZXJTaXplKCk7XG4gICAgcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uIC09IG9yaWVudChzaXplICogKGNlaWwoYWJzKGV4Y2VzcykgLyBzaXplKSB8fCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgMSkpICogKGJhY2t3YXJkcyA/IDEgOiAtMSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB0cmFuc2xhdGUoZ2V0UG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uKCksIHRydWUpO1xuICAgIFRyYW5zaXRpb24uY2FuY2VsKCk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gdG9JbmRleChwb3NpdGlvbikge1xuICAgIHZhciBTbGlkZXMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuU2xpZGVzLmdldCgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgU2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2xpZGVJbmRleCA9IFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidbaV0uaW5kZXg7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBhYnModG9Qb3NpdGlvbihzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCwgdHJ1ZSkgLSBwb3NpdGlvbik7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGluZGV4ID0gc2xpZGVJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gdG9Qb3NpdGlvbihpbmRleCwgdHJpbW1pbmcpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHBvc2l0aW9uID0gb3JpZW50KHRvdGFsU2l6ZShpbmRleCAtIDEpIC0gb2Zmc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhpbmRleCkpO1xuICAgIHJldHVybiB0cmltbWluZyA/IHRyaW0ocG9zaXRpb24pIDogcG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UG9zaXRpb24oKSB7XG4gICAgdmFyIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZ0ID0gcmVzb2x2ZSgibGVmdCIpO1xuICAgIHJldHVybiByZWN0KGxpc3QpW2xlZnRdIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlY3QodHJhY2spW2xlZnRdICsgb3JpZW50KGdldFBhZGRpbmcoZmFsc2UpKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiB0cmltKHBvc2l0aW9uKSB7XG4gICAgaWYgKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyaW1TcGFjZSAmJiBTcGxpZGUyLmlzKFNMSURFKSkge1xuICAgICAgcG9zaXRpb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhbXAocG9zaXRpb24sIDAsIG9yaWVudChzbGlkZXJTaXplKHRydWUpIC0gbGlzdFNpeicKICAgICAgICAgICAgICAgICAgICAgICAgYidlKCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gb2Zmc2V0KGluZGV4KSB7XG4gICAgdmFyIGZvY3VzID0gb3B0aW9ucy5mb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcmV0dXJuIGZvY3VzID09PSAiY2VudGVyIiA/IChsaXN0U2l6ZSgpIC0gc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlU2l6ZShpbmRleCwgdHJ1ZSkpIC8gMiA6ICtmb2N1cyAqIHNsaWRlU2l6ZShpbmRleCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMaW1pdChtYXgpIHtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvUG9zaXRpb24obWF4ID8gQ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRFbmQoKSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLCAhIW9wdGlvbnMudHJpbVNwYWNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhblNoaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChiYWNrd2FyZHMpIHtcbiAgICB2YXIgc2hpZnRlZCA9IG9yaWVudChzaGlmdChnZXRQb3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oKSwgYmFja3dhcmRzKSk7XG4gICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaWZ0ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID49IDAgOiBzaGlmdGVkIDw9IGxpc3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgiKV0gLSByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdCh0cmFjaylbcmVzb2x2ZSgid2lkdGgiKV07XG4gIH1cblxuICBmdW5jdGlvbiBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWRMaW1pdChtYXgsIHBvc2l0aW9uKSB7XG4gICAgcG9zaXRpb24gPSBpc1VuZGVmaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQocG9zaXRpb24pID8gZ2V0UG9zaXRpb24oKSA6IHBvc2l0aW9uO1xuICAgIHZhciBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWRNaW4gPSBtYXggIT09IHRydWUgJiYgb3JpZW50KHBvc2l0aW9uKSA8IG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZ2V0TGltaXQoZmFsc2UpKTtcbiAgICB2YXIgZXhjZWVkZWRNYXggPSBtYXggIT09IGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSAmJiBvcmllbnQocG9zaXRpb24pID4gb3JpZW50KGdldExpbWl0KHRydWUpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGV4Y2VlZGVkTWluIHx8IGV4Y2VlZGVkTWF4O1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIG1vdmU6IG1vdmUsXG4gICAganVtcDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2p1bXAsXG4gICAgdHJhbnNsYXRlOiB0cmFuc2xhdGUsXG4gICAgc2hpZnQ6IHNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBjYW5jZWw6IGNhbmNlbCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b1Bvc2l0aW9uOiB0b1Bvc2l0aW9uLFxuICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgZ2V0TGltaXQ6IGdldExpbWl0LFxuICAgIGV4Y2VlZGVkTGltaXQ6IGV4YycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZWRlZExpbWl0LFxuICAgIHJlcG9zaXRpb246IHJlcG9zaXRpb25cbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIENvbnRyb2xsZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBfRXZlbnRJbnRlcmZhY2U1ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U1Lm9uLFxuICAgICAgZW1pdCA9IF9FdmVudEludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2U1LmVtaXQ7XG5cbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGdldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgIGdldExpbWl0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUuZ2V0TGltaXQsXG4gICAgICB0b1Bvc2l0aW9uID0gTW92ZS50b1Bvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbjtcbiAgdmFyIF9Db21wb25lbnRzMiRTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLFxuICAgICAgaXNFbm91Z2ggPSBfQ29tcG9uZW50czIkU2xpZGVzLmlzRW5vdWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCxcbiAgICAgIGdldExlbmd0aCA9IF9Db21wb25lbnRzMiRTbGlkZXMuZ2V0TGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcbiAgdmFyIG9taXRFbmQgPSBvcHRpb25zLm9taXRFbmQ7XG4gIHZhciBpc0xvbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwID0gU3BsaWRlMi5pcyhMT09QKTtcbiAgdmFyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSScKICAgICAgICAgICAgICAgICAgICAgICAgYidERSk7XG4gIHZhciBnZXROZXh0ID0gYXBwbHkoZ2V0QWRqYWNlbnQsIGZhbHNlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBnZXRQcmV2ID0gYXBwbHkoZ2V0QWRqYWNlbnQsIHRydWUpO1xuICB2YXIgY3VycicKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCA9IG9wdGlvbnMuc3RhcnQgfHwgMDtcbiAgdmFyIGVuZEluZGV4O1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHByZXZJbmRleCA9IGN1cnJJbmRleDtcbiAgdmFyIHNsaWRlQ291bnQ7XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGVyTW92ZTtcbiAgdmFyIHBlclBhZ2U7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluaXQoKTtcbiAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0VORF9JTkRFWF9DSEFOR0VEXSwgaW5pdCk7XG4gICAgb24oRVZFTlRfUkVTSVpFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uUmVzaXplZCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHNsaWRlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW50ID0gZ2V0TGVuZ3RoKHRydWUpO1xuICAgIHBlck1vdmUgPSBvcHRpb25zLnBlck1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2U7XG4gICAgZW5kSW5kZXggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0RW5kKCk7XG4gICAgdmFyIGluZGV4ID0gY2xhbXAoY3VyckluZGV4LCAwLCBvbWl0RW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA/IGVuZEluZGV4IDogc2xpZGVDb3VudCAtIDEpO1xuXG4gICAgaWYgKGluZGV4ICEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gY3VyckluZGV4KSB7XG4gICAgICBjdXJySW5kZXggPSBpbmRleDtcbiAgICAgIE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlLnJlcG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblJlc2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkKCkge1xuICAgIGlmIChlbmRJbmRleCAhPT0gZ2V0RW5kKCkpIHtcbiAgICAgIGVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ28oY29udHJvbCwgYWxsb3dTYW1lSW5kZXgsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NCdXN5KCkpIHtcbiAgICAgIHZhciBkZXN0ID0gcGFyc2UoY29udHJvbCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGluZGV4ID0gbG9vcChkZXN0KTtcblxuICAgICAgaWYgKGluZGV4ID4gLTEgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYmIChhbGxvd1NhbWVJbmRleCB8fCBpbmRleCAhPT0gY3VyckluZGV4KSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2V0SW5kZXgoaW5kZXgpO1xuICAgICAgICBNb3ZlLm1vdmUoZGVzdCwgaW5kZXgsIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2SW5kZXgsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gc2Nyb2xsKGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgY2FsbGJhY2spIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQ29tcG9uZW50czIuU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmFwLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUudG9JbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgoZ2V0UG9zaXRpb24oKSkpO1xuICAgICAgc2V0SW5kZXgob21pdEVuZCA/IG1pbihpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgsIGVuZEluZGV4KSA6IGluZGV4KTtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2UoY29udHJvbCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgaW5kZXggPSBjdXJySW5kZXg7XG5cbiAgICBpZiAoaXNTdHJpbmcoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICB2YXIgX3JlZiA9IGNvbnRyb2wubWF0Y2goLyhbK1xcLTw+XSkoXFxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyspPy8pIHx8IFtdLFxuICAgICAgICAgIGluZGljYXRvciA9IF9yZWZbMV0sXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG51bWJlciA9IF9yZWZbMl07XG5cbiAgICAgIGlmIChpbmRpY2F0b3IgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAiKyIgfHwgaW5kaWNhdG9yID09PSAiLSIpIHtcbiAgICAgICAgaW5kZXggPSBjb21wdXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Rlc3RJbmRleChjdXJySW5kZXggKyArKCIiICsgaW5kaWNhdG9yICsgKCtudW1iZXIgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEpKSwgY3VyckluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIGluZGV4ID0gbnVtYmVyID8gdG9JbmRleCgrbnVtYmVyKSA6IGdldE4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0KHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChpbmRpY2F0b3IgPT09ICI8IikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgaW5kZXggPSBnZXRQcmV2KHRydWUpO1xuICAgICAgfVxuICAgIH0gZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Uge1xuICAgICAgaW5kZXggPSBpc0xvb3AgPyBjb250cm9sIDogY2xhbXAoY29udHJvbCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAsIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gZ2V0QWRqYWNlbnQocHJldiwgZGVzdGluYXRpb24pIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIG51bWJlciA9IHBlck1vdmUgfHwgKGhhc0ZvY3VzKCkgPyAxIDogcGVyUGFnZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBkZXN0ID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogKHByZXYgPyAtMSA6IDEpLCBjdXJySW5kZXgsICEocGVyTW92ZSB8fCBoYXNGb2N1cygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSkpO1xuXG4gICAgaWYgKGRlc3QgPT09IC0xICYmIGlzU2xpZGUpIHtcbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoIWFwcHJveGltYXRlbHlFcXVhbChnZXRQb3NpdGlvbigpLCBnZXRMaW1pdCghcHJldiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKSkge1xuICAgICAgICByZXR1cm4gcHJldiA/IDAgOiBlbmRJbmRleDtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uID8gZGVzdCA6IGxvb3AoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZURlc3RJbmRleChkZXN0LCBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbSwgc25hcFBhZ2UpIHtcbiAgICBpZiAoaXNFbm91Z2goKSB8fCBoYXNGb2N1cygpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIGluZGV4ID0gY29tcHV0ZU1vdmFibGVEZXN0SW5kZXgoZGVzdCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICBpZiAoaW5kZXggIT09IGRlc3QpIHtcbiAgICAgICAgZnJvbSA9IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgICAgICBkZXN0ID0gaW5kZXg7XG4gICAgICAgIHNuYXBQYWdlID0gZmFscycKICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzdCA8IDAgfHwgZGVzdCA+IGVuZEluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCkge1xuICAgICAgICBpZiAoIXBlck1vdmUgJiYgKGJldHdlZW4oMCwgZGVzdCwgZnJvbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUpIHx8IGJldHdlZW4oZW5kSW5kZXgsIGZyb20sIGRlc3QsIHRydWUpKSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBkZXN0ID0gdG9JbmRleCh0b1BhZ2UoZGVzdCkpO1xuICAgICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgICBpZiAoaXNMb29wKSB7XG4gICAgICAgICAgICBkZXN0ID0gc24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBQYWdlID8gZGVzdCA8IDAgPyAtKHNsaWRlQ291bnQgJSBwZXJQYWdlIHx8IHBlclBhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSA6IHNsaWRlQ291bnQgOiBkZXN0O1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicucmV3aW5kKSB7XG4gICAgICAgICAgICBkZXN0ID0gZGVzdCA8IDAgPyBlbmRJbmRleCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicwO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZXN0ID0gLTE7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwUGFnZSAmJiBkZXN0ICE9PSBmcm9tKSB7XG4gICAgICAgICAgZGVzdCA9IHRvSW5kZXgoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvUGFnZShmcm9tKSArIChkZXN0IDwgZnJvbSA/IC0xIDogMSkpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXN0ID0gLTE7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiBkZXN0O1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZU1vdmFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlRGVzdEluZGV4KGRlc3QpIHtcbiAgICBpZiAoaXNTbGlkZSAmJiBvcHRpb25zLnRyaW1TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhY2UgPT09ICJtb3ZlIiAmJiBkZXN0ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgIHZhciBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gPSBnZXRQb3NpdGlvbigpO1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09PSB0b1Bvc2l0aW9uKGRlc3QsIHRydWUpICYmIGJldHdlZW4oZGVzdCwgMCwgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTIubGVuZ3RoIC0gMSwgIW9wdGlvbnMucmV3aW5kKSkge1xuICAgICAgICBkZXN0IDwgY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJJbmRleCA/IC0tZGVzdCA6ICsrZGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGRlc3Q7XG4gIH1cblxuICBmdW5jdGlvbiBsb29wKGluZGV4KSB7XG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBpc0xvb3AgPyAoaW5kZXggKyBzbGlkZUNvdW50KSAlIHNsaWRlQ291bnQgfHwgMCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVuZCgpIHtcbiAgICB2YXIgZW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHNsaWRlQ291bnQgLSAoaGFzRm9jdXMoKSB8fCBpc0xvb3AgJiYgcGVyTW92ZSA/IDEgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogcGVyUGFnZSk7XG5cbiAgICB3aGlsZSAob21pdEVuZCAmJiBlbmQtLSA+IDApIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAodG9Qb3NpdGlvbihzbGlkZUNvdW50IC0gMSwgdHJ1ZSkgIT09IHRvUG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKGVuZCwgdHJ1ZSkpIHtcbiAgICAgICAgZW5kKys7XG4gICAgICAgIGJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhbXAoZW5kLCAwLCBzbGlkZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9JbmRleChwYWdlKSB7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBjbGFtcChoYXNGb2N1cygpID8gcGFnZSA6IHBlclBhZ2UgKiBwYWdlLCAwLCBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kSW5kZXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9QYWdlKGluZGV4KSB7XG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBoYXNGb2N1cygpID8gbWluKGluZGV4LCBlbmRJbmRleCkgOiBmbG9vcigoaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4ID49IGVuZEluZGV4ID8gc2xpZGVDb3VudCAtIDEgOiBpbmRleCkgLyBwZXJQYWdlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiB0b0Rlc3QoZGVzdGluYXRpb24pIHtcbiAgICB2YXIgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Nlc3QgPSBNb3ZlLnRvSW5kZXgoZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA/IGNsYW1wKGNsb3Nlc3QsIDAsIGVuZEluZGV4KSA6IGNsb3Nlc3Q7XG4gIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gc2V0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggIT09IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpIHtcbiAgICAgIHByZXZJbmRleCA9IGN1cnJJbmRleDtcbiAgICAgIGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJbmRleChwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndikge1xuICAgIHJldHVybiBwcmV2ID8gcHJldkluZGV4IDogY3VyckluZGV4O1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICAgIHJldHVybiAhaXNVbmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKG9wdGlvbnMuZm9jdXMpIHx8IG9wdGlvbnMuaXNOYXZpZ2F0aW9uO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGlzQnVzeSgpIHtcbiAgICByZXR1cm4gU3BsaWRlMi5zdGF0ZS5pcyhbTScKICAgICAgICAgICAgICAgICAgICAgICAgYidPVklORywgU0NST0xMSU5HXSkgJiYgISFvcHRpb25zLndhaXRGb3JUcmFuc2l0aW9uO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGdvOiBnbyxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2Nyb2xsOiBzY3JvbGwsXG4gICAgZ2V0TmV4dDogZ2V0TmV4dCxcbiAgICBnZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldjogZ2V0UHJldixcbiAgICBnZXRBZGphY2VudDogZ2V0QWRqYWNlbnQsXG4gICAgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldEVuZDogZ2V0RW5kLFxuICAgIHNldEluZGV4OiBzZXRJbmRleCxcbiAgICBnZXRJbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXg6IGdldEluZGV4LFxuICAgIHRvSW5kZXg6IHRvSW5kZXgsXG4gICAgdG9QYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdG9QYWdlLFxuICAgIHRvRGVzdDogdG9EZXN0LFxuICAgIGhhc0ZvY3VzOiBoYXNGbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXMsXG4gICAgaXNCdXN5OiBpc0J1c3lcbiAgfTtcbn1cblxudmFyIFhNTF9OQU1FX1NQQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDRSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7XG52YXIgUEFUSCA9ICJtMTUuNScKICAgICAgICAgICAgICAgICAgICAgICAgYicgMC45MzItNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzYgNC40LTQuMy00LjQtNC40LTE0LjYtMTQuNnoiO1xudmFyIFNJWkUgPSA0MDtcblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIEFycm93cyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gIHZhciBvbiA9IGV2ZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbixcbiAgICAgIGJpbmQgPSBldmVudC5iaW5kLFxuICAgICAgZW1pdCA9IGV2ZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0O1xuICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgIGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gb3B0aW9ucy5pMThuO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLmFycm93cyxcbiAgICAgIHRyYWNrID0gRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnRzLnRyYWNrO1xuICB2YXIgd3JhcHBlciA9IHBsYWNlaG9sZGVyO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHByZXYgPSBFbGVtZW50cy5wcmV2O1xuICB2YXIgbmV4dCA9IEVsZW1lbnRzLm5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h0O1xuICB2YXIgY3JlYXRlZDtcbiAgdmFyIHdyYXBwZXJDbGFzc2VzO1xuICB2YXIgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycm93cyA9IHt9O1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb24oRVZFTlRfVVBEQVRFRCwgcmVtb3VudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudCgpIHtcbiAgICBkZXN0cm95KCk7XG4gICAgbW91bnQoKTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBpbml0KCkge1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5hcnJvd3M7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgaWYgKGVuYWJsZWQgJiYgIShwcmV2ICYmIG5leHQpKSB7XG4gICAgICBjcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlQXJyb3dzKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGFzc2lnbihhcnJvd3MsIHtcbiAgICAgICAgcHJldjogcHJldixcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHQ6IG5leHRcbiAgICAgIH0pO1xuICAgICAgZGlzcGxheSh3cmFwcGVyLCBlbmFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZCA/ICIiIDogIm5vbmUiKTtcbiAgICAgIGFkZENsYXNzKHdyYXBwZXIsIHdyYXBwZXJDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NlcyA9IENMQVNTX0FSUk9XUyArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBsaXN0ZW4oKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHVwZGF0ZSgpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoW3ByZXYsIG5leHRdLCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UUk9MUywgdHJhY2suaWQpO1xuICAgICAgICBlbWl0KEVWRU5UX0FSUk9XU19NT1VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCwgcHJldiwgbmV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3koKSB7XG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICAgIHJlbW92ZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh3cmFwcGVyLCB3cmFwcGVyQ2xhc3Nlcyk7XG5cbiAgICBpZiAoY3JlYXRlZCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlbW92ZShwbGFjZWhvbGRlciA/IFtwcmV2LCBuZXh0XSA6IHdyYXBwZXIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHByZXYgPSBuZXh0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZUF0dHJpYnV0ZShbcHJldiwgbmV4dF0sIEFMTF9BVFRSSUJVVEVTKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKCkge1xuICAgIG9uKFtFVkVOVF9NT1VOVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCwgRVZFTlRfTU9WRUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfRU5EX0lOREVYX0NIQU5HRURdLCB1cGRhdGUpO1xuICAgIGJpbmQobmV4dCwgImNsaWNrIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGFwcGx5KGdvLCAiPiIpKTtcbiAgICBiaW5kKHByZXYsICJjbGljayIsIGFwcGx5KGdvLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIjwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgQ29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZXIuZ28oY29udHJvbCwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3dzKCkge1xuICAgIHdyYXBwZXIgPSBwbGFjZWhvbGRlciB8fCBjcmVhdGUoImRpdiIsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc2VzLmFycm93cyk7XG4gICAgcHJldiA9IGNyZWF0ZUFycm93KHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBuZXh0ID0gY3JlYXRlQXJyb3coZmFsc2UpO1xuICAgIGNyZWF0ZWQgPSB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBhcHBlbmQod3JhcHBlciwgW3ByZXYsIG5leHRdKTtcbiAgICAhcGxhY2VoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sZGVyICYmIGJlZm9yZSh3cmFwcGVyLCB0cmFjayk7XG4gIH1cblxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY3JlYXRlQXJyb3cocHJldjIpIHtcbiAgICB2YXIgYXJyb3cgPSAiPGJ1dHRvbiBjbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiIiArIGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldjIgPyBjbGFzc2VzLnByZXYgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwZT1cXCJidXR0b25cXCI+PHN2ZyB4bWxucz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFwiIiArIFhNTF9OQU1FX1NQQUNFICsgIlxcIiB2aWV3Qm94PVxcIjAgMCAiICsgU0laJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UgKyAiICIgKyBTSVpFICsgIlxcIiB3aWR0aD1cXCIiICsgU0laRSArICJcXCIgaGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodD1cXCIiICsgU0laRSArICJcXCIgZm9jdXNhYmxlPVxcImZhbHNlXFwiPjxwYXRoIGQ9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIiIgKyAob3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgKyAiXFwiIC8+IjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHBhcnNlSHRtbChhcnJvdyk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIGlmIChwcmV2ICYmIG5leHQpIHtcbiAgICAgIHZhciBpbmRleCA9IFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLmluZGV4O1xuICAgICAgdmFyIHByZXZJbmRleCA9IENvbnRyb2xsZXIuZ2V0UHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXYoKTtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBDb250cm9sbGVyLmdldE5leHQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB2YXIgcHJldkxhYmVsID0gcHJldkluZGV4ID4gLTEgJiYgaW5kZXggPCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldkluZGV4ID8gaTE4bi5sYXN0IDogaTE4bi5wcmV2O1xuICAgICAgdmFyIG5leHRMYWJlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBuZXh0SW5kZXggPiAtMSAmJiBpbmRleCA+IG5leHRJbmRleCA/IGkxOG4uZmlyc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogaTE4bi5uZXh0O1xuICAgICAgcHJldi5kaXNhYmxlZCA9IHByZXZJbmRleCA8IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgbmV4dC5kaXNhYmxlZCA9IG5leHRJbmRleCA8IDA7XG4gICAgICBzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cmlidXRlKHByZXYsIEFSSUFfTEFCRUwsIHByZXZMYWJlbCk7XG4gICAgICBzZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKG5leHQsIEFSSUFfTEFCRUwsIG5leHRMYWJlbCk7XG4gICAgICBlbWl0KEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9BUlJPV1NfVVBEQVRFRCwgcHJldiwgbmV4dCwgcHJldkluZGV4LCBuZXh0SW5kZXgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFycm93czogYXJyb3dzLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlOiB1cGRhdGVcbiAgfTtcbn1cblxudmFyIElOVEVSVkFMX0RBVEFfQVRUUklCVVRFID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEFfQVRUUklCVVRFICsgIi1pbnRlcnZhbCI7XG5cbmZ1bmN0aW9uIEF1dG9wbGF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZTYgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZTYub24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlNi5iaW5kLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U2LmVtaXQ7XG5cbiAgdmFyIGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbCA9IFJlcXVlc3RJbnRlcnZhbChvcHRpb25zLmludGVydmFsLCBTcGxpZGUyLmdvLmInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKFNwbGlkZTIsICI+IiksIG9uQW5pbWF0aW9uRnJhbWUpO1xuICB2YXIgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaW50ZXJ2YWwuaXNQYXVzZWQ7XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50cyxcbiAgICAgIF9Db21wb25lbnRzMiRFbGVtZW50czQgPSBDb21wb25lbnRzMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWxlbWVudHMsXG4gICAgICByb290ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzNC5ybycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCxcbiAgICAgIHRvZ2dsZSA9IF9Db21wb25lbnRzMiRFbGVtZW50czQudG9nZ2xlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIGF1dG9wbGF5ID0gb3B0aW9ucy5hdXRvcGxheTtcbiAgdmFyIGhvdmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkO1xuICB2YXIgZm9jdXNlZDtcbiAgdmFyIHN0b3BwZWQgPSBhdXRvcGxheSA9PT0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJwYXVzZSI7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKGF1dG9wbGF5KScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgbGlzdGVuKCk7XG4gICAgICB0b2dnbGUgJiYgc2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b2dnbGUsIEFSSUFfQ09OVFJPTFMsIEVsZW1lbnRzLnRyYWNrLmlkKTtcbiAgICAgIHN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVkIHx8IHBsYXkoKTtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBsaXN0ZW4oKSB7XG4gICAgaWYgKG9wdGlvbnMucGF1c2VPbkhvdmVyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgYmluZChyb290LCAibW91c2VlbnRlciBtb3VzZWxlYXZlIiwgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSB7XG4gICAgICAgIGhvdmVyZWQgPSBlLnR5cGUgPT09ICJtb3VzZWVudGVyIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5wYXVzZU9uRm9jdXMpIHtcbiAgICAgIGJpbmQocm9vdCwgImZvY3VzaW4gZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Vzb3V0IiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZm9jdXNlZCA9IGUudHlwZSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICJmb2N1c2luIjtcbiAgICAgICAgYXV0b1RvZ2dsZSgpO1xuICAgICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGlmICh0b2dnbGUpIHtcbiAgICAgIGJpbmQodG9nZ2xlLCAiY2xpY2siLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gKCkge1xuICAgICAgICBzdG9wcGVkID8gcGxheSgpIDogcGF1c2UodHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb24oW0VWRU5UX01PVkUsIEVWRU5UX1NDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPTEwsIEVWRU5UX1JFRlJFU0hdLCBpbnRlcnZhbC5yZXdpbmQpO1xuICAgIG9uKEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19NT1ZFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGlzUGF1c2VkKCkgJiYgQ29tcG9uZW50czIuU2xpZGVzLmlzRW5vdWdoKCkpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpbnRlcnZhbC5zdGFydCghb3B0aW9ucy5yZXNldFByb2dyZXNzKTtcbiAgICAgIGZvY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUExBWSk7XG4gICAgfVxuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhdXNlKHN0b3ApIHtcbiAgICBpZiAoc3RvcCA9PT0gdm9pZCAwKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc3RvcCA9IHRydWU7XG4gICAgfVxuXG4gICAgc3RvcHBlZCA9ICEhc3RvcDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdXBkYXRlKCk7XG5cbiAgICBpZiAoIWlzUGF1c2VkKCkpIHtcbiAgICAgIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbC5wYXVzZSgpO1xuICAgICAgZW1pdChFVkVOVF9BVVRPUExBWV9QQVVTRSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGF1dG9Ub2dnbGUoKSB7XG4gICAgaWYgKCFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcHBlZCkge1xuICAgICAgaG92ZXJlZCB8fCBmb2N1c2VkID8gcGF1c2UoZmFsc2UpIDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXkoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0b2dnbGUpIHtcbiAgICAgIHRvZ2dsZUNsYXNzKHRvZ2dsZSwgQ0xBU1NfQUNUSVZFLCAhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0b3BwZWQpO1xuICAgICAgc2V0QXR0cmlidXRlKHRvZ2dsZSwgQVJJQV9MQUJFTCwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuaTE4bltzdG9wcGVkID8gInBsYXkiIDogInBhdXNlIl0pO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBvbkFuaW1hdGlvbkZyYW1lKHJhdGUpIHtcbiAgICB2YXIgYicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciA9IEVsZW1lbnRzLmJhcjtcbiAgICBiYXIgJiYgc3R5bGUoYmFyLCAid2lkdGgiLCByYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSAqIDEwMCArICIlIik7XG4gICAgZW1pdChFVkVOVF9BVVRPUExBWV9QTEFZSU5HLCByYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdmUoaW5kZXgpIHtcbiAgICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlID0gQ29tcG9uZW50czIuU2xpZGVzLmdldEF0KGluZGV4KTtcbiAgICBpbnRlcnZhbC5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0KFNsaWRlICYmICtnZXRBdHRyaWJ1dGUoU2xpZGUuc2xpZGUsIElOVEVSVkFMX0RBVEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0FUVFJJQlVURSkgfHwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gIH1cblxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogaW50ZXJ2YWwuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBwbGF5OiBwbGF5LFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBpc1BhdXNlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGlzUGF1c2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIENvdmVyKFNwbGlkZTIsIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNyA9IEV2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNy5vbjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wdGlvbnMuY292ZXIpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBvbihFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VTSF0sIGFwcGx5KGNvdmVyLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvdmVyKGNvdmVyMikge1xuICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoU2xpZGUpIHtcbiAgICAgIHZhciBpbWcgPSBjaGlsZChTbGlkZS5jb250YWluZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IFNsaWRlLnNsaWRlLCAiaW1nIik7XG5cbiAgICAgIGlmIChpbWcgJiYgaW1nLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmMpIHtcbiAgICAgICAgdG9nZ2xlKGNvdmVyMiwgaW1nLCBTbGlkZSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlKGNvdmVyMiwgaW1nLCBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUpIHtcbiAgICBTbGlkZS5zdHlsZSgiYmFja2dyb3VuZCIsIGNvdmVyMiA/ICJjZW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXFwiIiArIGltZy5zcmMgKyAiXFwiKSIgOiAiIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHRydWUpO1xuICAgIGRpc3BsYXkoaW1nLCBjb3ZlcjIgPyAibm9uZSIgOiAiIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KGNvdmVyLCBmYWxzZSlcbiAgfTtcbn1cblxudmFyIEJPVU5DRV9ESUZGX1RIUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0hPTEQgPSAxMDtcbnZhciBCT1VOQ0VfRFVSQVRJT04gPSA2MDA7XG52YXIgRlJJQ1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OX0ZBQ1RPUiA9IDAuNjtcbnZhciBCQVNFX1ZFTE9DSVRZID0gMS41O1xudmFyIE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5fRFVSQVRJT04gPSA4MDA7XG5cbmZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTggPSBFdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTgubycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLFxuICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICB2YXIgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IFNwbGlkZTIuc3RhdGUuc2V0O1xuICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndExpbWl0ID0gTW92ZS5nZXRMaW1pdCxcbiAgICAgIGV4Y2VlZGVkTGltaXQgPSBNb3ZlLmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNlZWRlZExpbWl0LFxuICAgICAgdHJhbnNsYXRlID0gTW92ZS50cmFuc2xhdGU7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgaXNTbGlkZSA9IFNwbGlkZTIuaXMoU0xJREUpO1xuICB2YXIgaW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsO1xuICB2YXIgY2FsbGJhY2s7XG4gIHZhciBmcmljdGlvbiA9IDE7XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG1vdW50KCkge1xuICAgIG9uKEVWRU5UX01PVkUsIGNsZWFyKTtcbiAgICBvbihbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBjYW5jZWwpO1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsIG9uU2Nyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLCBub0NvbnN0cmFpbikge1xuICAgIHZhciBmcm9tID0gZ2V0UG9zaXRpb24oKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgY2xlYXIoKTtcblxuICAgIGlmIChzbmFwICYmICghaXNTbGlkZSB8fCAhZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkTGltaXQoKSkpIHtcbiAgICAgIHZhciBzaXplID0gQ29tcG9uZW50czIuTGF5b3V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zbGlkZXJTaXplKCk7XG4gICAgICB2YXIgb2Zmc2V0ID0gc2lnbihkZXN0aW5hdGlvbikgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogc2l6ZSAqIGZsb29yKGFicyhkZXN0aW5hdGlvbikgLyBzaXplKSB8fCAwO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3RpbmF0aW9uID0gTW92ZS50b1Bvc2l0aW9uKENvbXBvbmVudHMyLkNvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRvRGVzdChkZXN0aW5hdGlvbiAlIHNpemUpKSArIG9mZnNldDtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIG5vRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoZnJvbSwgZGVzdGluYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLCAxKTtcbiAgICBmcmljdGlvbiA9IDE7XG4gICAgZHVyYXRpb24gPSBub0Rpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZSA/IDAgOiBkdXJhdGlvbiB8fCBtYXgoYWJzKGRlc3RpbmF0aW9uIC0gZnJvbSkgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicgQkFTRV9WRUxPQ0lUWSwgTUlOX0RVUkFUSU9OKTtcbiAgICBjYWxsYmFjayA9IG9uU2NybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGVkO1xuICAgIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKGR1cmF0aW9uLCBvbkVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGFwcGx5KHVwZGF0ZSwgZnJvbSwgZGVzdGluYXRpb24sIG5vQ29uc3RyYWluKSwgMSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHNldChTQ1JPTExJTkcpO1xuICAgIGVtaXQoRVZFTlRfU0NST0xMKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRW5kKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQoSURMRSk7XG4gICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICBlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9TQ1JPTExFRCk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoZnJvbSwgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvLCBub0NvbnN0cmFpbiwgcmF0ZSkge1xuICAgIHZhciBwb3NpdGlvbiA9IGdldFBvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpO1xuICAgIHZhciB0YXJnZXQgPSBmcm9tICsgKHRvIC0gZnJvbSkgKiBlYXNpbmcocicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUpO1xuICAgIHZhciBkaWZmID0gKHRhcmdldCAtIHBvc2l0aW9uKSAqIGZyaWN0aW9uOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0cmFuc2xhdGUocG9zaXRpb24gKyBkaWZmKTtcblxuICAgIGlmIChpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAmJiAhbm9Db25zdHJhaW4gJiYgZXhjZWVkZWRMaW1pdCgpKSB7XG4gICAgICBmcmljdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKj0gRlJJQ1RJT05fRkFDVE9SO1xuXG4gICAgICBpZiAoYWJzKGRpZmYpIDwgQk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVU5DRV9ESUZGX1RIUkVTSE9MRCkge1xuICAgICAgICBzY3JvbGwoZ2V0TGltaXQoZXhjZWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVkTGltaXQodHJ1ZSkpLCBCT1VOQ0VfRFVSQVRJT04sIGZhbHNlLCBjYWxsYmFjaywgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyKCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgIGludGVydmFsLmNhbmNlbCgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAhaW50ZXJ2YWwuaXNQYXVzZWQoKSkge1xuICAgICAgY2xlYXIoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbkVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVhc2luZyh0KSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBlYXNpbmdGdW5jID0gb3B0aW9ucy5lYXNpbmdGdW5jO1xuICAgIHJldHVybiBlYXNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nRnVuYyA/IGVhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coMSAtIHQsIDQpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGNsZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncixcbiAgICBzY3JvbGw6IHNjcm9sbCxcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxudmFyIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TID0ge1xuICBwYXNzaXZlOiBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UsXG4gIGNhcHR1cmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIERyYWcoU3BsaWRlMiwgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U5ID0gRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U5Lm9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICBiaW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IF9FdmVudEludGVyZmFjZTkuYmluZCxcbiAgICAgIHVuYmluZCA9IF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2U5LnVuYmluZDtcblxuICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgU2Nyb2xsID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlNjcm9sbCxcbiAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcixcbiAgICAgIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMudHJhY2ssXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVkdWNlID0gQ29tcG9uZW50czIuTWVkaWEucmVkdWNlO1xuICB2YXIgX0NvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiREaXJlY3RpbzIgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24sXG4gICAgICByZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSA9IF9Db21wb25lbnRzMiREaXJlY3RpbzIucmVzb2x2ZSxcbiAgICAgIG9yaWVudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ29tcG9uZW50czIkRGlyZWN0aW8yLm9yaWVudDtcbiAgdmFyIGdldFBvc2l0aW9uID0gTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUuZ2V0UG9zaXRpb24sXG4gICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5leGNlZWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMaW1pdDtcbiAgdmFyIGJhc2VQb3NpdGlvbjtcbiAgdmFyIGJhc2VFdmVudDtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2QmFzZUV2ZW50O1xuICB2YXIgaXNGcmVlO1xuICB2YXIgZHJhZ2dpbmc7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgZXhjZWVkZWQgPSBmYWxzZTtcbiAgdmFyIGNsaWNrUHJldmVudGVkO1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGRpc2FibGVkO1xuICB2YXIgdGFyZ2V0O1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX01PVkVfRVZFTlRTLCBub29wLCBTQ1JPTExfTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJU1RFTkVSX09QVElPTlMpO1xuICAgIGJpbmQodHJhY2ssIFBPSU5URVJfVVBfRVZFTlRTLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgIGJpbmQodHJhY2ssIFBPSScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVEVSX0RPV05fRVZFTlRTLCBvblBvaW50ZXJEb3duLCBTQ1JPTExfTElTVEVORVJfT1BUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTlMpO1xuICAgIGJpbmQodHJhY2ssICJjbGljayIsIG9uQ2xpY2ssIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjYXB0dXJlOiB0cnVlXG4gICAgfSk7XG4gICAgYmluZCh0cmFjaywgImRyYWdzdGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCBwcmV2ZW50KTtcbiAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRF0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmFyIGRyYWcgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5kcmFnO1xuICAgIGRpc2FibGUoIWRyYWcpO1xuICAgIGlzRnJlZSA9IGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnID09PSAiZnJlZSI7XG4gIH1cblxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgY2xpY2tQcmV2ZW50ZWQgPSBmYWxzZTtcblxuICAgIGlmICghZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkKSB7XG4gICAgICB2YXIgaXNUb3VjaCA9IGlzVG91Y2hFdmVudChlKTtcblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChpc0RyYWdnYWJsZShlLnRhcmdldCkgJiYgKGlzVG91Y2ggfHwgIWUuYnV0dG9uKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgaWYgKCFDb250cm9sbGVyLmlzQnVzeSgpKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRhcmdldCA9IGlzVG91Y2ggPyB0cmFjayA6IHdpbmRvdztcbiAgICAgICAgICBkcmFnZycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcgPSBzdGF0ZS5pcyhbTU9WSU5HLCBTQ1JPTExJTkddKTtcbiAgICAgICAgICBwcmV2QicKICAgICAgICAgICAgICAgICAgICAgICAgYidhc2VFdmVudCA9IG51bGw7XG4gICAgICAgICAgYmluZCh0YXJnZXQsIFBPSU5URVJfTU9WRScKICAgICAgICAgICAgICAgICAgICAgICAgYidfRVZFTlRTLCBvblBvaW50ZXJNb3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGJpbmQodGFyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICAgICAgTW92ZS5jYW5jZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgICAgICAgU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgIHNhdmUoZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01vdmUoZSkge1xuICAgIGlmICghc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUuc2V0KERSQUdHSU5HKTtcbiAgICAgIGVtaXQoRVZFTlRfRFJBRyk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcbiAgICAgIGlmIChkcmFnZ2luZykgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoYmFzZVBvc2l0aW9uICsgY29uc3RyYWluKGRpZicKICAgICAgICAgICAgICAgICAgICAgICAgYidmQ29vcmQoZSkpKTtcbiAgICAgICAgdmFyIGV4cGlyZWQgPSBkaWZmVGltZShlKSA+IExPRycKICAgICAgICAgICAgICAgICAgICAgICAgYidfSU5URVJWQUw7XG4gICAgICAgIHZhciBoYXNFeGNlZWRlZCA9IGV4Y2VlZGVkICE9PSAoZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4Y2VlZGVkID0gZXhjZWVkZWRMaW1pdCgpKTtcblxuICAgICAgICBpZiAoZXhwaXJlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgaGFzRXhjZWVkZWQpIHtcbiAgICAgICAgICBzYXZlKGUpO1xuICAgICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGNsaWNrUHJldmVudGVkID0gdHJ1ZTtcbiAgICAgICAgZW1pdChFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfRFJBR0dJTkcpO1xuICAgICAgICBwcmV2ZW50KGUpO1xuICAgICAgfSBlbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNTbGlkZXJEaXJlY3Rpb24oZSkpIHtcbiAgICAgICAgZHJhZ2dpbmcgPSBzaG91bGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3RhcnQoZSk7XG4gICAgICAgIHByZXZlbnQoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIG9uUG9pbnRlclVwKGUpIHtcbiAgICBpZiAoc3RhdGUuaXMoRFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUdHSU5HKSkge1xuICAgICAgc3RhdGUuc2V0KElETEUpO1xuICAgICAgZW1pdChFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfRFJBR0dFRCk7XG4gICAgfVxuXG4gICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZShlKTtcbiAgICAgIHByZXZlbnQoZSk7XG4gICAgfVxuXG4gICAgdW5iaW5kKHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUpO1xuICAgIHVuYmluZCh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXApO1xuICAgIGRyYWdnaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgaWYgKCEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzYWJsZWQgJiYgY2xpY2tQcmV2ZW50ZWQpIHtcbiAgICAgIHByZXZlbnQoZSwgdHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmUoZSkge1xuICAgIHByZXZCYXNlRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gYmFzZUV2ZW50O1xuICAgIGJhc2VFdmVudCA9IGU7XG4gICAgYmFzZVBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiA9IGdldFBvc2l0aW9uKCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlKGUpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIHZlbG9jaXR5ID0gY29tcHV0ZVZlbG9jaXR5KGUpO1xuICAgIHZhciBkZXN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gPSBjb21wdXRlRGVzdGluYXRpb24odmVsb2NpdHkpO1xuICAgIHZhciByZXdpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkID0gb3B0aW9ucy5yZXdpbmQgJiYgb3B0aW9ucy5yZXdpbmRCeURyYWc7XG4gICAgcmVkdScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZShmYWxzZSk7XG5cbiAgICBpZiAoaXNGcmVlKSB7XG4gICAgICBDb250cm9sbGVyLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGwoZGVzdGluYXRpb24sIDAsIG9wdGlvbnMuc25hcCk7XG4gICAgfSBlbHNlIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5pcyhGQURFKSkge1xuICAgICAgQ29udHJvbGxlci5nbyhvcmllbnQoc2lnbignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVsb2NpdHkpKSA8IDAgPyByZXdpbmQgPyAiPCIgOiAiLSIgOiByZXdpbmQgPyAiPiIgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIisiKTtcbiAgICB9IGVsc2UgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIGV4Y2VlZGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJiByZXdpbmQpIHtcbiAgICAgIENvbnRyb2xsZXIuZ28oZXhjZWVkZWRMaW1pdCh0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPyAiPiIgOiAiPCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBDb250cm9sbGVyLmdvKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250cm9sbGVyLnRvRGVzdChkZXN0aW5hdGlvbiksIHRydWUpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZWR1Y2UodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRTdGFydChlKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciB0aHJlc2hvbGRzID0gb3B0aW9ucy5kcmFnTWluVGhyZXNob2xkO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgaXNPYmogPSBpc09iamVjdCh0aHJlc2hvbGRzKTtcbiAgICB2YXIgbW91c2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gaXNPYmogJiYgdGhyZXNob2xkcy5tb3VzZSB8fCAwO1xuICAgIHZhciB0b3VjaCA9IChpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NPYmogPyB0aHJlc2hvbGRzLnRvdWNoIDogK3RocmVzaG9sZHMpIHx8IDEwO1xuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gYWJzKGRpZmZDb29yZChlKSkgPiAoaXNUb3VjaEV2ZW50KGUpID8gdG91Y2ggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW91c2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNTbGlkZXJEaXJlY3Rpb24oZSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gYWJzKGRpZmZDb29yZChlKSkgPiBhYnMoZGlmZkNvb3JkKGUsIHRydWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlVmVsb2NpdHkoZSkge1xuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5pcyhMT09QKSB8fCAhZXhjZWVkZWQpIHtcbiAgICAgIHZhciB0aW1lID0gZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZUaW1lKGUpO1xuXG4gICAgICBpZiAodGltZSAmJiB0aW1lIDwgTE9HX0lOVEVSVkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTCkge1xuICAgICAgICByZXR1cm4gZGlmZkNvb3JkKGUpIC8gdGltZTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZURlc3RpbmF0aW9uKHZlbG9jaXR5KSB7XG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCkgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2lnbih2ZWxvY2l0eSkgKiBtaW4oYWJzKHZlbG9jaXR5KSAqIChvcHRpb25zLmZsaWNrUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd2VyIHx8IDYwMCksIGlzRnJlZSA/IEluZmluaXR5IDogQ29tcG9uZW50czIuTGF5b3V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0U2l6ZSgpICogKG9wdGlvbnMuZmxpY2tNYXhQYWdlcyB8fCAxKSk7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gZGlmZkNvb3JkKGUsIG9ydGhvZ29uYWwpIHtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGNvb3JkT2YoZSwgb3J0aG9nb25hbCkgLSBjb29yZE9mKGdldEJhc2VFdmVudChlKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9ydGhvZ29uYWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGltZU9mKGUpIC0gdGltZU9mKGdldEJhc2VFdmVudChlKSk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gZ2V0QmFzZUV2ZW50KGUpIHtcbiAgICByZXR1cm4gYmFzZUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9PT0gZSAmJiBwcmV2QmFzZUV2ZW50IHx8IGJhc2VFdmVudDtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpIHtcbiAgICByZXR1cm4gKGlzVG91Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnQoZSkgPyBlLmNoYW5nZWRUb3VjaGVzWzBdIDogZSlbInBhZ2UiICsgcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicob3J0aG9nb25hbCA/ICJZIiA6ICJYIildO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFpbihkaWZmKSB7XG4gICAgcmV0dXJuIGRpZmYgLyAoZXhjZWVkZWQgJiYgU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoU0xJREUpID8gRlJJQ1RJT04gOiAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dnYWJsZSh0YXJnZXQyKSB7XG4gICAgdmFyIG5vRHJhZyA9IG9wdGlvbnMubm9EcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZztcbiAgICByZXR1cm4gIW1hdGNoZXModGFyZ2V0MiwgIi4iICsgQ0xBU1NfUEFHSU5BVEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInT05fUEFHRSArICIsIC4iICsgQ0xBU1NfQVJST1cpICYmICghbm9EcmFnIHx8ICFtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyh0YXJnZXQyLCBub0RyYWcpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoZSkge1xuICAgIHJldHVybiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gInVuZGVmaW5lZCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIGRyYWdnaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpc2FibGUodmFsdWUpIHtcbiAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRpc2FibGU6IGRpc2FibGUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlzRHJhZ2dpbmc6IGlzRHJhZ2dpbmdcbiAgfTtcbn1cblxudmFyIE5PUk1BTElaQScKICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OX01BUCA9IHtcbiAgU3BhY2ViYXI6ICIgIixcbiAgUmlnaHQ6IEFSUk9XX1JJRycKICAgICAgICAgICAgICAgICAgICAgICAgYidIVCxcbiAgTGVmdDogQVJST1dfTEVGVCxcbiAgVXA6IEFSUk9XX1VQLFxuICBEb3duOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dfRE9XTlxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplS2V5KGtleSkge1xuICBrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5ID0gaXNTdHJpbmcoa2V5KSA/IGtleSA6IGtleS5rZXk7XG4gIHJldHVybiBOT1JNQUxJWicKICAgICAgICAgICAgICAgICAgICAgICAgYidBVElPTl9NQVBba2V5XSB8fCBrZXk7XG59XG5cbnZhciBLRVlCT0FSRF9FVkVOVCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5ZG93biI7XG5cbmZ1bmN0aW9uIEtleWJvYXJkKFNwbGlkZTIsIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMTAgPSBFdmVudEludGVyZmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTEwLm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMC5iaW5kLFxuICAgICAgdW5iaW5kID0gX0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTEwLnVuYmluZDtcblxuICB2YXIgcm9vdCA9IFNwbGlkZTIucm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Q7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICB2YXIgdGFyZ2V0O1xuICB2YXIgZGlzYWJsZWQ7XG5cbiAgZnVuY3Rpb24gbW91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KCkge1xuICAgIGluaXQoKTtcbiAgICBvbihFVkVOVF9VUERBVEVELCBkZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgb24oRVZFTlRfVVBEQVRFRCwgaW5pdCk7XG4gICAgb24oRVZFTlRfTU9WJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIG9uTW92ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYm9hcmQgPSBvcHRpb25zLmtleWJvYXJkO1xuXG4gICAgaWYgKGtleWJvYXJkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgdGFyZ2V0ID0ga2V5Ym9hcmQgPT09ICJnbG9iYWwiID8gd2luZG93IDogcm9vdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBiaW5kKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93bik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdW5iaW5kKHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQsIEtFWUJPQVJEX0VWRU5UKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUodmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSB7XG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUoKSB7XG4gICAgdmFyIF9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIGRpc2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCA9IHRydWU7XG4gICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgZGlzYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGVkID0gX2Rpc2FibGVkO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25LZXlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293bihlKSB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgdmFyIGtleSA9IG5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JtYWxpemVLZXkoZSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQpKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oIjwiKTtcbiAgICAgIH0gZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19SSUdIVCkpIHtcbiAgICAgICAgU3BsaWRlMi5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28oIj4iKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkaXNhYmxlOiBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzYWJsZVxuICB9O1xufVxuXG52YXIgU1JDX0RBVEFfQVRUUklCVVRFID0gREFUQV9BVFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklCVVRFICsgIi1sYXp5IjtcbnZhciBTUkNTRVRfREFUQV9BVFRSSUJVVEUgPSBTUkNfREEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEFfQVRUUklCVVRFICsgIi1zcmNzZXQiO1xudmFyIElNQUdFX1NFTEVDVE9SID0gIlsiICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNSQ19EQVRBX0FUVFJJQlVURSArICJdLCBbIiArIFNSQ1NFVF9EQVRBX0FUVFJJQlVURScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAiXSI7XG5cbmZ1bmN0aW9uIExhenlMb2FkKFNwbGlkZTIsIENvbXBvbmVudHMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMTEgPSBFdmVudEludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTExLm9uLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9mZiA9IF9FdmVudEludGVyZmFjZTExLm9mZixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJmYWNlMTEuYmluZCxcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UxMS5lbWl0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICB2YXIgaXNTZXF1ZW50aWFsID0gb3B0aW9ucy5sYXp5TG9hZCA9PT0gInNlcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZW50aWFsIjtcbiAgdmFyIGV2ZW50cyA9IFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRScKICAgICAgICAgICAgICAgICAgICAgICAgYidEXTtcbiAgdmFyIGVudHJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKG9wdGlvbnMubGF6eUxvYWQpIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9SRUZSRVNILCBpbml0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpIHtcbiAgICBlbXB0eShlbnRyaWVzKTtcbiAgICByZWdpc3RlcigpO1xuXG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChpc1NlcXVlbnRpYWwpIHtcbiAgICAgIGxvYWROZXh0KCk7XG4gICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBvZmYoZXZlbnRzKTtcbiAgICAgIG9uKGV2ZW50cywgY2hlY2spO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChTbGlkZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHF1ZXJ5QWxsKFNsaWRlLnNsaWRlLCBJTUFHRV9TRUxFQ1RPUikuZm9yRWFjaChmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gKGltZykge1xuICAgICAgICB2YXIgc3JjID0gZ2V0QXR0cmlidXRlKGltZywgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICAgIHZhciBzcmNzZXQgPSBnZXRBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKGltZywgU1JDU0VUX0RBVEFfQVRUUklCVVRFKTtcblxuICAgICAgICBpZiAoc3JjICcKICAgICAgICAgICAgICAgICAgICAgICAgYichPT0gaW1nLnNyYyB8fCBzcmNzZXQgIT09IGltZy5zcmNzZXQpIHtcbiAgICAgICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3Nlcy5zcGlubmVyO1xuICAgICAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50ID0gaW1nLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgdmFyIHNwaW5uZXIgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hpbGQocGFyZW50LCAiLiIgKyBjbGFzc05hbWUpIHx8IGNyZWF0ZSgic3BhbiIsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc05hbWUsIHBhcmVudCk7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtpbWcsIFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgc3Bpbm5lcl0pO1xuICAgICAgICAgIGltZy5zcmMgfHwgZGlzcGxheShpbWcsICJub25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGVjaygpIHtcbiAgICBlbnRyaWVzID0gZW50cmllcy5maWx0ZXIoZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhkYXRhKSB7XG4gICAgICB2YXIgZGlzdGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgKiAoKG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnByZWxvYWRQYWdlcyB8fCAxKSArIDEpIC0gMTtcbiAgICAgIHJldHVybiBkYXRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1sxXS5pc1dpdGhpbihTcGxpZGUyLmluZGV4LCBkaXN0YW5jZSkgPyBsb2FkKGRhdGEpIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWU7XG4gICAgfSk7XG4gICAgZW50cmllcy5sZW5ndGggfHwgb2ZmKGV2ZW50cyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZChkYXRhKSB7XG4gICAgdmFyIGltZyA9IGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhWzBdO1xuICAgIGFkZENsYXNzKGRhdGFbMV0uc2xpZGUsIENMQVNTX0xPQURJTkcpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBiaW5kKGltZywgImxvYWQgZXJyb3IiLCBhcHBseShvbkxvYWQsIGRhdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSk7XG4gICAgc2V0QXR0cmlidXRlKGltZywgInNyYyIsIGdldEF0dHJpYnV0ZShpbWcsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkNfREFUQV9BVFRSSUJVVEUpKTtcbiAgICBzZXRBdHRyaWJ1dGUoaW1nLCAic3Jjc2V0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0dHJpYnV0ZShpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSkpO1xuICAgIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgIHJlbW92ZUF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9uTG9hZChkYXRhLCBlKSB7XG4gICAgdmFyIGltZyA9IGRhdGFbMF0sXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTbGlkZSA9IGRhdGFbMV07XG4gICAgcmVtb3ZlQ2xhc3MoU2xpZGUuc2xpZGUsIENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19MT0FESU5HKTtcblxuICAgIGlmIChlLnR5cGUgIT09ICJlcnJvciIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmUoZGF0YVsyXSk7XG4gICAgICBkaXNwbGF5KGltZywgIiIpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVtaXQoRVZFTlRfTEFaWUxPQURfTE9BREVELCBpbWcsIFNsaWRlKTtcbiAgICAgIGVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KEVWRU5UX1JFU0laRSk7XG4gICAgfVxuXG4gICAgaXNTZXF1ZW50aWFsICYmIGxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTmV4dCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZE5leHQoKSB7XG4gICAgZW50cmllcycKICAgICAgICAgICAgICAgICAgICAgICAgYicubGVuZ3RoICYmIGxvYWQoZW50cmllcy5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBhcHBseShlbXB0eSwgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpZXMpLFxuICAgIGNoZWNrOiBjaGVja1xuICB9O1xufVxuXG5mdW5jdGlvbiBQYWdpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgZXZlbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gIHZhciBvbiA9IGV2ZW50Lm9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVtaXQgPSBldmVudC5lbWl0LFxuICAgICAgYmluZCA9IGV2ZW50LmJpbmQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzLFxuICAgICAgRWxlbWVudHMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLkNvbnRyb2xsZXI7XG4gIHZhciBoYXNGb2N1cyA9IENvbnRyb2xsZXIuaGFzRm9jdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLFxuICAgICAgZ2V0SW5kZXggPSBDb250cm9sbGVyLmdldEluZGV4LFxuICAgICAgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidvID0gQ29udHJvbGxlci5nbztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLnJlc29sdmU7XG4gIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLnBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduO1xuICB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxpc3Q7XG4gIHZhciBwYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkNsYXNzZXM7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0lOREVYJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DSEFOR0VEXSwgbW91bnQpO1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbjtcbiAgICBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KHBsYWNlaG9sZGVyLCBlbmFibGVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA/ICIiIDogIm5vbmUiKTtcblxuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBvbihbRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfU0NST0xMRURdLCB1cGRhdGUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGNyZWF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIHVwZGF0ZSgpO1xuICAgICAgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXQoRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVELCB7XG4gICAgICAgIGxpc3Q6IGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0LFxuICAgICAgICBpdGVtczogaXRlbXNcbiAgICAgIH0sIGdldEF0KFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4KSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGxpc3QpIHtcbiAgICAgIHJlbW92ZShwbGFjZWhvbGRlciA/IHNsaWNlKGxpc3QuY2hpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkcmVuKSA6IGxpc3QpO1xuICAgICAgcmVtb3ZlQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzKTtcbiAgICAgIGVtcHR5KGl0ZW1zKTtcbiAgICAgIGxpc3QgPSBudWxsO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICBldmVudC5kZXN0cm95KCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlUGFnaW5hdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gU3BsaWRlMi5sZW5ndGg7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbGFzc2VzLFxuICAgICAgICBpMThuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG9wdGlvbnMuaTE4bixcbiAgICAgICAgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2U7XG4gICAgdmFyIG1heCA9IGhhc0ZvY3VzKCkgPyBDb250cm9sbGVyLmdldEVuZCgpICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEgOiBjZWlsKGxlbmd0aCAvIHBlclBhZ2UpO1xuICAgIGxpc3QgPSBwbGFjZWhvbGRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHwgY3JlYXRlKCJ1bCIsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbWVudHMudHJhY2sucCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudEVsZW1lbnQpO1xuICAgIGFkZENsYXNzKGxpc3QsIHBhZ2luYXRpb25DbGFzc2VzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IENMQVNTX1BBR0lOQVRJT04gKyAiLS0iICsgZ2V0RGlyZWN0aW9uKCkpO1xuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUobGlzdCwgUk9MRSwgInRhYmxpc3QiKTtcbiAgICBzZXRBdHRyaWJ1dGUobCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0KTtcbiAgICBzZXRBdHRyaWJ1dGUobGlzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIEFSSUFfT1JJRU5UQVRJT04sIGdldERpcmVjdGlvbigpID09PSBUVEIgPyAidmVydGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsIiA6ICIiKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgbGkgPSBjcmVhdGUoImxpIiwgbnVsbCwgbGlzdCk7XG4gICAgICB2YXIgYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbiA9IGNyZWF0ZSgiYnV0dG9uIiwge1xuICAgICAgICBjbGFzczogY2xhc3Nlcy5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZSxcbiAgICAgICAgdHlwZTogImJ1dHRvbiJcbiAgICAgIH0sIGxpKTtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgY29udHJvbHMgPSBTbGlkZXMuZ2V0SW4oaSkubWFwKGZ1bmN0aW9uIChTbGlkZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgcmV0dXJuIFNsaWRlLnNsaWRlLmlkO1xuICAgICAgfSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHRleHQgPSAhaGFzRm9jdXMoKSAmJiBwZXJQYWdlID4gMSA/IGkxOG4ucGFnZVggOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaTE4bi5zbGlkZVg7XG4gICAgICBiaW5kKGJ1dHRvbiwgImNsaWNrIiwgYXBwbHkob25DbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2ssIGkpKTtcblxuICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBiaW5kKGJ1dHRvbiwgImtleWRvd24iLCBhcHBseShvbktleWRvd24sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpKSk7XG4gICAgICB9XG5cbiAgICAgIHNldEF0dHJpYnV0ZShsaSwgUk9MRSwgInByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50YXRpb24iKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFJPTEUsICJ0YWIiKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0NPTlRST0xTLCBjb250cm9scy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInam9pbigiICIpKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIEFSSUFfTEFCRUwsIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JtYXQodGV4dCwgaSArIDEpKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFRBQl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5ERVgsIC0xKTtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBsaTogbGksXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBidXR0b246IGJ1dHRvbixcbiAgICAgICAgcGFnZTogaVxuICAgICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2socGFnZSkge1xuICAgIGdvKCI+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyIgKyBwYWdlLCB0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihwYWdlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZSkge1xuICAgIHZhciBsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIGtleScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBub3JtYWxpemVLZXkoZSk7XG4gICAgdmFyIGRpciA9IGdldERpcmVjdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB2YXIgbmV4dFBhZ2UgPSAtMTtcblxuICAgIGlmIChrZXkgPT09IHJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlKEFSUk9XX1JJR0hULCBmYWxzZSwgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSArK3BhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlICUgbGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX0xFRicKICAgICAgICAgICAgICAgICAgICAgICAgYidULCBmYWxzZSwgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSAoLS1wYWdlICsgbGVuZ3RoKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgJSBsZW5ndGg7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJIb21lIikge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG5leHRQYWdlID0gMDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gIkVuZCIpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBuZXh0UGFnZSA9IGxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgdmFyIGl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXRlbXNbbmV4dFBhZ2VdO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhpdGVtLmJ1dHRvbik7XG4gICAgICBnbygiPiIgKyBuZXh0UGFnZSk7XG4gICAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmVudChlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKCkge1xuICAgIHJldHVybiBvcHRpb25zLnBhZ2luYXRpb25EaXJlY3Rpb24gfHwgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuZGlyZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXQoaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGl0ZW1zW0NvbnRyb2xsZXIudG9QYWdlKGluZGV4KV07XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHZhciBwcmV2ID0gZ2V0QXQoZ2V0SScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KHRydWUpKTtcbiAgICB2YXIgY3VyciA9IGdldEF0KGdldEluZGV4KCkpO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChwcmV2KSB7XG4gICAgICB2YXIgYnV0dG9uID0gcHJldi5idXR0b247XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmVtb3ZlQ2xhc3MoYnV0dG9uLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgcmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUF0dHJpYnV0ZShidXR0b24sIEFSSUFfU0VMRUNURUQpO1xuICAgICAgc2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShidXR0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgIH1cblxuICAgIGlmIChjdXJyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIF9idXR0b24gPSBjdXJyLmJ1dHRvbjtcbiAgICAgIGFkZENsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhfYnV0dG9uLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgc2V0QXR0cmlidXRlKF9idXR0b24sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBUklBX1NFTEVDVEVELCB0cnVlKTtcbiAgICAgIHNldEF0dHJpYnV0ZShfYnV0dG9uLCBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FCX0lOREVYLCAiIik7XG4gICAgfVxuXG4gICAgZW1pdChFVkVOVF9QQUdJTkFUSU9OXycKICAgICAgICAgICAgICAgICAgICAgICAgYidVUERBVEVELCB7XG4gICAgICBsaXN0OiBsaXN0LFxuICAgICAgaXRlbXM6IGl0ZW1zXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0sIHByZXYsIGN1cnIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpdGVtczogaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW1zLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBnZXRBdDogZ2V0QXQsXG4gICAgdXBkYXRlOiB1cGRhdGVcbiAgfTtcbn1cblxudmFyIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklHR0VSX0tFWVMgPSBbIiAiLCAiRW50ZXIiXTtcblxuZnVuY3Rpb24gU3luYyhTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIGlzTmF2aWdhdGlvbiA9IG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLmlzTmF2aWdhdGlvbixcbiAgICAgIHNsaWRlRm9jdXMgPSBvcHRpb25zLnNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUZvY3VzO1xuICB2YXIgZXZlbnRzID0gW107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIFNwbGlkZTIuc3BsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAoIXRhcmdldC5pc1BhcmVudCkge1xuICAgICAgICBzeW5jKFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyLCB0YXJnZXQuc3BsaWRlKTtcbiAgICAgICAgc3luYyh0YXJnZXQuc3BsaWRlLCBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgbmF2aWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudC5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgZW1wdHkoZXZlbnRzKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiByZW1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAgICBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN5bmMoc3BsaWRlLCB0YXJnZXQpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2Uoc3BsaWRlKTtcbiAgICBldmVudC5vbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfTU9WRSwgZnVuY3Rpb24gKGluZGV4LCBwcmV2LCBkZXN0KSB7XG4gICAgICB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dvKHRhcmdldC5pcyhMT09QKSA/IGRlc3QgOiBpbmRleCk7XG4gICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50cy5wdXNoKGV2ZW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5hdmlnYXRlKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG9uID0gZXZlbnQub247XG4gICAgb24oRVZFTlRfQ0xJQ0ssIG9uQ2xpY2spO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihFVkVOVF9TTElERV9LRVlET1dOLCBvbktleWRvd24pO1xuICAgIG9uKFtFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRF0sIHVwZGF0ZSk7XG4gICAgZXZlbnRzLnB1c2goZScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50KTtcbiAgICBldmVudC5lbWl0KEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIuc3BsaWRlcyk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShDb21wb25lbnRzMi5FbGVtZW50cy5saXN0LCBBUklBX09SSUVOVEFUSU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTiwgb3B0aW9ucy5kaXJlY3Rpb24gPT09IFRUQiA/ICJ2ZXJ0aWNhbCIgOiAiIik7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gb25DbGljayhTbGlkZSkge1xuICAgIFNwbGlkZTIuZ28oU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLmluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihTbGlkZSwgZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAoaW5jbHVkZXMoVFJJR0dFUl9LRVlTLCBub3JtYWxpemVLZXkoZSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgb25DbGljayhTbGlkZSk7XG4gICAgICBwcmV2ZW50KGUpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldHVwOiBhcHBseShDb21wb25lbnRzMi5NJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkaWEuc2V0LCB7XG4gICAgICBzbGlkZUZvY3VzOiBpc1VuZGVmaW5lZChzbGlkZUZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgPyBpc05hdmlnYXRpb24gOiBzbGlkZUZvY3VzXG4gICAgfSwgdHJ1ZSksXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHJlbW91bnQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZW1vdW50XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdoZWVsKFNwbGlkZTIsIENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMTIgPSBFdmVudEludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UoU3BsaWRlMiksXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTIuYmluZDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIGxhc3RUaW1lID0gMDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKG9wdGlvbnMud2hlZWwpIHtcbiAgICAgIGJpbmQoQ29tcG9uZW50czIuRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyYWNrLCAid2hlZWwiLCBvbldoZWVsLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uV2hlZWwoZSkge1xuICAgIGlmIChlLmNhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWxhYmxlKSB7XG4gICAgICB2YXIgZGVsdGFZID0gZS5kZWx0YVk7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGJhY2t3YXJkcyA9IGRlbHRhWSA8IDA7XG4gICAgICB2YXIgdGltZVN0YW1wID0gdGltZScKICAgICAgICAgICAgICAgICAgICAgICAgYidPZihlKTtcblxuICAgICAgdmFyIF9taW4gPSBvcHRpb25zLndoZWVsTWluVGhyZXNobycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZCB8fCAwO1xuXG4gICAgICB2YXIgc2xlZXAgPSBvcHRpb25zLndoZWVsU2xlZXAgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IDA7XG5cbiAgICAgIGlmIChhYnMoZGVsdGFZKSA+IF9taW4gJiYgdGltZVN0YW1wICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIGxhc3RUaW1lID4gc2xlZXApIHtcbiAgICAgICAgU3BsaWRlMi5nbyhiYWNrd2FyZHMgPycKICAgICAgICAgICAgICAgICAgICAgICAgYicgIjwiIDogIj4iKTtcbiAgICAgICAgbGFzdFRpbWUgPSB0aW1lU3RhbXA7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgICBzaG91bGRQcmV2ZW50KGJhY2t3YXJkcykgJiYgcHJldmVudChlKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkUHJldmVudChiYWNrd2FyZHMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuICFvcHRpb25zLnJlbGVhc2VXaGVlbCB8fCBTcGxpZGUyLnN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhNT1ZJTkcpIHx8IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0QWRqYWNlbnQoYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcykgIT09IC0xO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bicKICAgICAgICAgICAgICAgICAgICAgICAgYid0XG4gIH07XG59XG5cbnZhciBTUl9SRU1PVkFMX0RFTEFZID0gOTA7XG5cbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBMaXZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlMTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudEludGVyZmFjZTEzLm9uO1xuXG4gIHZhciB0cmFjayA9IENvbXBvbmVudHMyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50cy50cmFjaztcbiAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJiYgIW9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmlzTmF2aWdhdGlvbjtcbiAgdmFyIHNyID0gY3JlYXRlKCJzcGFuIiwgQ0xBU1NfUycKICAgICAgICAgICAgICAgICAgICAgICAgYidSKTtcbiAgdmFyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKFNSX1JFTU9WQUxfREVMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZLCBhcHBseSh0b2dnbGUsIGZhbHNlKSk7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBkaXNhYmxlKCFDb21wb25lbnRzMi5BdXRvcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkuaXNQYXVzZWQoKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSSUFfQVRPTUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQywgdHJ1ZSk7XG4gICAgICBzci50ZXh0Q29udGVudCA9ICJcXHUyMDI2IjtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbihFVkVOVF9BVVRPUExBWV9QTEFZLCBhcHBseShkaXNhYmxlLCB0cnVlKSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb24oRVZFTlRfQVVUT1BMQVlfUEFVU0UsIGFwcGx5KGRpc2FibGUsIGZhbHNlKSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb24oW0VWRU5UX01PVkVELCBFVkVOVF9TQ1JPTExFRF0sIGFwcGx5KHRvZ2dsZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGUoYWN0aXZlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9CVVNZLCBhY3RpdmUpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChhY3RpdmUpIHtcbiAgICAgIGFwcGVuZCh0cmFjaywgc3IpO1xuICAgICAgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVydmFsLnN0YXJ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZShzcik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3koKSB7XG4gICAgcmVtb3ZlQXR0cmlidXRlKHRyYWNrLCBbQVJJQV9MSVZFLCBBUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQV9BVE9NSUMsIEFSSUFfQlVTWV0pO1xuICAgIHJlbW92ZShzcik7XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gZGlzYWJsZShkaXNhYmxlZCkge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc2V0QXR0cmlidXRlKHRyYWNrLCBBUklBX0xJVkUsIGRpc2FibGVkID8gIm9mZiIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogInBvbGl0ZSIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH07XG59XG5cbnZhciBDb21wb25lbnRDb25zdHJ1Y3RvcnMgPSAvKiNfX1BVUkVfXyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIE1lZGlhOiBNZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWEsXG4gIERpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBFbGVtZW50czogRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBTbGlkZXM6IFNsaWRlcyxcbiAgTGF5b3V0OiBMYXlvdXQsXG4gIENsb25lczogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Nsb25lcyxcbiAgTW92ZTogTW92ZSxcbiAgQ29udHJvbGxlcjogQ29udHJvbGxlcixcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIEFycm93czogQXJyb3dzLFxuICBBdXRvcGxheTogQXV0b3BsYXksXG4gIENvdmVyOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ292ZXIsXG4gIFNjcm9sbDogU2Nyb2xsLFxuICBEcmFnOiBEcmFnLFxuICBLZXlib2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmQ6IEtleWJvYXJkLFxuICBMYXp5TG9hZDogTGF6eUxvYWQsXG4gIFBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBQYWdpbmF0aW9uLFxuICBTeW5jOiBTeW5jLFxuICBXaGVlbDogV2hlZWwsXG4gIExpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlOiBMaXZlXG59KTtcbnZhciBJMThOID0ge1xuICBwcmV2OiAiUHJldmlvdXMgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIixcbiAgbmV4dDogIk5leHQgc2xpZGUiLFxuICBmaXJzdDogIkdvIHRvIGZpcnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSIsXG4gIGxhc3Q6ICJHbyB0byBsYXN0IHNsaWRlIixcbiAgc2xpZGVYOiAiRycKICAgICAgICAgICAgICAgICAgICAgICAgYidvIHRvIHNsaWRlICVzIixcbiAgcGFnZVg6ICJHbyB0byBwYWdlICVzIixcbiAgcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYic6ICJTdGFydCBhdXRvcGxheSIsXG4gIHBhdXNlOiAiUGF1c2UgYXV0b3BsYXkiLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWw6ICJjYXJvdXNlbCIsXG4gIHNsaWRlOiAic2xpZGUiLFxuICBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0OiAiU2VsZWN0IGEgc2xpZGUgdG8gc2hvdyIsXG4gIHNsaWRlTGFiZWw6ICIlcyBvZiAlcycKICAgICAgICAgICAgICAgICAgICAgICAgYiciXG59O1xudmFyIERFRkFVTFRTID0ge1xuICB0eXBlOiAic2xpZGUiLFxuICByb2xlOiAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZ2lvbiIsXG4gIHNwZWVkOiA0MDAsXG4gIHBlclBhZ2U6IDEsXG4gIGNsb25lU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1czogdHJ1ZSxcbiAgYXJyb3dzOiB0cnVlLFxuICBwYWdpbmF0aW9uOiB0cnVlLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbktleWJvYXJkOiB0cnVlLFxuICBpbnRlcnZhbDogNWUzLFxuICBwYXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VPbkhvdmVyOiB0cnVlLFxuICBwYXVzZU9uRm9jdXM6IHRydWUsXG4gIHJlc2V0UHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2dyZXNzOiB0cnVlLFxuICBlYXNpbmc6ICJjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSkiLFxuICBkcmFnOiB0cnVlLFxuICBkaXJlY3Rpb246ICJsdHIiLFxuICB0cmltU3BhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlOiB0cnVlLFxuICBmb2N1c2FibGVOb2RlczogImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B1dCwgc2VsZWN0LCBpZnJhbWUiLFxuICBsaXZlOiB0cnVlLFxuICBjbGFzc2VzOiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NFUyxcbiAgaTE4bjogSTE4TixcbiAgcmVkdWNlZE1vdGlvbjoge1xuICAgIHNwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZDogMCxcbiAgICByZXdpbmRTcGVlZDogMCxcbiAgICBhdXRvcGxheTogInBhdXNlIicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxufTtcblxuZnVuY3Rpb24gRmFkZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMpIHtcbiAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gbW91bnQoKSB7XG4gICAgRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikub24oW0VWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1VOVEVELCBFVkVOVF9SRUZSRVNIXSwgaW5pdCk7XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gaW5pdCgpIHtcbiAgICBTbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBTbGlkZS5zdHlsZSgidHJhbnNmb3JtIiwgInRyYW5zbGF0ZVgoLSIgKyAxMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwICogU2xpZGUuaW5kZXggKyAiJSkiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdGFydChpbmRleCwgZG9uZSkge1xuICAgIFNsaWRlcy5zdHlsZSgidHJhbnNpdGlvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAib3BhY2l0eSAiICsgb3B0aW9ucy5zcGVlZCArICJtcyAiICsgb3B0aW9ucy5lYXNpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBuZXh0VGljayhkb25lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtb3VudCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBub29wXG4gIH07JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBTbGlkZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgQ29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuICAgICAgU2Nyb2xsID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLlNjcm9sbDtcbiAgdmFyIGxpc3QgPSBDb21wb25lbnRzMi5FbGVtZW50cy5saXN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIHRyYW5zaXRpb24gPSBhcHBseShzdHlsZSwgbGlzdCwgInRyYW5zaXRpb24iKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBlbmRDYWxsYmFjaztcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UoU3BsaWRlMikuYmluZChsaXN0LCAidHJhbnNpdGlvbmVuZCIsIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiAoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBsaXN0ICYmIGVuZENhbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmFjaykge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgZW5kQ2FsbGJhY2soKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChpbmRleCwgZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmUpIHtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBNb3ZlLnRvUG9zaXRpb24oaW5kZXgsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICB2YXIgcG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzcGVlZCA9IGdldFNwZWVkKGluZGV4KTtcblxuICAgIGlmIChhYnMoZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uIC0gcG9zaXRpb24pID49IDEgJiYgc3BlZWQgPj0gMSkge1xuICAgICAgaWYgKG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLnVzZVNjcm9sbCkge1xuICAgICAgICBTY3JvbGwuc2Nyb2xsKGRlc3RpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgc3BlZWQsIGZhbHNlLCBkb25lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uKCJ0cmFuc2Zvcm0gIiArIHNwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcpO1xuICAgICAgICBNb3ZlLnRyYW5zbGF0ZShkZXN0aW5hdGlvbiwgdHJ1ZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XG4gICAgICB9XG4gICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBNb3ZlLmp1bXAoaW5kZXgpO1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdHJhbnNpdGlvbigiIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNjcm9sbC5jYW5jZWwoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNwZWVkKGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHZhciByZXdpbmRTcGVlZCA9IG9wdGlvbnMucmV3aW5kU3BlZWQ7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIHJld2luZFNwZWVkKSB7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHByZXYgPSBDb250cm9sbGVyLmdldEluZGV4KHRydWUpO1xuICAgICAgdmFyIGVuZCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250cm9sbGVyLmdldEVuZCgpO1xuXG4gICAgICBpZiAocHJldiA9PT0gMCAmJiBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggPj0gZW5kIHx8IHByZXYgPj0gZW5kICYmIGluZGV4ID09PSAwKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gcmV3aW5kU3BlZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnNwZWVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0YXJ0OiBzdGFydCxcbiAgICBjYW5jZWw6IGNhbmNlbFxuICB9O1xufVxuXG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19TcGxpZGUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBfU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmV2ZW50ID0gRXZlbnRJbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKCk7XG4gICAgdGhpcy5Db21wb25lbnRzID0ge307XG4gICAgdGhpcy5zdGF0ZSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTdGF0ZShDUkVBVEVEKTtcbiAgICB0aGlzLnNwbGlkZXMgPSBbXTtcbiAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5fbyA9IHt9O1xuICAgIHRoaXMuX0UgPSB7fTtcbiAgICB2YXIgcm9vdCA9IGlzU3RyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyh0YXJnZXQpID8gcXVlcnkoZG9jdW1lbnQsIHRhcmdldCkgOiB0YXJnZXQ7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VydChyb290LCByb290ICsgIiBpcyBpbnZhbGlkLiIpO1xuICAgIHRoaXMucm9vdCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyByb290O1xuICAgIG9wdGlvbnMgPSBtZXJnZSh7XG4gICAgICBsYWJlbDogZ2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZShyb290LCBBUklBX0xBQkVMKSB8fCAiIixcbiAgICAgIGxhYmVsbGVkYnk6IGdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTExFREJZKSB8fCAiIlxuICAgIH0sIERFRkFVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xUUywgX1NwbGlkZS5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB0cnkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIG1lcmdlKG9wdGlvbnMsIEpTT04ucGFyc2UoZ2V0QXR0cmlidXRlKHJvb3QsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBEQVRBX0FUVFJJQlVURSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0KGZhbHNlLCAiSW52YWxpZCBKU09OIik7XG4gICAgfVxuXG4gICAgdGhpcy5fbyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidPYmplY3QuY3JlYXRlKG1lcmdlKHt9LCBvcHRpb25zKSk7XG4gIH1cblxuICB2YXIgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm90byA9IF9TcGxpZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBtb3VudChFeHRlbnNpb25zLCBUcmFuc2l0aW9uKSB7XG4gICAgdmFyIF90aGlzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXM7XG5cbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIgPSB0aGlzLkNvbXBvbmVudHM7XG4gICAgYXNzZXJ0KHN0YXRlLmlzKFtDUkVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCwgREVTVFJPWUVEXSksICJBbHJlYWR5IG1vdW50ZWQhIik7XG4gICAgc3RhdGUuc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhDUkVBVEVEKTtcbiAgICB0aGlzLl9DID0gQ29tcG9uZW50czI7XG4gICAgdGhpcy5fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMuX1QgfHwgKHRoaXMuaXMoRkFERSkgPyBGYWRlIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlKTtcbiAgICB0aGlzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgQ29uc3RydWN0b3JzID0gYXNzaWduKHt9LCBDb21wb25lbnRDb25zdHJ1Y3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidzLCB0aGlzLl9FLCB7XG4gICAgICBUcmFuc2l0aW9uOiB0aGlzLl9UXG4gICAgfSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZvck93bihDb25zdHJ1Y3RvcnMsIGZ1bmN0aW9uIChDb21wb25lbnQsIGtleSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBjb21wb25lbnQgPSBDb21wb25lbnQoX3RoaXMsIENvbXBvbmVudHMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgX3RoaXMuX28pO1xuICAgICAgQ29tcG9uZW50czJba2V5XSA9IGNvbXBvbmVudDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBjb21wb25lbnQuc2V0dXAgJiYgY29tcG9uZW50LnNldHVwKCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgIGZvck93bihDb21wb25lbnRzMiwgZnVuY3Rpb24gKGNvbXBvbmVudCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGNvbXBvbmVudC5tb3VudCAmJiBjb21wb25lbnQubW91bnQoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgdGhpcy5lbWl0KEVWRU5UX01PVU5URUQpO1xuICAgIGFkZENsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyh0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEKTtcbiAgICBzdGF0ZS5zZXQoSURMRSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHRoaXMuZW1pdChFVkVOVF9SRUFEWSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90by5zeW5jID0gZnVuY3Rpb24gc3luYyhzcGxpZGUpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5zcGxpZGVzLnB1c2goe1xuICAgICAgc3BsaWRlOiBzcGxpZGVcbiAgICB9KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgc3BsaWRlLnNwbGlkZXMucHVzaCh7XG4gICAgICBzcGxpZGU6IHRoaXMsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaXNQYXJlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhJRExFKSkge1xuICAgICAgdGhpcy5fQy5TeW5jLnJlbW91bnQoKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNwbGlkZS5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpO1xuICAgIH1cblxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZ28gPSBmdW5jdGlvbiBnbyhjb250JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbCkge1xuICAgIHRoaXMuX0MuQ29udHJvbGxlci5nbyhjb250cm9sKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8ub24gPSBmdW5jdGlvbiBvbihldmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZXZlbnQub24oZXZlbnRzLCBjYWxsYmFjayknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5vZmYgPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2ZmKGV2ZW50cykge1xuICAgIHRoaXMuZXZlbnQub2ZmKGV2ZW50cyk7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5lbWl0ID0gZnVuY3Rpb24gZW1pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMkZXZlbnQ7XG5cbiAgICAoX3RoaXMkZXZlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gdGhpcy5ldmVudCkuZW1pdC5hcHBseShfdGhpcyRldmVudCwgW2V2ZW50XS5jb25jYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNsaWNlKGFyZ3VtZW50cywgMSkpKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8uYWRkID0gZnVuY3Rpb24gYWRkKHNsaWRlcywgaW5kZXgpIHtcbiAgICB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5fQy5TbGlkZXMuYWRkKHNsaWRlcywgaW5kZXgpO1xuXG4gICAgcmV0dXJuIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9O1xuXG4gIF9wcm90by5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUobWF0Y2hlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgICB0aGlzLl9DLlNsaWRlcy5yZW1vdmUobWF0Y2hlcik7XG5cbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmlzID0gZnVuY3Rpb24gaXModHlwZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICByZXR1cm4gdGhpcy5fby50eXBlID09PSB0eXBlO1xuICB9O1xuXG4gIF9wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG8ucmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgdGhpcy5lbWl0KEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRUZSRVNIKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICBpZiAoY29tcGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbHkgPT09IHZvaWQgMCkge1xuICAgICAgY29tcGxldGVseSA9IHRydWU7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHZhciBldmVudCA9IHRoaXMuZXZlbnQsXG4gICAgICAgIHN0YXRlID0gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuc3RhdGU7XG5cbiAgICBpZiAoc3RhdGUuaXMoQ1JFQVRFRCkpIHtcbiAgICAgIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZSh0aGlzKS5vbihFVkVOVF9SRUFEWSwgdGhpcy5kZXN0cm95LmJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkKHRoaXMsIGNvbXBsZXRlbHkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT3duKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLl9DLCBmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveSAmJiBjb21wb25lbnQuZGVzdHJveShjb21wbGV0ZWx5KTtcbiAgICAgIH0sIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICAgIGV2ZW50LmVtaXQoRVZFTlRfREVTVFJPWSk7XG4gICAgICBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVzdHJveSgpO1xuICAgICAgY29tcGxldGVseSAmJiBlbXB0eSh0aGlzLnNwbGlkZXMpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHN0YXRlLnNldChERVNUUk9ZRUQpO1xuICAgIH1cblxuICAgIHJldHVybiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcztcbiAgfTtcblxuICBfY3JlYXRlQ2xhc3MoX1NwbGlkZSwgW3tcbiAgICBrZXk6ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuX287XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgdGhpcy5fQy5NZWRpYS5zZXQob3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgfSwge1xuICAgIGtleTogImxlbmd0aCIsXG4gICAgZ2V0OiBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX0MuU2xpZGVzLmdldExlbmd0aCh0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAiaW5kZXgiLFxuICAgIGdldDogZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9DLkNvbnRyb2xsZXIuZ2V0SW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIF9TcGxpZGU7XG59KCk7XG5cbnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgU3BsaWRlID0gX1NwbGlkZTtcblNwbGlkZS5kZWZhdWx0cyA9IHt9O1xuU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TVEFURVMgPSBTVEFURVM7XG52YXIgQ0xBU1NfUkVOREVSRUQgPSAiaXMtcmVuZGVyZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgbGlzdFRhZzogInVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsXG4gIHNsaWRlVGFnOiAibGkiXG59O1xuXG52YXIgU3R5bGUgPSAvKiNfX1BVUkVfXyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoaWQsIG9wdGlvbnMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdGhpcy5zdHlsZXMgPSB7fTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IFN0eWxlLnByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290b3R5cGU7XG5cbiAgX3Byb3RvMi5ydWxlID0gZnVuY3Rpb24gcnVsZShzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIHByb3AsIHZhbHVlLCBicmVha3BvaW50KSB7XG4gICAgYnJlYWtwb2ludCA9IGJyZWFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50IHx8ICJkZWZhdWx0IjtcbiAgICB2YXIgc2VsZWN0b3JzID0gdGhpcy5zdHlsZXNbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JyZWFrcG9pbnRdID0gdGhpcy5zdHlsZXNbYnJlYWtwb2ludF0gfHwge307XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHlsZXMgPSBzZWxlY3RvcnNbc2VsZWN0b3JdID0gc2VsZWN0b3JzW3NlbGVjdG9yXSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHwge307XG4gICAgc3R5bGVzW3Byb3BdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMicKICAgICAgICAgICAgICAgICAgICAgICAgYicuYnVpbGQgPSBmdW5jdGlvbiBidWlsZCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M7XG5cbiAgICB2YXIgY3NzID0gIiI7XG5cbiAgICBpZiAodGhpcy5zdHlsZXMuZGVmYXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHQpIHtcbiAgICAgIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKHRoaXMuc3R5bGVzLmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZhdWx0KTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0eWxlcykuc29yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZnVuY3Rpb24gKG4sIG0pIHtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5tZWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FRdWVyeSA9PT0gIm1pbiIgPyArbiAtICttIDogK20gLSArbjtcbiAgICB9KS5mb3JFYWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoYnJlYWtwb2ludCkge1xuICAgICAgaWYgKGJyZWFrcG9pbnQgIT09ICJkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdCIpIHtcbiAgICAgICAgY3NzICs9ICJAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aDogIiArIGJyZWFrcG9pbnQgKyAicHgpIHsiO1xuICAgICAgICBjc3MgKz0gX3RoaXMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5idWlsZFNlbGVjdG9ycyhfdGhpczIuc3R5bGVzW2JyZWFrcG9pbnRdKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NzcyArPSAifSI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzcztcbiAgfTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgX3Byb3RvMi5idWlsZFNlbGVjdG9ycyA9IGZ1bmN0aW9uIGJ1aWxkU2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9ycyhzZWxlY3RvcnMpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgY3NzID0gIiI7XG4gICAgZm9yT3duKHNlbGVjdG9ycywgZnVuY3Rpb24gKHN0eWxlcywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGVjdG9yKSB7XG4gICAgICBzZWxlY3RvciA9ICgiIyIgKyBfdGhpczMuaWQgKyAiICIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJysgc2VsZWN0b3IpLnRyaW0oKTtcbiAgICAgIGNzcyArPSBzZWxlY3RvciArICIgeyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgZm9yT3duKHN0eWxlcywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICBjc3MgKz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3AgKyAiOiAiICsgdmFsdWUgKyAiOyI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGNzcyArPSAifSI7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNzcztcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIFN0eWxlO1xufSgpO1xuXG52YXIgU3BsaWRlUmVuZGVyZXIgPSAvKiNfXycKICAgICAgICAgICAgICAgICAgICAgICAgYidQVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3BsaWRlUmVuZGVyZXIoY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLCBvcHRpb25zLCBjb25maWcsIGRlZmF1bHRzKSB7XG4gICAgdGhpcy5zbGlkZXMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgW107XG4gICAgdGhpcy5vcHRpb25zID0ge307XG4gICAgdGhpcy5icmVha3BvaW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBbXTtcbiAgICBtZXJnZShERUZBVUxUUywgZGVmYXVsdHMgfHwge30pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtZXJnZShtZXJnZSh0aGlzLm9wdGlvbnMsIERFRkFVTFRTKSwgb3B0aW9ucyB8fCB7fSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHRoaXMuY29udGVudHMgPSBjb250ZW50cztcbiAgICB0aGlzLmNvbmZpZyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhc3NpZ24oe30sIFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLmlkID0gdGhpcy5jb25maWcuaWQgfHwgdW5pcXVlSWQoInNwbGlkZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLlN0eWxlID0gbmV3IFN0eWxlKHRoaXMuaWQsIHRoaXMub3B0aW9ucyk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHRoaXMuRGlyZWN0aW9uID0gRGlyZWN0aW9uKG51bGwsIG51bGwsIHRoaXMub3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpO1xuICAgIGFzc2VydCh0aGlzLmNvbnRlbnRzLmxlbmd0aCwgIlByb3ZpZGUgYXQgbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXN0IDEgY29udGVudC4iKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidSZW5kZXJlci5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKHNwbGlkZSkge1xuICAgIHZhciBfRScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlMTQgPSBFdmVudEludGVyZmFjZShzcGxpZGUpLFxuICAgICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfRXZlbnRJbnRlcmZhY2UxNC5vbjtcblxuICAgIHZhciByb290ID0gc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb290O1xuICAgIHZhciBjbG9uZXMgPSBxdWVyeUFsbChyb290LCAiLiIgKyBDTEFTU19DTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPTkUpO1xuICAgIG9uKEVWRU5UX01PVU5URUQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdmUoY2hpbGQocm9vdCwgInN0eWxlIikpO1xuICAgIH0pO1xuICAgIHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoY2xvbmVzKTtcbiAgfTtcblxuICB2YXIgX3Byb3RvMyA9IFNwbGlkZVJlbmRlcmVyLnAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm90b3R5cGU7XG5cbiAgX3Byb3RvMy5pbml0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdGhpcy5wYXJzZUJyZWFrcG9pbnRzKCk7XG4gICAgdGhpcy5pbml0U2xpZGVzKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHRoaXMucmVnaXN0ZXJSb290U3R5bGVzKCk7XG4gICAgdGhpcy5yZWdpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJUcmFja1N0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJTbGlkZVN0eWxlcygpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0aGlzLnJlZ2lzdGVyTGlzdFN0eWxlcygpO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRTbGlkZXMgPSBmdW5jdGlvbiBpbml0U2xpZGVzKCkge1xuICAgIHZhciBfdGhpczQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gdGhpcztcblxuICAgIHB1c2godGhpcy5zbGlkZXMsIHRoaXMuY29udGVudHMubWFwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoY29udGVudCwgaW5kZXgpIHtcbiAgICAgIGNvbnRlbnQgPSBpc1N0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2coY29udGVudCkgPyB7XG4gICAgICAgIGh0bWw6IGNvbnRlbnRcbiAgICAgIH0gOiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udGVudDtcbiAgICAgIGNvbnRlbnQuc3R5bGVzID0gY29udGVudC5zdHlsZXMgfHwge307JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgY29udGVudC5hdHRycyA9IGNvbnRlbnQuYXR0cnMgfHwge307XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBfdGhpczQuY292ZXIoY29udGVudCk7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzNC5vcHRpb25zLmNsYXNzZXMuc2xpZGUgKyAiICIgKyAoaW5kZXggPT09IDAgPyBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQUNUSVZFIDogIiIpO1xuICAgICAgYXNzaWduKGNvbnRlbnQuYXR0cnMsIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGNsYXNzOiAoY2xhc3NlcyArICIgIiArIChjb250ZW50LmF0dHJzLmNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyB8fCAiIikpLnRyaW0oKSxcbiAgICAgICAgc3R5bGU6IF90aGlzNC5idWlsZFN0eWxlcygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29udGVudC5zdHlsZXMpXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb250ZW50O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5pc0xvb3AoKSkge1xuICAgICAgdGhpcy5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJhdGVDbG9uZXModGhpcy5zbGlkZXMpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5yZWdpc3RlclJvb3RTdHlsZXMgPSBmdW5jdGlvbiByZWdpc3RlclJvb3RTdHlsZXMoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgdGhpcy5icmVha3BvaW50cy5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWYyWzBdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjJbMV07XG5cbiAgICAgIF90aGlzNS5TdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUucnVsZSgiICIsICJtYXgtd2lkdGgiLCB1bml0KG9wdGlvbnMud2lkdGgpLCB3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJUcmFja1N0eWxlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBmdW5jdGlvbiByZWdpc3RlclRyYWNrU3R5bGVzKCkge1xuICAgIHZhciBfdGhpczYgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcztcblxuICAgIHZhciBTdHlsZTIgPSB0aGlzLlN0eWxlO1xuICAgIHZhciBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgPSAiLiIgKyBDTEFTU19UUkFDSztcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjNbMF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICAgIG9wdGlvbnMgPSBfcmVmM1sxXTtcbiAgICAgIFN0eWxlMi5ydWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShzZWxlY3RvciwgX3RoaXM2LnJlc29sdmUoInBhZGRpbmdMZWZ0IiksIF90aGlzNi5jcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzUGFkZGluZyhvcHRpb25zLCBmYWxzZSksIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciwgX3RoaXM2LnJlc29sdmUoInBhZGRpbmdSaWdodCIpLCBfdGhpczYuY3NzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BhZGRpbmcob3B0aW9ucywgdHJ1ZSksIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3RvciwgImhlaWdodCIsIF90aGlzNi5jc3NUcmFja0hlaWdodChvcHRpb25zKSwgd2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyTGlzdFN0eWxlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBmdW5jdGlvbiByZWdpc3Rlckxpc3RTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzNyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RvciA9ICIuIiArIENMQVNTX0xJU1Q7XG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaChmdW5jdGlvbiAoX3JlZjQpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWY0WzBdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjRbMV07XG4gICAgICBTdHlsZTIucnVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoc2VsZWN0b3IsICJ0cmFuc2Zvcm0iLCBfdGhpczcuYnVpbGRUcmFuc2xhdGUob3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpLCB3aWR0aCk7XG5cbiAgICAgIGlmICghX3RoaXM3LmNzc1NsaWRlSGVpZ2h0KG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zKSkge1xuICAgICAgICBTdHlsZTIucnVsZShzZWxlY3RvciwgImFzcGVjdC1yYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28iLCBfdGhpczcuY3NzQXNwZWN0UmF0aW8ob3B0aW9ucyksIHdpZHRoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclNsaWRlU3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGZ1bmN0aW9uIHJlZ2lzdGVyU2xpZGVTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzOCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RvciA9ICIuIiArIENMQVNTX1NMSURFO1xuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2goZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmNVswXScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWY1WzFdO1xuICAgICAgU3R5bGUyLnJ1bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKHNlbGVjdG9yLCAid2lkdGgiLCBfdGhpczguY3NzU2xpZGVXaWR0aChvcHRpb25zKSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAiaGVpZ2h0IiwgX3RoaXM4JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5jc3NTbGlkZUhlaWdodChvcHRpb25zKSB8fCAiMTAwJSIsIHdpZHRoKTtcbiAgICAgIFN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZTIucnVsZShzZWxlY3RvciwgX3RoaXM4LnJlc29sdmUoIm1hcmdpblJpZ2h0IiksIHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbml0KG9wdGlvbnMuZ2FwKSB8fCAiMHB4Iiwgd2lkdGgpO1xuICAgICAgU3R5bGUyLnJ1bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNlbGVjdG9yICsgIiA+IGltZyIsICJkaXNwbGF5Iiwgb3B0aW9ucy5jb3ZlciA/ICJubycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZSIgOiAiaW5saW5lIiwgd2lkdGgpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkVHJhbnNsYXRlID0gZnVuY3Rpb24gYnVpbGRUcmFuc2xhdGUob3B0aW9ucykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgX3RoaXMkRGlyZWN0aW9uID0gdGhpcy5EaXJlY3Rpb24sXG4gICAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NvbHZlID0gX3RoaXMkRGlyZWN0aW9uLnJlc29sdmUsXG4gICAgICAgIG9yaWVudCA9IF90JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcyREaXJlY3Rpb24ub3JpZW50O1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWVzLnB1c2godGhpcy5jc3NPZmZzZXRDbG9uZXMob3B0aW9ucykpO1xuICAgIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MucHVzaCh0aGlzLmNzc09mZnNldEdhcHMob3B0aW9ucykpO1xuXG4gICAgaWYgKHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmlzQ2VudGVyKG9wdGlvbnMpKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLmJ1aWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Nzc1ZhbHVlKG9yaWVudCgtNTApLCAiJSIpKTtcbiAgICAgIHZhbHVlcy5wdXNoLmFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyh2YWx1ZXMsIHRoaXMuY3NzT2Zmc2V0Q2VudGVyKG9wdGlvbnMpKTtcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHZhbHVlcy5maWx0ZXIoQm9vbGVhbikubWFwKGZ1bmN0aW9uICh2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIHJldHVybiAidHJhbnNsYXRlIiArIHJlc29sdmUoIlgiKSArICIoIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YWx1ZSArICIpIjtcbiAgICB9KS5qb2luKCIgIik7XG4gIH07XG5cbiAgX3Byb3RvMy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzT2Zmc2V0Q2xvbmVzID0gZnVuY3Rpb24gY3NzT2Zmc2V0Q2xvbmVzKG9wdGlvbnMpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbjIgPSB0aGlzLkRpcmVjdGlvbixcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlc29sdmUgPSBfdGhpcyREaXJlY3Rpb24yLnJlc29sdmUsXG4gICAgICAgIG9yaScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgPSBfdGhpcyREaXJlY3Rpb24yLm9yaWVudDtcbiAgICB2YXIgY2xvbmVDb3VudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmdldENsb25lQ291bnQoKTtcblxuICAgIGlmICh0aGlzLmlzRml4ZWRXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYicob3B0aW9ucykpIHtcbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlID0gdGhpcy5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyc2VDc3NWYWx1ZShvcHRpb25zW3Jlc29sdmUoImZpeGVkV2lkdGgiKV0pLFxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YWx1ZSA9IF90aGlzJHBhcnNlQ3NzVmFsdWUudmFsdWUsXG4gICAgICAgICAgdW5pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicyID0gX3RoaXMkcGFyc2VDc3NWYWx1ZS51bml0O1xuXG4gICAgICByZXR1cm4gdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuYnVpbGRDc3NWYWx1ZShvcmllbnQodmFsdWUpICogY2xvbmVDb3VudCwgdW5pdDIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICB2YXIgcGVyY2VudCA9IDEwMCAqIGNsb25lQ291bnQgLyBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5wZXJQYWdlO1xuICAgIHJldHVybiBvcmllbnQocGVyY2VudCkgKyAiJSI7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMuY3NzT2Zmc2V0Q2VudGVyID0gZnVuY3Rpb24gY3NzT2ZmcycKICAgICAgICAgICAgICAgICAgICAgICAgYidldENlbnRlcihvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbjMgPSB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24sXG4gICAgICAgIHJlc29sdmUgPSBfdGhpcyREaXJlY3Rpb24zLnJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxuICAgICAgICBvcmllbnQgPSBfdGhpcyREaXJlY3Rpb24zLm9yaWVudDtcblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAodGhpcy5pc0ZpeGVkV2lkdGgob3B0aW9ucykpIHtcbiAgICAgIHZhciBfdGhpcyQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VDc3NWYWx1ZTIgPSB0aGlzLnBhcnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciZml4ZWRXaWR0aCIpXSksXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTIudmFsdWUsXG4gICAgICAgICAgdW5pdDIgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlMi51bicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdDtcblxuICAgICAgcmV0dXJuIFt0aGlzLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSAvIDIpLCB1bml0MildO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2UsXG4gICAgICAgIGdhcCA9IG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmdhcDtcbiAgICB2YWx1ZXMucHVzaChvcmllbnQoNTAgLyBwZXJQYWdlKSArICIlIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgaWYgKGdhcCkge1xuICAgICAgdmFyIF90aGlzJHBhcnNlQ3NzVmFsdWUzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRoaXMucGFyc2VDc3NWYWx1ZShnYXApLFxuICAgICAgICAgIF92YWx1ZSA9IF90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJzZUNzc1ZhbHVlMy52YWx1ZSxcbiAgICAgICAgICBfdW5pdCA9IF90aGlzJHBhcnNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlMy51bml0O1xuXG4gICAgICB2YXIgZ2FwT2Zmc2V0ID0gKF92YWx1ZSAvICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwZXJQYWdlIC0gX3ZhbHVlKSAvIDI7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLmJ1aWxkQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlKG9yaWVudChnYXBPZmZzZXQpLCBfdW5pdCkpO1xuICAgIH1cblxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdmFsdWVzO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzT2Zmc2V0R2FwcyA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjc3NPZmZzZXRHYXBzKG9wdGlvbnMpIHtcbiAgICB2YXIgY2xvbmVDb3VudCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmdldENsb25lQ291bnQoKTtcblxuICAgIGlmIChjbG9uZUNvdW50ICYmIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmdhcCkge1xuICAgICAgdmFyIG9yaWVudCA9IHRoaXMuRGlyZWN0aW9uLm9yaWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XG5cbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlNCA9IHRoaXMucGFyc2VDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVmFsdWUob3B0aW9ucy5nYXApLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcGFyc2VDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVmFsdWU0LnZhbHVlLFxuICAgICAgICAgIHVuaXQyID0gX3RoaXMkcGFyc2VDc3NWYWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U0LnVuaXQ7XG5cbiAgICAgIGlmICh0aGlzLmlzRml4ZWRXaWR0aChvcHRpb25zKSkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZShvcmllbnQodmFsdWUgKiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVDb3VudCksIHVuaXQyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBlclBhZ2UgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5wZXJQYWdlO1xuICAgICAgdmFyIGdhcHMgPSBjbG9uZUNvdW50IC8gcGVyUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2U7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudChnYXBzICogdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSwgdW5pdDIpO1xuICAgIH1cblxuICAgIHJldHVybiAiIjtcbiAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgX3Byb3RvMy5yZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShwcm9wKSB7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBjYW1lbFRvS2ViYWIodGhpcy5EaXJlY3Rpb24ucmVzb2x2ZShwcm9wKSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuY3NzUGFkZGluZyA9IGZ1bmN0aW9uIGNzc1BhZGRpbmcoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMsIHJpZ2h0KSB7XG4gICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBwcm9wID0gdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZShyaWdodCA/ICJyaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiIDogImxlZnQiLCB0cnVlKTtcbiAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KHBhZGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nW3Byb3BdIHx8IChpc09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkaW5nKSkgfHwgIjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHgiO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzVHJhY2tIZWlnaHQgPSBmdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVHJhY2tIZWlnaHQob3B0aW9ucykge1xuICAgIHZhciBoZWlnaHQgPSAiIjtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAodGhpcy5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIGhlaWdodCA9IHRoaXMuY3NzSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlaWdodChvcHRpb25zKTtcbiAgICAgIGFzc2VydChoZWlnaHQsIFwnImhlaWdodCIgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIG1pc3NpbmcuXCcpO1xuICAgICAgaGVpZ2h0ID0gImNhbGMoIiArIGhlaWdodCArICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciIC0gIiArIHRoaXMuY3NzUGFkZGluZyhvcHRpb25zLCBmYWxzZSkgKyAiIC0gIiArIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNzc1BhZGRpbmcob3B0aW9ucywgdHJ1ZSkgKyAiKSI7XG4gICAgfVxuXG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBoZWlnaHQ7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NIZWlnaHQgPSBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gY3NzSGVpZ2h0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHQpO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzU2xpZGVXaWR0aCA9IGZ1bmN0aW9uIGNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NTbGlkZVdpZHRoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gIiIgOiB1bml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKHRoaXMuaXNWZXJ0aWNhbCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA/ICIiIDogdGhpcy5jc3NTbGlkZVNpemUob3B0aW9ucykpO1xuICB9O1xuXG4gIF9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8zLmNzc1NsaWRlSGVpZ2h0ID0gZnVuY3Rpb24gY3NzU2xpZGVIZWlnaHQob3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8fCAodGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNWZXJ0aWNhbCgpID8gb3B0aW9ucy5hdXRvSGVpZ2h0ID8gIiIgOiB0aGlzLmNzc1NsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZVNpemUob3B0aW9ucykgOiB0aGlzLmNzc0hlaWdodChvcHRpb25zKSk7XG4gIH07JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIF9wcm90bzMuY3NzU2xpZGVTaXplID0gZnVuY3Rpb24gY3NzU2xpZGVTaXplJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhvcHRpb25zKSB7XG4gICAgdmFyIGdhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArICIpIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NBc3BlY3RSYXRpbyA9IGZ1bmN0aW9uIGNzc0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BlY3RSYXRpbyhvcHRpb25zKSB7XG4gICAgdmFyIGhlaWdodFJhdGlvID0gb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVpZ2h0UmF0aW87XG4gICAgcmV0dXJuIGhlaWdodFJhdGlvID8gIiIgKyAxIC8gaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFJhdGlvIDogIiI7XG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZENzc1ZhbHVlID0gZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGJ1aWxkQ3NzVmFsdWUodmFsdWUsIHVuaXQyKSB7XG4gICAgcmV0dXJuICIiICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlICsgdW5pdDI7XG4gIH07XG5cbiAgX3Byb3RvMy5wYXJzZUNzc1ZhbHVlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhcnNlQ3NzVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNTdHJpbmcodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSkge1xuICAgICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpIHx8IDA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIHVuaXQyID0gdmFsdWUucmVwbGFjZSgvXFxkKihcXC5cXGQqKT8vLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpIHx8ICJweCI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncixcbiAgICAgICAgdW5pdDogdW5pdDJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICB1bml0OiAicHgiXG4gICAgfTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH07XG5cbiAgX3Byb3RvMy5wYXJzZUJyZWFrcG9pbnRzID0gZnVuY3Rpb24gcGFycycKICAgICAgICAgICAgICAgICAgICAgICAgYidlQnJlYWtwb2ludHMoKSB7XG4gICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGJyZWFrcG9pbnRzID0gdGhpcy5vcHRpb25zLmJyZWFrcG9pbnRzO1xuICAgIHRoaXMuYnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzLnB1c2goWyJkZWZhdWx0IiwgdGhpcy5vcHRpb25zXSk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGJyZWFrcG9pbnRzKSB7XG4gICAgICBmb3JPd24oYnJlYWtwb2ludHMsIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAob3B0aW9ucywgd2lkdGgpIHtcbiAgICAgICAgX3RoaXM5LmJyZWFrcG9pbnRzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFt3aWR0aCwgbWVyZ2UobWVyZ2Uoe30sIF90aGlzOS5vcHRpb25zKSwgb3B0aW9ucyldKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMy5pc0ZpeGVkV2lkdGggPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gaXNGaXhlZFdpZHRoKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gISFvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc1t0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKCJmaXhlZFdpZHRoIildO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8zLmlzTG9vcCA9IGZ1bmN0aW9uIGlzTG9vcCgpIHtcbiAgICByZXR1cm4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucy50eXBlID09PSBMT09QO1xuICB9O1xuXG4gIF9wcm90bzMuaXNDZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyID0gZnVuY3Rpb24gaXNDZW50ZXIob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cyA9PT0gImNlbnRlciIpIHtcbiAgICAgIGlmICh0aGlzLmlzTG9vcCgpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMudHlwZSA9PT0gU0xJREUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm9wdGlvbnMudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaW1TcGFjZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuaXNWZXJ0aWNhbCA9IGZ1bmN0aW9uIGlzVmVydGljYWwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuYnVpbGRDbGFzc2VzID0gZnVuY3Rpb24gYnVpbGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcygpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIFtDTEFTU19ST09ULCBDTEFTU19ST09UICsgIi0tIiArIG9wdGlvbnMudHlwZSwgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1JPT1QgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfUk9PVCArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19ST09UICsgIi0tbmF2IiwgQ0xBU1NfQUNUSVZFLCAhdGhpcy5jb25maWcuaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRlbiAmJiBDTEFTU19SRU5ERVJFRF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG5cbiAgX3Byb3RvMy5idWlsZEF0dHJzID0gZnVuY3Rpb24gYnVpbGRBdHRycygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMpIHtcbiAgICB2YXIgYXR0ciA9ICIiO1xuICAgIGZvck93bihhdHRycywgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBhdHRyICs9IHZhbHVlID8gIiAiICsgY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVsVG9LZWJhYihrZXkpICsgIj1cXCIiICsgdmFsdWUgKyAiXFwiIiA6ICIiO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9KTtcbiAgICByZXR1cm4gYXR0ci50cmltKCk7XG4gIH07XG5cbiAgX3Byb3RvMy5idWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGRTdHlsZXMgPSBmdW5jdGlvbiBidWlsZFN0eWxlcyhzdHlsZXMpIHtcbiAgICB2YXIgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlID0gIiI7XG4gICAgZm9yT3duKHN0eWxlcywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBzdHlsZSArPSAiICIgKyBjYW1lbFRvS2ViYWIoa2V5KSArICI6IiArIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSArICI7IjtcbiAgICB9KTtcbiAgICByZXR1cm4gc3R5bGUudHJpbSgpO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8zLnJlbmRlclNsaWRlcyA9IGZ1bmN0aW9uIHJlbmRlclNsaWRlcygpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhZyA9IHRoaXMuY29uZmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZy5zbGlkZVRhZztcbiAgICByZXR1cm4gdGhpcy5zbGlkZXMubWFwKGZ1bmN0aW9uIChjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVudCkge1xuICAgICAgcmV0dXJuICI8IiArIHRhZyArICIgIiArIF90aGlzMTAuYnVpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cnMoY29udGVudC5hdHRycykgKyAiPiIgKyAoY29udGVudC5odG1sIHx8ICIiKSArICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciPC8iICsgdGFnICsgIj4iO1xuICAgIH0pLmpvaW4oIiIpO1xuICB9O1xuXG4gIF9wcm90JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28zLmNvdmVyID0gZnVuY3Rpb24gY292ZXIoY29udGVudCkge1xuICAgIHZhciBzdHlsZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gY29udGVudC5zdHlsZXMsXG4gICAgICAgIF9jb250ZW50JGh0bWwgPSBjb250ZW50Lmh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21sLFxuICAgICAgICBodG1sID0gX2NvbnRlbnQkaHRtbCA9PT0gdm9pZCAwID8gIiIgOiBfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRlbnQkaHRtbDtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuY292ZXIgJiYgIXRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLm9wdGlvbnMubGF6eUxvYWQpIHtcbiAgICAgIHZhciBzcmMgPSBodG1sLm1hdGNoKC88JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZy4qP3NyY1xccyo9XFxzKihbXCciXSkoLis/KVxcMS4qPz4vKTtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChzcmMgJiYgc3JjWzJdKSB7XG4gICAgICAgIHN0eWxlcy5iYWNrZ3JvdW5kID0gImNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXIvY292ZXIgbm8tcmVwZWF0IHVybChcJyIgKyBzcmNbMl0gKyAiXCcpIjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMuZ2VuZXJhdGVDbG9uZXMgPSBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZ2VuZXJhdGVDbG9uZXMoY29udGVudHMpIHtcbiAgICB2YXIgY2xhc3NlcyA9IHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLm9wdGlvbnMuY2xhc3NlcztcbiAgICB2YXIgY291bnQgPSB0aGlzLmdldENsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KCk7XG4gICAgdmFyIHNsaWRlcyA9IGNvbnRlbnRzLnNsaWNlKCk7XG5cbiAgICB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgcHVzaChzbGlkZXMsIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMpO1xuICAgIH1cblxuICAgIHB1c2goc2xpZGVzLnNsaWNlKC1jb3VudCkucmV2ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UoKSwgc2xpZGVzLnNsaWNlKDAsIGNvdW50KSkuZm9yRWFjaChmdW5jdGlvbiAoY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIGluZGV4KSB7XG4gICAgICB2YXIgYXR0cnMgPSBhc3NpZ24oe30sIGNvbnRlbnQuYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJzLCB7XG4gICAgICAgIGNsYXNzOiBjb250ZW50LmF0dHJzLmNsYXNzICsgIiAiICsgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMuY2xvbmVcbiAgICAgIH0pO1xuICAgICAgdmFyIGNsb25lID0gYXNzaWduKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid7fSwgY29udGVudCwge1xuICAgICAgICBhdHRyczogYXR0cnNcbiAgICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGluZGV4IDwgY291bnQgPyBjb250ZW50cy51bnNoaWZ0KGNsb25lKSA6IGNvbnRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5wdXNoKGNsb25lKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLmdldENsb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50ID0gZnVuY3Rpb24gZ2V0Q2xvbmVDb3VudCgpIHtcbiAgICBpZiAodGhpcy5pc0xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wKCkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKG9wdGlvbnMuY2xvbmVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNsb25lcycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG5cbiAgICAgIHZhciBwZXJQYWdlID0gbWF4LmFwcGx5KHZvaWQgMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuYnJlYWtwb2ludHMubWFwKGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMyID0gX3JlZjZbMV07XG4gICAgICAgIHJldHVybiBvcHRpb25zMi5wZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBwZXJQYWdlICogKChvcHRpb25zLmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlja01heFBhZ2VzIHx8IDEpICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMucmVuZGVyQXJyb3dzID0gZnVuY3Rpb24gcmVuZGVyQXJybycKICAgICAgICAgICAgICAgICAgICAgICAgYid3cygpIHtcbiAgICB2YXIgaHRtbCA9ICIiO1xuICAgIGh0bWwgKz0gIjxkaXYgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzPVxcIiIgKyB0aGlzLm9wdGlvbnMuY2xhc3Nlcy5hcnJvd3MgKyAiXFwiPiI7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGh0bWwgKz0gdGhpcy5yZW5kZXJBcnJvdyh0cnVlKTtcbiAgICBodG1sICs9IHRoaXMucmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlckFycm93KGZhbHNlKTtcbiAgICBodG1sICs9ICI8L2Rpdj4iO1xuICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gaHRtbDtcbiAgfTtcblxuICBfcHJvdG8zLnJlbmRlckFycm93ID0gZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbmRlckFycm93KHByZXYpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMsXG4gICAgICAgIGNsYXNzZXMgPSBfdGhpcyRvcHRpb25zLmNsYXNzZXMsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBpMThuID0gX3RoaXMkb3B0aW9ucy5pMThuO1xuICAgIHZhciBhdHRycyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSB7XG4gICAgICBjbGFzczogY2xhc3Nlcy5hcnJvdyArICIgIiArIChwcmV2ID8gY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMucHJldiA6IGNsYXNzZXMubmV4dCksXG4gICAgICB0eXBlOiAiYnV0dG9uIixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBhcmlhTGFiZWw6IHByZXYgPyBpMThuLnByZXYgOiBpMThuLm5leHRcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcbiAgICByZXR1cm4gIjxidXR0b24gIiArIHRoaXMuYnVpbGRBdHRycyhhdHRycykgKycKICAgICAgICAgICAgICAgICAgICAgICAgYicgIj48c3ZnIHhtbG5zPVxcIiIgKyBYTUxfTkFNRV9TUEFDRSArICJcXCIgdmlld0JveCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiMCAwICIgKyBTSVpFICsgIiAiICsgU0laRSArICJcXCIgd2lkdGg9XFwiIiArIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVpFICsgIlxcIiBoZWlnaHQ9XFwiIiArIFNJWkUgKyAiXFwiPjxwYXRoIGQ9XFwiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYicodGhpcy5vcHRpb25zLmFycm93UGF0aCB8fCBQQVRIKSArICJcXCIgLz48L3N2Zz48L2J1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b24+IjtcbiAgfTtcblxuICBfcHJvdG8zLmh0bWwgPSBmdW5jdGlvbiBodG1sKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgX3RoaXMkY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgIHJvb3RDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgPSBfdGhpcyRjb25maWcucm9vdENsYXNzLFxuICAgICAgICBsaXN0VGFnID0gX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmZpZy5saXN0VGFnLFxuICAgICAgICBhcnJvd3MgPSBfdGhpcyRjb25maWcuYXJyb3dzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgYmVmb3JlVHJhY2sgPSBfdGhpcyRjb25maWcuYmVmb3JlVHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBhZnRlclRyYWNrID0gX3RoaXMkY29uZmlnLmFmdGVyVHJhY2ssXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBzbGlkZXIgPSBfdGhpcyRjb25maWcuc2xpZGVyLFxuICAgICAgICBiZWZvcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVyID0gX3RoaXMkY29uZmlnLmJlZm9yZVNsaWRlcixcbiAgICAgICAgYWZ0ZXJTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyID0gX3RoaXMkY29uZmlnLmFmdGVyU2xpZGVyO1xuICAgIHZhciBodG1sID0gIicKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICAgIGh0bWwgKz0gIjxkaXYgaWQ9XFwiIiArIHRoaXMuaWQgKyAiXFwiIGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz1cXCIiICsgdGhpcy5idWlsZENsYXNzZXMoKSArICIgIiArIChyb290Q2xhc3MgfHwgIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSArICJcXCI+IjtcbiAgICBodG1sICs9ICI8c3R5bGU+IiArIHRoaXMuU3R5bGUuYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkKCkgKyAiPC9zdHlsZT4iO1xuXG4gICAgaWYgKHNsaWRlcikge1xuICAgICAgaHRtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKz0gYmVmb3JlU2xpZGVyIHx8ICIiO1xuICAgICAgaHRtbCArPSAiPGRpdiBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3M9XFwic3BsaWRlX19zbGlkZXJcXCI+IjtcbiAgICB9XG5cbiAgICBodG1sICs9IGJlZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVUcmFjayB8fCAiIjtcblxuICAgIGlmIChhcnJvd3MpIHtcbiAgICAgIGh0bWwgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMucmVuZGVyQXJyb3dzKCk7XG4gICAgfVxuXG4gICAgaHRtbCArPSAiPGRpdiBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3M9XFwic3BsaWRlX190cmFja1xcIj4iO1xuICAgIGh0bWwgKz0gIjwiICsgbGlzdFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWcgKyAiIGNsYXNzPVxcInNwbGlkZV9fbGlzdFxcIj4iO1xuICAgIGh0bWwgKz0gdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVuZGVyU2xpZGVzKCk7XG4gICAgaHRtbCArPSAiPC8iICsgbGlzdFRhZyArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiI7XG4gICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICBodG1sICs9IGFmdGVyVHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8ICIiO1xuXG4gICAgaWYgKHNsaWRlcikge1xuICAgICAgaHRtbCArPSAiPC9kaXY+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gICAgICBodG1sICs9IGFmdGVyU2xpZGVyIHx8ICIiO1xuICAgIH1cblxuICAgIGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG1sICs9ICI8L2Rpdj4iO1xuICAgIHJldHVybiBodG1sO1xuICB9O1xuXG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlUmVuZGVyZXI7XG59KCk7XG5cbmV4cG9ydHMuQ0xBU1NFUyA9IENMQVNTRVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuZXhwb3J0cy5DTEFTU19BQ1RJVkUgPSBDTEFTU19BQ1RJVkU7XG5leHBvcnRzLkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19BUlJPVyA9IENMQVNTX0FSUk9XO1xuZXhwb3J0cy5DTEFTU19BUlJPV1MgPSBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1dTO1xuZXhwb3J0cy5DTEFTU19BUlJPV19ORVhUID0gQ0xBU1NfQVJST1dfTkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWFQ7XG5leHBvcnRzLkNMQVNTX0FSUk9XX1BSRVYgPSBDTEFTU19BUlJPV19QUkVWOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMuQ0xBU1NfQ0xPTkUgPSBDTEFTU19DTE9ORTtcbmV4cG9ydHMuQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX0NPTlRBSU5FUiA9IENMQVNTX0NPTlRBSU5FUjtcbmV4cG9ydHMuQ0xBU1NfRk9DVVNfSScKICAgICAgICAgICAgICAgICAgICAgICAgYidOID0gQ0xBU1NfRk9DVVNfSU47XG5leHBvcnRzLkNMQVNTX0lOSVRJQUxJWkVEID0gQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX0lOSVRJQUxJWkVEO1xuZXhwb3J0cy5DTEFTU19MSVNUID0gQ0xBU1NfTElTVDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnRzLkNMQVNTX0xPQURJTkcgPSBDTEFTU19MT0FESU5HO1xuZXhwb3J0cy5DTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfTkVYVCA9IENMQVNTX05FWFQ7XG5leHBvcnRzLkNMQVNTX09WRVJGTE9XID0gQ0xBU1NfTycKICAgICAgICAgICAgICAgICAgICAgICAgYidWRVJGTE9XO1xuZXhwb3J0cy5DTEFTU19QQUdJTkFUSU9OID0gQ0xBU1NfUEFHSU5BVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5leHBvcnRzLkNMQVNTX1BBR0lOQVRJT05fUEFHRSA9IENMQVNTX1BBR0lOQVRJT05fUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBR0U7XG5leHBvcnRzLkNMQVNTX1BSRVYgPSBDTEFTU19QUkVWO1xuZXhwb3J0cy5DTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUFJPR1JFU1MgPSBDTEFTU19QUk9HUkVTUztcbmV4cG9ydHMuQ0xBU1NfUFJPR1JFUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX0JBUiA9IENMQVNTX1BST0dSRVNTX0JBUjtcbmV4cG9ydHMuQ0xBU1NfUk9PVCA9IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19ST09UO1xuZXhwb3J0cy5DTEFTU19TTElERSA9IENMQVNTX1NMSURFO1xuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydHMuQ0xBU1NfU1BJTk5FUiA9IENMQVNTX1NQSU5ORVI7XG5leHBvcnRzLkNMQVNTX1NSICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IENMQVNTX1NSO1xuZXhwb3J0cy5DTEFTU19UT0dHTEUgPSBDTEFTU19UT0dHTEU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZXhwb3J0cy5DTEFTU19UT0dHTEVfUEFVU0UgPSBDTEFTU19UT0dHTEVfUEFVU0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuZXhwb3J0cy5DTEFTU19UT0dHTEVfUExBWSA9IENMQVNTX1RPR0dMRV9QTEFZOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMuQ0xBU1NfVFJBQ0sgPSBDTEFTU19UUkFDSztcbmV4cG9ydHMuQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX1ZJU0lCTEUgPSBDTEFTU19WSVNJQkxFO1xuZXhwb3J0cy5ERUZBVUxUUyA9IERFRkFVTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUUztcbmV4cG9ydHMuRVZFTlRfQUNUSVZFID0gRVZFTlRfQUNUSVZFO1xuZXhwb3J0cycKICAgICAgICAgICAgICAgICAgICAgICAgYicuRVZFTlRfQVJST1dTX01PVU5URUQgPSBFVkVOVF9BUlJPV1NfTU9VTlRFRDtcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLkVWRU5UX0FSUk9XU19VUERBVEVEID0gRVZFTlRfQVJST1dTX1VQREFURUQ7XG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5FVkVOVF9BVVRPUExBWV9QQVVTRSA9IEVWRU5UX0FVVE9QTEFZX1BBVVNFO1xuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydHMuRVZFTlRfQVVUT1BMQVlfUExBWSA9IEVWRU5UX0FVVE9QTEFZX1BMQVk7XG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5FVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gRVZFTlRfQVVUT1BMQVlfUExBWUlORztcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnRzLkVWRU5UX0NMSUNLID0gRVZFTlRfQ0xJQ0s7XG5leHBvcnRzLkVWRU5UX0RFUycKICAgICAgICAgICAgICAgICAgICAgICAgYidUUk9ZID0gRVZFTlRfREVTVFJPWTtcbmV4cG9ydHMuRVZFTlRfRFJBRyA9IEVWRU5UX0RSQScKICAgICAgICAgICAgICAgICAgICAgICAgYidHO1xuZXhwb3J0cy5FVkVOVF9EUkFHR0VEID0gRVZFTlRfRFJBR0dFRDtcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLkVWRU5UX0RSQUdHSU5HID0gRVZFTlRfRFJBR0dJTkc7XG5leHBvcnRzLkVWRU5UX0VORCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfSU5ERVhfQ0hBTkdFRCA9IEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEO1xuZXhwb3J0cy5FVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfSElEREVOID0gRVZFTlRfSElEREVOO1xuZXhwb3J0cy5FVkVOVF9JTkFDVElWRSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9JTkFDVElWRTtcbmV4cG9ydHMuRVZFTlRfTEFaWUxPQURfTE9BREVEID0gRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX0xBWllMT0FEX0xPQURFRDtcbmV4cG9ydHMuRVZFTlRfTU9VTlRFRCA9IEVWRU5UX01PVScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVEVEO1xuZXhwb3J0cy5FVkVOVF9NT1ZFID0gRVZFTlRfTU9WRTtcbmV4cG9ydHMuRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX01PVkVEID0gRVZFTlRfTU9WRUQ7XG5leHBvcnRzLkVWRU5UX05BVklHQVRJT05fTScKICAgICAgICAgICAgICAgICAgICAgICAgYidPVU5URUQgPSBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQ7XG5leHBvcnRzLkVWRU5UX09WRScKICAgICAgICAgICAgICAgICAgICAgICAgYidSRkxPVyA9IEVWRU5UX09WRVJGTE9XO1xuZXhwb3J0cy5FVkVOVF9QQUdJTkFUSU9OX01PVScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVEVEID0gRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEO1xuZXhwb3J0cy5FVkVOVF9QQUdJTicKICAgICAgICAgICAgICAgICAgICAgICAgYidBVElPTl9VUERBVEVEID0gRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEO1xuZXhwb3J0cy5FVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVBRFkgPSBFVkVOVF9SRUFEWTtcbmV4cG9ydHMuRVZFTlRfUkVGUkVTSCA9IEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRUZSRVNIO1xuZXhwb3J0cy5FVkVOVF9SRVNJWkUgPSBFVkVOVF9SRVNJWkU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZXhwb3J0cy5FVkVOVF9SRVNJWkVEID0gRVZFTlRfUkVTSVpFRDtcbmV4cG9ydHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1NDUk9MTCA9IEVWRU5UX1NDUk9MTDtcbmV4cG9ydHMuRVZFTlRfU0NST0xMRUQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gRVZFTlRfU0NST0xMRUQ7XG5leHBvcnRzLkVWRU5UX1NISUZURUQgPSBFVkVOVF9TSElGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRDtcbmV4cG9ydHMuRVZFTlRfU0xJREVfS0VZRE9XTiA9IEVWRU5UX1NMSURFX0tFWURPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dOO1xuZXhwb3J0cy5FVkVOVF9VUERBVEVEID0gRVZFTlRfVVBEQVRFRDtcbmV4cG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLkVWRU5UX1ZJU0lCTEUgPSBFVkVOVF9WSVNJQkxFO1xuZXhwb3J0cy5FdmVudEJpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgPSBFdmVudEJpbmRlcjtcbmV4cG9ydHMuRXZlbnRJbnRlcmZhY2UgPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2U7XG5leHBvcnRzLkZBREUgPSBGQURFO1xuZXhwb3J0cy5MT09QID0gTE9PUDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnRzLkxUUiA9IExUUjtcbmV4cG9ydHMuUlRMID0gUlRMO1xuZXhwb3J0cy5SZScKICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVzdEludGVydmFsID0gUmVxdWVzdEludGVydmFsO1xuZXhwb3J0cy5TTElERSA9IFNMSScKICAgICAgICAgICAgICAgICAgICAgICAgYidERTtcbmV4cG9ydHMuU1RBVFVTX0NMQVNTRVMgPSBTVEFUVVNfQ0xBU1NFUztcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnRzLlNwbGlkZSA9IFNwbGlkZTtcbmV4cG9ydHMuU3BsaWRlUmVuZGVyZXIgPSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlUmVuZGVyZXI7XG5leHBvcnRzLlN0YXRlID0gU3RhdGU7XG5leHBvcnRzLlRUQiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUVEI7XG5leHBvcnRzLlRocm90dGxlID0gVGhyb3R0bGU7XG5leHBvcnRzWyJkZWZhdScKICAgICAgICAgICAgICAgICAgICAgICAgYidsdCJdID0gU3BsaWRlO1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5janMuanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicvKiFcbiAqIFNwbGlkZS5qc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc2UgIDogTUlUXG4gKiBDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmICgidmFsdWUiIGluIGRlc2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHMpOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsICJwcm90b3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIE1FRElBX1BSRUZFUlNfUkVEVUNFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RfTU9USU9OID0gIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIjtcbnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgQ1JFQVRFRCA9IDE7XG52YXIgTU9VTlRFRCA9IDI7XG52YXIgSURMRSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczO1xudmFyIE1PVklORyA9IDQ7XG52YXIgU0NST0xMSU5HID0gNTtcbnZhciBEUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0dJTkcgPSA2O1xudmFyIERFU1RST1lFRCA9IDc7XG52YXIgU1RBVEVTID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgQ1JFQVRFRDogQ1JFQVRFRCxcbiAgTU9VTlRFRDogTU9VTlRFRCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lETEU6IElETEUsXG4gIE1PVklORzogTU9WSU5HLFxuICBTQ1JPTExJTkc6IFNDUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xJTkcsXG4gIERSQUdHSU5HOiBEUkFHR0lORyxcbiAgREVTVFJPWUVEOiBERVNUUk9ZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VEXG59O1xuXG5mdW5jdGlvbiBlbXB0eShhcnJheSkge1xuICBhcnJheS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyYXlMaWtlLCBzdGFydCwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBmdW5jLmJpbmQuYXBwbHkoZnVuYywgW251bGxdLmNvbmNhdChzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoYXJndW1lbnRzLCAxKSkpO1xufVxuXG52YXIgbmV4dFRpY2sgPSBzZXRUaW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW91dDtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiByYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUsIHN1YmplY3QpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICFpc051bGwoc3ViamVjdCkgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGVPZigib2JqZWN0Iiwgc3ViamVjdCk7XG59XG5cbnZhciBpc0FycmF5ID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFycmF5LmlzQXJyYXk7XG52YXIgaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiIpO1xudmFyIGlzU3RyaW5nID0gYXBwbHkodHlwZU9mLCAic3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIpO1xudmFyIGlzVW5kZWZpbmVkID0gYXBwbHkodHlwZU9mLCAidW5kZWZpbmVkIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG5mdW5jdGlvbiBpc051bGwoc3ViamVjdCkge1xuICByZXR1cm4gc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZW9mIChzdWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdykuSFRNTEVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc0FycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5cbmZ1bmN0aW9uIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgdG9BcnJheSh2YWx1ZXMpLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGl0ZXJhdGVlKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIHB1c2goYXJyYXksIGl0ZW1zKSB7XG4gIGFycmF5LnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmFwcGx5KGFycmF5LCB0b0FycmF5KGl0ZW1zKSk7XG4gIHJldHVybiBhcnJheTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywgYWRkKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoZWxtKSB7XG4gICAgZm9yRWFjaChjbGFzc2VzLCBmdW5jdGlvbiAobmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGVsbS5jbGFzc0xpc3RbYWRkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/ICJhZGQiIDogInJlbW92ZSJdKG5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbiAgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dsZUNsYXNzKGVsbSwgaXNTdHJpbmcoY2xhc3NlcykgPyBjbGFzc2VzLnNwbGl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygiICIpIDogY2xhc3NlcywgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50LCBjaGlsZHJlbikge1xuICBmb3JFYWNoKGNoaWxkcmVuLCBwYXJlbnQuYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGVuZENoaWxkLmJpbmQocGFyZW50KSk7XG59XG5cbmZ1bmN0aW9uIGJlZm9yZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm9kZXMsIHJlZikge1xuICBmb3JFYWNoKG5vZGVzLCBmdW5jdGlvbiAobm9kZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCBub2RlKS5wYXJlbnROb2RlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHJlZik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhlbG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzZWxlY3Rvcikge1xuICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmIChlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtWyJtc01hdGNoZXNTZWxlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCBzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0b3IpIHtcbiAgdmFyIGNoaWxkcmVuMiA9IHBhcmVudCA/IHNsaWNlKHBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2hpbGRyZW4pIDogW107XG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuMi5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsdGVyKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBtYXRjaGVzKGNoaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCwgc2VsZWN0b3IpO1xuICB9KSA6IGNoaWxkcmVuMjtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpWzBdIDogcGFyZW50LmZpcnN0RWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RDaGlsZDtcbn1cblxudmFyIG93bktleXMgPSBPYmplY3Qua2V5cztcblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkge1xuICBpZiAob2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCkge1xuICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3duS2V5cyhvYmplY3QpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGVlKG9iamVjdFtrZXldLCBrZXkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBhc3NpZ24ob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAodmFsdWUsIGtleSkge1xuICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ107XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWVyZ2Uob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWUsIGtleSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBtZXJnZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iamVjdFtrZXldIDoge30sIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5cykge1xuICBmb3JFYWNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrZXlzIHx8IG93bktleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xldGUgb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlKGVsbXMsIGF0dHJzKSB7XG4gIGZvckVhY2goZWxtcywgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlbG0pIHtcbiAgICBmb3JFYWNoKGF0dHJzLCBmdW5jdGlvbiAoYXR0cikge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVsbSAmJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgIH0pO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShlbG1zLCBhdHRycywgdmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlKSB7XG4gIGlmIChpc09iamVjdChhdHRycykpIHtcbiAgICBmb3JPd24oYXR0cnMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiAodmFsdWUyLCBuYW1lKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUoZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXMsIG5hbWUsIHZhbHVlMik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2goZWxtcywgZnVuY3Rpb24gKGVsbSkge1xuICAgICAgaXNOdWxsKHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgdmFsdWUgPT09ICIiID8gcmVtb3ZlQXR0cmlidXRlKGVsbSwgYXR0cnMpIDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbS5zZXRBdHRyaWJ1dGUoYXR0cnMsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGUodGFnLCBhdHRycywgcGFyZW50KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoYXR0cnMpIHtcbiAgICBpc1N0cmluZyhhdHRycykgPyBhZGRDbGFzcyhlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycyk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50ICYmIGFwcGVuZChwYXJlbnQsIGVsbSk7XG4gIHJldHVybiBlbG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBzdHlsZShlbG0sIHByb3AsIHZhbHVlKSB7XG4gIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKGVsbSlbcHJvcF07XG4gIH1cblxuICBpZiAoIWlzTnVsbCh2YWx1ZSkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZWxtLnN0eWxlW3Byb3BdID0gIiIgKyB2YWx1ZTtcbiAgfVxufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gZGlzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gIHN0eWxlKGVsbSwgImRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5IiwgZGlzcGxheTIpO1xufVxuXG5mdW5jdGlvbiBmb2N1cyhlbG0pIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVsbVsic2V0QWN0aXZlIl0gJiYgZWxtWyJzZXRBY3RpdmUiXSgpIHx8IGVsbS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9jdXMoe1xuICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgfSk7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gIHJldHVybiBlbG0uZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShhdHRyKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChub2RlKSB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwoaHRtbCkge1xuICByZXR1cm4gY2hpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3Rpb24gcHJldmVudChlLCBzdG9wUHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcblxuICBpZiAoc3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQcm9wYWdhdGlvbikge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ5KHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xufVxuXG5mdW5jdGlvbiBxdWVyeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbGwocGFyZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPyBzbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4gIHRvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWVPZihlKSB7XG4gIHJldHVybiBlLnRpbWVTdGFtcDtcbn1cblxuZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHVuaXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZhbHVlID8gdmFsdWUgKyAicHgiIDogIiI7XG59XG5cbnZhciBQUk9KRUNUXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDT0RFID0gInNwbGlkZSI7XG52YXIgREFUQV9BVFRSSUJVVEUgPSAiZGF0YS0iICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BST0pFQ1RfQ09ERTtcblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIlsiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArIFBST0pFQ1RfQ09ERSArICJdICIgKyAobWVzc2FnZSB8fCAiIikpO1xuICB9XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG52YXIgbWluID0gTWF0aC5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZsb29yID0gTWF0aC5mbG9vcixcbiAgICBjZWlsID0gTWF0aC5jZWlsLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYnMgPSBNYXRoLmFicztcblxuZnVuY3Rpb24gYXBwcm94aW1hdGVseUVxdWFsKHgsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5LCBlcHNpbG9uKSB7XG4gIHJldHVybiBhYnMoeCAtIHkpIDwgZXBzaWxvbjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIGJldHdlZW4obnVtYmVyLCB4LCB5LCBleGNsdXNpdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICB2YXIgbWF4aW11bSA9IG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXgoeCwgeSk7XG4gIHJldHVybiBleGNsdXNpdmUgPyBtaW5pbXVtIDwgbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBudW1iZXIgPCBtYXhpbXVtIDogbWluaW11bSA8PSBudW1iZXIgJiYgbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciA8PSBtYXhpbXVtO1xufVxuXG5mdW5jdGlvbiBjbGFtcChudW1iZXIsIHgsIHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICB2YXIgbWF4aW11bSA9IG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXgoeCwgeSk7XG4gIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWJlciksIG1heCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbXVtKTtcbn1cblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiArKHggPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCkgLSArKHggPCAwKTtcbn1cblxuZnVuY3Rpb24gY2FtZWxUb0tlYmFiKHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvZywgIiQxLSQyIikudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdChzdHJpbmcsIHJlcGxhY2VtZW50cykge1xuICBmb3JFYWNoKHJlcGxhY2VtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGZ1bmN0aW9uIChyZXBsYWNlbWVudCkge1xuICAgIHN0cmluZyA9IHN0cmluZy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZSgiJXMiLCAiIiArIHJlcGxhY2VtZW50KTtcbiAgfSk7XG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBwYWQobnVtYmVyKSB7XG4gIHJldHVybiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyIDwgMTAgPyAiMCIgKyBudW1iZXIgOiAiIiArIG51bWJlcjtcbn1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBpZHMgPSB7fTtcblxuZnVuY3Rpb24gdW5pcXVlSWQocHJlZml4KSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gIiIgKyBwcmVmaXggKyBwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaXhdIHx8IDApICsgMSk7XG59XG5cbmZ1bmN0aW9uIEV2ZW50QmluZGVyKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGJpbmQodGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHMsIGV2ZW50cywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBmb3JFYWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KHRhcmdldHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UpIHtcbiAgICAgIHZhciBpc0V2ZW50VGFyZ2V0ID0gKCJhZGRFdmVudExpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZW5lciIgaW4gdGFyZ2V0KTtcbiAgICAgIHZhciByZW1vdmVyID0gaXNFdmVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQgPyB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRhcmdldCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50LCBjYWxsYmFjaywgb3B0aW9ucykgOiB0YXJnZXRbInJlbW92ZUxpc3RlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlciJdLmJpbmQodGFyZ2V0LCBjYWxsYmFjayk7XG4gICAgICBpc0V2ZW50VGFyZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMpIDogdGFyZ2V0WyJhZGRMaXN0ZW5lciJdKGNhbGxiYWNrKTtcbiAgICAgIGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0ZW5lcnMucHVzaChbdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlbW92ZXJdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFyZ2V0cywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgIGZvckVhY2hFdmVudCh0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0cywgZXZlbnRzLCBmdW5jdGlvbiAodGFyZ2V0LCBldmVudCwgbmFtZXNwYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGxpc3RlbmVyKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0gdGFyZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBsaXN0ZW5lclsxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09IG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkge1xuICAgICAgICAgIGxpc3RlbmVyWzRdKCk7XG4gICAgICAgICAgcmV0dXJuIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2godGFyZ2V0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSwgZGV0YWlsKSB7XG4gICAgdmFyIGU7XG4gICAgdmFyIGJ1YmJsZXMgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcblxuICAgIGlmICh0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICJmdW5jdGlvbiIpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KHR5cGUsIHtcbiAgICAgICAgYnViYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXM6IGJ1YmJsZXMsXG4gICAgICAgIGRldGFpbDogZGV0YWlsXG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGUgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0N1c3RvbUV2ZW50Iik7XG4gICAgICBlLmluaXRDdXN0b21FdmVudCh0eXBlLCBidWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlcywgZmFsc2UsIGRldGFpbCk7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmRpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRjaEV2ZW50KGUpO1xuICAgIHJldHVybiBlO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2hFdmVudCh0YXJnZXRzLCBldmVudHMsIGl0ZXJhdGVlKSB7XG4gICAgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2godGFyZ2V0cywgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdGFyZ2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2ZW50czIpIHtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50czIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5TKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIHZhciBmcmFnbWVudCA9IGV2ZW50TlMuc3BsaXQoIi4iKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgaXRlcmF0ZWUodGFyZ2V0LCBmcmFnbWVudFswXSwgZnJhZ21lbnRbMV0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBkZXN0cm95KCkge1xuICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZGF0YSkge1xuICAgICAgZGF0YVs0XSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0ZW5lcnMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiaW5kOiBiaW5kLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB1bmJpbmQ6IHVuYmluZCxcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3k6IGRlc3Ryb3lcbiAgfTtcbn1cblxudmFyIEVWRU5UX01PVU5URUQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIm1vdW50ZWQiO1xudmFyIEVWRU5UX1JFQURZID0gInJlYWR5IjtcbnZhciBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9WRSA9ICJtb3ZlIjtcbnZhciBFVkVOVF9NT1ZFRCA9ICJtb3ZlZCI7XG52YXIgRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX0NMSUNLID0gImNsaWNrIjtcbnZhciBFVkVOVF9BQ1RJVkUgPSAiYWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfSU5BQ1RJVkUgPSAiaW5hY3RpdmUiO1xudmFyIEVWRU5UX1ZJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NJQkxFID0gInZpc2libGUiO1xudmFyIEVWRU5UX0hJRERFTiA9ICJoaWRkZW4iO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xudmFyIEVWRU5UX1VQREFURUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gInVwZGF0ZWQiO1xudmFyIEVWRU5UX1JFU0laRSA9ICJyZXNpemUiO1xudmFyIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9SRVNJWkVEID0gInJlc2l6ZWQiO1xudmFyIEVWRU5UX0RSQUcgPSAiZHJhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX0RSQUdHSU5HID0gImRyYWdnaW5nIjtcbnZhciBFVkVOVF9EUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0dFRCA9ICJkcmFnZ2VkIjtcbnZhciBFVkVOVF9TQ1JPTEwgPSAic2Nyb2xsIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfU0NST0xMRUQgPSAic2Nyb2xsZWQiO1xudmFyIEVWRU5UX09WRVJGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xPVyA9ICJvdmVyZmxvdyI7XG52YXIgRVZFTlRfREVTVFJPWSA9ICJkZXN0cm95IjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG52YXIgRVZFTlRfQVJST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XG52YXIgRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICJwYWdpbmF0aW9uOm1vdW50ZWQiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQgPSAicGFnaW5hdGlvbjp1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCI7XG52YXIgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gIm5hdmlnYXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50ZWQiO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BMQVkgPSAiYXV0b3BsYXk6cGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXkiO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgPSAiYXV0b3BsYXk6cGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmciO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfTEFaWUxPQURfTE9BREVEID0gImxhenlsb2FkOmxvYWRlZCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEVWRU5UX1NMSURFX0tFWURPV04gPSAic2siO1xudmFyIEVWRU5UX1NISUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEVEID0gInNoIjtcbnZhciBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9ICJlaSI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBFdmVudEludGVyZmFjZShTcGxpZGUyKSB7XG4gIHZhciBidXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMiA/IFNwbGlkZTIuZXZlbnQuYnVzIDogZG9jdW1lbnQuY3JlYXRlRG9jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50RnJhZ21lbnQoKTtcbiAgdmFyIGJpbmRlciA9IEV2ZW50QmluZGVyKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gIGZ1bmN0aW9uIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICBiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyLmJpbmQoYnVzLCB0b0FycmF5KGV2ZW50cykuam9pbigiICIpLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKGUpIHtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGNhbGxiYWNrLCBpc0FycmF5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLmRldGFpbCkgPyBlLmRldGFpbCA6IFtdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgYmluZGVyLmRpc3BhdGNoKGJ1cywgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50LCBzbGljZShhcmd1bWVudHMsIDEpKTtcbiAgfVxuXG4gIGlmIChTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMikge1xuICAgIFNwbGlkZTIuZXZlbnQub24oRVZFTlRfREVTVFJPWSwgYmluZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5kZXN0cm95KTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oYmluZGVyLCB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGJ1czogYnVzLFxuICAgIG9uOiBvbixcbiAgICBvZmY6IGFwcGx5KGJpbmRlci51bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiaW5kLCBidXMpLFxuICAgIGVtaXQ6IGVtaXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBSZXF1ZXN0SW50ZXJ2YWwoaW50ZXJ2YWwsIG9uSW50ZXJ2YWwsIG9uVXBkYXRlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbGltaXQpIHtcbiAgdmFyIG5vdyA9IERhdGUubm93O1xuICB2YXIgc3RhcnRUaW1lOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIHJhdGUgPSAwO1xuICB2YXIgaWQ7XG4gIHZhciBwYXVzZWQgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbiAgdmFyIGNvdW50ID0gMDtcblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICghcGF1c2VkKSB7XG4gICAgICByYXRlID0gaW50ZXJ2YWwgPyBtaW4oKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub3coKSAtIHN0YXJ0VGltZSkgLyBpbnRlcnZhbCwgMSkgOiAxO1xuICAgICAgb25VJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BkYXRlICYmIG9uVXBkYXRlKHJhdGUpO1xuXG4gICAgICBpZiAocmF0ZSA+PSAxKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBvbkludGVydmFsKCk7XG4gICAgICAgIHN0YXJ0VGltZSA9IG5vdygpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgICBpZiAobGltaXQgJiYgKytjb3VudCA+PSBsaW1pdCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWQgPSByYWYodXBkYXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gc3RhcnQocmVzdW1lKSB7XG4gICAgcmVzdW1lIHx8IGNhbmNlbCgpO1xuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydFRpbWUgPSBub3coKSAtIChyZXN1bWUgPyByYXRlICogaW50ZXJ2YWwgOiAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgcGF1c2VkID0gZmFsc2U7XG4gICAgaWQgPSByYWYodXBkYXRlKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZSgpIHtcbiAgICBwYXVzZWQgPSB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJld2luZCgpIHtcbiAgICBzdGFydFRpbWUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbm93KCk7XG4gICAgcmF0ZSA9IDA7XG5cbiAgICBpZiAob25VcGRhdGUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBvblVwZGF0ZShyYXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2VsKCkge1xuICAgIGlkICYmIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmF0ZSA9IDA7XG4gICAgaWQgPSAwO1xuICAgIHBhdXNlZCA9IHRydWU7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gc2V0KHRpbWUpIHtcbiAgICBpbnRlcnZhbCA9IHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNQYXVzZWQoKSB7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV3aW5kOiByZXdpbmQsXG4gICAgcGF1c2U6IHBhdXNlLFxuICAgIGNhbmNlbDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbmNlbCxcbiAgICBzZXQ6IHNldCxcbiAgICBpc1BhdXNlZDogaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG59XG5cbmZ1bmN0aW9uIFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIHN0YXRlID0gaW5pdGlhbFN0YXRlO1xuXG4gIGZ1bmN0aW9uIHNldCh2YWx1ZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzdGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXMoc3RhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncykge1xuICAgIHJldHVybiBpbmNsdWRlcyh0b0FycmF5KHN0YXRlcyksIHN0YXRlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldDogc2V0LFxuICAgIGlzOiBpc1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcbn1cblxuZnVuY3Rpb24gVGhyb3R0bGUoZnVuYywgZHVyYXRpb24pIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiB8fCAwLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuYywgbnVsbCwgMSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJ2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLmlzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIE1lZGlhKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuICB2YXIgYnJlYWtwb2ludHMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5icmVha3BvaW50cyB8fCB7fTtcbiAgdmFyIHJlZHVjZWRNb3Rpb24gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5yZWR1Y2VkTW90aW9uIHx8IHt9O1xuICB2YXIgYmluZGVyID0gRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250QmluZGVyKCk7XG4gIHZhciBxdWVyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NldHVwKCkge1xuICAgIHZhciBpc01pbiA9IG9wdGlvbnMubWVkaWFRdWVyeSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJtaW4iO1xuICAgIG93bktleXMoYnJlYWtwb2ludHMpLnNvcnQoZnVuY3Rpb24gKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBtKSB7XG4gICAgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZWdpc3RlcihiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYWtwb2ludHNba2V5XSwgIigiICsgKGlzTWluID8gIm1pbiIgOiAibWF4IikgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIi13aWR0aDoiICsga2V5ICsgInB4KSIpO1xuICAgIH0pO1xuICAgIHJlZ2lzdGVyKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWR1Y2VkTW90aW9uLCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdXBkYXRlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x5KSB7XG4gICAgaWYgKGNvbXBsZXRlbHkpIHtcbiAgICAgIGJpbmRlci5kZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKG9wdGlvbnMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcXVlcnkpIHtcbiAgICB2YXIgcXVlcnlMaXN0ID0gbWF0Y2hNZWRpYShxdWVyeSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGJpbmRlci5iaW5kKHF1ZXJ5TGlzdCwgImNoYW5nZSIsIHVwZGF0ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHF1ZXJpZXMucHVzaChbb3B0aW9uczIsIHF1ZXJ5TGlzdF0pO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB2YXIgZGVzdHJveWVkID0gc3RhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzKERFU1RST1lFRCk7XG4gICAgdmFyIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbjtcbiAgICB2YXIgbWVyZ2VkID0gcXVlcmllcy5yZWR1Y2UoZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhtZXJnZWQyLCBlbnRyeSkge1xuICAgICAgcmV0dXJuIG1lcmdlKG1lcmdlZDIsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRyeVsxXS5tYXRjaGVzID8gZW50cnlbMF0gOiB7fSk7XG4gICAgfSwge30pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBvbWl0KG9wdGlvbnMpO1xuICAgIHNldChtZXJnZWQpO1xuXG4gICAgaWYgKG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLmRlc3Ryb3kpIHtcbiAgICAgIFNwbGlkZTIuZGVzdHJveShvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95ID09PSAiY29tcGxldGVseSIpO1xuICAgIH0gZWxzZSBpZiAoZGVzdHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3llZCkge1xuICAgICAgZGVzdHJveSh0cnVlKTtcbiAgICAgIFNwbGlkZTIubW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdGlvbiAhPT0gb3B0aW9ucy5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uICYmIFNwbGlkZTIucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiByZWR1Y2UoZW5hYmxlKSB7XG4gICAgaWYgKG1hdGNoTWVkaWEoTUVESUFfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pLm1hdGNoZXMpIHtcbiAgICAgIGVuYWJsZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBtZXJnZShvcHRpb25zLCByZWR1Y2VkTW90aW9uKSA6IG9taXQob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293bktleXMocmVkdWNlZE1vdGlvbikpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBzZXQob3B0cywgYmFzZSwgbm90aWZ5KSB7XG4gICAgbWVyZ2Uob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdHMpO1xuICAgIGJhc2UgJiYgbWVyZ2UoT2JqZWN0LmdldFByb3RvdHlwZU9mKG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKSwgb3B0cyk7XG5cbiAgICBpZiAobm90aWZ5IHx8ICFzdGF0ZS5pcyhDUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCkpIHtcbiAgICAgIFNwbGlkZTIuZW1pdChFVkVOVF9VUERBVEVELCBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogc2V0dXAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgcmVkdWNlOiByZWR1Y2UsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHNldDogc2V0XG4gIH07XG59XG5cbnZhciBBUlJPVyA9ICJBcnJvdyI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSUk9XX0xFRlQgPSBBUlJPVyArICJMZWZ0IjtcbnZhciBBUlJPV19SSUdIVCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPVyArICJSaWdodCI7XG52YXIgQVJST1dfVVAgPSBBUlJPVyArICJVcCI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIEFSUk9XX0RPV04gPSBBUlJPVyArICJEb3duIjtcbnZhciBMVFIgPSAibHRyIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgUlRMID0gInJ0bCI7XG52YXIgVFRCID0gInR0YiI7XG52YXIgT1JJRU5UQVRJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOX01BUCA9IHtcbiAgd2lkdGg6IFsiaGVpZ2h0Il0sXG4gIGxlZnQ6IFsidG9wIiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodCJdLFxuICByaWdodDogWyJib3R0b20iLCAibGVmdCJdLFxuICB4OiBbInkiXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gIFg6IFsiWSJdLFxuICBZOiBbIlgiXSxcbiAgQXJyb3dMZWZ0OiBbQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXX1VQLCBBUlJPV19SSUdIVF0sXG4gIEFycm93UmlnaHQ6IFtBUlJPV19ET1dOLCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1dfTEVGVF1cbn07XG5cbmZ1bmN0aW9uIERpcmVjdGlvbihTcGxpZGUyLCBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgZnVuY3Rpb24gcmVzb2x2ZShwcm9wLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXhpc09ubHksIGRpcmVjdGlvbikge1xuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGluZGV4ID0gZGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gUlRMICYmICFheGlzT25seSA/IDEgOiBkaXJlY3Rpb24gPT09IFRUQiA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwIDogLTE7XG4gICAgcmV0dXJuIE9SSUVOVEFUSU9OX01BUFtwcm9wXSAmJiBPUklFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UQVRJT05fTUFQW3Byb3BdW2luZGV4XSB8fCBwcm9wLnJlcGxhY2UoL3dpZHRofCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0fHJpZ2h0L2ksIGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0KSB7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHJlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSgpXVtpbmRleF0gfHwgbWF0Y2g7XG4gICAgICByZXR1cm4gb2Zmc2V0ID4gMCA/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXBsYWNlbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcGxhY2VtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudC5zbGljZSgxKSA6IHJlcGxhY2VtZW50O1xuICAgIH0pO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG9yaWVudCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAqIChvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5kaXJlY3Rpb24gPT09IFJUTCA/IDEgOiAtMSk7XG4gIH1cblxuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcbiAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgIG9yaWVudDogb3JpZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xufVxuXG52YXIgUk9MRSA9ICJyb2xlIjtcbnZhciBUQUJfSU5ERVggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInRhYmluZGV4IjtcbnZhciBESVNBQkxFRCA9ICJkaXNhYmxlZCI7XG52YXIgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYID0gImFyaWEtIjtcbnZhciBBUklBX0NPTlRST0xTID0gQVJJQV9QUkVGSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYICsgImNvbnRyb2xzIjtcbnZhciBBUklBX0NVUlJFTlQgPSBBUklBX1BSRUZJWCArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiY3VycmVudCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IEFSSUFfUFJFRklYICsgInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlY3RlZCI7XG52YXIgQVJJQV9MQUJFTCA9IEFSSUFfUFJFRklYICsgImxhYmVsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgQVJJQV9MQUJFTExFREJZID0gQVJJQV9QUkVGSVggKyAibGFiZWxsZWRiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kiO1xudmFyIEFSSUFfSElEREVOID0gQVJJQV9QUkVGSVggKyAiaGlkZGVuIjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQVJJQV9PUklFTlRBVElPTiA9IEFSSUFfUFJFRklYICsgIm9yaWVudGF0aW9uIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgQVJJQV9ST0xFREVTQ1JJUFRJT04gPSBBUklBX1BSRUZJWCArICJyb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc2NyaXB0aW9uIjtcbnZhciBBUklBX0xJVkUgPSBBUklBX1BSRUZJWCArICJsaXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSI7XG52YXIgQVJJQV9CVVNZID0gQVJJQV9QUkVGSVggKyAiYnVzeSI7XG52YXIgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQVRPTUlDID0gQVJJQV9QUkVGSVggKyAiYXRvbWljIjtcbnZhciBBTExfQVRUUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQlVURVMgPSBbUk9MRSwgVEFCX0lOREVYLCBESVNBQkxFRCwgQVJJQV9DT05UUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTFMsIEFSSUFfQ1VSUkVOVCwgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZLCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQV9ISURERU4sIEFSSUFfT1JJRU5UQVRJT04sIEFSSUFfUk9MRURFU0NSSVBUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTl07XG52YXIgQ0xBU1NfUFJFRklYID0gUFJPSkVDVF9DT0RFICsgIl9fIjtcbnZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICJpcy0iO1xudmFyIENMQVNTX1JPT1QgPSBQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPSkVDVF9DT0RFO1xudmFyIENMQVNTX1RSQUNLID0gQ0xBU1NfUFJFRklYICsgInQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFjayI7XG52YXIgQ0xBU1NfTElTVCA9IENMQVNTX1BSRUZJWCArICJsaXN0IjtcbnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgQ0xBU1NfU0xJREUgPSBDTEFTU19QUkVGSVggKyAic2xpZGUiO1xudmFyIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19DTE9ORSA9IENMQVNTX1NMSURFICsgIi0tY2xvbmUiO1xudmFyIENMQVNTX0NPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UQUlORVIgPSBDTEFTU19TTElERSArICJfX2NvbnRhaW5lciI7XG52YXIgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0FSUk9XUyA9IENMQVNTX1BSRUZJWCArICJhcnJvd3MiO1xudmFyIENMQVNTX0FSUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVyA9IENMQVNTX1BSRUZJWCArICJhcnJvdyI7XG52YXIgQ0xBU1NfQVJST1dfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YgPSBDTEFTU19BUlJPVyArICItLXByZXYiO1xudmFyIENMQVNTX0FSUk9XX05FWFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQ0xBU1NfQVJST1cgKyAiLS1uZXh0IjtcbnZhciBDTEFTU19QQUdJTkFUSU9OICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IENMQVNTX1BSRUZJWCArICJwYWdpbmF0aW9uIjtcbnZhciBDTEFTU19QQUdJTkFUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTl9QQUdFID0gQ0xBU1NfUEFHSU5BVElPTiArICJfX3BhZ2UiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTUyA9IENMQVNTX1BSRUZJWCArICJwcm9ncmVzcyI7XG52YXIgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUiA9IENMQVNTX1BST0dSRVNTICsgIl9fYmFyIjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVE9HR0xFID0gQ0xBU1NfUFJFRklYICsgInRvZ2dsZSI7XG52YXIgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1RPR0dMRV9QTEFZID0gQ0xBU1NfVE9HR0xFICsgIl9fcGxheSI7XG52YXIgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1RPR0dMRV9QQVVTRSA9IENMQVNTX1RPR0dMRSArICJfX3BhdXNlIjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfU1BJTk5FUiA9IENMQVNTX1BSRUZJWCArICJzcGlubmVyIjtcbnZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfU1IgPSBDTEFTU19QUkVGSVggKyAic3IiO1xudmFyIENMQVNTX0lOSVRJQUxJWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiaW5pdGlhbGl6ZWQiO1xudmFyIENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19BQ1RJVkUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImFjdGl2ZSI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1BSRVYgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgInByZXYiO1xudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19ORVhUID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJuZXh0IjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVklTSUJMRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAidmlzaWJsZSI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIENMQVNTX0xPQURJTkcgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImxvYWRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nIjtcbnZhciBDTEFTU19GT0NVU19JTiA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImZvY3VzLWluIjtcbnZhciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRklYICsgIm92ZXJmbG93IjtcbnZhciBTVEFUVVNfQ0xBU1NFUyA9IFtDTEFTU19BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NUSVZFLCBDTEFTU19WSVNJQkxFLCBDTEFTU19QUkVWLCBDTEFTU19ORVhULCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfTE9BRElORywgQ0xBU1NfRk9DVVNfSU4sIENMQVNTX09WRVJGTE9XXTtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQ0xBU1NFUyA9IHtcbiAgc2xpZGU6IENMQVNTX1NMSURFLFxuICBjbG9uZTogQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX0NMT05FLFxuICBhcnJvd3M6IENMQVNTX0FSUk9XUyxcbiAgYXJyb3c6IENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPVyxcbiAgcHJldjogQ0xBU1NfQVJST1dfUFJFVixcbiAgbmV4dDogQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSUk9XX05FWFQsXG4gIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4gIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlOiBDTEFTU19QQUdJTkFUSU9OX1BBR0UsXG4gIHNwaW5uZXI6IENMQVNTX1NQSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkVSXG59O1xuXG5mdW5jdGlvbiBjbG9zZXN0KGZyb20sIHNlbGVjdG9yKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoaXNGdW5jdGlvbihmcm9tLmNsb3Nlc3QpKSB7XG4gICAgcmV0dXJuIGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICB9XG5cbiAgdmFyIGVsbSA9IGZyb207XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHdoaWxlIChlbG0gJiYgZWxtLm5vZGVUeXBlID09PSAxKSB7XG4gICAgaWYgKG1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVzKGVsbSwgc2VsZWN0b3IpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZWxtID0gZWxtLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbTtcbn1cblxudmFyIEZSSUNUSU9OID0gNTtcbnZhciBMT0dfSU5URVJWQUwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjAwO1xudmFyIFBPSU5URVJfRE9XTl9FVkVOVFMgPSAidG91Y2hzdGFydCBtb3VzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb3duIjtcbnZhciBQT0lOVEVSX01PVkVfRVZFTlRTID0gInRvdWNobW92ZSBtb3VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vtb3ZlIjtcbnZhciBQT0lOVEVSX1VQX0VWRU5UUyA9ICJ0b3VjaGVuZCB0b3VjaGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZWwgbW91c2V1cCBjbGljayI7XG5cbmZ1bmN0aW9uIEVsZW1lbnRzKFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlLm9uLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZS5iaW5kOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICB2YXIgcm9vdCA9IFNwbGlkZTIucm9vdDtcbiAgdmFyIGkxOG4gPSBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5pMThuO1xuICB2YXIgZWxlbWVudHMgPSB7fTtcbiAgdmFyIHNsaWRlcyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXTtcbiAgdmFyIHJvb3RDbGFzc2VzID0gW107XG4gIHZhciB0cmFja0NsYXNzZXMgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgW107XG4gIHZhciB0cmFjaztcbiAgdmFyIGxpc3Q7XG4gIHZhciBpc1VzaW5nSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleTtcblxuICBmdW5jdGlvbiBzZXR1cCgpIHtcbiAgICBjb2xsZWN0KCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluaXQoKTtcbiAgICB1cGRhdGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBvbihFVkVOVF9SRUZSRVNILCBkZXN0cm95KTtcbiAgICBvbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVGUkVTSCwgc2V0dXApO1xuICAgIG9uKEVWRU5UX1VQREFURUQsIHVwZGF0ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIGJpbmQoZG9jdW1lbnQsIFBPSU5URVJfRE9XTl9FVkVOVFMgKyAiIGtleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb3duIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlzVXNpbmdLZXkgPSBlLnR5cGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09PSAia2V5ZG93biI7XG4gICAgfSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KTtcbiAgICBiaW5kKHJvb3QsICJmb2N1c2luIiwgZnVuY3Rpb24gKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAhIWlzVXNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnS2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRlbHkpIHtcbiAgICB2YXIgYXR0cnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZSIpO1xuICAgIGVtcHR5KHNsaWRlcyk7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJvb3RDbGFzc2VzKTtcbiAgICByZW1vdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlcyk7XG4gICAgcmVtb3ZlQXR0cmlidXRlKFt0cmFjaywgbGlzdF0sIGF0dHJzKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmVtb3ZlQXR0cmlidXRlKHJvb3QsIGNvbXBsZXRlbHkgPyBhdHRycyA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbInN0eWxlIiwgQVJJQV9ST0xFREVTQ1JJUFRJT05dKTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiB1cGRhdGUoKSB7XG4gICAgcmVtb3ZlQ2xhc3Mocm9vdCwgcm9vdENsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKTtcbiAgICByZW1vdmVDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29vdENsYXNzZXMgPSBnZXRDbGFzc2VzKENMQVNTX1JPT1QpO1xuICAgIHRyYWNrQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzZXMgPSBnZXRDbGFzc2VzKENMQVNTX1RSQUNLKTtcbiAgICBhZGRDbGFzcyhybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdCwgcm9vdENsYXNzZXMpO1xuICAgIGFkZENsYXNzKHRyYWNrLCB0cmFja0NsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzKTtcbiAgICBzZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCwgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFiZWwpO1xuICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX0xBQkVMTEVEQlksICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLmxhYmVsbGVkYnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29sbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVNTX1RSQUNLKTtcbiAgICBsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCA9IGNoaWxkKHRyYWNrLCAiLiIgKyBDTEFTU19MSVNUKTtcbiAgICBhc3NlcnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrICYmIGxpc3QsICJBIHRyYWNrL2xpc3QgZWxlbWVudCBpcyBtaXNzaW5nLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4iICsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpO1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd24oe1xuICAgICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgICBwYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgIHByZXY6IENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWLFxuICAgICAgbmV4dDogQ0xBU1NfQVJST1dfTkVYVCxcbiAgICAgIGJhcjogQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUixcbiAgICAgIHRvZ2dsZTogQ0xBU1NfVE9HR0xFXG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGZ1bmN0aW9uIChjbGFzc05hbWUsIGtleSkge1xuICAgICAgZWxlbWVudHNba2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10gPSBmaW5kKCIuIiArIGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gICAgYXNzaWduKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50cywge1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHRyYWNrOiB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ssXG4gICAgICBsaXN0OiBsaXN0LFxuICAgICAgc2xpZGVzOiBzbGlkZXNcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBpZCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByb290LmlkIHx8IHVuaXF1ZUlkKFBST0pFQ1RfQ09ERSk7XG4gICAgdmFyIHJvbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gb3B0aW9ucy5yb2xlO1xuICAgIHJvb3QuaWQgPSBpZDtcbiAgICB0cmFjay5pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0cmFjay5pZCB8fCBpZCArICItdHJhY2siO1xuICAgIGxpc3QuaWQgPSBsaXN0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZCB8fCBpZCArICItbGlzdCI7XG5cbiAgICBpZiAoIWdldEF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUk9MRSkgJiYgcm9vdC50YWdOYW1lICE9PSAiU0VDVElPTiIgJiYgcm9sZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHNldEF0dHJpYnV0ZShyb290LCBST0xFLCByb2xlKTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4bi5jYXJvdXNlbCk7XG4gICAgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJwcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudGF0aW9uIik7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kKHNlbGVjdG9yKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBlbG0gPSBxdWVyeShyb290LCBzZWxlY3Rvcik7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbG0gJiYgY2xvc2VzdChlbG0sICIuIiArIENMQVNTX1JPT1QpID09PSByb290ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/IGVsbSA6IHZvaWQgMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldENsYXNzZXMoYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2UpIHtcbiAgICByZXR1cm4gW2Jhc2UgKyAiLS0iICsgb3B0aW9ucy50eXBlLCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzZSArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbiwgb3B0aW9ucy5kcmFnICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiYXNlICsgIi0tZHJhZ2dhYmxlIiwgb3B0aW9ucy5pc05hdmlnYXRpb24gJiYgYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgKyAiLS1uYXYiLCBiYXNlID09PSBDTEFTU19ST09UICYmIENMQVNTX0FDVElWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VdO1xuICB9XG5cbiAgcmV0dXJuIGFzc2lnbihlbGVtZW50cywge1xuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cDogc2V0dXAsXG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5XG4gIH0pO1xufVxuXG52YXIgU0xJREUgPSAic2xpZGUiO1xudmFyIExPT1AgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvb3AiO1xudmFyIEZBREUgPSAiZmFkZSI7XG5cbmZ1bmN0aW9uIFNsaWRlJDEoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIsIGluZGV4LCBzbGlkZUluZGV4LCBzbGlkZSkge1xuICB2YXIgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gIHZhciBvbiA9IGV2ZW50Lm9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGVtaXQgPSBldmVudC5lbWl0LFxuICAgICAgYmluZCA9IGV2ZW50LmJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xuICB2YXIgQ29tcG9uZW50cyA9IFNwbGlkZTIuQ29tcG9uZW50cyxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb290ID0gU3BsaWRlMi5yb290LFxuICAgICAgb3B0aW9ucyA9IFNwbGlkZTIub3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnM7XG4gIHZhciBpc05hdmlnYXRpb24gPSBvcHRpb25zLmlzTmF2aWdhdGlvbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB1cGRhdGVPbk1vdmUgPSBvcHRpb25zLnVwZGF0ZU9uTW92ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpMThuID0gb3B0aW9ucy5pMThuLFxuICAgICAgcGFnaW5hdGlvbiA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnBhZ2luYXRpb24sXG4gICAgICBzbGlkZUZvY3VzID0gb3B0aW9ucy5zbGlkZUZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzLkRpcmVjdGlvbi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eWxlIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbGFiZWwgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTEFCRUwpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGlzQ2xvbmUgPSBzbGlkZUluZGV4ID4gLTE7XG4gIHZhciBjb250YWluZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY2hpbGQoc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gIHZhciBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveWVkO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmICghaXNDbG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmUpIHtcbiAgICAgIHNsaWRlLmlkID0gcm9vdC5pZCArICItc2xpZGUiICsgcGFkKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCArIDEpO1xuICAgICAgc2V0QXR0cmlidXRlKHNsaWRlLCBST0xFLCBwYWdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiA/ICJ0YWJwYW5lbCIgOiAiZ3JvdXAiKTtcbiAgICAgIHNldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuLnNsaWRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTEFCRUwsIGxhYmVsIHx8IGZvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXQoaTE4bi5zbGlkZUxhYmVsLCBbaW5kZXggKyAxLCBTcGxpZGUyLmxlbmd0aF0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuXG4gICAgbGlzdGVuKCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuKCkge1xuICAgIGJpbmQoc2xpZGUsICJjbGljayIsIGFwcGx5KGVtaXQsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9DTElDSywgc2VsZikpO1xuICAgIGJpbmQoc2xpZGUsICJrZXlkb3duIiwgYXBwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KGVtaXQsIEVWRU5UX1NMSURFX0tFWURPV04sIHNlbGYpKTtcbiAgICBvbihbRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX01PVkVELCBFVkVOVF9TSElGVEVELCBFVkVOVF9TQ1JPTExFRF0sIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIG9uKEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgaW5pdE5hdmlnYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKTtcblxuICAgIGlmICh1cGRhdGVPbk1vdmUpIHtcbiAgICAgIG9uKEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19NT1ZFLCBvbk1vdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KCkge1xuICAgIGRlc3Ryb3llZCA9IHRydWU7XG4gICAgZXZlbnQuZGVzdHJveSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZW1vdmVDbGFzcyhzbGlkZSwgU1RBVFVTX0NMQVNTRVMpO1xuICAgIHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVBdHRyaWJ1dGUoc2xpZGUsIEFMTF9BVFRSSUJVVEVTKTtcbiAgICBzZXRBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKHNsaWRlLCAic3R5bGUiLCBzdHlsZXMpO1xuICAgIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUsIEFSSUFfTEFCRUwsIGxhYmVsIHx8ICIiKTtcbiAgfVxuXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpbml0TmF2aWdhdGlvbigpIHtcbiAgICB2YXIgY29udHJvbHMgPSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5zcGxpZGVzLm1hcChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMiA9IHRhcmdldC5zcGxpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4KTtcbiAgICAgIHJldHVybiBTbGlkZTIgPyBTbGlkZTIuc2xpZGUuaWQgOiAiIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkuam9pbigiICIpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FCRUwsIGZvcm1hdChpMThuLnNsaWRlWCwgKGlzQ2xvbmUgPyBzbGlkZUluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGluZGV4KSArIDEpKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfQ09OJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RST0xTLCBjb250cm9scyk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBST0xFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVGb2N1cyA/ICJidXR0b24iIDogIiIpO1xuICAgIHNsaWRlRm9jdXMgJiYgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW92ZUF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ST0xFREVTQ1JJUFRJT04pO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uTW92ZSgpIHtcbiAgICBpZiAoIWRlc3Ryb3llZCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoKSB7XG4gICAgaWYgKCFkZXN0cm95ZWQpIHtcbiAgICAgIHZhciBjdXJyID0gU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuaW5kZXg7XG4gICAgICB1cGRhdGVBY3Rpdml0eSgpO1xuICAgICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVZpc2liaWxpdHkoKTtcbiAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFViwgaW5kZXggPT09IGN1cnIgLSAxKTtcbiAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgQ0xBU1NfTkVYVCwgaW5kZXggPT09IGN1cnIgKyAxKTtcbiAgICB9XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdHkoKSB7XG4gICAgdmFyIGFjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUgPSBpc0FjdGl2ZSgpO1xuXG4gICAgaWYgKGFjdGl2ZSAhPT0gaGFzQ2xhc3Moc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLCBDTEFTU19BQ1RJVkUpKSB7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FDVElWRSwgYWN0aXZlKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfQ1VSUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAiIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdChhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGYpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KCkge1xuICAgIHZhciB2aXNpYmxlID0gaXNWaXNpYmxlKCk7XG4gICAgdmFyIGhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWN0aXZlKCkgfHwgaXNDbG9uZSk7XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFTcGxpZGUyLnN0YXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0hJRERFTiwgaGlkZGVuIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIik7XG4gICAgfVxuXG4gICAgc2V0QXR0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5mb2N1c2FibGVOb2RlcyB8fCAiIiksIFRBQl9JTkRFWCwgaGlkZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA/IC0xIDogIiIpO1xuXG4gICAgaWYgKHNsaWRlRm9jdXMpIHtcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUoc2xpZGUsIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAwKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgaWYgKHZpc2libGUgIT09IGhhc0NsYXNzKHNsaWRlLCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfVklTSUJMRSkpIHtcbiAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19WSVNJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JMRSwgdmlzaWJsZSk7XG4gICAgICBlbWl0KHZpc2libGUgPyBFVkVOVF9WSVNJQkwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSA6IEVWRU5UX0hJRERFTiwgc2VsZik7XG4gICAgfVxuXG4gICAgaWYgKCF2aXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBzbGlkZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBTbGlkZTIgPSBDb21wb25lbnRzLlNsaWRlcy5nZXRBdChTcGxpZGUyLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCk7XG4gICAgICBTbGlkZTIgJiYgZm9jdXMoU2xpZGUyLnNsaWRlKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGUkMShwcm9wLCB2YWx1ZSwgdXNlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRhaW5lcikge1xuICAgIHN0eWxlKHVzZUNvbnRhaW5lciAmJiBjb250YWluZXIgfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IHNsaWRlLCBwcm9wLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUoKSB7XG4gICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZGV4O1xuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY3VyciA9PT0gaW5kZXggfHwgb3B0aW9ucy5jbG9uZVN0YXR1cyAmJiBjdXJyID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gc2xpZGVJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmlzaWJsZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKFNwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIHJldHVybiBpc0FjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoKTtcbiAgICB9XG5cbiAgICB2YXIgdHJhY2tSZWN0ID0gcmVjdChDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5FbGVtZW50cy50cmFjayk7XG4gICAgdmFyIHNsaWRlUmVjdCA9IHJlY3QocycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKTtcbiAgICB2YXIgbGVmdCA9IHJlc29sdmUoImxlZnQiLCB0cnVlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHJpZ2h0ID0gcmVzb2x2ZSgicmlnaHQiLCB0cnVlKTtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zsb29yKHRyYWNrUmVjdFtsZWZ0XSkgPD0gY2VpbChzbGlkZVJlY3RbbGVmdF0pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBmbG9vcihzbGlkZVJlY3RbcmlnaHRdKSA8PSBjZWlsKHRyYWNrUmVjdFtyaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHRdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzV2l0aGluKGZyb20sIGRpc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgIHZhciBkaWZmID0gYWJzKGZyb20gLSBpbmRleCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCFpc0Nsb25lICYmIChvcHRpb25zLnJld2luZCB8fCBTcGxpZGUyLmlzKExPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09QKSkpIHtcbiAgICAgIGRpZmYgPSBtaW4oZGlmZiwgU3BsaWRlMi5sZW5ndGggLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlmZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZmYgPD0gZGlzdGFuY2U7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgdmFyIHNlbGYgPSB7XG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZUluZGV4OiBzbGlkZUluZGV4LFxuICAgIHNsaWRlOiBzbGlkZSxcbiAgICBjb250YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyOiBjb250YWluZXIsXG4gICAgaXNDbG9uZTogaXNDbG9uZSxcbiAgICBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgdXBkYXRlOiB1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxuICAgIHN0eWxlOiBzdHlsZSQxLFxuICAgIGlzV2l0aGluOiBpc1dpdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cbiAgfTtcbiAgcmV0dXJuIHNlbGY7XG59XG5cbmZ1bmN0aW9uIFNsaWRlcyhTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UyID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UyLm9uLFxuICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTIuZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMi5iaW5kO1xuXG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWVudHMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc2xpZGVzID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzLnNsaWRlcyxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzLmxpc3Q7XG4gIHZhciBTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzMiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAgb24oRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRlJFU0gsIGluaXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKHNsaWRlLCBpbmRleCkge1xuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2lzdGVyKHNsaWRlLCBpbmRleCwgLTEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGRlc3Ryb3koKSB7XG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBTbGlkZTIuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIGVtcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneShTbGlkZXMyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIFNsaWRlMi51cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4LCBzbGlkZUluZGV4KSB7XG4gICAgdmFyIG9iamVjdCA9IFNsaWRlJDEoU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIsIGluZGV4LCBzbGlkZUluZGV4LCBzbGlkZSk7XG4gICAgb2JqZWN0Lm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpO1xuICAgIFNsaWRlczIucHVzaChvYmplY3QpO1xuICAgIFNsaWRlczIuc29ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKFNsaWRlMSwgU2xpZGUyKSB7XG4gICAgICByZXR1cm4gU2xpZGUxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pbmRleCAtIFNsaWRlMi5pbmRleDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBnZXQoZXhjbHVkZUNsb25lcykge1xuICAgIHJldHVybiBleGNsdWRlQ2xvbmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IGZpbHRlcihmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICByZXR1cm4gIVNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaXNDbG9uZTtcbiAgICB9KSA6IFNsaWRlczI7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ2V0SW4ocGFnZSkge1xuICAgIHZhciBDb250cm9sbGVyID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLkNvbnRyb2xsZXI7XG4gICAgdmFyIGluZGV4ID0gQ29udHJvbGxlci50b0luZGV4KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdlKTtcbiAgICB2YXIgbWF4ID0gQ29udHJvbGxlci5oYXNGb2N1cygpID8gMSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLnBlclBhZ2U7XG4gICAgcmV0dXJuIGZpbHRlcihmdW5jdGlvbiAoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMikge1xuICAgICAgcmV0dXJuIGJldHdlZW4oU2xpZGUyLmluZGV4LCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGluZGV4ICsgbWF4IC0gMSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0QXQoaW5kZXgpIHtcbiAgICByZXR1cm4gZmlsdGVyKGluZGV4KVswXTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiBhZGQoaXRlbXMsIGluZGV4KSB7XG4gICAgZm9yRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2goaXRlbXMsIGZ1bmN0aW9uIChzbGlkZSkge1xuICAgICAgaWYgKGlzU3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZSkpIHtcbiAgICAgICAgc2xpZGUgPSBwYXJzZUh0bWwoc2xpZGUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cblxuICAgICAgaWYgKGlzSFRNTEVsZW1lbnQoc2xpZGUpKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgcmVmID0gc2xpZGVzW2luZGV4XTtcbiAgICAgICAgcmVmID8gYmVmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShzbGlkZSwgcmVmKSA6IGFwcGVuZChsaXN0LCBzbGlkZSk7XG4gICAgICAgIGFkZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyhzbGlkZSwgb3B0aW9ucy5jbGFzc2VzLnNsaWRlKTtcbiAgICAgICAgb2JzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VydmVJbWFnZXMoc2xpZGUsIGFwcGx5KGVtaXQsIEVWRU5UX1JFU0laRSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgICB9KTtcbiAgICBlbWl0KEVWRU5UX1JFRlJFU0gpO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHJlbW92ZSQxKG1hdGNoZXIpIHtcbiAgICByZW1vdmUoZmlsdGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhtYXRjaGVyKS5tYXAoZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgcmV0dXJuIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuc2xpZGU7XG4gICAgfSkpO1xuICAgIGVtaXQoRVZFTlRfUkVGUkVTSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9yRWFjaCQxKGl0ZXJhdGVlLCBleGNsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZUNsb25lcykge1xuICAgIGdldChleGNsdWRlQ2xvbmVzKS5mb3JFYWNoKGl0ZXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZSk7XG4gIH1cblxuICBmdW5jdGlvbiBmaWx0ZXIobWF0Y2hlcikge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gU2xpZGVzMi5maWx0ZXIoaXNGdW5jdGlvbihtYXRjaGVyKSA/IG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVyIDogZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYXRjaGVyKSA/IG1hdGNoZXMoU2xpZGUyLnNsaWRlLCBtYXRjaGVyKSA6IGluY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWRlcyh0b0FycmF5KG1hdGNoZXIpLCBTbGlkZTIuaW5kZXgpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIHN0eWxlKHByb3AsIHZhbHVlLCB1c2VDb250YWluZXIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIFNsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUocHJvcCwgdmFsdWUsIHVzZUNvbnRhaW5lcik7XG4gICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb2JzZXJ2ZUltYWdlcyhlbG0sIGNhbGxiYWNrKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBpbWFnZXMgPSBxdWVyeUFsbChlbG0sICJpbWciKTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaW1hZ2VzLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgICAgICBiaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZChpbWcsICJsb2FkIGVycm9yIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoISAtLWxlbmd0aCkge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRMZW5ndGgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4Y2x1ZGVDbG9uZXMpIHtcbiAgICByZXR1cm4gZXhjbHVkZUNsb25lcyA/IHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMubGVuZ3RoIDogU2xpZGVzMi5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNFbm91Z2goKSB7XG4gICAgcmV0dXJuIFNsaWRlczIubGVuZ3RoID4gb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucGVyUGFnZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpc3RlcjogcmVnaXN0ZXIsXG4gICAgZ2V0OiBnZXQsXG4gICAgZ2V0SW46IGdldEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBnZXRBdDogZ2V0QXQsXG4gICAgYWRkOiBhZGQsXG4gICAgcmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogcmVtb3ZlJDEsXG4gICAgZm9yRWFjaDogZm9yRWFjaCQxLFxuICAgIGZpbHRlcjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbHRlcixcbiAgICBzdHlsZTogc3R5bGUsXG4gICAgZ2V0TGVuZ3RoOiBnZXRMZW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoLFxuICAgIGlzRW5vdWdoOiBpc0Vub3VnaFxuICB9O1xufVxuXG5mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGF5b3V0KFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlMyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uID0gX0V2ZW50SW50ZXJmYWNlMy5vbixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlMy5iaW5kLFxuICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTMuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gIHZhciBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyJEVsZW1lbnRzMiA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnJvb3QsXG4gICAgICB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2sgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnRyYWNrLFxuICAgICAgbGlzdCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfQ29tcG9uZW50czIkRWxlbWVudHMyLmxpc3Q7XG4gIHZhciBnZXRBdCA9IFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuZ2V0QXQsXG4gICAgICBzdHlsZVNsaWRlcyA9IFNsaWRlcy5zdHlsZTtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB2ZXJ0aWNhbDtcbiAgdmFyIHJvb3RSZWN0O1xuICB2YXIgb3ZlcmZsb3c7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBiaW5kKHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kb3csICJyZXNpemUgbG9hZCIsIFRocm90dGxlKGFwcGx5KGVtaXQsIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19SRVNJWkUpKSk7XG4gICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSwgaW5pdCk7XG4gICAgb24oRVZFTlRfUkVTSVpFLCByZXNpemUpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdmVydGljYWwgPSBvcHRpb25zLmRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gPT09IFRUQjtcbiAgICBzdHlsZShyb290LCAibWF4V2lkdGgiLCB1bml0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLndpZHRoKSk7XG4gICAgc3R5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nTGVmdCIpLCBjc3NQYWRkaW5nKGZhbHNlKSk7XG4gICAgc3R5bGUodHJhY2ssIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlKCJwYWRkaW5nUmlnaHQiKSwgY3NzUGFkZGluZyh0cnVlKSk7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc2l6ZSh0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2l6ZShmb3JjZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgbmV3UmVjdCA9IHJlY3Qocm9vdCk7XG5cbiAgICBpZiAoZm9yYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHx8IHJvb3RSZWN0LndpZHRoICE9PSBuZXdSZWN0LndpZHRoIHx8IHJvb3RSZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5oZWlnaHQgIT09IG5ld1JlY3QuaGVpZ2h0KSB7XG4gICAgICBzdHlsZSh0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsICJoZWlnaHQiLCBjc3NUcmFja0hlaWdodCgpKTtcbiAgICAgIHN0eWxlU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhyZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1bml0KG9wdGlvbnMuZ2FwKSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3R5bGVTbGlkZXMoIndpZHRoIiwgY3NzU2xpZGVXaWR0aCgpKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZVNsaWRlcygiaGVpZ2h0IiwgY3NzU2xpZGVIZWlnaHQoKSwgdHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcm9vdFJlY3QgPSBuZXdSZWN0O1xuICAgICAgZW1pdChFVkVOVF9SRVNJWkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCk7XG5cbiAgICAgIGlmIChvdmVyZmxvdyAhPT0gKG92ZXJmbG93ID0gaXNPdmVyZmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3coKSkpIHtcbiAgICAgICAgdG9nZ2xlQ2xhc3Mocm9vdCwgQ0xBU1NfT1ZFUkZMTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLCBvdmVyZmxvdyk7XG4gICAgICAgIGVtaXQoRVZFTlRfT1ZFUkZMT1csIG92ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvdyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3NzUGFkZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcocmlnaHQpIHtcbiAgICB2YXIgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZztcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIHByb3AgPSByZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQocGFkZGluZ1twcm9wXSB8fCAoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0KHBhZGRpbmcpID8gMCA6IHBhZGRpbmcpKSB8fCAiMHB4IjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBjc3NUcmFja0hlaWdodCgpIHtcbiAgICB2YXIgaGVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCA9ICIiO1xuXG4gICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICBoZWlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY3NzSGVpZ2h0KCk7XG4gICAgICBhc3NlcnQoaGVpZ2h0LCAiaGVpZ2h0IG9yIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHRSYXRpbyBpcyBtaXNzaW5nLiIpO1xuICAgICAgaGVpZ2h0ID0gImNhbGMoIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyBoZWlnaHQgKyAiIC0gIiArIGNzc1BhZGRpbmcoZmFsc2UpICsgIiAtICIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzUGFkZGluZyh0cnVlKSArICIpIjtcbiAgICB9XG5cbiAgICByZXR1cm4gaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc0hlaWdodCgpIHtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHVuaXQob3B0aW9ucy5oZWlnaHQgfHwgcmVjdChsaXN0KS53aWR0aCAqIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmhlaWdodFJhdGlvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZHRoKCkge1xuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaWR0aCA/IG51bGwgOiB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pdChvcHRpb25zLmZpeGVkV2lkdGgpIHx8ICh2ZXJ0aWNhbCA/ICIiIDogY3NzUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlU2l6ZSgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8fCAodmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpY2FsID8gb3B0aW9ucy5hdXRvSGVpZ2h0ID8gbnVsbCA6IGNzc1NsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA6IGNzc0hlaWdodCgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUoKSB7XG4gICAgdmFyIGdhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiKSI7XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0U2l6ZSgpIHtcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHJlY3QobGlzdClbcmVzb2x2ZSgid2lkdGgiKV07XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc2xpZGVTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgdmFyIFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGdldEF0KGluZGV4IHx8IDApO1xuICAgIHJldHVybiBTbGlkZSA/IHJlY3QoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnNsaWRlKVtyZXNvbHZlKCJ3aWR0aCIpXSArICh3aXRob3V0R2FwID8gMCA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRHYXAoKSkgOiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gdG90YWxTaXplKGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCwgd2l0aG91dEdhcCkge1xuICAgIHZhciBTbGlkZSA9IGdldEF0KGluZGV4KTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBpZiAoU2xpZGUpIHtcbiAgICAgIHZhciByaWdodCA9IHJlY3QoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnNsaWRlKVtyZXNvbHZlKCJyaWdodCIpXTtcbiAgICAgIHZhciBsZWZ0ID0gcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QobGlzdClbcmVzb2x2ZSgibGVmdCIpXTtcbiAgICAgIHJldHVybiBhYnMocmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0IC0gbGVmdCkgKyAod2l0aG91dEdhcCA/IDAgOiBnZXRHYXAoKSk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpZGVyU2l6ZSh3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aG91dEdhcCkge1xuICAgIHJldHVybiB0b3RhbFNpemUoU3BsaWRlMi5sZW5ndGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gMSkgLSB0b3RhbFNpemUoMCkgKyBzbGlkZVNpemUoMCwgd2l0aG91dEdhcCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gZ2V0R2FwKCkge1xuICAgIHZhciBTbGlkZSA9IGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdCgwKTtcbiAgICByZXR1cm4gU2xpZGUgJiYgcGFyc2VGbG9hdChzdHlsZShTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuc2xpZGUsIHJlc29sdmUoIm1hcmdpblJpZ2h0IikpKSB8fCAwO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcocmlnaHQpIHtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcnNlRmxvYXQoc3R5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpbmciICsgKHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCA/ICJSaWdodCIgOiAiTGVmdCIpKSkpIHx8IDA7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gaXNPdmVyZmxvdygpIHtcbiAgICByZXR1cm4gU3BsaWRlMi5pcyhGQURFKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwgc2xpZGVyU2l6ZSh0cnVlKSA+IGxpc3RTaXplKCk7XG4gIH1cblxuICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gICAgcmVzaXplOiByZXNpemUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGxpc3RTaXplOiBsaXN0U2l6ZSxcbiAgICBzbGlkZVNpemU6IHNsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgc2xpZGVyU2l6ZTogc2xpZGVyU2l6ZSxcbiAgICB0b3RhbFNpemU6IHRvdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbFNpemUsXG4gICAgZ2V0UGFkZGluZzogZ2V0UGFkZGluZyxcbiAgICBpc092ZXJmbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdzogaXNPdmVyZmxvd1xuICB9O1xufVxuXG52YXIgTVVMVElQTElFUiA9IDI7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBDbG9uZXMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZXZlbnQub247XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyxcbiAgICAgIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbiAgdmFyIHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gIHZhciBjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzID0gW107XG4gIHZhciBjbG9uZUNvdW50O1xuXG4gIGZ1bmN0aW9uIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBvbihFVkVOVF9SRUZSRVNILCByZW1vdW50KTtcbiAgICBvbihbRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX1VQREFURUQsIEVWRU5UX1JFU0laRV0sIG9ic2VydmUpO1xuXG4gICAgaWYgKGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZUNvdW50ID0gY29tcHV0ZUNsb25lQ291bnQoKSkge1xuICAgICAgZ2VuZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNsb25lQ291bnQpO1xuICAgICAgQ29tcG9uZW50czIuTGF5b3V0LnJlc2l6ZSh0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3VudCgpIHtcbiAgICBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSgpO1xuICAgIG1vdW50KCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveSgpIHtcbiAgICByZW1vdmUoY2xvbmVzKTtcbiAgICBlbXB0eShjbG9uZXMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBldmVudC5kZXN0cm95KCk7XG4gIH1cblxuICBmdW5jdGlvbiBvYnNlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSgpIHtcbiAgICB2YXIgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlmIChjbG9uZUNvdW50ICE9PSBjb3VudCkge1xuICAgICAgaWYgKGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50IDwgY291bnQgfHwgIWNvdW50KSB7XG4gICAgICAgIGV2ZW50LmVtaXQoRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFRlJFU0gpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZW5lcmF0ZShjb3VudCkge1xuICAgIHZhciBzbGlkZXMgPSBTbGlkZXMuZ2V0KCkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWNlKCk7XG4gICAgdmFyIGxlbmd0aCA9IHNsaWRlcy5sZW5ndGg7XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGxlbmd0aCkge1xuICAgICAgd2hpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQpIHtcbiAgICAgICAgcHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBwdXNoKHNsaWRlcy5zbGljZSgtY291bnQpLCBzbGlkZXMuc2xpY2UoMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGNvdW50KSkuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUsIGluZGV4KSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgaXNIZWFkID0gaW5kZXggPCBjb3VudDtcbiAgICAgICAgdmFyIGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IGNsb25lRGVlcChTbGlkZS5zbGlkZSwgaW5kZXgpO1xuICAgICAgICBpc0hlYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkID8gYmVmb3JlKGNsb25lLCBzbGlkZXNbMF0uc2xpZGUpIDogYXBwZW5kKEVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5saXN0LCBjbG9uZSk7XG4gICAgICAgIHB1c2goY2xvbmVzLCBjbG9uZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBTbGlkZXMucmVnaXN0ZXIoY2xvbmUsIGluZGV4IC0gY291bnQgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzSGVhZCA/IDAgOiBsZW5ndGgpLCBTbGlkZS5pbmRleCk7XG4gICAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xvbmVEZWVwKGVsbSwgaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGNsb25lID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoY2xvbmUsIG9wdGlvbnMuY2xhc3Nlcy5jbG9uZSk7XG4gICAgY2xvbmUuaWQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5yb290LmlkICsgIi1jbG9uZSIgKyBwYWQoaW5kZXggKyAxKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGNsb25lO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZUNsb25lQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCkge1xuICAgIHZhciBjbG9uZXMyID0gb3B0aW9ucy5jbG9uZXM7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKCFTcGxpZGUyLmlzKExPT1ApKSB7XG4gICAgICBjbG9uZXMyID0gMDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSBlbHNlIGlmIChpc1VuZGVmaW5lZChjbG9uZXMyKSkge1xuICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmaXhlZFNpemUgPSBvcHRpb25zW3Jlc29sdmUoImZpeGVkV2lkdGgiKV0gJiYgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLkxheW91dC5zbGlkZVNpemUoMCk7XG4gICAgICB2YXIgZml4ZWRDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgPSBmaXhlZFNpemUgJiYgY2VpbChyZWN0KEVsZW1lbnRzLnRyYWNrKVtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZSgid2lkdGgiKV0gLyBmaXhlZFNpemUpO1xuICAgICAgY2xvbmVzMiA9IGZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hlZENvdW50IHx8IG9wdGlvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIildICYmIFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUyLmxlbmd0aCB8fCBvcHRpb25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICByZXR1cm4gY2xvbmVzMjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBNb3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgX0V2ZW50SW50ZXJmYWNlNCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNC5vbixcbiAgICAgIGVtaXQgPSBfRXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50SW50ZXJmYWNlNC5lbWl0O1xuXG4gIHZhciBzZXQgPSBTcGxpZGUyLnN0YXRlLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQ7XG4gIHZhciBfQ29tcG9uZW50czIkTGF5b3V0ID0gQ29tcG9uZW50czIuTGF5bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dCxcbiAgICAgIHNsaWRlU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSxcbiAgICAgIGdldFBhZGRpbmcgPSBfQ29tcG9uZW50czIkTGF5b3V0LmdldFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkaW5nLFxuICAgICAgdG90YWxTaXplID0gX0NvbXBvbmVudHMyJExheW91dC50bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YWxTaXplLFxuICAgICAgbGlzdFNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LmxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0U2l6ZSxcbiAgICAgIHNsaWRlclNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXJTaXplO1xuICB2YXIgX0NvbXBvbmVudHMyJERpcmVjdGlvID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLkRpcmVjdGlvbixcbiAgICAgIHJlc29sdmUgPSBfQ29tcG9uZW50czIkRGlyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvLnJlc29sdmUsXG4gICAgICBvcmllbnQgPSBfQ29tcG9uZW50czIkRGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvLm9yaWVudDtcbiAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50czMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRWxlbWVudHMsXG4gICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250czMubGlzdCxcbiAgICAgIHRyYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJhY2s7XG4gIHZhciBUcmFuc2l0aW9uO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50czIuVHJhbnNpdGlvbjtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFU0laRUQsIEVWRU5UX1VQREFURUQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNIXSwgcmVwb3NpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gcmVwb3NpdGlvbigpIHtcbiAgICBpZiAoIUNvbXBvbmVudHMyLkNvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzQnVzeSgpKSB7XG4gICAgICBDb21wb25lbnRzMi5TY3JvbGwuY2FuY2VsKCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAganVtcChTcGxpZGUyLmluZGV4KTtcbiAgICAgIENvbXBvbmVudHMyLlNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbW92ZShkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgaW5kZXgsIHByZXYsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGRlc3QgIT09IGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCAmJiBjYW5TaGlmdChkZXN0ID4gcHJldikpIHtcbiAgICAgIGNhbmNlbCgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHRyYW5zbGF0ZShzaGlmdChnZXRQb3NpdGlvbigpLCBkZXN0ID4gcHJldiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlKTtcbiAgICB9XG5cbiAgICBzZXQoTU9WSU5HKTtcbiAgICBlbWl0KEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9NT1ZFLCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgVHJhbnNpdGlvbi5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnQoaW5kZXgsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldChJRExFKTtcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICBjYWxsYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2sgJiYgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1wKGluZGV4KSB7XG4gICAgdHJhbnNsYXRlKHRvUG9zaXRpb24oaW5kZXgsIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUocG9zaXRpb24sIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50TG9vcCkge1xuICAgIGlmICghU3BsaWRlMi5pcyhGQURFKSkge1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkZXN0aW5hdGlvbiA9IHByZXZlbnRMb29wID8gcG9zaXRpb24gOiBsb29wKHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbik7XG4gICAgICBzdHlsZShsaXN0LCAidHJhbnNmb3JtIiwgInRyYW5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUiICsgcmVzb2x2ZSgiWCIpICsgIigiICsgZGVzdGluYXRpb24gKyAicHgpIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgcG9zaXRpb24gIT09IGRlc3RpbmF0aW9uICYmIGVtaXQoRVZFTlRfUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidISUZURUQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb3AocG9zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgaWYgKFNwbGlkZTIuaXMoTE9PUCkpIHtcbiAgICAgIHZhciBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0b0luZGV4KHBvc2l0aW9uKTtcbiAgICAgIHZhciBleGNlZWRlZE1heCA9IGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCA+IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RW5kKCk7XG4gICAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4Y2VlZGVkTWluID0gaW5kZXggPCAwO1xuXG4gICAgICBpZiAoZXhjZWVkZWRNaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IGV4Y2VlZGVkTWF4KSB7XG4gICAgICAgIHBvc2l0aW9uID0gc2hpZnQocG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLCBleGNlZWRlZE1heCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwb3NpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoaWZ0KHBvc2l0aW9uLCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fja3dhcmRzKSB7XG4gICAgdmFyIGV4Y2VzcyA9IHBvc2l0aW9uIC0gZ2V0TGltaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGJhY2t3YXJkcyk7XG4gICAgdmFyIHNpemUgPSBzbGlkZXJTaXplKCk7XG4gICAgcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uIC09IG9yaWVudChzaXplICogKGNlaWwoYWJzKGV4Y2VzcykgLyBzaXplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgfHwgMSkpICogKGJhY2t3YXJkcyA/IDEgOiAtMSk7XG4gICAgcmV0dXJuIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICB0cmFuc2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKGdldFBvc2l0aW9uKCksIHRydWUpO1xuICAgIFRyYW5zaXRpb24uY2FuY2VsKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9JbmRleChwb3NpdGlvbikge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzLmdldCgpO1xuICAgIHZhciBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggPSAwO1xuICAgIHZhciBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciAodmFyIGkgPSAwOyBpIDwgU2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHNsaWRlSW5kZXggPSBTbGlkZXNbaV0uaW5kZXg7XG4gICAgICB2YXIgZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbmNlID0gYWJzKHRvUG9zaXRpb24oc2xpZGVJbmRleCwgdHJ1ZSkgLSBwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24pO1xuXG4gICAgICBpZiAoZGlzdGFuY2UgPD0gbWluRGlzdGFuY2UpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIGluZGV4ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHRvUG9zaXRpb24oaW5kZXgsIHRyaW1taW5nKSB7XG4gICAgdmFyIHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9yaWVudCh0b3RhbFNpemUoaW5kZXggLSAxKSAtIG9mZnNldChpbmRleCkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKHBvc2l0aW9uKSA6IHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCkge1xuICAgIHZhciBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VmdCA9IHJlc29sdmUoImxlZnQiKTtcbiAgICByZXR1cm4gcmVjdChsaXN0KVtsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndF0gLSByZWN0KHRyYWNrKVtsZWZ0XSArIG9yaWVudChnZXRQYWRkaW5nKGZhbHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJpbShwb3NpdGlvbikge1xuICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicob3B0aW9ucy50cmltU3BhY2UgJiYgU3BsaWRlMi5pcyhTTElERSkpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwb3NpdGlvbiA9IGNsYW1wKHBvc2l0aW9uLCAwLCBvcmllbnQoc2xpZGVyU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodHJ1ZSkgLSBsaXN0U2l6ZSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9mZnNldChpbmRleCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZm9jdXMgPSBvcHRpb25zLmZvY3VzO1xuICAgIHJldHVybiBmb2N1cyA9PT0gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZW50ZXIiID8gKGxpc3RTaXplKCkgLSBzbGlkZVNpemUoaW5kZXgsIHRydWUpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyAyIDogK2ZvY3VzICogc2xpZGVTaXplKGluZGV4KSB8fCAwO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGdldExpbWl0KG1heCkge1xuICAgIHJldHVybiB0b1Bvc2l0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYXggPyBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEVuZCgpIDogMCwgISFvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy50cmltU3BhY2UpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuU2hpZnQoYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcykge1xuICAgIHZhciBzaGlmdGVkID0gb3JpZW50KHNoaWZ0KGdldFBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbigpLCBiYWNrd2FyZHMpKTtcbiAgICByZXR1cm4gYmFja3dhcmRzID8gc2hpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0ZWQgPj0gMCA6IHNoaWZ0ZWQgPD0gbGlzdFtyZXNvbHZlKCJzY3JvbGxXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKV0gLSByZWN0KHRyYWNrKVtyZXNvbHZlKCJ3aWR0aCIpXTtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBleGNlZWRlZExpbWl0KG1heCwgcG9zaXRpb24pIHtcbiAgICBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gPSBpc1VuZGVmaW5lZChwb3NpdGlvbikgPyBnZXRQb3NpdGlvbigpIDogcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uO1xuICAgIHZhciBleGNlZWRlZE1pbiA9IG1heCAhPT0gdHJ1ZSAmJiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpZW50KHBvc2l0aW9uKSA8IG9yaWVudChnZXRMaW1pdChmYWxzZSkpO1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZXhjZWVkZWRNYXggPSBtYXggIT09IGZhbHNlICYmIG9yaWVudChwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pID4gb3JpZW50KGdldExpbWl0KHRydWUpKTtcbiAgICByZXR1cm4gZXhjZWVkZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWluIHx8IGV4Y2VlZGVkTWF4O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IG1vdW50LFxuICAgIG1vdmU6IG1vdmUsXG4gICAganVtcDoganVtcCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdHJhbnNsYXRlOiB0cmFuc2xhdGUsXG4gICAgc2hpZnQ6IHNoaWZ0LFxuICAgIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWw6IGNhbmNlbCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgIHRvUG9zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uOiB0b1Bvc2l0aW9uLFxuICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ2V0TGltaXQ6IGdldExpbWl0LFxuICAgIGV4Y2VlZGVkTGltaXQ6IGV4Y2VlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZExpbWl0LFxuICAgIHJlcG9zaXRpb246IHJlcG9zaXRpb25cbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIENvbnRyb2xsZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U1ID0gRXZlbnRJbnRlcmZhY2UoU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U1Lm9uLFxuICAgICAgZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfRXZlbnRJbnRlcmZhY2U1LmVtaXQ7XG5cbiAgdmFyIE1vdmUgPSBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czIuTW92ZTtcbiAgdmFyIGdldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBnZXRMaW1pdCA9IE1vdmUuZ2V0TGltaXQsXG4gICAgICB0b1Bvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IE1vdmUudG9Qb3NpdGlvbjtcbiAgdmFyIF9Db21wb25lbnRzMiRTbGlkZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuU2xpZGVzLFxuICAgICAgaXNFbm91Z2ggPSBfQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyJFNsaWRlcy5pc0Vub3VnaCxcbiAgICAgIGdldExlbmd0aCA9IF9Db21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIkU2xpZGVzLmdldExlbmd0aDtcbiAgdmFyIG9taXRFbmQgPSBvcHRpb25zLm9taXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRW5kO1xuICB2YXIgaXNMb29wID0gU3BsaWRlMi5pcyhMT09QKTtcbiAgdmFyIGlzU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlID0gU3BsaWRlMi5pcyhTTElERSk7XG4gIHZhciBnZXROZXh0ID0gYXBwbHkoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEFkamFjZW50LCBmYWxzZSk7XG4gIHZhciBnZXRQcmV2ID0gYXBwbHkoZ2V0QWRqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZW50LCB0cnVlKTtcbiAgdmFyIGN1cnJJbmRleCA9IG9wdGlvbnMuc3RhcnQgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7XG4gIHZhciBlbmRJbmRleDtcbiAgdmFyIHByZXZJbmRleCA9IGN1cnJJbmRleDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBzbGlkZUNvdW50O1xuICB2YXIgcGVyTW92ZTtcbiAgdmFyIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JTkRFWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQ0hBTkdFRF0sIGluaXQpO1xuICAgIG9uKEVWRU5UX1JFU0laRUQsIG9uUmVzaXplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzbGlkZUNvdW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGdldExlbmd0aCh0cnVlKTtcbiAgICBwZXJNb3ZlID0gb3B0aW9ucy5wZXJNb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgIGVuZEluZGV4ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEVuZCgpO1xuICAgIHZhciBpbmRleCA9IGNsYW1wKGN1cnJJbmRleCwgMCwgb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRFbmQgPyBlbmRJbmRleCA6IHNsaWRlQ291bnQgLSAxKTtcblxuICAgIGlmIChpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggIT09IGN1cnJJbmRleCkge1xuICAgICAgY3VyckluZGV4ID0gaW5kZXg7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgTW92ZS5yZXBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uUmVzaXplZCgpIHtcbiAgICBpZiAoZW5kSW5kZXggIT09IGdldEVuZCgpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgZW1pdChFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCk7XG4gICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIGdvKGNvbnRyb2wsIGFsbG93U2FtZUluZGV4LCBjYWxsYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2spIHtcbiAgICBpZiAoIWlzQnVzeSgpKSB7XG4gICAgICB2YXIgZGVzdCA9IHBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShjb250cm9sKTtcbiAgICAgIHZhciBpbmRleCA9IGxvb3AoZGVzdCk7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoaW5kZXggPiAtMSAmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyE9PSBjdXJySW5kZXgpKSB7XG4gICAgICAgIHNldEluZGV4KGluZGV4KTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIE1vdmUubW92ZShkZXN0LCBpbmRleCwgcHJldkluZGV4LCBjYWxsYmFjayk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24sIGR1cmF0aW9uLCBzbmFwLCBjYWxsYmFjaykge1xuICAgIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMi5TY3JvbGwuc2Nyb2xsKGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uICgpIHtcbiAgICAgIHZhciBpbmRleCA9IGxvb3AoTW92ZS50b0luZGV4KGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRQb3NpdGlvbigpKSk7XG4gICAgICBzZXRJbmRleChvbWl0RW5kID8gbWluKGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCwgZW5kSW5kZXgpIDogaW5kZXgpO1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZShjb250cm9sKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHZhciBpbmRleCA9IGN1cnJJbmRleDtcblxuICAgIGlmIChpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcoY29udHJvbCkpIHtcbiAgICAgIHZhciBfcmVmID0gY29udHJvbC5tYXRjaCgvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhbK1xcLTw+XSkoXFxkKyk/LykgfHwgW10sXG4gICAgICAgICAgaW5kaWNhdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9yZWZbMV0sXG4gICAgICAgICAgbnVtYmVyID0gX3JlZlsyXTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmIChpbmRpY2F0b3IgPT09ICIrIiB8fCBpbmRpY2F0b3IgPT09ICItIikgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgaW5kZXggPSBjb21wdXRlRGVzdEluZGV4KGN1cnJJbmRleCArICsoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiICsgaW5kaWNhdG9yICsgKCtudW1iZXIgfHwgMSkpLCBjdXJySW5kZXgpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPiIpIHtcbiAgICAgICAgaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ID0gbnVtYmVyID8gdG9JbmRleCgrbnVtYmVyKSA6IGdldE5leHQodHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfSBlbHNlIGlmIChpbmRpY2F0b3IgPT09ICI8Iikge1xuICAgICAgICBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggPSBnZXRQcmV2KHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaW5kZXggPSBpc0xvb3AgPyBjb250cm9sIDogY2xhbXAoY29udHJvbCwgMCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZEluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZ2V0QWRqYWNlbnQocHJldiwgZGVzdGluYXRpb24pIHtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciA9IHBlck1vdmUgfHwgKGhhc0ZvY3VzKCkgPyAxIDogcGVyUGFnZSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBkZXN0ID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyICogKHByZXYgPyAtMSA6IDEpLCBjdXJySW5kZXgsICEocGVyTW92ZSB8fCBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzRm9jdXMoKSkpO1xuXG4gICAgaWYgKGRlc3QgPT09IC0xICYmIGlzU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBpZiAoIWFwcHJveGltYXRlbHlFcXVhbChnZXRQb3NpdGlvbigpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0TGltaXQoIXByZXYpLCAxKSkge1xuICAgICAgICByZXR1cm4gcHJldiA/IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogZW5kSW5kZXg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3RpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbiA/IGRlc3QgOiBsb29wKGRlc3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXB1dGVEZXN0SW5kZXgoZGVzdCwgZnJvbSwgc25hcFBhZ2UpIHtcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRW5vdWdoKCkgfHwgaGFzRm9jdXMoKSkge1xuICAgICAgdmFyIGluZGV4ID0gY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXB1dGVNb3ZhYmxlRGVzdEluZGV4KGRlc3QpO1xuXG4gICAgICBpZiAoaW5kZXggIT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBkZXN0KSB7XG4gICAgICAgIGZyb20gPSBkZXN0O1xuICAgICAgICBkZXN0ID0gaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4O1xuICAgICAgICBzbmFwUGFnZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGRlc3QgPCAwIHx8IGRlc3QgPiBlbmRJbmRleCkge1xuICAgICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCFwZXJNb3ZlICYmIChiZXR3ZWVuKDAsIGRlc3QsIGZyb20sIHRydWUpIHx8IGJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R3ZWVuKGVuZEluZGV4LCBmcm9tLCBkZXN0LCB0cnVlKSkpIHtcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA9IHRvSW5kZXgodG9QYWdlKGRlc3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgICAgZGVzdCA9IHNuYXBQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSA/IGRlc3QgPCAwID8gLShzbGlkZUNvdW50ICUgcGVyUGFnZSB8fCBwZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgOiBzbGlkZUNvdW50IDogZGVzdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLnJld2luZCkge1xuICAgICAgICAgICAgZGVzdCA9IGRlc3QgPCAwID8gZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4IDogMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVzdCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAoc25hcFBhZ2UgJiYgZGVzdCAhPT0gZnJvbSkge1xuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0ID0gdG9JbmRleCh0b1BhZ2UoZnJvbSkgKyAoZGVzdCA8IGZyb20gPyAtMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiAxKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGRlc3QgPSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzdDtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBjb21wdXRlTW92YWJsZURlc3RJbmRleChkZXN0KSB7XG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1NsaWRlICYmIG9wdGlvbnMudHJpbVNwYWNlID09PSAibW92ZSIgJiYgZGVzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IGN1cnJJbmRleCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCk7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiA9PT0gdG9Qb3NpdGlvbihkZXN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZSkgJiYgYmV0d2VlbihkZXN0LCAwLCBTcGxpZGUyLmxlbmd0aCAtIDEsICEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5yZXdpbmQpKSB7XG4gICAgICAgIGRlc3QgPCBjdXJySW5kZXggPyAtLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0IDogKytkZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvb3AoaW5kZXgpIHtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzTG9vcCA/IChpbmRleCArIHNsaWRlQ291bnQpICUgc2xpZGVDb3VudCB8fCAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGluZGV4O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RW5kKCkge1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kID0gc2xpZGVDb3VudCAtIChoYXNGb2N1cygpIHx8IGlzTG9vcCAmJiBwZXJNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSA/IDEgOiBwZXJQYWdlKTtcblxuICAgIHdoaWxlIChvbWl0RW5kICYmIGVuZC0tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA+IDApIHtcbiAgICAgIGlmICh0b1Bvc2l0aW9uKHNsaWRlQ291bnQgLSAxLCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgIT09IHRvUG9zaXRpb24oZW5kLCB0cnVlKSkge1xuICAgICAgICBlbmQrKztcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbGFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AoZW5kLCAwLCBzbGlkZUNvdW50IC0gMSk7XG4gIH1cblxuICBmdW5jdGlvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29JbmRleChwYWdlKSB7XG4gICAgcmV0dXJuIGNsYW1wKGhhc0ZvY3VzKCkgPyBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA6IHBlclBhZ2UgKiBwYWdlLCAwLCBlbmRJbmRleCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gdG9QYWdlKGluZGV4KSB7XG4gICAgcmV0dXJuIGhhc0ZvY3VzKCkgPyBtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGluZGV4LCBlbmRJbmRleCkgOiBmbG9vcigoaW5kZXggPj0gZW5kSW5kZXggPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVDb3VudCAtIDEgOiBpbmRleCkgLyBwZXJQYWdlKTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB0b0Rlc3QoZGVzdGluYXRpb24pIHtcbiAgICB2YXIgY2xvc2VzdCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlLnRvSW5kZXgoZGVzdGluYXRpb24pO1xuICAgIHJldHVybiBpc1NsaWRlID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYW1wKGNsb3Nlc3QsIDAsIGVuZEluZGV4KSA6IGNsb3Nlc3Q7XG4gIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gc2V0SW5kZXgoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggIT09IGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJySW5kZXgpIHtcbiAgICAgIHByZXZJbmRleCA9IGN1cnJJbmRleDtcbiAgICAgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJySW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgocHJldikge1xuICAgIHJldHVybiBwcmV2ID8gcHJldkluZGV4IDogY3VyckknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc0ZvY3VzKCkge1xuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIWlzVW5kZWZpbmVkKG9wdGlvbnMuZm9jdXMpIHx8IG9wdGlvbnMuaXNOYXZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQnVzeSgpIHtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTIuc3RhdGUuaXMoW01PVklORywgU0NST0xMSU5HXSkgJiYgISFvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy53YWl0Rm9yVHJhbnNpdGlvbjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50OiBtb3VudCxcbiAgICBnbzogZ28sXG4gICAgc2Nyb2xsOiBzY3JvbGwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGdldE5leHQ6IGdldE5leHQsXG4gICAgZ2V0UHJldjogZ2V0UHJldiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZ2V0QWRqYWNlbnQ6IGdldEFkamFjZW50LFxuICAgIGdldEVuZDogZ2V0RW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCxcbiAgICBzZXRJbmRleDogc2V0SW5kZXgsXG4gICAgZ2V0SW5kZXg6IGdldEluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgIHRvUGFnZTogdG9QYWdlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0b0Rlc3Q6IHRvRGVzdCxcbiAgICBoYXNGb2N1czogaGFzRm9jdXMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlzQnVzeTogaXNCdXN5XG4gIH07XG59XG5cbnZhciBYTUxfTkFNRV9TUEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO1xudmFyIFBBVEggPSAibScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxNS41IDAuOTMyLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTQuNi0xNC42IDQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IjtcbnZhciBTSVpFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IDQwO1xuXG5mdW5jdGlvbiBBcnJvd3MoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKSB7XG4gIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIG9uID0gZXZlbnQub24sXG4gICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbWl0ID0gZXZlbnQuZW1pdDtcbiAgdmFyIGNsYXNzZXMgPSBvcHRpb25zLmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzLFxuICAgICAgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgdmFyIEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMi5Db250cm9sbGVyO1xuICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuYXJyb3dzLFxuICAgICAgdHJhY2sgPSBFbGVtZW50cy50cmFjaztcbiAgdmFyIHdyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVyID0gcGxhY2Vob2xkZXI7XG4gIHZhciBwcmV2ID0gRWxlbWVudHMucHJldjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBuZXh0ID0gRWxlbWVudHMubmV4dDtcbiAgdmFyIGNyZWF0ZWQ7XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd3JhcHBlckNsYXNzZXM7XG4gIHZhciBhcnJvd3MgPSB7fTtcblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbW91bnQoKSB7XG4gICAgaW5pdCgpO1xuICAgIG9uKEVWRU5UX1VQREFURUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdW50KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3koKTtcbiAgICBtb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmFycm93cztcblxuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoZW5hYmxlZCAmJiAhKHByZXYgJiYgbmV4dCkpIHtcbiAgICAgIGNyZWF0ZUFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd3MoKTtcbiAgICB9XG5cbiAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzaWduKGFycm93cywge1xuICAgICAgICBwcmV2OiBwcmV2LFxuICAgICAgICBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbmV4dFxuICAgICAgfSk7XG4gICAgICBkaXNwbGF5KHdyYXBwZXIsIGVuYWJsZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gIiIgOiAibm9uZSIpO1xuICAgICAgYWRkQ2xhc3Mod3JhcHBlciwgd3JhcHBlckMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc2VzID0gQ0xBU1NfQVJST1dTICsgIi0tIiArIG9wdGlvbnMuZGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIGxpc3RlbigpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdXBkYXRlKCk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShbcHJldiwgbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RdLCBBUklBX0NPTlRST0xTLCB0cmFjay5pZCk7XG4gICAgICAgIGVtaXQoRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0FSUk9XU19NT1VOVEVELCBwcmV2LCBuZXh0KTtcbiAgICAgIH1cbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBldmVudC5kZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpO1xuICAgIHJlbW92ZUNsYXNzKHdyYXBwZXIsIHdyYXBwZXJDbGFzc2VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgcmVtb3ZlKHBsYWNlaG9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciA/IFtwcmV2LCBuZXh0XSA6IHdyYXBwZXIpO1xuICAgICAgcHJldiA9IG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKFtwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndiwgbmV4dF0sIEFMTF9BVFRSSUJVVEVTKTtcbiAgICB9XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbGlzdGVuKCkge1xuICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9FTkRfSU5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VYX0NIQU5HRURdLCB1cGRhdGUpO1xuICAgIGJpbmQobmV4dCwgImNsaWNrIiwgYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGx5KGdvLCAiPiIpKTtcbiAgICBiaW5kKHByZXYsICJjbGljayIsIGFwcGx5KGdvLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIjwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRyb2xsZXIuZ28oY29udHJvbCwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JlYXRlQXJyb3dzKCkge1xuICAgIHdyYXBwZXIgPSBwbGFjZWhvbGRlciB8fCBjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlKCJkaXYiLCBjbGFzc2VzLmFycm93cyk7XG4gICAgcHJldiA9IGNyZWF0ZUFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvdyh0cnVlKTtcbiAgICBuZXh0ID0gY3JlYXRlQXJyb3coZmFsc2UpO1xuICAgIGNyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhdGVkID0gdHJ1ZTtcbiAgICBhcHBlbmQod3JhcHBlciwgW3ByZXYsIG5leHRdKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgIXBsYWNlaG9sZGVyICYmIGJlZm9yZSh3cmFwcGVyLCB0cmFjayk7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyb3cocHJldjIpIHtcbiAgICB2YXIgYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm93ID0gIjxidXR0b24gY2xhc3M9XFwiIiArIGNsYXNzZXMuYXJyb3cgKyAiICIgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKHByZXYyID8gY2xhc3Nlcy5wcmV2IDogY2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U9XFwiYnV0dG9uXFwiPjxzdmcgeG1sbnM9XFwiIiArIFhNTF9OQU1FX1NQQUNFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArICJcXCIgdmlld0JveD1cXCIwIDAgIiArIFNJWkUgKyAiICIgKyBTSVpFICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJcXCIgd2lkdGg9XFwiIiArIFNJWkUgKyAiXFwiIGhlaWdodD1cXCIiICsgU0laJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UgKyAiXFwiIGZvY3VzYWJsZT1cXCJmYWxzZVxcIj48cGF0aCBkPVxcIiIgKyAobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuYXJyb3dQYXRoIHx8IFBBVEgpICsgIlxcIiAvPiI7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJzZUh0bWwoYXJyb3cpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICB2YXIgaW5kZXggPSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5pbmRleDtcbiAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2KCk7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gQ29udHJvbGxlci5nZXROZXh0KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgdmFyIHByZXZMYWJlbCA9IHByZXZJbmRleCA+IC0xICYmIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8IHByZXZJbmRleCA/IGkxOG4ubGFzdCA6IGkxOG4ucHJldjtcbiAgICAgIHZhciBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dExhYmVsID0gbmV4dEluZGV4ID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaTE4bi5maXJzdCA6IGkxOG4ubmV4dDtcbiAgICAgIHByZXYuZGlzYWJsZWQgPSBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldkluZGV4IDwgMDtcbiAgICAgIG5leHQuZGlzYWJsZWQgPSBuZXh0SW5kZXggPCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMDtcbiAgICAgIHNldEF0dHJpYnV0ZShwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKTtcbiAgICAgIHNldEF0dHJpYnV0ZShuZXh0LCBBUklBX0xBQkVMLCBuZXh0TGFiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKTtcbiAgICAgIGVtaXQoRVZFTlRfQVJST1dTX1VQREFURUQsIHByZXYsIG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgYXJyb3dzOiBhcnJvd3MsXG4gICAgbW91bnQ6IG1vdW50LFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gIH07XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG52YXIgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUgPSBEQVRBX0FUVFJJQlVURSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiLWludGVydmFsIjtcblxuZnVuY3Rpb24gQXV0b3BsYXkoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U2ID0gRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U2LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2U2LmJpbmQsXG4gICAgICBlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdCA9IF9FdmVudEludGVyZmFjZTYuZW1pdDtcblxuICB2YXIgaW50ZXJ2YWwgPSBSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVzdEludGVydmFsKG9wdGlvbnMuaW50ZXJ2YWwsIFNwbGlkZTIuZ28uYmluZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMiwgIj4iKSwgb25BbmltYXRpb25GcmFtZSk7XG4gIHZhciBpc1BhdXNlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBpbnRlcnZhbC5pc1BhdXNlZDtcbiAgdmFyIEVsZW1lbnRzID0gQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLkVsZW1lbnRzLFxuICAgICAgX0NvbXBvbmVudHMyJEVsZW1lbnRzNCA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMi5FbGVtZW50cyxcbiAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzNC5yb290LFxuICAgICAgdG9nZ2xlID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzQudG9nZ2xlO1xuICB2YXIgYXV0b3BsYXkgPSBvcHRpb25zLmF1dG9wbGF5O1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGhvdmVyZWQ7XG4gIHZhciBmb2N1c2VkO1xuICB2YXIgc3RvcHBlZCA9IGF1dG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheSA9PT0gInBhdXNlIjtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGF1dG9wbGF5KSB7XG4gICAgICBsaXN0ZW4oKTtcbiAgICAgIHRvZ2dsZSAmJiBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKHRvZ2dsZSwgQVJJQV9DT05UUk9MUywgRWxlbWVudHMudHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrLmlkKTtcbiAgICAgIHN0b3BwZWQgfHwgcGxheSgpO1xuICAgICAgdXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG9wdGlvbnMucGF1c2VPbkhvdmVyKSB7XG4gICAgICBiaW5kKHJvb3QsICJtb3VzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRlciBtb3VzZWxlYXZlIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaG92ZXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgPSBlLnR5cGUgPT09ICJtb3VzZWVudGVyIjtcbiAgICAgICAgYXV0b1RvZ2dsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnBhdXNlT25GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMpIHtcbiAgICAgIGJpbmQocm9vdCwgImZvY3VzaW4gZm9jdXNvdXQiLCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gKGUpIHtcbiAgICAgICAgZm9jdXNlZCA9IGUudHlwZSA9PT0gImZvY3VzaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIjtcbiAgICAgICAgYXV0b1RvZ2dsZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmICh0b2dnbGUpIHtcbiAgICAgIGJpbmQodG9nZ2xlLCAiY2xpY2siLCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gKCkge1xuICAgICAgICBzdG9wcGVkID8gcGxheSgpIDogcGF1c2UodHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb24oW0VWRU5UX01PVkUsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9TQ1JPTEwsIEVWRU5UX1JFRlJFU0hdLCBpbnRlcnZhbC5yZXdpbmQpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbihFVkVOVF9NT1ZFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgaWYgKGlzUGF1c2VkKCkgJiYgQ29tcG9uZW50czIuU2xpZGVzLmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Vub3VnaCgpKSB7XG4gICAgICBpbnRlcnZhbC5zdGFydCghb3B0aW9ucy5yZXNldFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9ncmVzcyk7XG4gICAgICBmb2N1c2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsc2U7XG4gICAgICB1cGRhdGUoKTtcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhdXNlKHN0b3ApIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKHN0b3AgPT09IHZvaWQgMCkge1xuICAgICAgc3RvcCA9IHRydWU7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHN0b3BwZWQgPSAhIXN0b3A7XG4gICAgdXBkYXRlKCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCFpc1BhdXNlZCgpKSB7XG4gICAgICBpbnRlcnZhbC5wYXVzZSgpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQoRVZFTlRfQVVUT1BMQVlfUEFVU0UpO1xuICAgIH1cbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBhdXRvVG9nZ2xlKCkge1xuICAgIGlmICghc3RvcHBlZCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hvdmVyZWQgfHwgZm9jdXNlZCA/IHBhdXNlKGZhbHNlKSA6IHBsYXkoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmICh0b2dnbGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB0b2dnbGVDbGFzcyh0b2dnbGUsIENMQVNTX0FDVElWRSwgIXN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGVkKTtcbiAgICAgIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfTEFCRUwsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmkxOG5bc3RvcHBlZCA/ICJwbGF5IiA6ICJwYXVzZSJdKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZShyYXRlKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBiYXIgPSBFbGVtZW50cy5iYXI7XG4gICAgYmFyICYmIHN0eWxlKGJhciwgIndpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCIsIHJhdGUgKiAxMDAgKyAiJSIpO1xuICAgIGVtaXQoRVZFTlRfQVVUT1BMQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BMQVlJTkcsIHJhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3ZlKGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCkge1xuICAgIHZhciBTbGlkZSA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXRBdChpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXgpO1xuICAgIGludGVydmFsLnNldChTbGlkZSAmJiArZ2V0QXR0cmlidXRlKFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSwgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUpIHx8IG9wdGlvbnMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkZXN0cm95OiBpbnRlcnZhbC5jYW5jZWwsXG4gICAgcGxheTogcGxheSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGF1c2U6IHBhdXNlLFxuICAgIGlzUGF1c2VkOiBpc1BhdXNlZFxuICB9O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZnVuY3Rpb24gQ292ZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U3ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U3Lm9uO1xuXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBtb3VudCgpIHtcbiAgICBpZiAob3B0aW9ucy5jb3Zlcikge1xuICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX0xBWllMT0FEX0xPQURFRCwgYXBwbHkodG9nZ2xlLCB0cnVlKSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVNIXSwgYXBwbHkoY292ZXIsIHRydWUpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY292ZXIoY292ZXIyKSB7XG4gICAgQ29tcG9uZW50czIuU2xpZGVzLmZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKGZ1bmN0aW9uIChTbGlkZSkge1xuICAgICAgdmFyIGltZyA9IGNoaWxkKFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5jb250YWluZXIgfHwgU2xpZGUuc2xpZGUsICJpbWciKTtcblxuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcgJiYgaW1nLnNyYykge1xuICAgICAgICB0b2dnbGUoY292ZXIyLCBpbWcsIFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNvdmVyMiwgaW1nLCBTbGlkZSkge1xuICAgIFNsaWRlLnN0eWxlKCJiYWNrZ3JvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCIsIGNvdmVyMiA/ICJjZW50ZXIvY292ZXIgbm8tcmVwZWF0IHVybChcXCIiICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZy5zcmMgKyAiXFwiKSIgOiAiIiwgdHJ1ZSk7XG4gICAgZGlzcGxheShpbWcsIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlcjIgPyAibm9uZSIgOiAiIik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDogbW91bnQsXG4gICAgZGVzdHJveTogYXBwbHkoY292ZXIsIGZhbHNlKVxuICB9OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxudmFyIEJPVU5DRV9ESUZGX1RIUkVTSE9MRCA9IDEwO1xudmFyIEJPVU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0VfRFVSQVRJT04gPSA2MDA7XG52YXIgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBCQVNFX1ZFTE9DSVRZID0gMS41O1xudmFyIE1JTl9EVVJBVElPTiA9IDgwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XG5cbmZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTggPSBFdmVudEludGVyZmFjZShTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTgub24sXG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICB2YXIgc2V0ID0gU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUuc2V0O1xuICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmU7XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZ2V0TGltaXQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTW92ZS5nZXRMaW1pdCxcbiAgICAgIGV4Y2VlZGVkTGltaXQgPSBNb3ZlLmV4Y2VlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZExpbWl0LFxuICAgICAgdHJhbnNsYXRlID0gTW92ZS50cmFuc2xhdGU7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaXNTbGlkZSA9IFNwbGlkZTIuaXMoU0xJREUpO1xuICB2YXIgaW50ZXJ2YWw7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgY2FsbGJhY2s7XG4gIHZhciBmcmljdGlvbiA9IDE7XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG1vdW50KCkge1xuICAgIG9uKEVWRU5UX01PVkUsIGNsZWFyKTtcbiAgICBvbihbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBjYW5jZWwpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvblNjcm9sbGVkLCBub0NvbnN0cmFpbikge1xuICAgIHZhciBmcm9tID0gZ2V0UG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKCk7XG4gICAgY2xlYXIoKTtcblxuICAgIGlmIChzbmFwICYmICghaXNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgfHwgIWV4Y2VlZGVkTGltaXQoKSkpIHtcbiAgICAgIHZhciBzaXplID0gQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkxheW91dC5zbGlkZXJTaXplKCk7XG4gICAgICB2YXIgb2Zmc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IHNpZ24oZGVzdGluYXRpb24pICogc2l6ZSAqIGZsb29yKGFicyhkZXN0aW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24pIC8gc2l6ZSkgfHwgMDtcbiAgICAgIGRlc3RpbmF0aW9uID0gTW92ZS50b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihDb21wb25lbnRzMi5Db250cm9sbGVyLnRvRGVzdChkZXN0aW5hdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJSBzaXplKSkgKyBvZmZzZXQ7XG4gICAgfVxuXG4gICAgdmFyIG5vRGlzdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYXBwcm94aW1hdGVseUVxdWFsKGZyb20sIGRlc3RpbmF0aW9uLCAxKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJpY3Rpb24gPSAxO1xuICAgIGR1cmF0aW9uID0gbm9EaXN0YW5jZSA/IDAgOiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyYXRpb24gfHwgbWF4KGFicyhkZXN0aW5hdGlvbiAtIGZyb20pIC8gQkFTRV9WRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT0NJVFksIE1JTl9EVVJBVElPTik7XG4gICAgY2FsbGJhY2sgPSBvblNjcm9sbGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiwgb25FbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseSh1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxKTtcbiAgICBzZXQoU0NST0xMSU5HKTtcbiAgICBlbWl0KEVWRU5UX1NDUk9MTCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGludGVydmFsLnN0YXJ0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgc2V0KElETEUpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIGVtaXQoRVZFTlRfU0NST0xMRUQpO1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHVwZGF0ZShmcm9tLCB0bywgbm9Db25zdHJhaW4sIHJhdGUpIHtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcbiAgICB2YXIgdGFyZ2V0ID0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyAodG8gLSBmcm9tKSAqIGVhc2luZyhyYXRlKTtcbiAgICB2YXIgZGlmZiA9ICh0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0IC0gcG9zaXRpb24pICogZnJpY3Rpb247XG4gICAgdHJhbnNsYXRlKHBvc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiArIGRpZmYpO1xuXG4gICAgaWYgKGlzU2xpZGUgJiYgIW5vQ29uc3RyYWluICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleGNlZWRlZExpbWl0KCkpIHtcbiAgICAgIGZyaWN0aW9uICo9IEZSSUNUSU9OX0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNUT1I7XG5cbiAgICAgIGlmIChhYnMoZGlmZikgPCBCT1VOQ0VfRElGRl9USFJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0xEKSB7XG4gICAgICAgIHNjcm9sbChnZXRMaW1pdChleGNlZWRlZExpbWl0KHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSksIEJPVU5DRV9EVVJBVElPTiwgZmFsc2UsIGNhbGxiYWNrLCB0cnVlKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChpbnRlcnZhbCkge1xuICAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZiAoaW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICYmICFpbnRlcnZhbC5pc1BhdXNlZCgpKSB7XG4gICAgICBjbGVhcigpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uRW5kKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZWFzaW5nKHQpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGVhc2luZ0Z1bmMgPSBvcHRpb25zLmVhc2luZ0Z1bmM7XG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBlYXNpbmdGdW5jID8gZWFzaW5nRnVuYyh0KSA6IDEgLSBNYXRoLnBvdygxICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIHQsIDQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3VudDogbW91bnQsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3Ryb3k6IGNsZWFyLFxuICAgIHNjcm9sbDogc2Nyb2xsLFxuICAgIGNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w6IGNhbmNlbFxuICB9O1xufVxuXG52YXIgU0NST0xMX0xJU1RFTkVSX09QVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTID0ge1xuICBwYXNzaXZlOiBmYWxzZSxcbiAgY2FwdHVyZTogdHJ1ZVxufTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIERyYWcoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBfRXZlbnRJbnRlcmZhY2U5ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U5Lm9uLFxuICAgICAgZW1pdCA9IF9FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTkuYmluZCxcbiAgICAgIHVuYmluZCA9IF9FdmVudEludGVyZmFjZTkudW5iaW5kOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuICB2YXIgTW92ZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgU2Nyb2xsID0gQ29tcG9uZW50czIuU2NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sbCxcbiAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMudHJhY2ssXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVkdWNlID0gQ29tcG9uZW50czIuTWVkaWEucmVkdWNlO1xuICB2YXIgX0NvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiREaXJlY3RpbzIgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24sXG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZSA9IF9Db21wb25lbnRzMiREaXJlY3RpbzIucmVzb2x2ZSxcbiAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmllbnQgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8yLm9yaWVudDtcbiAgdmFyIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4gICAgICBleGNlZWRlZExpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IE1vdmUuZXhjZWVkZWRMaW1pdDtcbiAgdmFyIGJhc2VQb3NpdGlvbjtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBiYXNlRXZlbnQ7XG4gIHZhciBwcmV2QmFzZUV2ZW50O1xuICB2YXIgaXNGcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIGRyYWdnaW5nO1xuICB2YXIgZXhjZWVkZWQgPSBmYWxzZTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBjbGlja1ByZXZlbnRlZDtcbiAgdmFyIGRpc2FibGVkO1xuICB2YXIgdGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBiaW5kKHRyYWNrLCBQT0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFUl9NT1ZFX0VWRU5UUywgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX1VQX0VWRU5UUywgbm9vcCwgU0NST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX0RPVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOX0VWRU5UUywgb25Qb2ludGVyRG93biwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBiaW5kKHRyYWNrLCAiY2xpY2siLCBvbkNsaWNrLCB7XG4gICAgICBjYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVyZTogdHJ1ZVxuICAgIH0pO1xuICAgIGJpbmQodHJhY2ssICJkcmFnc3RhcnQiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldmVudCk7XG4gICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURURdLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5pdCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBkcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyA9IG9wdGlvbnMuZHJhZztcbiAgICBkaXNhYmxlKCFkcmFnKTtcbiAgICBpc0ZyZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZHJhZyA9PT0gImZyZWUiO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckRvd24oZSkge1xuICAgIGNsaWNrUHJldmVudGVkID0gZmFsc2U7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCFkaXNhYmxlZCkge1xuICAgICAgdmFyIGlzVG91Y2ggPSBpc1RvdWNoRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuXG4gICAgICBpZiAoaXNEcmFnZ2FibGUoZS50YXJnZXQpICYmIChpc1RvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaCB8fCAhZS5idXR0b24pKSB7XG4gICAgICAgIGlmICghQ29udHJvbGxlci5pc0J1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N5KCkpIHtcbiAgICAgICAgICB0YXJnZXQgPSBpc1RvdWNoID8gdHJhY2sgOiB3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG93O1xuICAgICAgICAgIGRyYWdnaW5nID0gc3RhdGUuaXMoW01PVklORywgU0NSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMTElOR10pO1xuICAgICAgICAgIHByZXZCYXNlRXZlbnQgPSBudWxsO1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9NT1ZFX0VWRU5UUywgb25Qb2ludGVyTW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgICAgICBiaW5kKHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQsIFBPSU5URVJfVVBfRVZFTlRTLCBvblBvaW50ZXJVcCwgU0NST0xMX0xJU1QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5FUl9PUFRJT05TKTtcbiAgICAgICAgICBNb3ZlLmNhbmNlbCgpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBTY3JvbGwuY2FuY2VsKCk7XG4gICAgICAgICAgc2F2ZShlKTtcbiAgICAgICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxzZSB7XG4gICAgICAgICAgcHJldmVudChlLCB0cnVlKTtcbiAgICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblBvaW50ZXJNb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlKSB7XG4gICAgaWYgKCFzdGF0ZS5pcyhEUkFHR0lORykpIHtcbiAgICAgIHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zZXQoRFJBR0dJTkcpO1xuICAgICAgZW1pdChFVkVOVF9EUkFHKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgaWYgKGUuY2FuY2VsYWJsZSkge1xuICAgICAgaWYgKGRyYWdnaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZykge1xuICAgICAgICBNb3ZlLnRyYW5zbGF0ZShiYXNlUG9zaXRpb24gKyBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWluKGRpZmZDb29yZChlKSkpO1xuICAgICAgICB2YXIgZXhwaXJlZCA9IGRpZmZUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZShlKSA+IExPR19JTlRFUlZBTDtcbiAgICAgICAgdmFyIGhhc0V4Y2VlZGVkID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2VlZGVkICE9PSAoZXhjZWVkZWQgPSBleGNlZWRlZExpbWl0KCkpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoZXhwaXJlZCB8fCBoYXNFeGNlZWRlZCkge1xuICAgICAgICAgIHNhdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xpY2tQcmV2ZW50ZWQgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbiAgICAgICAgZW1pdChFVkVOVF9EUkFHR0lORyk7XG4gICAgICAgIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuICAgICAgfSBlbHNlIGlmIChpc1NsaWRlckRpcmVjdGlvbihlKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgZHJhZ2dpbmcgPSBzaG91bGRTdGFydChlKTtcbiAgICAgICAgcHJldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclVwKGUpIHtcbiAgICBpZiAoc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUuc2V0KElETEUpO1xuICAgICAgZW1pdChFVkVOVF9EUkFHR0VEKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICBtb3ZlKGUpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXZlbnQoZSk7XG4gICAgfVxuXG4gICAgdW5iaW5kKHRhcmdldCwgUE9JTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUpO1xuICAgIHVuYmluZCh0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXApO1xuICAgIGRyYWdnaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmICghZGlzYWJsZWQgJiYgY2xpY2tQcmV2ZW50ZWQpIHtcbiAgICAgIHByZXZlbnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmUoZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwcmV2QmFzZUV2ZW50ID0gYmFzZUV2ZW50O1xuICAgIGJhc2VFdmVudCA9IGU7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGJhc2VQb3NpdGlvbiA9IGdldFBvc2l0aW9uKCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbW92ZShlKSB7XG4gICAgdmFyIHZlbG9jaXR5ID0gY29tcHV0ZVZlbG9jaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eShlKTtcbiAgICB2YXIgZGVzdGluYXRpb24gPSBjb21wdXRlRGVzdGluYXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbG9jaXR5KTtcbiAgICB2YXIgcmV3aW5kID0gb3B0aW9ucy5yZXdpbmQgJiYgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMucmV3aW5kQnlEcmFnO1xuICAgIHJlZHVjZShmYWxzZSk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGlzRnJlZSkge1xuICAgICAgQ29udHJvbGxlci5zY3JvbGwoZGVzdGluYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCAwLCBvcHRpb25zLnNuYXApO1xuICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcyhGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FERSkpIHtcbiAgICAgIENvbnRyb2xsZXIuZ28ob3JpZW50KHNpZ24odmVsb2NpdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkgPCAwID8gcmV3aW5kID8gIjwiIDogIi0iIDogcmV3aW5kID8gIj4iIDogIisiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiBleGNlZWRlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcmV3aW5kKSB7XG4gICAgICBDb250cm9sbGVyLmdvKGV4Y2VlZGVkTGltaXQodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydWUpID8gIj4iIDogIjwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29udHJvbGxlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ28oQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXRpb24pLCB0cnVlKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmVkdWNlKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0KGUpIHtcbiAgICB2YXIgdGhyZXNob2xkcyA9IG9wdGlvbnMuZHJhZ01pblRocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc2hvbGQ7XG4gICAgdmFyIGlzT2JqID0gaXNPYmplY3QodGhyZXNob2xkcyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBtb3VzZSA9IGlzT2JqICYmIHRocmVzaG9sZHMubW91c2UgfHwgMDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIHRvdWNoID0gKGlzT2JqID8gdGhyZXNob2xkcy50b3VjaCA6ICt0aHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidob2xkcykgfHwgMTA7XG4gICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gKGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RvdWNoRXZlbnQoZSkgPyB0b3VjaCA6IG1vdXNlKTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBpc1NsaWRlckRpcmVjdGlvbihlKSB7XG4gICAgcmV0dXJuIGFicyhkaWZmQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JkKGUpKSA+IGFicyhkaWZmQ29vcmQoZSwgdHJ1ZSkpO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGNvbXB1dGVWZWxvY2l0eShlKSB7XG4gICAgaWYgKFNwbGlkZTIuaXMoTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPT1ApIHx8ICFleGNlZWRlZCkge1xuICAgICAgdmFyIHRpbWUgPSBkaWZmVGltZShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICAgIGlmICh0aW1lICYmIHRpbWUgPCBMT0dfSU5URVJWQUwpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJldHVybiBkaWZmQ29vcmQoZSkgLyB0aW1lO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlRGVzdGluYXRpb24odmVsb2NpdHkpIHtcbiAgICByZXR1cm4gZ2V0UG9zaXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgKyBzaWduKHZlbG9jaXR5KSAqIG1pbihhYnModmVsb2NpdHkpICogKG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmZsaWNrUG93ZXIgfHwgNjAwKSwgaXNGcmVlID8gSW5maW5pdHkgOiBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuTGF5b3V0Lmxpc3RTaXplKCkgKiAob3B0aW9ucy5mbGlja01heFBhZ2VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCAxKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkaWZmQ29vcmQoZSwgb3J0aG9nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwpIHtcbiAgICByZXR1cm4gY29vcmRPZihlLCBvcnRob2dvbmFsKSAtIGNvb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZE9mKGdldEJhc2VFdmVudChlKSwgb3J0aG9nb25hbCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgIHJldHVybiB0aW1lT2YoZSkgLSB0aW1lTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKGdldEJhc2VFdmVudChlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRCYXNlRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50KGUpIHtcbiAgICByZXR1cm4gYmFzZUV2ZW50ID09PSBlICYmIHByZXZCYXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50IHx8IGJhc2VFdmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvb3JkT2YoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIG9ydGhvZ29uYWwpIHtcbiAgICByZXR1cm4gKGlzVG91Y2hFdmVudChlKSA/IGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNoYW5nZWRUb3VjaGVzWzBdIDogZSlbInBhZ2UiICsgcmVzb2x2ZShvcnRob2dvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hbCA/ICJZIiA6ICJYIildO1xuICB9XG5cbiAgZnVuY3Rpb24gY29uc3RyYWluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhkaWZmKSB7XG4gICAgcmV0dXJuIGRpZmYgLyAoZXhjZWVkZWQgJiYgU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoU0xJREUpID8gRlJJQ1RJT04gOiAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc0RyYWdnYWJsZSh0YXJnZXQyKSB7XG4gICAgdmFyIG5vRHJhZyA9IG9wdGlvbnMubicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvRHJhZztcbiAgICByZXR1cm4gIW1hdGNoZXModGFyZ2V0MiwgIi4iICsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BBR0lOQVRJT05fUEFHRSArICIsIC4iICsgQ0xBU1NfQVJST1cpICYmICghbm9EcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZyB8fCAhbWF0Y2hlcyh0YXJnZXQyLCBub0RyYWcpKTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBpc1RvdWNoRXZlbnQoZSkge1xuICAgIHJldHVybiB0eXBlb2YgVG91Y2hFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnQgIT09ICJ1bmRlZmluZWQiICYmIGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4gICAgcmV0dXJuIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnZ2luZztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUodmFsdWUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBtb3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgIGlzRHJhZ2dpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0RyYWdnaW5nXG4gIH07XG59XG5cbnZhciBOT1JNQUxJWkFUSU9OX01BUCA9IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIFNwYWNlYmFyOiAiICIsXG4gIFJpZ2h0OiBBUlJPV19SSUdIVCxcbiAgTGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnQ6IEFSUk9XX0xFRlQsXG4gIFVwOiBBUlJPV19VUCxcbiAgRG93bjogQVJST1dfRE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV05cbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAga2V5ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkua2V5O1xuICByZXR1cm4gTk9STUFMSVonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRJT05fTUFQW2tleV0gfHwga2V5O1xufVxuXG52YXIgS0VZQk9BUkRfRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gImtleWRvd24iO1xuXG5mdW5jdGlvbiBLZXlib2FyZChTcGxpZGUyLCBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEwID0gRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAub24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAuYmluZCxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bmJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMC51bmJpbmQ7XG5cbiAgdmFyIHJvb3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gU3BsaWRlMi5yb290O1xuICB2YXIgcmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24ucmVzb2x2ZTtcbiAgdmFyIHRhcmdldDtcbiAgdmFyIGRpc2FibGVkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICAgb24oRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1VQREFURUQsIGRlc3Ryb3kpO1xuICAgIG9uKEVWRU5UX1VQREFURUQsIGluaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KTtcbiAgICBvbihFVkVOVF9NT1ZFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGluaXQoKSB7XG4gICAgdmFyIGtleWJvYXJkID0gb3B0aW9ucy5rZXlib2FyZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICBpZiAoa2V5Ym9hcmQpIHtcbiAgICAgIHRhcmdldCA9IGtleWJvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZCA9PT0gImdsb2JhbCIgPyB3aW5kb3cgOiByb290O1xuICAgICAgYmluZCh0YXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0LCBLRVlCT0FSRF9FVkVOVCwgb25LZXlkb3duKTtcbiAgICB9XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICB1bmJpbmQodGFyZ2V0LCBLRVlCT0FSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RfRVZFTlQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzYWJsZSh2YWx1ZSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3ZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX2Rpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgZGlzYWJsZWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZTtcbiAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBkaXNhYmxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfZGlzYWJsZWQ7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3duKGUpIHtcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICB2YXIga2V5ID0gbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm1hbGl6ZUtleShlKTtcblxuICAgICAgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEVGVCkpIHtcbiAgICAgICAgU3BsaWRlMi5nbygiPCIpO1xuICAgICAgfSBlbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX1JJR0hUKSkge1xuICAgICAgICBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5nbygiPiIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIGRpc2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBkaXNhYmxlXG4gIH07XG59XG5cbnZhciBTUkNfREFUQV9BVFRSSUJVVEUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREFUQV9BVFRSSUJVVEUgKyAiLWxhenkiO1xudmFyIFNSQ1NFVF9EQVRBX0FUVFJJQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVVEUgPSBTUkNfREFUQV9BVFRSSUJVVEUgKyAiLXNyY3NldCI7XG52YXIgSU1BR0VfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NFTEVDVE9SID0gIlsiICsgU1JDX0RBVEFfQVRUUklCVVRFICsgIl0sIFsiICsgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSQ1NFVF9EQVRBX0FUVFJJQlVURSArICJdIjtcblxuZnVuY3Rpb24gTGF6eUxvYWQoUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlMTEgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTExLm9uLFxuICAgICAgb2ZmID0gX0V2ZW50SW50ZXJmYWNlMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxLm9mZixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMS5iaW5kLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UxMS5lbWl0O1xuXG4gIHZhciBpc1NlcXVlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aWFsID0gb3B0aW9ucy5sYXp5TG9hZCA9PT0gInNlcXVlbnRpYWwiO1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50cyA9IFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdO1xuICB2YXIgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpZXMgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpZiAob3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMubGF6eUxvYWQpIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIG9uKEVWRU5UX1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUZSRVNILCBpbml0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBlbXB0eShlbnRyaWVzKTtcbiAgICByZWdpc3RlcigpO1xuXG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIChpc1NlcXVlbnRpYWwpIHtcbiAgICAgIGxvYWROZXh0KCk7XG4gICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBvZmYoZXZlbnRzKTtcbiAgICAgIG9uKGV2ZW50cywgY2hlY2spJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyKCkge1xuICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoU2xpZGUpIHtcbiAgICAgIHF1ZXJ5QWxsKFNsaWRlLnNsaWRlLCBJTUFHRV9TRUxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NUT1IpLmZvckVhY2goZnVuY3Rpb24gKGltZykge1xuICAgICAgICB2YXIgc3JjID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0dHJpYnV0ZShpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgc3Jjc2V0ID0gZ2V0QXR0cmlidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUUkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQlVURSk7XG5cbiAgICAgICAgaWYgKHNyYyAhPT0gaW1nLnNyYyB8fCBzcmNzZXQgIT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBpbWcuc3Jjc2V0KSB7XG4gICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmNsYXNzZXMuc3Bpbm5lcjtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gaW1nLnBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnRFbGVtZW50O1xuICAgICAgICAgIHZhciBzcGlubmVyID0gY2hpbGQocGFyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgIi4iICsgY2xhc3NOYW1lKSB8fCBjcmVhdGUoInNwYW4iLCBjbGFzc05hbWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQpO1xuICAgICAgICAgIGVudHJpZXMucHVzaChbaW1nLCBTbGlkZSwgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5uZXJdKTtcbiAgICAgICAgICBpbWcuc3JjIHx8IGRpc3BsYXkoaW1nLCAibm9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY2hlY2soKSB7XG4gICAgZW50cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAoZGF0YSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gb3B0aW9ucy5wZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAqICgob3B0aW9ucy5wcmVsb2FkUGFnZXMgfHwgMSkgKyAxKSAtIDE7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGRhdGFbMV0uaXNXaXRoaW4oU3BsaWRlMi5pbmRleCwgZGlzdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSA/IGxvYWQoZGF0YSkgOiB0cnVlO1xuICAgIH0pO1xuICAgIGVudHJpZXMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCB8fCBvZmYoZXZlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoZGF0YSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgaW1nID0gZGF0YVswXTtcbiAgICBhZGRDbGFzcyhkYXRhWzFdLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgQ0xBU1NfTE9BRElORyk7XG4gICAgYmluZChpbWcsICJsb2FkIGVycm9yIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGFwcGx5KG9uTG9hZCwgZGF0YSkpO1xuICAgIHNldEF0dHJpYnV0ZShpbWcsICJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JjIiwgZ2V0QXR0cmlidXRlKGltZywgU1JDX0RBVEFfQVRUUklCVVRFKSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNldEF0dHJpYnV0ZShpbWcsICJzcmNzZXQiLCBnZXRBdHRyaWJ1dGUoaW1nLCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JDU0VUX0RBVEFfQVRUUklCVVRFKSk7XG4gICAgcmVtb3ZlQXR0cmlidXRlKGltZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgcmVtb3ZlQXR0cmlidXRlKGltZywgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSQ1NFVF9EQVRBX0FUVFJJQlVURSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkxvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKGRhdGEsIGUpIHtcbiAgICB2YXIgaW1nID0gZGF0YVswXSxcbiAgICAgICAgU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlID0gZGF0YVsxXTtcbiAgICByZW1vdmVDbGFzcyhTbGlkZS5zbGlkZSwgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xPQURJTkcpO1xuXG4gICAgaWYgKGUudHlwZSAhPT0gImVycm9yIikge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlbW92ZShkYXRhWzJdKTtcbiAgICAgIGRpc3BsYXkoaW1nLCAiIik7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdChFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGltZywgU2xpZGUpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQoRVZFTlRfUkVTSVpFKTtcbiAgICB9XG5cbiAgICBpc1NlcXVlbnRpYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIGxvYWROZXh0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2FkTmV4dCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZW50cmllcy5sZW5ndGggJiYgbG9hZChlbnRyaWVzLnNoaWZ0KCkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHBseShlbXB0eSwgZW50cmllcyksXG4gICAgY2hlY2s6IGNoZWNrXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBQYWdpbmF0aW9uKFNwbGlkZTIsIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMiwgb3B0aW9ucykge1xuICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMik7XG4gIHZhciBvbiA9IGV2ZW50Lm9uLFxuICAgICAgZW1pdCA9IGV2ZW50LmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LFxuICAgICAgYmluZCA9IGV2ZW50LmJpbmQ7XG4gIHZhciBTbGlkZXMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuU2xpZGVzLFxuICAgICAgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBoYXNGb2N1cyA9IENvbnRyb2xsZXIuaGFzRm9jdXMsXG4gICAgICBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXggPSBDb250cm9sbGVyLmdldEluZGV4LFxuICAgICAgZ28gPSBDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlci5nbztcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24ucmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sdmU7XG4gIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLnBhZ2luYXRpb247XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgaXRlbXMgPSBbXTtcbiAgdmFyIGxpc3Q7XG4gIHZhciBwYWdpbmF0aW9uQ2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXM7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWF9DSEFOR0VEXSwgbW91bnQpO1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucGFnaW5hdGlvbjtcbiAgICBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KHBsYWNlaG9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciwgZW5hYmxlZCA/ICIiIDogIm5vbmUiKTtcblxuICAgIGlmIChlbmFibGVkKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgb24oW0VWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfU0NST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEVEXSwgdXBkYXRlKTtcbiAgICAgIGNyZWF0ZVBhZ2luYXRpb24oKTtcbiAgICAgIHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUoKTtcbiAgICAgIGVtaXQoRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVELCB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICBpdGVtczogaXRlbXNcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBnZXRBdChTcGxpZGUyLmluZGV4KSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGRlc3Ryb3koKSB7XG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJlbW92ZShwbGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vob2xkZXIgPyBzbGljZShsaXN0LmNoaWxkcmVuKSA6IGxpc3QpO1xuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZUNsYXNzKGxpc3QsIHBhZ2luYXRpb25DbGFzc2VzKTtcbiAgICAgIGVtcHR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtcyk7XG4gICAgICBsaXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBldmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFnaW5hdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIGxlbmd0aCA9IFNwbGlkZTIubGVuZ3RoO1xuICAgIHZhciBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgICAgaTE4biA9IG9wdGlvbnMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxOG4sXG4gICAgICAgIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2U7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYXggPSBoYXNGb2N1cygpID8gQ29udHJvbGxlci5nZXRFbmQoKSArIDEgOiBjZWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbChsZW5ndGggLyBwZXJQYWdlKTtcbiAgICBsaXN0ID0gcGxhY2Vob2xkZXIgfHwgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWF0ZSgidWwiLCBjbGFzc2VzLnBhZ2luYXRpb24sIEVsZW1lbnRzLnRyYWNrLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnRFbGVtZW50KTtcbiAgICBhZGRDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMgPSBDTEFTU19QQUdJTkFUSU9OICsgIi0tIiArIGdldERpcmVjdGlvbigpKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICAgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEF0dHJpYnV0ZShsaXN0LCBBUklBX0xBQkVMLCBpMThuLnNlbGVjdCk7XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZShsaXN0LCBBUklBX09SSUVOVEFUSU9OLCBnZXREaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgPT09IFRUQiA/ICJ2ZXJ0aWNhbCIgOiAiIik7XG5cbiAgICBmb3IgKHZhciBpID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7IGkgPCBtYXg7IGkrKykge1xuICAgICAgdmFyIGxpID0gY3JlYXRlKCJsaSIsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsLCBsaXN0KTtcbiAgICAgIHZhciBidXR0b24gPSBjcmVhdGUoImJ1dHRvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIGNsYXNzOiBjbGFzc2VzLnBhZ2UsXG4gICAgICAgIHR5cGU6ICJiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0dG9uIlxuICAgICAgfSwgbGkpO1xuICAgICAgdmFyIGNvbnRyb2xzID0gU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXRJbihpKS5tYXAoZnVuY3Rpb24gKFNsaWRlKSB7XG4gICAgICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUuc2xpZGUuaWQ7XG4gICAgICB9KTtcbiAgICAgIHZhciB0ZXh0ID0gIWhhc0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cygpICYmIHBlclBhZ2UgPiAxID8gaTE4bi5wYWdlWCA6IGkxOG4uc2xpZGVYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGJpbmQoYnV0dG9uLCAiY2xpY2siLCBhcHBseShvbkNsaWNrLCBpKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICBpZiAob3B0aW9ucy5wYWdpbmF0aW9uS2V5Ym9hcmQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGJpbmQoYnV0dG9uLCAia2V5ZG93biIsIGFwcGx5KG9uS2V5ZG93biwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kpKTtcbiAgICAgIH1cblxuICAgICAgc2V0QXR0cmlidXRlKGxpLCBST0xFLCAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXNlbnRhdGlvbiIpO1xuICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgUk9MRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJ0YWIiKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIEFSSUFfQ09OVFJPTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLCBjb250cm9scy5qb2luKCIgIikpO1xuICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sIEFSSUFfTEFCRUwsIGZvcm1hdCh0ZXh0LCBpICsgMSkpO1xuICAgICAgc2V0QXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZShidXR0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgICAgaXRlbXMucHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoe1xuICAgICAgICBsaTogbGksXG4gICAgICAgIGJ1dHRvbjogYnV0dG9uLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcGFnZTogaVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9uQ2xpY2socGFnZSkge1xuICAgIGdvKCI+IiArIHBhZ2UsIHRydWUpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihwYWdlLCBlKSB7XG4gICAgdmFyIGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgdmFyIGRpciA9IGdldERpcmVjdGlvbigpO1xuICAgIHZhciBuZXh0UGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UgPSAtMTtcblxuICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfUklHSFQsIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzZSwgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSArK3BhZ2UgJSBsZW5ndGg7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0gZWxzZSBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX0xFRlQsIGZhbHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZGlyKSkge1xuICAgICAgbmV4dFBhZ2UgPSAoLS1wYWdlICsgbGVuZ3RoKSAlIGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5ndGg7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJIb21lIikge1xuICAgICAgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHRQYWdlID0gMDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gIkVuZCIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBuZXh0UGFnZSA9IGxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgdmFyIGl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXRlbXNbbmV4dFBhZ2VdO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cyhpdGVtLmJ1dHRvbik7XG4gICAgICBnbygiPiIgKyBuZXh0UGFnZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcHJldmVudChlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0RGlyZWN0aW9uKCkge1xuICAgIHJldHVybiBvcHRpb25zLnBhZ2luYXRpb25EaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0aW9uIHx8IG9wdGlvbnMuZGlyZWN0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0KGluZGV4KSB7XG4gICAgcmV0dXJuIGl0ZW1zW0NvbnRyb2xsZXIudG9QYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZShpbmRleCldO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgcHJldiA9IGdldEF0KGdldEluZGV4KHRydWUpKTtcbiAgICB2YXIgY3VyciA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRBdChnZXRJbmRleCgpKTtcblxuICAgIGlmIChwcmV2KSB7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGJ1dHRvbiA9IHByZXYuYnV0dG9uO1xuICAgICAgcmVtb3ZlQ2xhc3MoYnV0dG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgQ0xBU1NfQUNUSVZFKTtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZShidXR0b24sIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUklBX1NFTEVDVEVEKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFRBQl9JTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidERVgsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoY3Vycikge1xuICAgICAgdmFyIF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnV0dG9uID0gY3Vyci5idXR0b247XG4gICAgICBhZGRDbGFzcyhfYnV0dG9uLCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfQUNUSVZFKTtcbiAgICAgIHNldEF0dHJpYnV0ZShfYnV0dG9uLCBBUklBX1NFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFQ1RFRCwgdHJ1ZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVEFCX0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWCwgIiIpO1xuICAgIH1cblxuICAgIGVtaXQoRVZFTlRfUEFHSU5BVElPTl8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVBEQVRFRCwge1xuICAgICAgbGlzdDogbGlzdCxcbiAgICAgIGl0ZW1zOiBpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbXNcbiAgICB9LCBwcmV2LCBjdXJyKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0ZW1zOiBpdGVtcyxcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3ksXG4gICAgZ2V0QXQ6IGdldEF0LFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xufVxuXG52YXIgVFJJR0dFUl9LRVlTID0gWyIgIiwgIkVudGVyIl07XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBTeW5jKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaXNOYXZpZ2F0aW9uID0gb3B0aW9ucy5pc05hdmlnYXRpb24sXG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGb2N1cztcbiAgdmFyIGV2ZW50cyA9IFsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBTcGxpZGUyLnNwbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgaWYgKCF0YXJnZXQuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzUGFyZW50KSB7XG4gICAgICAgIHN5bmMoU3BsaWRlMiwgdGFyZ2V0LnNwbGlkZSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBzeW5jKHRhcmdldC5zcGxpZGUsIFNwbGlkZTIpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgICB9KTtcblxuICAgIGlmIChpc05hdmlnYXRpb24pIHtcbiAgICAgIG5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZ2F0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBlbXB0eShldmVudHMpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICAgIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3luYyhzcGxpZGUsIHRhcmdldCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShzcGxpZGUpO1xuICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudC5vbihFVkVOVF9NT1ZFLCBmdW5jdGlvbiAoaW5kZXgsIHByZXYsIGRlc3QpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB0YXJnZXQuZ28odGFyZ2V0LmlzKExPT1ApID8gZGVzdCA6IGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCk7XG4gICAgfSk7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpO1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIG5hdmlnYXRlKCkge1xuICAgIHZhciBldmVudCA9IEV2ZW50SW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZShTcGxpZGUyKTtcbiAgICB2YXIgb24gPSBldmVudC5vbjtcbiAgICBvbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ0xJQ0ssIG9uQ2xpY2spO1xuICAgIG9uKEVWRU5UX1NMSURFX0tFWURPV04sIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbktleWRvd24pO1xuICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHVwZGF0ZSk7XG4gICAgZXZlbnRzLnB1c2goZXZlbnQpO1xuICAgIGV2ZW50LmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgU3BsaWRlMi5zcGxpZGVzKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgc2V0QXR0cmlidXRlKENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzMi5FbGVtZW50cy5saXN0LCBBUklBX09SSUVOVEFUSU9OLCBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5kaXJlY3Rpb24gPT09IFRUQiA/ICJ2ZXJ0aWNhbCIgOiAiIik7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gb25DbGljayhTbGlkZSkge1xuICAgIFNwbGlkZTIuZ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFNsaWRlLmluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZG93bihTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIGUpIHtcbiAgICBpZiAoaW5jbHVkZXMoVFJJR0dFUl9LRVlTLCBub3JtYWxpeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlS2V5KGUpKSkge1xuICAgICAgb25DbGljayhTbGlkZSk7XG4gICAgICBwcmV2ZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldHVwOiBhcHBseShDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIuTWVkaWEuc2V0LCB7XG4gICAgICBzbGlkZUZvY3VzOiBpc1VuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmluZWQoc2xpZGVGb2N1cykgPyBpc05hdmlnYXRpb24gOiBzbGlkZUZvY3VzXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0sIHRydWUpLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveSxcbiAgICByZW1vdW50OiByZW1vdW50XG4gIH07XG59XG5cbmZ1bmN0aW9uIFdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZTEyID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCA9IF9FdmVudEludGVyZmFjZTEyLmJpbmQ7XG5cbiAgdmFyIGxhc3RUaW1lID0gMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wdGlvbnMud2hlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKSB7XG4gICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLCAid2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIiwgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICBpZiAoZS5jYW5jZWxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZSkge1xuICAgICAgdmFyIGRlbHRhWSA9IGUuZGVsdGFZO1xuICAgICAgdmFyIGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgdmFyIHRpbWVTdGFtcCA9IHRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2YoZSk7XG5cbiAgICAgIHZhciBfbWluID0gb3B0aW9ucy53aGVlbE1pblRocmVzaG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGQgfHwgMDtcblxuICAgICAgdmFyIHNsZWVwID0gb3B0aW9ucy53aGVlbFNsZWVwIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAwO1xuXG4gICAgICBpZiAoYWJzKGRlbHRhWSkgPiBfbWluICYmIHRpbWVTdGFtcCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBsYXN0VGltZSA+IHNsZWVwKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oYmFja3dhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkcyA/ICI8IiA6ICI+Iik7XG4gICAgICAgIGxhc3RUaW1lID0gdGltZVN0YW1wO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH1cblxuICAgICAgc2hvdWxkUHJldmVudChiYWNrd2FyZHMpICYmIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZFByZXZlbnQoYmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcykge1xuICAgIHJldHVybiAhb3B0aW9ucy5yZWxlYXNlV2hlZWwgfHwgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTIuc3RhdGUuaXMoTU9WSU5HKSB8fCBDb21wb25lbnRzMi5Db250cm9sbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInci5nZXRBZGphY2VudChiYWNrd2FyZHMpICE9PSAtMTtcbiAgfVxuXG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4ge1xuICAgIG1vdW50OiBtb3VudFxuICB9O1xufVxuXG52YXIgU1JfUkVNT1ZBTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfREVMQVkgPSA5MDtcblxuZnVuY3Rpb24gTGl2ZShTcGxpZGUyLCBDb21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEzID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxMy5vbjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMudHJhY2s7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMubGl2ZSAmJiAhb3B0aW9ucy5pc05hdmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uO1xuICB2YXIgc3IgPSBjcmVhdGUoInNwYW4iLCBDTEFTU19TUik7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoU1JfUkVNT1ZBTF9ERUxBWSwgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KHRvZ2dsZSwgZmFsc2UpKTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgIGRpc2FibGUoIUNvbXBvbmVudHMyLkF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcGxheS5pc1BhdXNlZCgpKTtcbiAgICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQVRPTUlDLCB0cnVlKTtcbiAgICAgIHNyLnRleHRDb250ZW50ID0gIlxcdTIwMjYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgICAgIG9uKEVWRU5UX0FVVE9QTEFZX1BMQVksIGFwcGx5KGRpc2FibGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKSk7XG4gICAgICBvbihFVkVOVF9BVVRPUExBWV9QQVVTRSwgYXBwbHkoZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGUsIGZhbHNlKSk7XG4gICAgICBvbihbRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTExFRF0sIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB0b2dnbGUoYWN0aXZlKSB7XG4gICAgc2V0QXR0cmlidXRlKHRyYWNrLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9CVVNZLCBhY3RpdmUpO1xuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGVuZCh0cmFjaywgc3IpO1xuICAgICAgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSBlbHNlIHtcbiAgICAgIHJlbW92ZShzcik7XG4gICAgICBpbnRlcnZhbC5jYW5jZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlQXR0cmlidXRlKHRyYWNrLCBbQVJJQV9MSVZFLCBBUklBX0FUT01JQywgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQlVTWV0pO1xuICAgIHJlbW92ZShzcik7XG4gIH1cblxuICBmdW5jdGlvbiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzYWJsZShkaXNhYmxlZCkge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHRyYWNrLCBBUklBX0xJVkUsIGRpc2FibGVkID8gIm9mZiIgOiAicCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGl0ZSIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgIGRlc3Ryb3k6IGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95XG4gIH07XG59XG5cbnZhciBDb21wb25lbnRDb25zdHJ1Y3RvcnMgPSAvKiNfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIE1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpYTogTWVkaWEsXG4gIERpcmVjdGlvbjogRGlyZWN0aW9uLFxuICBFbGVtZW50czogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzLFxuICBTbGlkZXM6IFNsaWRlcyxcbiAgTGF5b3V0OiBMYXlvdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBDbG9uZXM6IENsb25lcyxcbiAgTW92ZTogTW92ZSxcbiAgQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXI6IENvbnRyb2xsZXIsXG4gIEFycm93czogQXJyb3dzLFxuICBBdXRvcGxheTogQXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9wbGF5LFxuICBDb3ZlcjogQ292ZXIsXG4gIFNjcm9sbDogU2Nyb2xsLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRHJhZzogRHJhZyxcbiAgS2V5Ym9hcmQ6IEtleWJvYXJkLFxuICBMYXp5TG9hZDogTGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInenlMb2FkLFxuICBQYWdpbmF0aW9uOiBQYWdpbmF0aW9uLFxuICBTeW5jOiBTeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYyxcbiAgV2hlZWw6IFdoZWVsLFxuICBMaXZlOiBMaXZlXG59KTtcbnZhciBJMTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTiA9IHtcbiAgcHJldjogIlByZXZpb3VzIHNsaWRlIixcbiAgbmV4dDogIk5leHQgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIixcbiAgZmlyc3Q6ICJHbyB0byBmaXJzdCBzbGlkZSIsXG4gIGxhc3Q6ICJHbyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gbGFzdCBzbGlkZSIsXG4gIHNsaWRlWDogIkdvIHRvIHNsaWRlICVzIixcbiAgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VYOiAiR28gdG8gcGFnZSAlcyIsXG4gIHBsYXk6ICJTdGFydCBhdXRvcGxheSIsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwYXVzZTogIlBhdXNlIGF1dG9wbGF5IixcbiAgY2Fyb3VzZWw6ICJjYXJvdXNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLFxuICBzbGlkZTogInNsaWRlIixcbiAgc2VsZWN0OiAiU2VsZWN0IGEgc2xpZGUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHNob3ciLFxuICBzbGlkZUxhYmVsOiAiJXMgb2YgJXMiXG59O1xudmFyIERFRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVUxUUyA9IHtcbiAgdHlwZTogInNsaWRlIixcbiAgcm9sZTogInJlZ2lvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBzcGVlZDogNDAwLFxuICBwZXJQYWdlOiAxLFxuICBjbG9uZVN0YXR1czogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUsXG4gIGFycm93czogdHJ1ZSxcbiAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25LZXlib2FyZDogdHJ1ZSxcbiAgaW50ZXJ2YWw6IDVlMyxcbiAgcGF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlT25Ib3ZlcjogdHJ1ZSxcbiAgcGF1c2VPbkZvY3VzOiB0cnVlLFxuICByZXNldFByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ncmVzczogdHJ1ZSxcbiAgZWFzaW5nOiAiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLjUsIDEpIixcbiAgZHJhZzogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAibHRyIixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyaW1TcGFjZTogdHJ1ZSxcbiAgZm9jdXNhYmxlTm9kZXM6ICJhLCBidXR0b24sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdCwgaWZyYW1lIixcbiAgbGl2ZTogdHJ1ZSxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNsYXNzZXM6IENMQVNTRVMsXG4gIGkxOG46IEkxOE4sXG4gIHJlZHVjZWRNb3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduOiB7XG4gICAgc3BlZWQ6IDAsXG4gICAgcmV3aW5kU3BlZWQ6IDAsXG4gICAgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dG9wbGF5OiAicGF1c2UiXG4gIH1cbn07XG5cbmZ1bmN0aW9uIEZhZGUoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBTbGlkZXMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuU2xpZGVzO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEludGVyZmFjZShTcGxpZGUyKS5vbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRlJFU0hdLCBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChTbGlkZSkge1xuICAgICAgU2xpZGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlWCgtIiArIDEwMCAqIFNsaWRlLmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCArICIlKSIpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4LCBkb25lKSB7XG4gICAgU2xpZGVzLnN0eWxlKCJ0cmFuc2l0aW9uIiwgIm9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaXR5ICIgKyBvcHRpb25zLnNwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhc2luZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIG5leHRUaWNrKGRvbmUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQ6IG1vdW50LFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBjYW5jZWw6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb29wXG4gIH07XG59XG5cbmZ1bmN0aW9uIFNsaWRlKFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXIsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2Nyb2xsID0gQ29tcG9uZW50czIuU2Nyb2xsO1xuICB2YXIgbGlzdCA9IENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMi5FbGVtZW50cy5saXN0O1xuICB2YXIgdHJhbnNpdGlvbiA9IGFwcGx5KHN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSwgbGlzdCwgInRyYW5zaXRpb24iKTtcbiAgdmFyIGVuZENhbGxiYWNrOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBFdmVudEludGVyZmFjZShTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMikuYmluZChsaXN0LCAidHJhbnNpdGlvbmVuZCIsIGZ1bmN0aW9uIChlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgaWYgKGUudGFyZ2V0ID09PSBsaXN0ICYmIGVuZENhbGxiYWNrKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgZW5kQ2FsbGJhY2soKTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChpbmRleCwgZG9uZSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB2YXIgZGVzdGluYXRpb24gPSBNb3ZlLnRvUG9zaXRpb24oaW5kZXgsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICB2YXIgcG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzcGVlZCA9IGdldFNwZWVkKGluZGV4KTtcblxuICAgIGlmIChhYnMoZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uIC0gcG9zaXRpb24pID49IDEgJiYgc3BlZWQgPj0gMSkge1xuICAgICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIChvcHRpb25zLnVzZVNjcm9sbCkge1xuICAgICAgICBTY3JvbGwuc2Nyb2xsKGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0aW5hdGlvbiwgc3BlZWQsIGZhbHNlLCBkb25lKTtcbiAgICAgIH0gZWxzZSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB0cmFuc2l0aW9uKCJ0cmFuc2Zvcm0gIiArIHNwZWVkICsgIm1zICIgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5lYXNpbmcpO1xuICAgICAgICBNb3ZlLnRyYW5zbGF0ZShkZXN0aW5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24sIHRydWUpO1xuICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH0gZWxzZSB7XG4gICAgICBNb3ZlLmp1bXAoaW5kZXgpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RvbmUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zaXRpb24oIiIpO1xuICAgIFNjcm9sbC5jYW5jZWwoKTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBnZXRTcGVlZChpbmRleCkge1xuICAgIHZhciByZXdpbmRTcGVlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBvcHRpb25zLnJld2luZFNwZWVkO1xuXG4gICAgaWYgKFNwbGlkZTIuaXMoU0xJREUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSAmJiByZXdpbmRTcGVlZCkge1xuICAgICAgdmFyIHByZXYgPSBDb250cm9sbGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRJbmRleCh0cnVlKTtcbiAgICAgIHZhciBlbmQgPSBDb250cm9sbGVyLmdldEVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QoKTtcblxuICAgICAgaWYgKHByZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kIHx8IHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ID49IGVuZCAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmV3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFNwZWVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25zLnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn1cblxudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfU3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19TcGxpZGUodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ldmVudCA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZSgpO1xuICAgIHRoaXMuQ29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0YXRlID0gU3RhdGUoQ1JFQVRFRCk7XG4gICAgdGhpcy5zcGxpZGVzID0gW107XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHRoaXMuX28gPSB7fTtcbiAgICB0aGlzLl9FID0ge307XG4gICAgdmFyIHJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXNTdHJpbmcodGFyZ2V0KSA/IHF1ZXJ5KGRvY3VtZW50LCB0YXJnZXQpIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldDtcbiAgICBhc3NlcnQocm9vdCwgcm9vdCArICIgaXMgaW52YWxpZC4iKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICBvcHRpb25zID0gbWVyZ2UoeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGxhYmVsOiBnZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCkgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiLFxuICAgICAgbGFiZWxsZWRieTogZ2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkVMTEVEQlkpIHx8ICIiXG4gICAgfSwgREVGQVVMVFMsIF9TcGxpZGUuZGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBvcHRpb25zIHx8IHt9KTtcblxuICAgIHRyeSB7XG4gICAgICBtZXJnZShvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucywgSlNPTi5wYXJzZShnZXRBdHRyaWJ1dGUocm9vdCwgREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFKSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGFzc2VydChmYWxzZSwgIkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnZhbGlkIEpTT04iKTtcbiAgICB9XG5cbiAgICB0aGlzLl9vID0gT2JqZWN0LmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGUobWVyZ2Uoe30sIG9wdGlvbnMpKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX1NwbGlkZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLm1vdW50ID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1vdW50KEV4dGVuc2lvbnMsIFRyYW5zaXRpb24pIHtcbiAgICB2YXIgX3RoaXMgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcztcblxuICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiA9IHRoaXMuQ29tcG9uZW50cztcbiAgICBhc3NlcnQoc3RhdGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKFtDUkVBVEVELCBERVNUUk9ZRURdKSwgIkFscmVhZHkgbW91bnRlZCEiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3RhdGUuc2V0KENSRUFURUQpO1xuICAgIHRoaXMuX0MgPSBDb21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdGhpcy5fVCA9IFRyYW5zaXRpb24gfHwgdGhpcy5fVCB8fCAodGhpcy5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoRkFERSkgPyBGYWRlIDogU2xpZGUpO1xuICAgIHRoaXMuX0UgPSBFeHRlbnNpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB8fCB0aGlzLl9FO1xuICAgIHZhciBDb25zdHJ1Y3RvcnMgPSBhc3NpZ24oe30sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRDb25zdHJ1Y3RvcnMsIHRoaXMuX0UsIHtcbiAgICAgIFRyYW5zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uOiB0aGlzLl9UXG4gICAgfSk7XG4gICAgZm9yT3duKENvbnN0cnVjdG9ycywgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIChDb21wb25lbnQsIGtleSkge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQoX3RoaXMsIENvbXBvbmVudHMyLCBfdGhpcy5fbyk7XG4gICAgICBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czJba2V5XSA9IGNvbXBvbmVudDtcbiAgICAgIGNvbXBvbmVudC5zZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AgJiYgY29tcG9uZW50LnNldHVwKCk7XG4gICAgfSk7XG4gICAgZm9yT3duKENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMiwgZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgY29tcG9uZW50Lm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCAmJiBjb21wb25lbnQubW91bnQoKTtcbiAgICB9KTtcbiAgICB0aGlzLmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX01PVU5URUQpO1xuICAgIGFkZENsYXNzKHRoaXMucm9vdCwgQ0xBU1NfSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOSVRJQUxJWkVEKTtcbiAgICBzdGF0ZS5zZXQoSURMRSk7XG4gICAgdGhpcy5lbWl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9SRUFEWSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby5zeW5jID0gZnVuY3Rpb24gc3luYyhzcGxpZGUpIHtcbiAgICB0aGlzLnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnB1c2goe1xuICAgICAgc3BsaWRlOiBzcGxpZGVcbiAgICB9KTtcbiAgICBzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLnNwbGlkZXMucHVzaCh7XG4gICAgICBzcGxpZGU6IHRoaXMsXG4gICAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQYXJlbnQ6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnN0YXRlLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJRExFKSkge1xuICAgICAgdGhpcy5fQy5TeW5jLnJlbW91bnQoKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNwbGlkZS5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZ28gPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ28oY29udHJvbCkge1xuICAgIHRoaXMuX0MuQ29udHJvbGxlci5nbyhjb250cm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8ub24gPSBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gb24oZXZlbnRzLCBjYWxsYmFjaykge1xuICAgIHRoaXMuZXZlbnQub24oZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50cywgY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvdG8ub2ZmID0gZnVuY3Rpb24gb2ZmKGV2ZW50cykge1xuICAgIHRoaXMuZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Lm9mZihldmVudHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICB2YXIgX3RoaXMkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50O1xuXG4gICAgKF90aGlzJGV2ZW50ID0gdGhpcy5ldmVudCkuZW1pdC5hcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoX3RoaXMkZXZlbnQsIFtldmVudF0uY29uY2F0KHNsaWNlKGFyZ3VtZW50cywgMSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uYWRkID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGFkZChzbGlkZXMsIGluZGV4KSB7XG4gICAgdGhpcy5fQy5TbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZChzbGlkZXMsIGluZGV4KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG1hdGNoZXIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5fQy5TbGlkZXMucmVtb3ZlKG1hdGNoZXIpO1xuXG4gICAgcmV0dXJuIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xuICB9O1xuXG4gIF9wcm90by5pcyA9IGZ1bmN0aW9uIGlzKHR5cGUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHRoaXMuX28udHlwZSA9PT0gdHlwZTtcbiAgfTtcblxuICBfcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgIHRoaXMuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfUkVGUkVTSCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90by5kZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZWx5KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChjb21wbGV0ZWx5ID09PSB2b2lkIDApIHtcbiAgICAgIGNvbXBsZXRlbHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZXZlbnQgPSB0aGlzLmV2ZW50LFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKHN0YXRlLmlzKENSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVEKSkge1xuICAgICAgRXZlbnRJbnRlcmZhY2UodGhpcykub24oRVZFTlRfUkVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RZLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzLCBjb21wbGV0ZWx5KSk7XG4gICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxzZSB7XG4gICAgICBmb3JPd24odGhpcy5fQywgZnVuY3Rpb24gKGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgY29tcG9uZW50LmRlc3Ryb3kgJiYgY29tcG9uZW50LmRlc3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ295KGNvbXBsZXRlbHkpO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICBldmVudC5lbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9ERVNUUk9ZKTtcbiAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICAgIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wbGV0ZWx5ICYmIGVtcHR5KHRoaXMuc3BsaWRlcyk7XG4gICAgICBzdGF0ZS5zZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKERFU1RST1lFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIF9jcmVhdGVDbGFzcyhfU3BsaWRlLCBbe1xuICAgIGtleTogIm9wdGlvbnMiLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLl9DLk1lZGlhLnNldChvcHRpb25zLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gIH0sIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAga2V5OiAibGVuZ3RoIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICByZXR1cm4gdGhpcy5fQy5TbGlkZXMuZ2V0TGVuZ3RoKHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG4gIH0sIHtcbiAgICBrZXk6ICJpbmRleCIsXG4gICAgZ2V0OiBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuX0MuQ29udHJvbGxlci5nZXRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgoKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gX1NwbGlkZTtcbn0oKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbnZhciBTcGxpZGUgPSBfU3BsaWRlO1xuU3BsaWRlLmRlZmF1bHRzID0ge30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuU3BsaWRlLlNUQVRFUyA9IFNUQVRFUztcbnZhciBDTEFTU19SRU5ERVJFRCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtcmVuZGVyZWQiO1xudmFyIFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHID0ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdFRhZzogInVsIixcbiAgc2xpZGVUYWc6ICJsaSJcbn07XG5cbnZhciBTdHlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTdHlsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLnN0eWxlcyA9IHt9O1xuICAgIHRoaXMuaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaWQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgX3Byb3RvMiA9IFN0eWxlLnByb3RvdHlwZTtcblxuICBfcHJvdG8yLnJ1bGUgPSBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gcnVsZShzZWxlY3RvciwgcHJvcCwgdmFsdWUsIGJyZWFrcG9pbnQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnQgfHwgImRlZmF1bHQiO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgc2VsZWN0b3JzID0gdGhpcy5zdHlsZXNbYnJlYWtwb2ludF0gPSB0aGlzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZXNbYnJlYWtwb2ludF0gfHwge307XG4gICAgdmFyIHN0eWxlcyA9IHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnNbc2VsZWN0b3JdID0gc2VsZWN0b3JzW3NlbGVjdG9yXSB8fCB7fTtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGVzW3Byb3BdID0gdmFsdWU7XG4gIH07XG5cbiAgX3Byb3RvMi5idWlsZCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBidWlsZCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgY3NzID0gIiI7XG5cbiAgICBpZiAodGhpcy5zdHlsZXMuZGVmYXVsdCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKHRoaXMuc3R5bGVzLmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWZhdWx0KTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0eWxlcyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNvcnQoZnVuY3Rpb24gKG4sIG0pIHtcbiAgICAgIHJldHVybiBfdGhpczIub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMubWVkaWFRdWVyeSA9PT0gIm1pbiIgPyArbiAtICttIDogK20gLSArbjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSkuZm9yRWFjaChmdW5jdGlvbiAoYnJlYWtwb2ludCkge1xuICAgICAgaWYgKGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVha3BvaW50ICE9PSAiZGVmYXVsdCIpIHtcbiAgICAgICAgY3NzICs9ICJAbWVkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogIiArIGJyZWFrcG9pbnQgKyAicHgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgICAgICAgY3NzICs9IF90aGlzMi5idWlsZFNlbGVjdG9ycyhfdGhpczIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc1ticmVha3BvaW50XSk7XG4gICAgICAgIGNzcyArPSAifSI7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH07XG5cbiAgX3Byb3RvMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnVpbGRTZWxlY3RvcnMgPSBmdW5jdGlvbiBidWlsZFNlbGVjdG9ycyhzZWxlY3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgY3NzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiO1xuICAgIGZvck93bihzZWxlY3RvcnMsIGZ1bmN0aW9uIChzdHlsZXMsIHNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAoIiMiICsgX3RoaXMzLmlkICsgIiAiICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIHNlbGVjdG9yKS50cmltKCk7XG4gICAgICBjc3MgKz0gc2VsZWN0b3IgKyAiIHsiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGZvck93bihzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICAgICAgY3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyArPSBwcm9wICsgIjogIiArIHZhbHVlICsgIjsiO1xuICAgICAgICB9XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gICAgICBjc3MgKz0gIn0iO1xuICAgIH0pO1xuICAgIHJldHVybiBjc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZTtcbn0oKTtcblxudmFyIFNwbGlkZVJlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVSZW5kZXJlcihjb250ZW50cywgb3B0aW9ucywgY29uZmlnLCBkZWZhdWx0cyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB0aGlzLnNsaWRlcyA9IFtdO1xuICAgIHRoaXMub3B0aW9ucyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7fTtcbiAgICB0aGlzLmJyZWFrcG9pbnRzID0gW107XG4gICAgbWVyZ2UoREVGQVVMVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLCBkZWZhdWx0cyB8fCB7fSk7XG4gICAgbWVyZ2UobWVyZ2UodGhpcy5vcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgREVGQVVMVFMpLCBvcHRpb25zIHx8IHt9KTtcbiAgICB0aGlzLmNvbnRlbnRzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRlbnRzO1xuICAgIHRoaXMuY29uZmlnID0gYXNzaWduKHt9LCBSRU5ERVJFUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfREVGQVVMVF9DT05GSUcsIGNvbmZpZyB8fCB7fSk7XG4gICAgdGhpcy5pZCA9IHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNvbmZpZy5pZCB8fCB1bmlxdWVJZCgic3BsaWRlIik7XG4gICAgdGhpcy5TdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgPSBuZXcgU3R5bGUodGhpcy5pZCwgdGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24gPSBEaXJlY3Rpb24obnVsbCwgbnVsbCwgdGhpcy5vcHRpb25zKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYXNzZXJ0KHRoaXMuY29udGVudHMubGVuZ3RoLCAiUHJvdmlkZSBhdCBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3QgMSBjb250ZW50LiIpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVJlbmRlcmVyLmNsZWFuID0gZnVuY3Rpb24gY2xlYW4oc3BsaWRlKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBfRXZlbnRJbnRlcmZhY2UxNCA9IEV2ZW50SW50ZXJmYWNlKHNwbGlkZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyZmFjZTE0Lm9uO1xuXG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciByb290ID0gc3BsaWRlLnJvb3Q7XG4gICAgdmFyIGNsb25lcyA9IHF1ZXJ5QWxsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb290LCAiLiIgKyBDTEFTU19DTE9ORSk7XG4gICAgb24oRVZFTlRfTU9VTlRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uICgpIHtcbiAgICAgIHJlbW92ZShjaGlsZChyb290LCAic3R5bGUiKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH0pO1xuICAgIHJlbW92ZShjbG9uZXMpO1xuICB9O1xuXG4gIHZhciBfcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3RvMyA9IFNwbGlkZVJlbmRlcmVyLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLmluaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB0aGlzLnBhcnNlQnJlYWtwb2ludHMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgdGhpcy5pbml0U2xpZGVzKCk7XG4gICAgdGhpcy5yZWdpc3RlclJvb3RTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGVzKCk7XG4gICAgdGhpcy5yZWdpc3RlclRyYWNrU3R5bGVzKCk7XG4gICAgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVnaXN0ZXJTbGlkZVN0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJMaXN0U3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlcygpO1xuICB9O1xuXG4gIF9wcm90bzMuaW5pdFNsaWRlcyA9IGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBpbml0U2xpZGVzKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHB1c2godGhpcy5zbGlkZXMsIHRoaXMuY29udGVudHMubWFwKGZ1bmN0aW9uIChjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29udGVudCwgaW5kZXgpIHtcbiAgICAgIGNvbnRlbnQgPSBpc1N0cmluZyhjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCkgPyB7XG4gICAgICAgIGh0bWw6IGNvbnRlbnRcbiAgICAgIH0gOiBjb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDtcbiAgICAgIGNvbnRlbnQuc3R5bGVzID0gY29udGVudC5zdHlsZXMgfHwge307JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgY29udGVudC5hdHRycyA9IGNvbnRlbnQuYXR0cnMgfHwge307XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBfdGhpczQuY292ZXIoY29udGVudCk7XG5cbiAgICAgIHZhciBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NlcyA9IF90aGlzNC5vcHRpb25zLmNsYXNzZXMuc2xpZGUgKyAiICIgKyAoaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID09PSAwID8gQ0xBU1NfQUNUSVZFIDogIiIpO1xuICAgICAgYXNzaWduKGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LmF0dHJzLCB7XG4gICAgICAgIGNsYXNzOiAoY2xhc3NlcyArICIgIiArIChjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudC5hdHRycy5jbGFzcyB8fCAiIikpLnRyaW0oKSxcbiAgICAgICAgc3R5bGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfdGhpczQuYnVpbGRTdHlsZXMoY29udGVudC5zdHlsZXMpXG4gICAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gY29udGVudDtcbiAgICB9KSk7XG5cbiAgICBpZiAodGhpcy5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NMb29wKCkpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVDbG9uZXModGhpcy5zbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclJvb3RTdHlsZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gZnVuY3Rpb24gcmVnaXN0ZXJSb290U3R5bGVzKCkge1xuICAgIHZhciBfdGhpczUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gdGhpcztcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKF9yZWYyKSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmMlswXSxcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyA9IF9yZWYyWzFdO1xuXG4gICAgICBfdGhpczUuU3R5bGUucnVsZSgiICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAibWF4LXdpZHRoIiwgdW5pdChvcHRpb25zLndpZHRoKSwgd2lkdGgpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyVHJhY2tTdHlsZXMgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVnaXN0ZXJUcmFja1N0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM2ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXM7XG5cbiAgICB2YXIgU3R5bGUyID0gdGhpcy5TdHlsZTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGVjdG9yID0gIi4iICsgQ0xBU1NfVFJBQ0s7XG4gICAgdGhpcy5icmVha3BvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciB3aWR0aCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfcmVmM1swXSxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjNbMV07XG4gICAgICBTdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUyLnJ1bGUoc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW5nTGVmdCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSwgX3RoaXM2LmNzc1BhZGRpbmcob3B0aW9ucywgZmFsc2UpLCB3aWR0aCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ1JpZ2h0IiksIF90aGlzNi5jc3NQYWRkaW5nKG9wdGlvbnMsIHRydWUpLCB3aWR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2gpO1xuICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsICJoZWlnaHQiLCBfdGhpczYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNzc1RyYWNrSGVpZ2h0KG9wdGlvbnMpLCB3aWR0aCk7XG4gICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJMaXN0U3R5bGVzID0gZnVuY3Rpb24gcmVnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVyTGlzdFN0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgU3R5bGUyID0gdGhpcy5TdHlsZTtcbiAgICB2YXIgc2VsZWN0b3IgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4iICsgQ0xBU1NfTElTVDtcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChfcmVmNCkge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjRbMF0sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIG9wdGlvbnMgPSBfcmVmNFsxXTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciwgInRyYW5zZm9ybSIsIF90aGlzNy5idWlsZFRyYW5zbGF0ZShvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyksIHdpZHRoKTtcblxuICAgICAgaWYgKCFfdGhpczcuY3NzU2xpZGVIZWlnaHQob3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMpKSB7XG4gICAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAiYXNwZWN0LScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRpbyIsIF90aGlzNy5jc3NBc3BlY3RSYXRpbyhvcHRpb25zKSwgd2lkdGgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTbGlkZVN0eWxlcygpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF90aGlzOCA9IHRoaXM7XG5cbiAgICB2YXIgU3R5bGUyID0gdGhpcy5TdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGU7XG4gICAgdmFyIHNlbGVjdG9yID0gIi4iICsgQ0xBU1NfU0xJREU7XG4gICAgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuYnJlYWtwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgd2lkdGggPSBfcmVmNVswXSxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjVbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFdO1xuICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsICJ3aWR0aCIsIF90aGlzOC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzU2xpZGVXaWR0aChvcHRpb25zKSwgd2lkdGgpO1xuICAgICAgU3R5bGUyLnJ1bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHNlbGVjdG9yLCAiaGVpZ2h0IiwgX3RoaXM4LmNzc1NsaWRlSGVpZ2h0KG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zKSB8fCAiMTAwJSIsIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciwgX3RoaXM4LnJlc29sdmUoIm1hcmdpblJpZ2h0IiksIHVuaXQob3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwKSB8fCAiMHB4Iiwgd2lkdGgpO1xuICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyICsgIiA+IGltZyIsICJkaXNwbGF5Iiwgb3B0aW9ucy5jb3ZlciA/ICJub25lIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiAiaW5saW5lIiwgd2lkdGgpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkVHJhbnNsYXRlID0gZnVuY3Rpb24gYnVpbGRUcmFuc2xhdGUob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX3RoaXMkRGlyZWN0aW9uID0gdGhpcy5EaXJlY3Rpb24sXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uLnJlc29sdmUsXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcmllbnQgPSBfdGhpcyREaXJlY3Rpb24ub3JpZW50O1xuICAgIHZhciB2YWx1ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gW107XG4gICAgdmFsdWVzLnB1c2godGhpcy5jc3NPZmZzZXRDbG9uZXMob3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMpKTtcbiAgICB2YWx1ZXMucHVzaCh0aGlzLmNzc09mZnNldEdhcHMob3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpKTtcblxuICAgIGlmICh0aGlzLmlzQ2VudGVyKG9wdGlvbnMpKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFsdWVzLnB1c2godGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudCgtNTApLCAiJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKSk7XG4gICAgICB2YWx1ZXMucHVzaC5hcHBseSh2YWx1ZXMsIHRoaXMuY3NzT2ZmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NldENlbnRlcihvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gInRyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAiKCIgKyB2YWx1ZSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiKSI7XG4gICAgfSkuam9pbigiICIpO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmZnNldENsb25lcyA9IGZ1bmN0aW9uIGNzc09mZnNldENsb25lcyhvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBfdGhpcyREaXJlY3Rpb24yID0gdGhpcy5EaXJlY3Rpb24sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uMi5yZXNvbHZlLFxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3JpZW50ID0gX3RoaXMkRGlyZWN0aW9uMi5vcmllbnQ7XG4gICAgdmFyIGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50ID0gdGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hlZFdpZHRoKG9wdGlvbnMpKSB7XG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgPSB0aGlzLnBhcnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCJmaXhlZFdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCIpXSksXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlLnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90aGlzJHBhcnNlQ3NzVmFsdWUudW5pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBjbG9uZUNvdW50LCB1bml0Mik7XG4gICAgfVxuXG4gICAgdmFyIHBlcmNlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gMTAwICogY2xvbmVDb3VudCAvIG9wdGlvbnMucGVyUGFnZTtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIG9yaWVudChwZXJjZW50KSArICIlIjtcbiAgfTtcblxuICBfcHJvdG8zLmNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NPZmZzZXRDZW50ZXIgPSBmdW5jdGlvbiBjc3NPZmZzZXRDZW50ZXIob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX3RoaXMkRGlyZWN0aW9uMyA9IHRoaXMuRGlyZWN0aW9uLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcmVzb2x2ZSA9IF90aGlzJERpcmVjdGlvbjMucmVzb2x2ZSxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9yaWVudCA9IF90aGlzJERpcmVjdGlvbjMub3JpZW50O1xuXG4gICAgaWYgKHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmlzRml4ZWRXaWR0aChvcHRpb25zKSkge1xuICAgICAgdmFyIF90aGlzJHBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNzc1ZhbHVlMiA9IHRoaXMucGFyc2VDc3NWYWx1ZShvcHRpb25zW3Jlc29sdmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJmaXhlZFdpZHRoIildKSxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHBhcnNlQ3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1ZhbHVlMi52YWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90aGlzJHBhcnNlQ3NzVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlMi51bml0O1xuXG4gICAgICByZXR1cm4gW3RoaXMuYnVpbGRDc3NWYWx1ZShvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZW50KHZhbHVlIC8gMiksIHVuaXQyKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXMgPSBbXTtcbiAgICB2YXIgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZSxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGdhcCA9IG9wdGlvbnMuZ2FwO1xuICAgIHZhbHVlcy5wdXNoKG9yaWVudCg1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAgLyBwZXJQYWdlKSArICIlIik7XG5cbiAgICBpZiAoZ2FwKSB7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF90aGlzJHBhcnNlQ3NzVmFsdWUzID0gdGhpcy5wYXJzZUNzc1ZhbHVlKGdhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLFxuICAgICAgICAgIF92YWx1ZSA9IF90aGlzJHBhcnNlQ3NzVmFsdWUzLnZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgICBfdW5pdCA9IF90aGlzJHBhcnNlQ3NzVmFsdWUzLnVuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuXG4gICAgICB2YXIgZ2FwT2Zmc2V0ID0gKF92YWx1ZSAvIHBlclBhZ2UgLSBfdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSAvIDI7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLmJ1aWxkQ3NzVmFsdWUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yaWVudChnYXBPZmZzZXQpLCBfdW5pdCkpO1xuICAgIH1cblxuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdmFsdWVzO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzT2Zmc2V0R2FwcyA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjc3NPZmZzZXRHYXBzKG9wdGlvbnMpIHtcbiAgICB2YXIgY2xvbmVDb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPSB0aGlzLmdldENsb25lQ291bnQoKTtcblxuICAgIGlmIChjbG9uZUNvdW50ICYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiBvcHRpb25zLmdhcCkge1xuICAgICAgdmFyIG9yaWVudCA9IHRoaXMuRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5vcmllbnQ7XG5cbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlNCA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnBhcnNlQ3NzVmFsdWUob3B0aW9ucy5nYXApLFxuICAgICAgICAgIHZhbHVlID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ190aGlzJHBhcnNlQ3NzVmFsdWU0LnZhbHVlLFxuICAgICAgICAgIHVuaXQyID0gX3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzJHBhcnNlQ3NzVmFsdWU0LnVuaXQ7XG5cbiAgICAgIGlmICh0aGlzLmlzRml4ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV2lkdGgob3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUob3JpZW50KHZhbHVlICogY2xvbmVDb3VudCksIHVuaXQyKTtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnYXBzID0gY2xvbmVDb3VudCAvIHBlclBhZ2U7XG4gICAgICByZXR1cm4gdGhpcy5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VpbGRDc3NWYWx1ZShvcmllbnQoZ2FwcyAqIHZhbHVlKSwgdW5pdDIpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICByZXR1cm4gIiI7XG4gIH07XG5cbiAgX3Byb3RvMy5yZXNvbHZlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHJlc29sdmUocHJvcCkge1xuICAgIHJldHVybiBjYW1lbFRvS2ViYWIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuRGlyZWN0aW9uLnJlc29sdmUocHJvcCkpO1xuICB9O1xuXG4gIF9wcm90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28zLmNzc1BhZGRpbmcgPSBmdW5jdGlvbiBjc3NQYWRkaW5nKG9wdGlvbnMsIHJpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodCkge1xuICAgIHZhciBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nO1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJvcCA9IHRoaXMuRGlyZWN0aW9uLnJlc29sdmUocmlnaHQgPyAicmlnaHQiIDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJsZWZ0IiwgdHJ1ZSk7XG4gICAgcmV0dXJuIHBhZGRpbmcgJiYgdW5pdChwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ1twcm9wXSB8fCAoaXNPYmplY3QocGFkZGluZykgPyAwIDogcGFkZGluZykpIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAiMHB4IjtcbiAgfTtcblxuICBfcHJvdG8zLmNzc1RyYWNrSGVpZ2h0ID0gZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGNzc1RyYWNrSGVpZ2h0KG9wdGlvbnMpIHtcbiAgICB2YXIgaGVpZ2h0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICIiO1xuXG4gICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICBoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0ID0gdGhpcy5jc3NIZWlnaHQob3B0aW9ucyk7XG4gICAgICBhc3NlcnQoaGVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCwgXCciaGVpZ2h0IiBpcyBtaXNzaW5nLlwnKTtcbiAgICAgIGhlaWdodCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiY2FsYygiICsgaGVpZ2h0ICsgIiAtICIgKyB0aGlzLmNzc1BhZGRpbmcob3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMsIGZhbHNlKSArICIgLSAiICsgdGhpcy5jc3NQYWRkaW5nKG9wdGlvbnMsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKSArICIpIjtcbiAgICB9XG5cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9O1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBfcHJvdG8zLmNzc0hlaWdodCA9IGZ1bmN0aW9uIGNzc0hlaWdodChvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHJldHVybiB1bml0KG9wdGlvbnMuaGVpZ2h0KTtcbiAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3Byb3RvMy5jc3NTbGlkZVdpZHRoID0gZnVuY3Rpb24gY3NzU2xpZGVXaWR0aCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaWR0aCA/ICIiIDogdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQob3B0aW9ucy5maXhlZFdpZHRoKSB8fCAodGhpcy5pc1ZlcnRpY2FsKCkgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiIgOiB0aGlzLmNzc1NsaWRlU2l6ZShvcHRpb25zKSk7XG4gIH07XG5cbiAgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90bzMuY3NzU2xpZGVIZWlnaHQgPSBmdW5jdGlvbiBjc3NTbGlkZUhlaWdodChvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucykge1xuICAgIHJldHVybiB1bml0KG9wdGlvbnMuZml4ZWRIZWlnaHQpIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAodGhpcy5pc1ZlcnRpY2FsKCkgPyBvcHRpb25zLmF1dG9IZWlnaHQgPyAiIiA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmNzc1NsaWRlU2l6ZShvcHRpb25zKSA6IHRoaXMuY3NzSGVpZ2h0KG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKSk7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NTbGlkZVNpemUgPSBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY3NzU2xpZGVTaXplKG9wdGlvbnMpIHtcbiAgICB2YXIgZ2FwID0gdW5pdChvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5nYXApO1xuICAgIHJldHVybiAiY2FsYygoMTAwJSIgKyAoZ2FwICYmICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICsgIiArIGdhcCkgKyAiKS8iICsgKG9wdGlvbnMucGVyUGFnZSB8fCAxKSArIChnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwICYmICIgLSAiICsgZ2FwKSArICIpIjtcbiAgfTtcblxuICBfcHJvdG8zLmNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NBc3BlY3RSYXRpbyA9IGZ1bmN0aW9uIGNzc0FzcGVjdFJhdGlvKG9wdGlvbnMpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgdmFyIGhlaWdodFJhdGlvID0gb3B0aW9ucy5oZWlnaHRSYXRpbztcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGhlaWdodFJhdGlvID8gIiIgKyAxIC8gaGVpZ2h0UmF0aW8gOiAiIjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZENzc1ZhbHVlID0gZnVuY3Rpb24gYnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkQ3NzVmFsdWUodmFsdWUsIHVuaXQyKSB7XG4gICAgcmV0dXJuICIiICsgdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlICsgdW5pdDI7XG4gIH07XG5cbiAgX3Byb3RvMy5wYXJzZUNzc1ZhbHVlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhcnNlQ3NzVmFsdWUodmFsdWUpIHtcbiAgICBpZiAoaXNTdHJpbmcoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlKSkge1xuICAgICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQodmFsdWUpIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAwO1xuICAgICAgdmFyIHVuaXQyID0gdmFsdWUucmVwbGFjZSgvXFxkKihcXC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxkKik/LywgIiIpIHx8ICJweCI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWU6IG51bWJlcixcbiAgICAgICAgdW5pdDogdW5pdDJcbiAgICAgIH07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdW5pdDogInB4IlxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvMy5wYXJzZUJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidha3BvaW50cyA9IGZ1bmN0aW9uIHBhcnNlQnJlYWtwb2ludHMoKSB7XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfdGhpczkgPSB0aGlzO1xuXG4gICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5vcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5icmVha3BvaW50cztcbiAgICB0aGlzLmJyZWFrcG9pbnRzLnB1c2goWyJkZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXVsdCIsIHRoaXMub3B0aW9uc10pO1xuXG4gICAgaWYgKGJyZWFrcG9pbnRzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgZm9yT3duKGJyZWFrcG9pbnRzLCBmdW5jdGlvbiAob3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoKSB7XG4gICAgICAgIF90aGlzOS5icmVha3BvaW50cy5wdXNoKFt3aWR0aCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1lcmdlKG1lcmdlKHt9LCBfdGhpczkub3B0aW9ucyksIG9wdGlvbnMpXSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMuaXNGaXhlZFdpZHRoID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGlzRml4ZWRXaWR0aChvcHRpb25zKSB7XG4gICAgcmV0dXJuICEhbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnNbdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSgiZml4ZWRXaWR0aCIpXTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ307XG5cbiAgX3Byb3RvMy5pc0xvb3AgPSBmdW5jdGlvbiBpc0xvb3AoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzLm9wdGlvbnMudHlwZSA9PT0gTE9PUDtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5pc0NlbnRlciA9IGZ1bmN0aW9uIGlzQ2VudGVyKG9wdGlvbnMpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgPT09ICJjZW50ZXIiKSB7XG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKHRoaXMuaXNMb29wKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnR5cGUgPT09IFNMSURFKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICByZXR1cm4gIXRoaXMub3B0aW9ucy50cmltU3BhY2U7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBfcHJvdG8zLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1ZlcnRpY2FsID0gZnVuY3Rpb24gaXNWZXJ0aWNhbCgpIHtcbiAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMub3B0aW9ucy5kaXJlY3Rpb24gPT09IFRUQjtcbiAgfTtcblxuICBfcHJvdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvMy5idWlsZENsYXNzZXMgPSBmdW5jdGlvbiBidWlsZENsYXNzZXMoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIHJldHVybiBbQ0xBU1NfUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1QsIENMQVNTX1JPT1QgKyAiLS0iICsgb3B0aW9ucy50eXBlLCBDTEFTU19ST09UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbiwgb3B0aW9ucy5kcmFnICYmIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19ST09UICsgIi0tZHJhZ2dhYmxlIiwgb3B0aW9ucy5pc05hdmlnYXRpb24gJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1JPT1QgKyAiLS1uYXYiLCBDTEFTU19BQ1RJVkUsICF0aGlzLmNvbmZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cuaGlkZGVuICYmIENMQVNTX1JFTkRFUkVEXS5maWx0ZXIoQm9vbGVhbikuam9pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIiAiKTtcbiAgfTtcblxuICBfcHJvdG8zLmJ1aWxkQXR0cnMgPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYnVpbGRBdHRycyhhdHRycykge1xuICAgIHZhciBhdHRyID0gIiI7XG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3bihhdHRycywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIGF0dHIgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlID8gIiAiICsgY2FtZWxUb0tlYmFiKGtleSkgKyAiPVxcIiIgKyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiXFwiIiA6ICIiO1xuICAgIH0pO1xuICAgIHJldHVybiBhdHRyLnRyaW0oKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZFN0eWxlcyA9IGZ1bmN0aW9uIGJ1aWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFN0eWxlcyhzdHlsZXMpIHtcbiAgICB2YXIgc3R5bGUgPSAiIjtcbiAgICBmb3JPd24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHN0eWxlcywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIHN0eWxlICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciICIgKyBjYW1lbFRvS2ViYWIoa2V5KSArICI6IiArIHZhbHVlICsgIjsiO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9KTtcbiAgICByZXR1cm4gc3R5bGUudHJpbSgpO1xuICB9O1xuXG4gIF9wcm90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczLnJlbmRlclNsaWRlcyA9IGZ1bmN0aW9uIHJlbmRlclNsaWRlcygpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgdmFyIHRhZyA9IHRoaXMuY29uZmlnLnNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZVRhZztcbiAgICByZXR1cm4gdGhpcy5zbGlkZXMubWFwKGZ1bmN0aW9uIChjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVudCkge1xuICAgICAgcmV0dXJuICI8IiArIHRhZyArICIgIiArIF90aGlzMTAuYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1aWxkQXR0cnMoY29udGVudC5hdHRycykgKyAiPiIgKyAoY29udGVudC5odG1sIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAiIikgKyAiPC8iICsgdGFnICsgIj4iO1xuICAgIH0pLmpvaW4oIiIpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmNvdmVyID0gZnVuY3Rpb24gY292ZXIoY29udGVudCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgc3R5bGVzID0gY29udGVudC5zdHlsZXMsXG4gICAgICAgIF9jb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCRodG1sID0gY29udGVudC5odG1sLFxuICAgICAgICBodG1sID0gX2NvbnRlbnQkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWwgPT09IHZvaWQgMCA/ICIiIDogX2NvbnRlbnQkaHRtbDtcblxuICAgIGlmICh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5vcHRpb25zLmNvdmVyICYmICF0aGlzLm9wdGlvbnMubGF6eUxvYWQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB2YXIgc3JjID0gaHRtbC5tYXRjaCgvPGltZy4qP3NyY1xccyo9XFxzKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoW1wnIl0pKC4rPylcXDEuKj8+Lyk7XG5cbiAgICAgIGlmIChzcmMgJiYgc3JjWzInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSkge1xuICAgICAgICBzdHlsZXMuYmFja2dyb3VuZCA9ICJjZW50ZXIvY292ZXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvLXJlcGVhdCB1cmwoXCciICsgc3JjWzJdICsgIlwnKSI7XG4gICAgICB9XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgfTtcblxuICBfcHJvdG8zLmdlbmVyYXRlQ2xvbmVzID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdlbmVyYXRlQ2xvbmVzKGNvbnRlbnRzKSB7XG4gICAgdmFyIGNsYXNzZXMgPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmNsYXNzZXM7XG4gICAgdmFyIGNvdW50ID0gdGhpcy5nZXRDbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb3VudCgpO1xuICAgIHZhciBzbGlkZXMgPSBjb250ZW50cy5zbGljZSgpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHdoaWxlIChzbGlkZXMubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKHNsaWRlcywgc2xpZGVzKTtcbiAgICB9XG5cbiAgICBwdXNoKHNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xpY2UoLWNvdW50KS5yZXZlcnNlKCksIHNsaWRlcy5zbGljZSgwLCBjb3VudCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKS5mb3JFYWNoKGZ1bmN0aW9uIChjb250ZW50LCBpbmRleCkge1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRycyA9IGFzc2lnbih7fSwgY29udGVudC5hdHRycywge1xuICAgICAgICBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6IGNvbnRlbnQuYXR0cnMuY2xhc3MgKyAiICIgKyBjbGFzc2VzLmNsb25lXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgICB2YXIgY2xvbmUgPSBhc3NpZ24oe30sIGNvbnRlbnQsIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGF0dHJzOiBhdHRyc1xuICAgICAgfSk7XG4gICAgICBpbmRleCA8IGNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA/IGNvbnRlbnRzLnVuc2hpZnQoY2xvbmUpIDogY29udGVudHMucHVzaChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMuZ2V0Q2xvbmVDb3VudCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBnZXRDbG9uZUNvdW50KCkge1xuICAgIGlmICh0aGlzLmlzTG9vcCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAob3B0aW9ucy5jbG9uZXMpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lcztcbiAgICAgIH1cblxuICAgICAgdmFyIHBlclBhZ2UgPSBtYXguYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHZvaWQgMCwgdGhpcy5icmVha3BvaW50cy5tYXAoZnVuY3Rpb24gKF9yZWY2KSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICB2YXIgb3B0aW9uczIgPSBfcmVmNlsxXTtcbiAgICAgICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zMi5wZXJQYWdlO1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIHBlclBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlICogKChvcHRpb25zLmZsaWNrTWF4UGFnZXMgfHwgMSkgKyAxKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgX3Byb3RvMy5yZW5kZXJBcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dzID0gZnVuY3Rpb24gcmVuZGVyQXJyb3dzKCkge1xuICAgIHZhciBodG1sID0gIiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIGh0bWwgKz0gIjxkaXYgY2xhc3M9XFwiIiArIHRoaXMub3B0aW9ucy5jbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Nlcy5hcnJvd3MgKyAiXFwiPiI7XG4gICAgaHRtbCArPSB0aGlzLnJlbmRlckFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndyh0cnVlKTtcbiAgICBodG1sICs9IHRoaXMucmVuZGVyQXJyb3coZmFsc2UpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBodG1sICs9ICI8L2Rpdj4iO1xuICAgIHJldHVybiBodG1sO1xuICB9O1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfcHJvdG8zLnJlbmRlckFycm93ID0gZnVuY3Rpb24gcmVuZGVyQXJyb3cocHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgX3RoaXMkb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNsYXNzZXMgPSBfdGhpcyRvcHRpb25zLmNsYXNzZXMsXG4gICAgICAgIGkxOG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gX3RoaXMkb3B0aW9ucy5pMThuO1xuICAgIHZhciBhdHRycyA9IHtcbiAgICAgIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzczogY2xhc3Nlcy5hcnJvdyArICIgIiArIChwcmV2ID8gY2xhc3Nlcy5wcmV2ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGNsYXNzZXMubmV4dCksXG4gICAgICB0eXBlOiAiYnV0dG9uIixcbiAgICAgIGFyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhTGFiZWw6IHByZXYgPyBpMThuLnByZXYgOiBpMThuLm5leHRcbiAgICB9O1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gIjxidXR0b24gIiArIHRoaXMuYnVpbGRBdHRycyhhdHRycykgKyAiPjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ZnIHhtbG5zPVxcIiIgKyBYTUxfTkFNRV9TUEFDRSArICJcXCIgdmlld0JveCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiMCAwICIgKyBTSVpFICsgIiAiICsgU0laRSArICJcXCIgd2lkdGg9XFwiIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyBTSVpFICsgIlxcIiBoZWlnaHQ9XFwiIiArIFNJWkUgKyAiXFwiPjxwYXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkPVxcIiIgKyAodGhpcy5vcHRpb25zLmFycm93UGF0aCB8fCBQQVRIKSArICJcXCIgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+PC9zdmc+PC9idXR0b24+IjtcbiAgfTtcblxuICBfcHJvdG8zLmh0bWwgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaHRtbCgpIHtcbiAgICB2YXIgX3RoaXMkY29uZmlnID0gdGhpcy5jb25mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnLFxuICAgICAgICByb290Q2xhc3MgPSBfdGhpcyRjb25maWcucm9vdENsYXNzLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgbGlzdFRhZyA9IF90aGlzJGNvbmZpZy5saXN0VGFnLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyb3dzID0gX3RoaXMkY29uZmlnLmFycm93cyxcbiAgICAgICAgYmVmb3JlVHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrID0gX3RoaXMkY29uZmlnLmJlZm9yZVRyYWNrLFxuICAgICAgICBhZnRlclRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF90aGlzJGNvbmZpZy5hZnRlclRyYWNrLFxuICAgICAgICBzbGlkZXIgPSBfdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMkY29uZmlnLnNsaWRlcixcbiAgICAgICAgYmVmb3JlU2xpZGVyID0gX3RoaXMkYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmZpZy5iZWZvcmVTbGlkZXIsXG4gICAgICAgIGFmdGVyU2xpZGVyID0gX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmZpZy5hZnRlclNsaWRlcjtcbiAgICB2YXIgaHRtbCA9ICIiO1xuICAgIGh0bWwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJys9ICI8ZGl2IGlkPVxcIiIgKyB0aGlzLmlkICsgIlxcIiBjbGFzcz1cXCIiICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuYnVpbGRDbGFzc2VzKCkgKyAiICIgKyAocm9vdENsYXNzIHx8ICIiKSArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciXFwiPiI7XG4gICAgaHRtbCArPSAiPHN0eWxlPiIgKyB0aGlzLlN0eWxlLmJ1aWxkKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICsgIjwvc3R5bGU+IjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAgICAgIGh0bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsICs9IGJlZm9yZVNsaWRlciB8fCAiIjtcbiAgICAgIGh0bWwgKz0gIjxkaXYgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzPVxcInNwbGlkZV9fc2xpZGVyXFwiPiI7XG4gICAgfVxuXG4gICAgaHRtbCArPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVmb3JlVHJhY2sgfHwgIiI7XG5cbiAgICBpZiAoYXJyb3dzKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHRtbCArPSB0aGlzLnJlbmRlckFycm93cygpO1xuICAgIH1cblxuICAgIGh0bWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICs9ICI8ZGl2IGNsYXNzPVxcInNwbGlkZV9fdHJhY2tcXCI+IjtcbiAgICBodG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCArPSAiPCIgKyBsaXN0VGFnICsgIiBjbGFzcz1cXCJzcGxpZGVfX2xpc3RcXCI+IjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaHRtbCArPSB0aGlzLnJlbmRlclNsaWRlcygpO1xuICAgIGh0bWwgKz0gIjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyIgKyBsaXN0VGFnICsgIj4iO1xuICAgIGh0bWwgKz0gIjwvZGl2PiI7XG4gICAgaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWwgKz0gYWZ0ZXJUcmFjayB8fCAiIjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBodG1sICs9ICI8L2Rpdj4iO1xuICAgICAgaHRtbCArPSBhZnRlclNsaWRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgIiI7XG4gICAgfVxuXG4gICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIGh0bWw7XG4gIH07XG5cbiAgcmV0dXJuIFNwbGlkZVJlbmRlcmVyO1xufSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZXhwb3J0cy5DTEFTU0VTID0gQ0xBU1NFUztcbmV4cG9ydHMuQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVElWRSA9IENMQVNTX0FDVElWRTtcbmV4cG9ydHMuQ0xBU1NfQVJST1cgPSBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1c7XG5leHBvcnRzLkNMQVNTX0FSUk9XUyA9IENMQVNTX0FSUk9XUztcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnRzLkNMQVNTX0FSUk9XX05FWFQgPSBDTEFTU19BUlJPV19ORVhUO1xuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydHMuQ0xBU1NfQVJST1dfUFJFViA9IENMQVNTX0FSUk9XX1BSRVY7XG5leHBvcnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5DTEFTU19DTE9ORSA9IENMQVNTX0NMT05FO1xuZXhwb3J0cy5DTEFTU19DT05UQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkVSID0gQ0xBU1NfQ09OVEFJTkVSO1xuZXhwb3J0cy5DTEFTU19GT0NVU19JTiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19GT0NVU19JTjtcbmV4cG9ydHMuQ0xBU1NfSU5JVElBTElaRUQgPSBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfSU5JVElBTElaRUQ7XG5leHBvcnRzLkNMQVNTX0xJU1QgPSBDTEFTU19MSVNUO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydHMuQ0xBU1NfTE9BRElORyA9IENMQVNTX0xPQURJTkc7XG5leHBvcnRzLkMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19ORVhUID0gQ0xBU1NfTkVYVDtcbmV4cG9ydHMuQ0xBU1NfT1ZFUkZMT1cgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfT1ZFUkZMT1c7XG5leHBvcnRzLkNMQVNTX1BBR0lOQVRJT04gPSBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUEFHSU5BVElPTjtcbmV4cG9ydHMuQ0xBU1NfUEFHSU5BVElPTl9QQUdFID0gQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1BBR0lOQVRJT05fUEFHRTtcbmV4cG9ydHMuQ0xBU1NfUFJFViA9IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUkVWO1xuZXhwb3J0cy5DTEFTU19QUk9HUkVTUyA9IENMQVNTX1BST0dSRVNTO1xuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydHMuQ0xBU1NfUFJPR1JFU1NfQkFSID0gQ0xBU1NfUFJPR1JFU1NfQkFSO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydHMuQ0xBU1NfUk9PVCA9IENMQVNTX1JPT1Q7XG5leHBvcnRzLkNMQVNTX1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTElERSA9IENMQVNTX1NMSURFO1xuZXhwb3J0cy5DTEFTU19TUElOTkVSID0gQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1NQSU5ORVI7XG5leHBvcnRzLkNMQVNTX1NSID0gQ0xBU1NfU1I7XG5leHBvcnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19UT0dHTEUgPSBDTEFTU19UT0dHTEU7XG5leHBvcnRzLkNMQVNTX1RPR0dMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VfUEFVU0UgPSBDTEFTU19UT0dHTEVfUEFVU0U7XG5leHBvcnRzLkNMQVNTX1RPR0cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEVfUExBWSA9IENMQVNTX1RPR0dMRV9QTEFZO1xuZXhwb3J0cy5DTEFTU19UUkFDSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDTEFTU19UUkFDSztcbmV4cG9ydHMuQ0xBU1NfVklTSUJMRSA9IENMQVNTX1ZJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NJQkxFO1xuZXhwb3J0cy5ERUZBVUxUUyA9IERFRkFVTFRTO1xuZXhwb3J0cy5FVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQUNUSVZFID0gRVZFTlRfQUNUSVZFO1xuZXhwb3J0cy5FVkVOVF9BUlJPV1NfTU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVU5URUQgPSBFVkVOVF9BUlJPV1NfTU9VTlRFRDtcbmV4cG9ydHMuRVZFTlRfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXU19VUERBVEVEID0gRVZFTlRfQVJST1dTX1VQREFURUQ7XG5leHBvcnRzLkVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BVVRPUExBWV9QQVVTRSA9IEVWRU5UX0FVVE9QTEFZX1BBVVNFO1xuZXhwb3J0cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfQVVUT1BMQVlfUExBWSA9IEVWRU5UX0FVVE9QTEFZX1BMQVk7XG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5FVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gRVZFTlRfQVVUT1BMQVlfUExBWUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkc7XG5leHBvcnRzLkVWRU5UX0NMSUNLID0gRVZFTlRfQ0xJQ0s7XG5leHBvcnRzLkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9ERVNUUk9ZID0gRVZFTlRfREVTVFJPWTtcbmV4cG9ydHMuRVZFTlRfRFJBRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBFVkVOVF9EUkFHO1xuZXhwb3J0cy5FVkVOVF9EUkFHR0VEID0gRVZFTlRfRFJBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dHRUQ7XG5leHBvcnRzLkVWRU5UX0RSQUdHSU5HID0gRVZFTlRfRFJBR0dJTkc7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5FVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9IEVWRU5UX0VORF9JTkRFWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQ0hBTkdFRDtcbmV4cG9ydHMuRVZFTlRfSElEREVOID0gRVZFTlRfSElEREVOO1xuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydHMuRVZFTlRfSU5BQ1RJVkUgPSBFVkVOVF9JTkFDVElWRTtcbmV4cG9ydHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0xBWllMT0FEX0xPQURFRCA9IEVWRU5UX0xBWllMT0FEX0xPQURFRDtcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnRzLkVWRU5UX01PVU5URUQgPSBFVkVOVF9NT1VOVEVEO1xuZXhwb3J0cy5FVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfTU9WRSA9IEVWRU5UX01PVkU7XG5leHBvcnRzLkVWRU5UX01PVkVEID0gRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX01PVkVEO1xuZXhwb3J0cy5FVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfTkFWSUdBVElPTl9NT1VOVEVEO1xuZXhwb3J0cy5FVkVOVF9PVkVSRkxPVyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9PVkVSRkxPVztcbmV4cG9ydHMuRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRDtcbmV4cG9ydHMuRVZFTlRfUEFHSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRJT05fVVBEQVRFRCA9IEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRDtcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLkVWRU5UX1JFQURZID0gRVZFTlRfUkVBRFk7XG5leHBvcnRzLkVWRU5UX1JFRlJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NIID0gRVZFTlRfUkVGUkVTSDtcbmV4cG9ydHMuRVZFTlRfUkVTSVpFID0gRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1JFU0laRTtcbmV4cG9ydHMuRVZFTlRfUkVTSVpFRCA9IEVWRU5UX1JFU0laRUQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0cy5FVkVOVF9TQ1JPTEwgPSBFVkVOVF9TQ1JPTEw7XG5leHBvcnRzLkVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9TQ1JPTExFRCA9IEVWRU5UX1NDUk9MTEVEO1xuZXhwb3J0cy5FVkVOVF9TSElGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCA9IEVWRU5UX1NISUZURUQ7XG5leHBvcnRzLkVWRU5UX1NMSURFX0tFWURPV04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRVZFTlRfU0xJREVfS0VZRE9XTjtcbmV4cG9ydHMuRVZFTlRfVVBEQVRFRCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9VUERBVEVEO1xuZXhwb3J0cy5FVkVOVF9WSVNJQkxFID0gRVZFTlRfVklTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lCTEU7XG5leHBvcnRzLkV2ZW50QmluZGVyID0gRXZlbnRCaW5kZXI7XG5leHBvcnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5FdmVudEludGVyZmFjZSA9IEV2ZW50SW50ZXJmYWNlO1xuZXhwb3J0cy5GQURFID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEZBREU7XG5leHBvcnRzLkxPT1AgPSBMT09QO1xuZXhwb3J0cy5MVFIgPSBMVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSO1xuZXhwb3J0cy5SVEwgPSBSVEw7XG5leHBvcnRzLlJlcXVlc3RJbnRlcnZhbCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZXF1ZXN0SW50ZXJ2YWw7XG5leHBvcnRzLlNMSURFID0gU0xJREU7XG5leHBvcnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTVEFUVVNfQ0xBU1NFUyA9IFNUQVRVU19DTEFTU0VTO1xuZXhwb3J0cy5TcGxpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gU3BsaWRlO1xuZXhwb3J0cy5TcGxpZGVSZW5kZXJlciA9IFNwbGlkZVJlbmRlcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcbmV4cG9ydHMuU3RhdGUgPSBTdGF0ZTtcbmV4cG9ydHMuVFRCID0gVFRCOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMuVGhyb3R0bGUgPSBUaHJvdHRsZTtcbmV4cG9ydHNbImRlZmF1bHQiXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBTcGxpZGU7XG4nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLmNqcy5qcycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9fSwKIDM3OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYidmdW5jdGlvbiBlbXB0eShhcnJheSkge1xuICBhcnJheS5sZW5ndGggPSAwO1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gc2xpY2UoYXJyYXlMaWtlLCBzdGFydCwgZW5kKSB7XG4gIHJldHVybiBBcnJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3kucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMaWtlLCBzdGFydCwgZW5kKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIGZpbmQoYXJyYXlMaWtlLCBwcmVkaWNhdGUpIHtcbiAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGljZShhcnJheUxpa2UpLmZpbHRlcihwcmVkaWNhdGUpWzBdO1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gYXBwbHkoZnVuYykge1xuICByZXR1cm4gZnVuYy5iaW5kKG51bGwsIC4uLnNsaWNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmd1bWVudHMsIDEpKTtcbn1cblxuY29uc3QgbmV4dFRpY2sgPSBzZXRUaW1lb3V0O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuY29uc3Qgbm9vcCA9ICgpID0+IHtcbn07XG5cbmZ1bmN0aW9uIHJhZihmdW5jKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpO1xufVxuXG5mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZU9mKHR5cGUsIHN1YmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZTtcbn1cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNOdWxsKHN1YmplY3QpICYmIHR5cGVPZigib2JqZWN0Iiwgc3ViamVjdCk7XG59XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5jb25zdCBpc0Z1bmN0aW9uID0gYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGx5KHR5cGVPZiwgImZ1bmN0aW9uIik7XG5jb25zdCBpc1N0cmluZyA9IGFwcGx5KHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2YsICJzdHJpbmciKTtcbmNvbnN0IGlzVW5kZWZpbmVkID0gYXBwbHkodHlwZU9mLCAidW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVmaW5lZCIpO1xuZnVuY3Rpb24gaXNOdWxsKHN1YmplY3QpIHtcbiAgcmV0dXJuIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0ID09PSBudWxsO1xufVxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChzdWJqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCkge1xuICB0cnkge1xuICAgIHJldHVybiBzdWJqZWN0IGluc3RhbmNlb2YgKHN1YmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93KS5IVE1MRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIDogW3ZhbHVlXTtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaCh2YWx1ZXMsIGl0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlZSkge1xuICB0b0FycmF5KHZhbHVlcykuZm9yRWFjaChpdGVyYXRlZSk7XG59XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFycmF5LmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleE9mKHZhbHVlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBwdXNoKGFycmF5LCBpdGVtcyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgYXJyYXkucHVzaCguLi50b0FycmF5KGl0ZW1zKSk7XG4gIHJldHVybiBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywgYWRkKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBpZiAoZWxtKSB7XG4gICAgZm9yRWFjaChjbGFzc2VzLCAobmFtZSkgPT4ge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIGVsbS5jbGFzc0xpc3RbYWRkID8gImFkZCIgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgInJlbW92ZSJdKG5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBhZGRDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidTdHJpbmcoY2xhc3NlcykgPyBjbGFzc2VzLnNwbGl0KCIgIikgOiBjbGFzc2VzLCB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gIGZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKGNoaWxkcmVuLCBwYXJlbnQuYXBwZW5kQ2hpbGQuYmluZChwYXJlbnQpKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gIGZvckVhY2gobm9kZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCAobm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IChyZWYgfHwgbm9kZSkucGFyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndE5vZGU7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50Lmluc2VydEJlZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmUobm9kZSwgcmVmKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG0sIHNlbGVjdG9yKSB7XG4gIHJldHVybiBpc0hUTUxFbGVtZW50KGVsbSkgJiYgKGVsbVsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIm1zTWF0Y2hlc1NlbGVjdG9yIl0gfHwgZWxtLm1hdGNoZXMpLmNhbGwoZWxtLCBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IpO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdG9yKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBjaGlsZHJlbjIgPSBwYXJlbnQgPyBzbGljZShwYXJlbnQuY2hpbGRyZW4pIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZmlsdGVyKChjaGlsZCkgPT4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1hdGNoZXMoY2hpbGQsIHNlbGVjdG9yKSkgOiBjaGlsZHJlbjI7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA/IGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbihwYXJlbnQsIHNlbGVjdG9yKVswXSA6IHBhcmVudC5maXJzdEVsZW1lbnRDaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGQ7XG59XG5cbmNvbnN0IG93bktleXMgPSBPYmplY3Qua2V5cztcblxuZnVuY3Rpb24gZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkge1xuICBpZiAob2JqZWN0KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvd25LZXlzKG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QpKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGtleSAhPT0gIl9fcHJvdG9fXyIgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIGl0ZXJhdGVlKG9iamVjdFtrZXldLCBrZXkpO1xuICAgIH0pO1xuICB9XG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBhc3NpZ24ob2JqZWN0KSB7XG4gIHNsaWNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmd1bWVudHMsIDEpLmZvckVhY2goKHNvdXJjZSkgPT4ge1xuICAgIGZvck93bihzb3VyYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWVyZ2Uob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaCgoc291cicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSkgPT4ge1xuICAgIGZvck93bihzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gdmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgb2JqZWN0W2tleV0gPSBtZXJnZSh7fSwgaXNPYmplY3Qob2JqZWN0W2tleV0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA/IG9iamVjdFtrZXldIDoge30sIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmb3JFYWNoKGtleXMgfHwgb3duS2V5cyhvYmplY3QpLCAoa2V5KSA9PiB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHRyaWJ1dGUoZWxtcywgYXR0cnMpIHtcbiAgZm9yRWFjaChlbG1zLCAoZWxtKSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGZvckVhY2goYXR0cnMsIChhdHRyKSA9PiB7XG4gICAgICBlbG0gJiYgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbS5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCB2YWx1ZSkge1xuICBpZiAoaXNPYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0KGF0dHJzKSkge1xuICAgIGZvck93bihhdHRycywgKHZhbHVlMiwgbmFtZSkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHNldEF0dHJpYnV0ZShlbG1zLCBuYW1lLCB2YWx1ZTIpO1xuICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfSBlbHNlIHtcbiAgICBmb3JFYWNoKGVsbXMsIChlbG0pID0+IHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc051bGwodmFsdWUpIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhdHRycykgOiBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlKHRhZywgYXR0cnMsIHBhcmVudCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKGF0dHJzKSB7XG4gICAgaXNTdHJpbmcoYXR0cnMpID8gYWRkQ2xhc3MoZWxtLCBhdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnMpIDogc2V0QXR0cmlidXRlKGVsbSwgYXR0cnMpO1xuICB9XG4gIHBhcmVudCAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwZW5kKHBhcmVudCwgZWxtKTtcbiAgcmV0dXJuIGVsbTtcbn1cblxuZnVuY3Rpb24gcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlKGVsbSwgcHJvcCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbG0pW3Byb3BdO1xuICB9XG4gIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIWlzTnVsbCh2YWx1ZSkpIHtcbiAgICBlbG0uc3R5bGVbcHJvcF0gPSBgJHt2YWx1ZX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwbGF5KGVsbSwgZGlzcGxheTIpIHtcbiAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKGVsbSwgImRpc3BsYXkiLCBkaXNwbGF5Mik7XG59XG5cbmZ1bmN0aW9uIGZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlbG0pIHtcbiAgZWxtWyJzZXRBY3RpdmUiXSAmJiBlbG1bInNldEFjdGl2ZSJdKCkgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gIHJldHVybiBlbG0uZ2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjbGFzc05hbWUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldC5nZXRCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2RlcykgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZm9yRWFjaChub2RlcywgKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZSAmJiBubycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobicKICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1lYXN1cmUocGFyZW50LCB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUpIHtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIGNvbnN0IGRpdiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjcmVhdGUoImRpdiIsIHsgc3R5bGU6IGB3aWR0aDogJHt2YWx1ZX07IHBvc2l0aW9uOiBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Jzb2x1dGU7YCB9LCBwYXJlbnQpO1xuICAgIHZhbHVlID0gcmVjdChkaXYpLndpZHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDtcbiAgICByZW1vdmUoZGl2KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXJzZUh0bWwoaHRtbCkge1xuICByZXR1cm4gY2hpbGQobmV3IERPTVBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaHRtbCIpLmJvZHkpO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gcHJldmVudChlLCBzdG9wUHJvcGFnYXRpb24pIHtcbiAgZS5wcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudERlZmF1bHQoKTtcbiAgaWYgKHN0b3BQcm9wYWdhdGlvbikge1xuICAgIGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3BQcm9wYWdhdGlvbigpO1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5KHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBwYXJlbnQgJiYgcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZnVuY3Rpb24gcXVlcnlBbGwocGFyZW50LCBzZWxlY3Rvcikge1xuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNlbGVjdG9yID8gc2xpY2UocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBbXTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpbWVPZihlKSB7XG4gIHJldHVybiBlLnRpbWVTdGFtcDtcbn1cblxuZnVuY3Rpb24gdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gYCR7dmFsdWV9cHhgIDogIiI7XG59XG5cbmNvbnN0IFBST0pFQ1RfQ09ERSA9ICJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlIjtcblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFske1BST0pFQ1RfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidPREV9XSAke21lc3NhZ2UgfHwgIiJ9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXJyb3IoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lc3NhZ2UpIHtcbiAgY29uc29sZS5lcnJvcihgWyR7UFJPSkVDVF9DT0RFfV0gJHttZXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZX1gKTtcbn1cblxuY29uc3QgeyBtaW4sIG1heCwgZmxvb3IsIGNlaWwsIGFicyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IE1hdGg7XG5cbmZ1bmN0aW9uIGFwcHJveGltYXRlbHlFcXVhbCh4LCB5LCBlcHNpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbikge1xuICByZXR1cm4gYWJzKHggLSB5KSA8IGVwc2lsb247XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBiZXR3ZWVuKG51bWJlciwgeCwgeSwgZXhjbHVzaXZlKSB7XG4gIGNvbnN0IG1pbmltdW0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gbWluKHgsIHkpO1xuICBjb25zdCBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGV4Y2x1c2l2ZSA/IG1pbmltdW0gPCBudW1iZXIgJiYgbnVtYmVyIDwgbWF4aW11bSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtaW5pbXVtIDw9IG51bWJlciAmJiBudW1iZXIgPD0gbWF4aW11bTtcbn1cblxuZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGNsYW1wKG51bWJlciwgeCwgeSkge1xuICBjb25zdCBtaW5pbXVtID0gbWluKHgsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB5KTtcbiAgY29uc3QgbWF4aW11bSA9IG1heCh4LCB5KTtcbiAgcmV0dXJuIG1pbihtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F4KG1pbmltdW0sIG51bWJlciksIG1heGltdW0pO1xufVxuXG5mdW5jdGlvbiBzaWduKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid4KSB7XG4gIHJldHVybiArKHggPiAwKSAtICsoeCA8IDApO1xufVxuXG5mdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZWxUb0tlYmFiKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbYS16JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAtOV0pKFtBLVpdKS9nLCAiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZm9ybWF0KHN0cmluZywgcmVwbGFjZW1lbnRzKSB7XG4gIGZvckVhY2gocmVwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50cywgKHJlcGxhY2VtZW50KSA9PiB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKCIlcyIsIGAke3JlcGxhY2VtZW50fWApO1xuICB9KTtcbiAgcmV0dXJuIHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG59XG5cbmZ1bmN0aW9uIHBhZChudW1iZXIpIHtcbiAgcmV0dXJuIG51bWJlciA8IDEwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA/IGAwJHtudW1iZXJ9YCA6IGAke251bWJlcn1gO1xufVxuXG5jb25zdCBpZHMgPSB7fScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgcmV0dXJuIGAke3ByZWZpeCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9JHtwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZWZpeF0gfHwgMCkgKyAxKX1gO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZXhwb3J0IHsgYWJzLCBhZGRDbGFzcywgYXBwZW5kLCBhcHBseSwgYXBwcm94JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltYXRlbHlFcXVhbCwgYXNzZXJ0LCBhc3NpZ24sIGJlZm9yZSwgYmV0d2VlbiwgY2FtZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVG9LZWJhYiwgY2VpbCwgY2hpbGQsIGNoaWxkcmVuLCBjbGFtcCwgY3JlYXRlLCBkaXNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidheSwgZW1wdHksIGVycm9yLCBmaW5kLCBmbG9vciwgZm9jdXMsIGZvckVhY2gsIGZvck93JwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sIGZvcm1hdCwgZ2V0QXR0cmlidXRlLCBoYXNDbGFzcywgaW5jbHVkZXMsIGlzQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBpc0Z1bmN0aW9uLCBpc0hUTUxFbGVtZW50LCBpc051bGwsIGlzT2JqZWN0LCBpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcsIGlzVW5kZWZpbmVkLCBtYXRjaGVzLCBtYXgsIG1lYXN1cmUsIG1lcmdlLCBtaW4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBuZXh0VGljaywgbm9vcCwgb21pdCwgb3duS2V5cywgcGFkLCBwYXJzZUh0bWwsIHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBwdXNoLCBxdWVyeSwgcXVlcnlBbGwsIHJhZiwgcmVjdCwgcmVtb3ZlLCByZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlQXR0cmlidXRlLCByZW1vdmVDbGFzcywgc2V0QXR0cmlidXRlLCBzaWduLCBzbGljZSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlLCB0aW1lT2YsIHRvQXJyYXksIHRvZ2dsZUNsYXNzLCB1bmlxdWVJZCwgdW5pdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcbicsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy91dGlscy9zcGxpZGUtdXRpbHMuZXNtLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gZW1wdHkoYXJyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIHNsaWNlKGFycmF5TGlrZSwgc3RhcnQsIGVuZCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycmF5TGlrZSwgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJ0LCBlbmQpO1xufVxuXG5mdW5jdGlvbiBmaW5kKGFycmF5TGlrZSwgcHJlZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2F0ZSkge1xuICByZXR1cm4gc2xpY2UoYXJyYXlMaWtlKS5maWx0ZXIocHJlZGljYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSlbMF07XG59XG5cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMpIHtcbiAgcmV0dXJuIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jLmJpbmQobnVsbCwgLi4uc2xpY2UoYXJndW1lbnRzLCAxKSk7XG59XG5cbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBuZXh0VGljayA9IHNldFRpbWVvdXQ7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xufTtcblxuZnVuY3Rpb24gcmFmKGZ1bmMpIHtcbiAgcmV0dXJuIHJlcXVlc3RBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pbWF0aW9uRnJhbWUoZnVuYyk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZih0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc3ViamVjdCkge1xuICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZnVuY3Rpb24gaXNPYmplY3Qoc3ViamVjdCkge1xuICByZXR1cm4gIWlzTnVsbChzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ViamVjdCkgJiYgdHlwZU9mKCJvYmplY3QiLCBzdWJqZWN0KTtcbn1cbmNvbnN0IGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmNvbnN0IGlzRnVuY3Rpb24gPSBhcHBseSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZU9mLCAiZnVuY3Rpb24iKTtcbmNvbnN0IGlzU3RyaW5nID0gYXBwbHkodHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPZiwgInN0cmluZyIpO1xuY29uc3QgaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAidW5kZWZpbmVkIik7XG5mdW5jdGlvbiBpc051bGwoc3ViamVjdCkge1xuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHN1YmplY3QgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N1YmplY3Qub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRWxlbWVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbn1cblxuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yRWFjaCh2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gIHRvQXJyYXkodmFsdWVzKS5mbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaChpdGVyYXRlZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUpIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpID4gLTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBwdXNoKGFycmF5LCBpdGVtcykge1xuICBhcnJheS5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaCguLi50b0FycmF5KGl0ZW1zKSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywgYWRkKSB7XG4gIGlmIChlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xtKSB7XG4gICAgZm9yRWFjaChjbGFzc2VzLCAobmFtZSkgPT4ge1xuICAgICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuYW1lKSB7XG4gICAgICAgIGVsbS5jbGFzc0xpc3RbYWRkID8gImFkZCIgOiAicmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZSJdKG5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhZGRDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTdHJpbmcoY2xhc3NlcykgPyBjbGFzc2VzLnNwbGl0KCIgIikgOiBjbGFzc2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICBmb3JFYWNoKGNoaWxkcmVuLCBwYXJlbnQuYXBwZW5kQ2hpbGQuYmluZChwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50KSk7XG59XG5cbmZ1bmN0aW9uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JFYWNoKG5vZGVzLCAobm9kZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IChyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIHx8IG5vZGUpLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgcmVmKTtcbiAgICB9XG4gIH0pO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gbWF0Y2hlcyhlbG0sIHNlbGVjdG9yKSB7XG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNIVE1MRWxlbWVudChlbG0pICYmIChlbG1bIm1zTWF0Y2hlc1NlbGVjdG9yIl0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwgc2VsZWN0b3IpO1xufVxuXG5mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gY2hpbGRyZW4ocGFyZW50LCBzZWxlY3Rvcikge1xuICBjb25zdCBjaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW4yID0gcGFyZW50ID8gc2xpY2UocGFyZW50LmNoaWxkcmVuKSA6IFtdO1xuICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4yLmZpbHRlcigoY2hpbGQpID0+IG1hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaGVzKGNoaWxkLCBzZWxlY3RvcikpIDogY2hpbGRyZW4yO1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY2hpbGQocGFyZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gY2hpbGRyZW4ocGFyZW50LCBzZWxlY3RvcilbMF0gOiBwYXJlbnQuZmlyc3RFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudENoaWxkO1xufVxuXG5jb25zdCBvd25LZXlzID0gT2JqZWN0LmtleXM7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChvYmplY3QpIHtcbiAgICAocmlnaHQgPyBvd25LZXlzKG9iamVjdCkucmV2ZXJzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA6IG93bktleXMob2JqZWN0KSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5ICE9PSAiX19wcm90b19fIiAmJiBpdGVyYXRlZShvYmplY3Rba2V5XSwga2V5KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2lnbihvYmplY3QpIHtcbiAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKChzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291cmNlKSA9PiB7XG4gICAgZm9yT3duKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIG1lcmdlKG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpIHtcbiAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZm9yT3duKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZS5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvYmplY3Rba2V5XSA9IG1lcmdlKHt9LCBpc09iamVjdChvYmplY3Rba2V5XSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gb2JqZWN0W2tleV0gOiB7fSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBrZXlzKSB7XG4gIGZvckVhY2goa2V5cyB8fCBvd25LZXlzKG9iamVjdCksIChrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSA9PiB7XG4gICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHJlbW92ZUF0dHJpYnV0ZShlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21zLCAoZWxtKSA9PiB7XG4gICAgZm9yRWFjaChhdHRycywgKGF0dHIpID0+IHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbG0gJiYgZWxtLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSkge1xuICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgKHZhbHVlMiwgbmFtZSkgPT4ge1xuICAgICAgc2V0QXR0cmlidXRlKGVsbXMsIG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW1lLCB2YWx1ZTIpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvckVhY2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGVsbXMsIChlbG0pID0+IHtcbiAgICAgIGlzTnVsbCh2YWx1ZSkgfHwgdmFsdWUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sIGF0dHJzKSA6IGVsbS5zZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgICB9KTtcbiAgfVxufVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZnVuY3Rpb24gY3JlYXRlKHRhZywgYXR0cnMsIHBhcmVudCkge1xuICBjb25zdCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBpZiAoYXR0cnMpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaXNTdHJpbmcoYXR0cnMpID8gYWRkQ2xhc3MoZWxtLCBhdHRycykgOiBzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0QXR0cmlidXRlKGVsbSwgYXR0cnMpO1xuICB9XG4gIHBhcmVudCAmJiBhcHBlbmQocCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudCwgZWxtKTtcbiAgcmV0dXJuIGVsbTtcbn1cblxuZnVuY3Rpb24gc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGVsbSwgcHJvcCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbG0pW3Byb3BdO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBpZiAoIWlzTnVsbCh2YWx1ZSkpIHtcbiAgICBlbG0uc3R5bGVbcHJvcF0gPSBgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyR7dmFsdWV9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwbGF5KGVsbSwgZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXkyKSB7XG4gIHN0eWxlKGVsbSwgImRpc3BsYXkiLCBkaXNwbGF5Mik7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiBmb2N1cyhlbG0pIHtcbiAgZWxtWyJzZXRBY3RpdmUiXSAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgZWxtWyJzZXRBY3RpdmUiXSgpIHx8IGVsbS5mb2N1cyh7IHByZXZlbnRTY3JvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cikge1xuICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhdHRyKTtcbn1cblxuZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGhhc0NsYXNzKGVsbSwgY2xhc3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmIGVsbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHJlY3QodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuZ2V0Qm91bmRpbmdDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2gobm9kZXMsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50Tm9kZSkge1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtZWFzdXJlKHBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHZhbHVlKSB7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICBjb25zdCBkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ID0gY3JlYXRlKCJkaXYiLCB7IHN0eWxlOiBgd2lkdGg6ICR7dmFsdWV9OyBwb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb246IGFic29sdXRlO2AgfSwgcGFyZW50KTtcbiAgICB2YWx1ZSA9IHJlY3QoZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdikud2lkdGg7XG4gICAgcmVtb3ZlKGRpdik7XG4gIH1cbiAgcmV0dXJuIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIdG1sKGh0bWwpIHtcbiAgcmV0dXJuIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlsZChuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICJ0ZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9odG1sIikuYm9keSk7XG59XG5cbmZ1bmN0aW9uIHByZXZlbnQoZSwgc3RvcFByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wYWdhdGlvbikge1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChzdG9wUHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2F0aW9uKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnN0b3BJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBxdWVyeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocGFyZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC5xJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5QWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA/IHNsaWNlKHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpIDogW107XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiByZW1vdmVDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbiAgdG9nZ2xlQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKGVsbSwgY2xhc3NlcywgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiB0aW1lT2YoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgcmV0dXJuIGUudGltZVN0YW1wO1xufVxuXG5mdW5jdGlvbiB1bml0KHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBgJHt2YWx1ZX1weGAgOiAiIjtcbn1cblxuY29uc3QgUFJPSkVDVF9DT0RFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJzcGxpZGUiO1xuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7UCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST0pFQ1RfQ09ERX1dICR7bWVzc2FnZSB8fCAiIn1gKTtcbiAgfVxufVxuXG5mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZXJyb3IobWVzc2FnZSkge1xuICBjb25zb2xlLmVycm9yKGBbJHtQUk9KRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDVF9DT0RFfV0gJHttZXNzYWdlfWApO1xufVxuXG5jb25zdCB7IG1pbiwgbWF4LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZmxvb3IsIGNlaWwsIGFicyB9ID0gTWF0aDtcblxuZnVuY3Rpb24gYXBwcm94aW1hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbHlFcXVhbCh4LCB5LCBlcHNpbG9uKSB7XG4gIHJldHVybiBhYnMoeCAtIHkpIDwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vwc2lsb247XG59XG5cbmZ1bmN0aW9uIGJldHdlZW4obnVtYmVyLCB4LCB5LCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hjbHVzaXZlKSB7XG4gIGNvbnN0IG1pbmltdW0gPSBtaW4oeCwgeSk7XG4gIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW0gPCBudW1iZXIgJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciAmJiBudW1iZXIgPD0gbWF4aW11bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciwgeCwgeSkge1xuICBjb25zdCBtaW5pbXVtID0gbWluKHgsIHkpO1xuICBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgbWF4aW11bSA9IG1heCh4LCB5KTtcbiAgcmV0dXJuIG1pbihtYXgobWluaW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW0sIG51bWJlciksIG1heGltdW0pO1xufVxuXG5mdW5jdGlvbiBzaWduKHgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHJldHVybiArKHggPiAwKSAtICsoeCA8IDApO1xufVxuXG5mdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZWxUb0tlYmFiKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW2EtejAtOV0pKFtBLVpdKS9nLCAiJDEtJDIiKS50b0xvd2VyQ2FzZSgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZnVuY3Rpb24gZm9ybWF0KHN0cmluZywgcmVwbGFjZW1lbnRzKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoKHJlcGxhY2VtZW50cywgKHJlcGxhY2VtZW50KSA9PiB7XG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZyA9IHN0cmluZy5yZXBsYWNlKCIlcyIsIGAke3JlcGxhY2VtZW50fWApO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZChudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHJldHVybiBudW1iZXIgPCAxMCA/IGAwJHtudW1iZXJ9YCA6IGAke251bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXJ9YDtcbn1cblxuY29uc3QgaWRzID0ge307XG5mdW5jdGlvbiB1bmlxdWVJZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJlZml4KSB7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtwYWQoaWRzW3ByZWZpeF0gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGlkc1twcmVmaXhdIHx8IDApICsgMSl9YDtcbn1cblxuZXhwb3J0IHsgYWJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYWRkQ2xhc3MsIGFwcGVuZCwgYXBwbHksIGFwcHJveGltYXRlbHlFcXVhbCwgYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VydCwgYXNzaWduLCBiZWZvcmUsIGJldHdlZW4sIGNhbWVsVG9LZWJhYiwgY2VpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wsIGNoaWxkLCBjaGlsZHJlbiwgY2xhbXAsIGNyZWF0ZSwgZGlzcGxheSwgZW1wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5LCBlcnJvciwgZmluZCwgZmxvb3IsIGZvY3VzLCBmb3JFYWNoLCBmb3JPd24sIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JtYXQsIGdldEF0dHJpYnV0ZSwgaGFzQ2xhc3MsIGluY2x1ZGVzLCBpc0FycmF5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgaXNGdW5jdGlvbiwgaXNIVE1MRWxlbWVudCwgaXNOdWxsLCBpc09iamVjdCwgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzU3RyaW5nLCBpc1VuZGVmaW5lZCwgbWF0Y2hlcywgbWF4LCBtZWFzdXJlLCBtZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UsIG1pbiwgbmV4dFRpY2ssIG5vb3AsIG9taXQsIG93bktleXMsIHBhZCwgcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlSHRtbCwgcHJldmVudCwgcHVzaCwgcXVlcnksIHF1ZXJ5QWxsLCByYWYsIHJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCByZW1vdmUsIHJlbW92ZUF0dHJpYnV0ZSwgcmVtb3ZlQ2xhc3MsIHNldEF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWJ1dGUsIHNpZ24sIHNsaWNlLCBzdHlsZSwgdGltZU9mLCB0b0FycmF5LCB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlQ2xhc3MsIHVuaXF1ZUlkLCB1bml0IH07XG4nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvdXRpbHMvc3BsaWRlLXV0aWxzLmVzbS5qcycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9fSwKIDM4OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYiIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnXyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJfZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBlbXB0eShhciIKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5TGlrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIGZpbmQoYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5TGlrZSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiBzbGljZShhcnJheUxpa2UpLmZpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXIocHJlZGljYXRlKVswXTtcbn1cblxuZnVuY3Rpb24gYXBwbHkoZnVuYykge1xuICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGZ1bmMuYmluZChudWxsLCAuLi5zbGljZShhcmd1bWVudHMsIDEpKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmNvbnN0IG5leHRUaWNrID0gc2V0VGltZW91dDtcblxuY29uc3Qgbm9vcCA9ICgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PiB7XG59O1xuXG5mdW5jdGlvbiByYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltYXRpb25GcmFtZShmdW5jKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUsIHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbn1cbmZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAhaXNOdWxsKHN1YmplY3QpICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiB0eXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xufVxuY29uc3QgaXNBcnJheSA9IEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheS5pc0FycmF5O1xuY29uc3QgaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgImZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIpO1xuY29uc3QgaXNTdHJpbmcgPSBhcHBseSh0eXBlT2YsICJzdHJpbmciKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5jb25zdCBpc1VuZGVmaW5lZCA9IGFwcGx5KHR5cGVPZiwgInVuZGVmaW5lZCIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbmZ1bmN0aW9uIGlzTnVsbChzdWJqZWN0KSB7XG4gIHJldHVybiBzdWJqZWN0ID09JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3ViamVjdCkge1xuICB0cicKICAgICAgICAgICAgICAgICAgICAgICAgYid5IHtcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZW9mIChzdWJqZWN0Lm93bmVyRG9jdScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdykuSFRNTEVsZW1lbnQ7XG4gIH0gY2F0Y2ggKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkodicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ107XG59XG5cbmZ1bmN0aW9uIGZvckVhY2godmFsdWVzLCBpdGVyYXRlZSkge1xuICB0b0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheSh2YWx1ZXMpLmZvckVhY2goaXRlcmF0ZWUpO1xufVxuXG5mdW5jdGlvbiBpbmNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKHZhbHVlKSA+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAtMTtcbn1cblxuZnVuY3Rpb24gcHVzaChhcnJheSwgaXRlbXMpIHtcbiAgYXJyYXkucHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2goLi4udG9BcnJheShpdGVtcykpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGFkZCkge1xuICBpZiAoZWxtKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZvckVhY2goY2xhc3NlcywgKG5hbWUpID0+IHtcbiAgICAgIGlmIChuYW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICBlbG0uY2xhc3NMaXN0W2FkZCA/ICJhZGQiIDogInJlbW92ZSJdKG5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoZWxtLCBjbGFzc2VzKSB7XG4gIHRvZ2dsZUNsYXNzKGVsbSwgaXNTdHJpbmcoY2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpID8gY2xhc3Nlcy5zcGxpdCgiICIpIDogY2xhc3NlcywgdHJ1ZSk7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBhcHBlbmQocGFyZW50LCBjaGlsZHJlbikge1xuICBmb3JFYWNoKGNoaWxkcmVuLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50LmFwcGVuZENoaWxkLmJpbmQocGFyZW50KSk7XG59XG5cbmZ1bmN0aW9uIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZvcmUobm9kZXMsIHJlZikge1xuICBmb3JFYWNoKG5vZGVzLCAobm9kZSkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBjb25zdCBwYXJlbnQgPSAocmVmIHx8IG5vZGUpLnBhcmVudE5vZGU7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgcmVmKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhlbG0sIHNlbGVjdG9yKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmIChlbG1bIm1zTWF0Y2hlc1NlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwgc2VsZWN0b3IpO1xufVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCBzZWxlY3Rvcikge1xuICBjb25zdCBjaGlsZHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4yID0gcGFyZW50ID8gc2xpY2UocGFyZW50LmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yID8gY2hpbGRyZW4yLmZpbHRlcigoY2hpbGQpID0+IG1hdGNoZXMoY2hpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkLCBzZWxlY3RvcikpIDogY2hpbGRyZW4yO1xufVxuXG5mdW5jdGlvbiBjaGlsZChwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbihwYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzZWxlY3RvcilbMF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0aW9uIGZvck93bihvYmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0LCBpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIChyaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPyBvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogb3duS2V5cyhvYmplY3QpKS5mb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCgoa2V5KSA9PiB7XG4gICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShvYmplY3Rba2V5XSwga2V5KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gYXNzaWduKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICBmb3JPd24oc291cmNlLCAodmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBrZXkpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gbWVyZ2Uob2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goKHNvdXJjZSkgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcbiAgICBmb3JPd24oc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9iamVjdFtrZXldID0gbWVyZ2Uoe30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Rba2V5XSA6IHt9LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5cykge1xuICBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaChrZXlzIHx8IG93bktleXMob2JqZWN0KSwgKGtleSkgPT4ge1xuICAgIGRlbGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbXMsIGF0dHJzKSB7XG4gIGZvckVhY2goZWxtcywgKGVsbSkgPT4ge1xuICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGF0dHJzLCAoYXR0cikgPT4ge1xuICAgICAgZWxtICYmIGVsbS5yZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKGF0dHIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZShlbG1zLCBhdHRycywgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KGF0dHJzKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICBmb3JPd24oYXR0cnMsICh2YWx1ZTIsIG5hbWUpID0+IHtcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICB9KTtcbiAgfSBlbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB7XG4gICAgZm9yRWFjaChlbG1zLCAoZWxtKSA9PiB7XG4gICAgICBpc051bGwodmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSB8fCB2YWx1ZSA9PT0gIiIgPyByZW1vdmVBdHRyaWJ1dGUoZWxtLCBhdHRycykgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtLnNldEF0dHJpYnV0ZShhdHRycywgU3RyaW5nKHZhbHVlKSk7XG4gICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZSh0YWcsIGF0dHJzLCBwYXJlbnQpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKGF0dHJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIGlzU3RyaW5nKGF0dHJzKSA/IGFkZENsYXNzKGVsbSwgYXR0cnMpIDogc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShlbG0sIGF0dHJzKTtcbiAgfVxuICBwYXJlbnQgJiYgYXBwZW5kKHBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQsIGVsbSk7XG4gIHJldHVybiBlbG07XG59XG5cbmZ1bmN0aW9uIHN0eWxlKGVsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3AsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxtKVtwcm9wXTtcbiAgfVxuICBpZiAoIWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc051bGwodmFsdWUpKSB7XG4gICAgZWxtLnN0eWxlW3Byb3BdID0gYCR7dmFsdWV9YCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gIHN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZShlbG0sICJkaXNwbGF5IiwgZGlzcGxheTIpO1xufVxuXG5mdW5jdGlvbiBmb2N1cygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxtKSB7XG4gIGVsbVsic2V0QWN0aXZlIl0gJiYgZWxtWyJzZXRBY3RpdmUiXSgpIHx8IGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG0uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKGVsbSwgYXR0cikge1xuICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cik7XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsbSwgY2xhc3NOYW1lKSB7XG4gIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gZWxtICYmIGVsbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIHJlY3QodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuZ2V0Qm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUobm9kZXMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZvckVhY2gobm9kZXMsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50Tm9kZSkge1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtZWFzdXJlKHBhcmVudCwgdmFsdWUpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICBjb25zdCBkaXYgPSBjcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKCJkaXYiLCB7IHN0eWxlOiBgd2lkdGg6ICR7dmFsdWV9OyBwb3NpdGlvbjogYWJzb2x1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlO2AgfSwgcGFyZW50KTtcbiAgICB2YWx1ZSA9IHJlY3QoZGl2KS53aWR0aDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmVtb3ZlKGRpdik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyc2VIdG1sKGh0bWwpIHtcbiAgcmV0dXJuIGNoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VGcm9tU3RyaW5nKGh0bWwsICJ0ZXh0L2h0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHByZXZlbnQoZSwgc3RvcFByb3BhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1bHQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIGlmIChzdG9wUHJvcGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBxdWVyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnQgJiYgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gcXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gc2xpY2UocGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkgOiBbXTtcbn1cblxuZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2dnbGVDbGFzcyhlbG0sIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHRpbWVPZihlKSB7XG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS50aW1lU3RhbXA7XG59XG5cbmZ1bmN0aW9uIHVuaXQodmFsdWUpIHtcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID8gYCR7dmFsdWV9cHhgIDogIiI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5jb25zdCBQUk9KRUNUX0NPREUgPSAic3BsaWRlIjtcblxuZnVuY3Rpb24gYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdGhyb3cgbmV3IEVycm9yKGBbJHtQUk9KRUNUX0NPREV9XSAke21lc3NhZ2UgfHwgIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UpIHtcbiAgY29uc29sZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJyb3IoYFske1BST0pFQ1RfQ09ERX1dICR7bWVzc2FnZX1gKTtcbn1cblxuY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3sgbWluLCBtYXgsIGZsb29yLCBjZWlsLCBhYnMgfSA9IE1hdGg7XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHByb3hpbWF0ZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikge1xuICByZXR1cm4gYWJzKHggJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0geSkgPCBlcHNpbG9uO1xufVxuXG5mdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwgeCwgeScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGV4Y2x1c2l2ZSkge1xuICBjb25zdCBtaW5pbXVtID0gbWluKHgsIHkpO1xuICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgbWF4aW11bSA9IG1heCh4LCB5KTtcbiAgcmV0dXJuIGV4Y2x1c2l2ZSA/IG1pbmltdScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIDwgbnVtYmVyICYmIG51bWJlciA8IG1heGltdW0gOiBtaW5pbXVtIDw9IG51bWJlciAmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYgbnVtYmVyIDw9IG1heGltdW07XG59XG5cbmZ1bmN0aW9uIGNsYW1wKG51bWJlciwgeCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHkpIHtcbiAgY29uc3QgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgY29uc3QgbWF4aScKICAgICAgICAgICAgICAgICAgICAgICAgYidtdW0gPSBtYXgoeCwgeSk7XG4gIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWJlciksICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtYXhpbXVtKTtcbn1cblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiArKHggPiAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgLSArKHggPCAwKTtcbn1cblxuZnVuY3Rpb24gY2FtZWxUb0tlYmFiKHN0cmluZykgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAiJDEtJCcKICAgICAgICAgICAgICAgICAgICAgICAgYicyIikudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0KHN0cmluZywgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2VtZW50cykge1xuICBmb3JFYWNoKHJlcGxhY2VtZW50cywgKHJlcGxhY2VtZW50KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT4ge1xuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCIlcyIsIGAke3JlcGxhY2VtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndH1gKTtcbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZChudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyKSB7XG4gIHJldHVybiBudW1iZXIgPCAxMCA/IGAwJHtudW1iZXJ9YCA6IGAke251bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ9YDtcbn1cblxuY29uc3QgaWRzID0ge307XG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaScKICAgICAgICAgICAgICAgICAgICAgICAgYid4KSB7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaXhdIHx8IDApICsgMSl9YDtcbn1cblxuZXhwb3J0cy5hYnMgPSBhYnM7XG5leHBvcnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5hZGRDbGFzcyA9IGFkZENsYXNzO1xuZXhwb3J0cy5hcHBlbmQgPSBhcHBlbmQ7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5hcHBseSA9IGFwcGx5O1xuZXhwb3J0cy5hcHByb3hpbWF0ZWx5RXF1YWwgPSBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Bwcm94aW1hdGVseUVxdWFsO1xuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmJlZm9yZSA9IGJlZm9yZTtcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnRzLmJldHdlZW4gPSBiZXR3ZWVuO1xuZXhwb3J0cy5jYW1lbFRvS2ViYWIgPSBjYW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xUb0tlYmFiO1xuZXhwb3J0cy5jZWlsID0gY2VpbDtcbmV4cG9ydHMuY2hpbGQgPSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQ7XG5leHBvcnRzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5leHBvcnRzLmNsYW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNsYW1wO1xuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5leHBvcnRzLmRpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5ID0gZGlzcGxheTtcbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmV4cG9ydHMuZXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yID0gZXJyb3I7XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZXhwb3J0cy5mbG9vciA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmbG9vcjtcbmV4cG9ydHMuZm9jdXMgPSBmb2N1cztcbmV4cG9ydHMuZm9yRWFjaCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoO1xuZXhwb3J0cy5mb3JPd24gPSBmb3JPd247XG5leHBvcnRzLmZvcm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBmb3JtYXQ7XG5leHBvcnRzLmdldEF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLmhhc0NsYXNzID0gaGFzQ2xhc3M7XG5leHBvcnRzLmluY2x1ZGVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluY2x1ZGVzO1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcbmV4cG9ydHMuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuZXhwb3J0cy5pc0hUTUxFbGVtZW50ID0gaXNIVE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEVsZW1lbnQ7XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcbmV4cG9ydHMuaXNPYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0ID0gaXNPYmplY3Q7XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuZXhwb3J0cy5tYXRjaGVzID0gbWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoZXM7XG5leHBvcnRzLm1heCA9IG1heDtcbmV4cG9ydHMubWVhc3VyZSA9IG1lYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJlO1xuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZXhwb3J0cy5taW4gPSBtaW47XG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5uZXh0VGljayA9IG5leHRUaWNrO1xuZXhwb3J0cy5ub29wID0gbm9vcDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLm9taXQgPSBvbWl0O1xuZXhwb3J0cy5vd25LZXlzID0gb3duS2V5czsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLnBhZCA9IHBhZDtcbmV4cG9ydHMucGFyc2VIdG1sID0gcGFyc2VIdG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDtcbmV4cG9ydHMucHJldmVudCA9IHByZXZlbnQ7XG5leHBvcnRzLnB1c2ggPSBwdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDtcbmV4cG9ydHMucXVlcnkgPSBxdWVyeTtcbmV4cG9ydHMucXVlcnlBbGwgPSBxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnlBbGw7XG5leHBvcnRzLnJhZiA9IHJhZjtcbmV4cG9ydHMucmVjdCA9IHJlY3Q7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5yZW1vdmUgPSByZW1vdmU7XG5leHBvcnRzLnJlbW92ZUF0dHJpYnV0ZSA9IHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVBdHRyaWJ1dGU7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0gcmVtb3ZlQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuZXhwb3J0cy5zZXRBdHRyaWJ1dGUgPSBzZXRBdHRyaWJ1dGU7XG5leHBvcnRzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWduID0gc2lnbjtcbmV4cG9ydHMuc2xpY2UgPSBzbGljZTtcbmV4cG9ydHMuc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gc3R5bGU7XG5leHBvcnRzLnRpbWVPZiA9IHRpbWVPZjtcbmV4cG9ydHMudG9BcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkgPSB0b0FycmF5O1xuZXhwb3J0cy50b2dnbGVDbGFzcyA9IHRvZ2dsZUNsYXNzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMudW5pcXVlSWQgPSB1bmlxdWVJZDtcbmV4cG9ydHMudW5pdCA9IHVuaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3V0aWxzL3NwbGlkZS11dGlscy5janMuanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYiIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnXyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJfZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBlbXB0eShhciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGFycmF5TGlrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZS5zbGljZS5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBmaW5kKGFycmF5TGlrZSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiBzbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoYXJyYXlMaWtlKS5maWx0ZXIocHJlZGljYXRlKVswXTtcbn1cblxuZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGFwcGx5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMuYmluZChudWxsLCAuLi5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoYXJndW1lbnRzLCAxKSk7XG59XG5cbmNvbnN0IG5leHRUaWNrID0gc2V0VGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVvdXQ7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5mdW5jdGlvbiByYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKGZ1bmMpIHtcbiAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIHR5cGVPZih0eXBlLCBzdWJqZWN0KSB7XG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG59XG5mdW5jdGlvbiBpc09iamVjdChzdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCkge1xuICByZXR1cm4gIWlzTnVsbChzdWJqZWN0KSAmJiB0eXBlT2YoIm9iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QiLCBzdWJqZWN0KTtcbn1cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbmNvbnN0IGlzRnVuY3Rpb24gPSBhcHBseSh0eXBlT2YsICJmdW5jdGlvbiIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGlzU3RyaW5nID0gYXBwbHkodHlwZU9mLCAic3RyaW5nIik7XG5jb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsICJ1bmRlZmluZWQiKTtcbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBpc051bGwoc3ViamVjdCkge1xuICByZXR1cm4gc3ViamVjdCA9PT0gbnVsbDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1YmplY3QpIHtcbiAgdHJ5IHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoc3ViamVjdC5vd25lckRvY3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTUxFbGVtZW50O1xuICB9IGNhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29BcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgaXRlcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVlKSB7XG4gIHRvQXJyYXkodmFsdWVzKS5mb3JFYWNoKGl0ZXJhdGVlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGFycmF5LmluZGV4T2YodmFsdWUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIHB1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKGFycmF5LCBpdGVtcykge1xuICBhcnJheS5wdXNoKC4uLnRvQXJyYXkoaXRlbXMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbSwgY2xhc3NlcywgYWRkKSB7XG4gIGlmIChlbG0pIHtcbiAgICBmb3JFYWNoKGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzLCAobmFtZSkgPT4ge1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc0xpc3RbYWRkID8gImFkZCIgOiAicmVtb3ZlIl0obmFtZSk7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBpc1N0cmluZyhjbGFzc2VzKSA/IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzLnNwbGl0KCIgIikgOiBjbGFzc2VzLCB0cnVlKTtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gIGZvckVhY2goY2hpbGRyZW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQuYXBwZW5kQ2hpbGQuYmluZChwYXJlbnQpKTtcbn1cblxuZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gIGZvckVhY2gobm9kZXMsIChub2RlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IChyZWYgfHwgbm9kZSkucGFyZW50Tm9kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgcmVmKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20sIHNlbGVjdG9yKSB7XG4gIHJldHVybiBpc0hUTUxFbGVtZW50KGVsbSkgJiYgKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG1bIm1zTWF0Y2hlc1NlbGVjdG9yIl0gfHwgZWxtLm1hdGNoZXMpLmNhbGwoZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc2VsZWN0b3IpO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbihwYXJlbnQsIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3Rvcikge1xuICBjb25zdCBjaGlsZHJlbjIgPSBwYXJlbnQgPyBzbGljZShwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyLmZpbHRlcigoY2hpbGQpID0+IG1hdGNoZXMoY2hpbGQsIHNlbGVjdG9yKSkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hpbGRyZW4yO1xufVxuXG5mdW5jdGlvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncikge1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcilbMF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0aW9uIGZvck93bihvYmplY3QsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIChyaWdodCA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogb3duS2V5cyhvYmplY3QpKS5mb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCgoa2V5KSA9PiB7XG4gICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlZShvYmplY3Rba2V5XSwga2V5KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gYXNzaWduKG9iamVjdCkge1xuICBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICBmb3JPdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NvdXJjZVtrZXldO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIG1lcmdlKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICBmb3JPd24oc291cmNlLCAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gbWVyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHt9LCBpc09iamVjdChvYmplY3Rba2V5XSkgPyBvYmplY3Rba2V5XSA6IHt9LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXMpIHtcbiAgZm9yRWFjaChrZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5cyB8fCBvd25LZXlzKG9iamVjdCksIChrZXkpID0+IHtcbiAgICBkZWxldGUgb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsbXMsIChlbG0pID0+IHtcbiAgICBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaChhdHRycywgKGF0dHIpID0+IHtcbiAgICAgIGVsbSAmJiBlbG0ucmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhbHVlKSB7XG4gIGlmIChpc09iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzLCAodmFsdWUyLCBuYW1lKSA9PiB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc2V0QXR0cmlidXRlKGVsbXMsIG5hbWUsIHZhbHVlMik7XG4gICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9IGVsc2Uge1xuICAgIGZvckVhY2goZWxtcywgKGVsbSkgPT4ge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlzTnVsbCh2YWx1ZSkgfHwgdmFsdWUgPT09ICIiID8gcmVtb3ZlQXR0cmlidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZShlbG0sIGF0dHJzKSA6IGVsbS5zZXRBdHRyaWJ1dGUoYXR0cnMsIFN0cmluZygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGUodGFnLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXR0cnMsIHBhcmVudCkge1xuICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdGVFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudCh0YWcpO1xuICBpZiAoYXR0cnMpIHtcbiAgICBpc1N0cmluZyhhdHRycykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gYWRkQ2xhc3MoZWxtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG4gIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGVsbTtcbn1cblxuZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcHV0ZWRTdHlsZShlbG0pW3Byb3BdO1xuICB9XG4gIGlmICghaXNOdWxsKHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICBlbG0uc3R5bGVbcHJvcF0gPSBgJHt2YWx1ZX1gO1xuICB9XG59XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBkaXNwbGF5KGVsbSwgZGlzcGxheTIpIHtcbiAgc3R5bGUoZWxtLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRpc3BsYXkiLCBkaXNwbGF5Mik7XG59XG5cbmZ1bmN0aW9uIGZvY3VzKGVsbSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgZWxtWyJzZXRBY3RpdmUiXSAmJiBlbG1bInNldEFjdGl2ZSJdKCkgfHwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG59XG5cbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gIHJldHVybiBlbG0uZ2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZShhdHRyKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWlucygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiByZW1vdmUobm9kZXMpIHtcbiAgZm9yRWFjaChub2RlcywgKG5vZGUpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBtZWFzdXJlKHBhcmVudCwgdmFsdWUpIHtcbiAgaWYgKGlzU3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2YWx1ZSkpIHtcbiAgICBjb25zdCBkaXYgPSBjcmVhdGUoImRpdiIsIHsgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBgd2lkdGg6ICR7dmFsdWV9OyBwb3NpdGlvbjogYWJzb2x1dGU7YCB9LCBwYXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KTtcbiAgICB2YWx1ZSA9IHJlY3QoZGl2KS53aWR0aDtcbiAgICByZW1vdmUoZGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGh0bWwpIHtcbiAgcmV0dXJuIGNoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtU3RyaW5nKGh0bWwsICJ0ZXh0L2h0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHByZXZlbnQoZSwgc3RvcFByb3BhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x0KCk7XG4gIGlmIChzdG9wUHJvcGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxufVxuXG5mdW5jdGlvbiBxdWVyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gcGFyZW50ICYmIHBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIHF1ZXJ5QWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBzZWxlY3RvciA/IHNsaWNlKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3RvcikpIDogW107XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBmYWxzZSk7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiB0aW1lT2YoZSkge1xuICByZXR1cm4gZS50aW1lU3RhbXA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiB1bml0KHZhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWUpID8gdmFsdWUgOiB2YWx1ZSA/IGAke3ZhbHVlfXB4YCA6ICIiOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuY29uc3QgUFJPSkVDVF9DT0RFID0gInNwbGlkZSI7XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7UFJPSkVDVF9DT0RFfV0gJHttZXNzYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSB8fCAiIn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICBjb25zb2xlLmVycm9yKGBbJHtQUk9KRUNUX0NPREV9XSAke21lc3NhZ2V9YCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xufVxuXG5jb25zdCB7IG1pbiwgbWF4LCBmbG9vciwgY2VpbCwgYWJzIH0gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTWF0aDtcblxuZnVuY3Rpb24gYXBwcm94aW1hdGVseUVxdWFsKHgsIHksIGVwc2lsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSB7XG4gIHJldHVybiBhYnMoeCAtIHkpIDwgZXBzaWxvbjtcbn1cblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGJldHdlZW4obnVtYmVyLCB4LCB5LCBleGNsdXNpdmUpIHtcbiAgY29uc3QgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmltdW0gPSBtaW4oeCwgeSk7XG4gIGNvbnN0IG1heGltdW0gPSBtYXgoeCwgeSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW11bSA8IG51bWJlciAmJiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICYmIG51bWJlciA8PSBtYXhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ211bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAobnVtYmVyLCB4LCB5KSB7XG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBtaW5pbXVtID0gbWluKHgsIHkpO1xuICBjb25zdCBtYXhpbXVtID0gbWF4KHgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB5KTtcbiAgcmV0dXJuIG1pbihtYXgobWluaW11bSwgbnVtYmVyKSwgbWF4aW11bSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuICsoeCA+IDApIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysoeCA8IDApO1xufVxuXG5mdW5jdGlvbiBjYW1lbFRvS2ViYWIoc3RyaW5nKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJDEtJDIiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZywgcmVwbGFjZW1lbnRzKSB7XG4gIGZvckVhY2gocmVwbGFjZW1lbnRzLCAocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcGxhY2VtZW50KSA9PiB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoIiVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIGAke3JlcGxhY2VtZW50fWApO1xuICB9KTtcbiAgcmV0dXJuIHN0cmluZzsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIHBhZChudW1iZXIpIHtcbiAgcmV0dXJuIG51bWJlciA8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxMCA/IGAwJHtudW1iZXJ9YCA6IGAke251bWJlcn1gO1xufVxuXG5jb25zdCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzID0ge307XG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgcmV0dXJuIGAkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3twcmVmaXh9JHtwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZWZpeF0gfHwgMCkgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMSl9YDtcbn1cblxuZXhwb3J0cy5hYnMgPSBhYnM7XG5leHBvcnRzLmFkZENsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IGFkZENsYXNzO1xuZXhwb3J0cy5hcHBlbmQgPSBhcHBlbmQ7XG5leHBvcnRzLmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseSA9IGFwcGx5O1xuZXhwb3J0cy5hcHByb3hpbWF0ZWx5RXF1YWwgPSBhcHBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4aW1hdGVseUVxdWFsO1xuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5leHBvcnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmJlZm9yZSA9IGJlZm9yZTtcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmJldHdlZW4gPSBiZXR3ZWVuO1xuZXhwb3J0cy5jYW1lbFRvS2ViYWIgPSBjYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xUb0tlYmFiO1xuZXhwb3J0cy5jZWlsID0gY2VpbDtcbmV4cG9ydHMuY2hpbGQgPSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQ7XG5leHBvcnRzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5leHBvcnRzLmNsYW1wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNsYW1wO1xuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5leHBvcnRzLmRpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5ID0gZGlzcGxheTtcbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmV4cG9ydHMuZXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yID0gZXJyb3I7XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZXhwb3J0cy5mbG9vciA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmbG9vcjtcbmV4cG9ydHMuZm9jdXMgPSBmb2N1cztcbmV4cG9ydHMuZm9yRWFjaCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoO1xuZXhwb3J0cy5mb3JPd24gPSBmb3JPd247XG5leHBvcnRzLmZvcm1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBmb3JtYXQ7XG5leHBvcnRzLmdldEF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLmhhc0NsYXNzID0gaGFzQ2xhc3M7XG5leHBvcnRzLmluY2x1ZGVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluY2x1ZGVzO1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcbmV4cG9ydHMuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuZXhwb3J0cy5pc0hUTUxFbGVtZW50ID0gaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzSFRNTEVsZW1lbnQ7XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcbmV4cG9ydHMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzT2JqZWN0ID0gaXNPYmplY3Q7XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuZXhwb3J0cy5tYXRjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlcyA9IG1hdGNoZXM7XG5leHBvcnRzLm1heCA9IG1heDtcbmV4cG9ydHMubWVhc3VyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBtZWFzdXJlO1xuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZXhwb3J0cy5taW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gbWluO1xuZXhwb3J0cy5uZXh0VGljayA9IG5leHRUaWNrO1xuZXhwb3J0cy5ub29wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG5vb3A7XG5leHBvcnRzLm9taXQgPSBvbWl0O1xuZXhwb3J0cy5vd25LZXlzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293bktleXM7XG5leHBvcnRzLnBhZCA9IHBhZDtcbmV4cG9ydHMucGFyc2VIdG1sID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcnNlSHRtbDtcbmV4cG9ydHMucHJldmVudCA9IHByZXZlbnQ7XG5leHBvcnRzLnB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NoID0gcHVzaDtcbmV4cG9ydHMucXVlcnkgPSBxdWVyeTtcbmV4cG9ydHMucXVlcnlBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsID0gcXVlcnlBbGw7XG5leHBvcnRzLnJhZiA9IHJhZjtcbmV4cG9ydHMucmVjdCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZWN0O1xuZXhwb3J0cy5yZW1vdmUgPSByZW1vdmU7XG5leHBvcnRzLnJlbW92ZUF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUgPSByZW1vdmVBdHRyaWJ1dGU7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlbW92ZUNsYXNzO1xuZXhwb3J0cy5zZXRBdHRyaWJ1dGUgPSBzZXRBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuZXhwb3J0cy5zaWduID0gc2lnbjtcbmV4cG9ydHMuc2xpY2UgPSBzbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG5leHBvcnRzLnN0eWxlID0gc3R5bGU7XG5leHBvcnRzLnRpbWVPZiA9IHRpbWVPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Y7XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuZXhwb3J0cy50b2dnbGVDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgPSB0b2dnbGVDbGFzcztcbmV4cG9ydHMudW5pcXVlSWQgPSB1bmlxdWVJZDtcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnRzLnVuaXQgPSB1bml0O1xuJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3V0aWxzL3NwbGlkZS11dGlscy5janMuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfX0sCiAzNTM6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzBBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMEEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9fSwKIDM1NDogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMUEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ319LAogMzU1OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcyQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzJBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfX0sCiAzNTY6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzNBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnM0EuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9fSwKIDM1Nzogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnNEEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc0QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ319LAogMzU4OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc1QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzVBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfX0sCiAzNTk6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzZBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnNkEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9fSwKIDM2MDogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnN0EuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc3QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ319LAogMzYxOiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc4QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzhBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfX0sCiAzNjI6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzlBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnOUEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9fSwKIDM2Mzogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTBBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTBBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfX0sCiAzNjQ6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzExQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzExQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ319LAogMzY1OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxMkEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxMkEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9fSwKIDM2Njogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTNBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTNBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfX0sCiAzNjc6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzE0QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzE0QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ319fQo=
Copyright © 2025 by WebAsOne LLC, All Rights Reserved