{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_advance-string-index.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_function-to-string.js","node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_regexp-exec-abstract.js","node_modules/core-js/modules/_regexp-exec.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_string-trim.js","node_modules/core-js/modules/_string-ws.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.number.constructor.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.to-string.js","node_modules/core-js/modules/es6.regexp.exec.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.string.iterator.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.symbol.async-iterator.js","node_modules/core-js/modules/web.dom.iterable.js","src/scripts/entry.js","src/scripts/modules/accordion.js","src/scripts/modules/b7.js","src/scripts/modules/breakpoints.js","src/scripts/modules/case-filter.js","src/scripts/modules/certified.js","src/scripts/modules/contact-form.js","src/scripts/modules/document-centre-filter.js","src/scripts/modules/fadeInUp-logo.js","src/scripts/modules/gtm.js","src/scripts/modules/hash.js","src/scripts/modules/in-view.js","src/scripts/modules/lineHeight.js","src/scripts/modules/map.js","src/scripts/modules/media-resource-select.js","src/scripts/modules/media-resources-play-video.js","src/scripts/modules/mobile_menu.js","src/scripts/modules/modal-gallery.js","src/scripts/modules/modal.js","src/scripts/modules/motions-filter.js","src/scripts/modules/news-filter-category-dd.js","src/scripts/modules/partners.js","src/scripts/modules/popup.js","src/scripts/modules/process-filter.js","src/scripts/modules/quick_links.js","src/scripts/modules/scroll-direction.js","src/scripts/modules/search-featured-content.js","src/scripts/modules/searchAutoFocus.js","src/scripts/modules/select2.js","src/scripts/modules/slider.js","src/scripts/modules/sticky.js","src/scripts/modules/tabs.js","src/scripts/modules/timeline.js","src/scripts/modules/truncate.js"],"names":[],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;;ACFA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;;ACHA;AACA;;ACDA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","file":"bundle.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var core = module.exports = { version: '2.6.11' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","module.exports = {};\n","module.exports = false;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","exports.f = require('./_wks');\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('./_wks-define')('asyncIterator');\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","import truncate from './modules/truncate';\nimport popup from './modules/popup';\nimport slider from './modules/slider';\nimport modal from './modules/modal';\nimport modalGallery from './modules/modal-gallery';\nimport mediaResourcesPlayVideoBtn from './modules/media-resources-play-video';\nimport accordion from './modules/accordion';\nimport mediaResourceSelect from './modules/media-resource-select';\nimport mobile_menu from './modules/mobile_menu';\nimport certified from './modules/certified';\nimport in_view from './modules/in-view';\nimport newsFilterCategoryDd from './modules/news-filter-category-dd';\nimport sticky from './modules/sticky';\nimport b7 from './modules/b7';\nimport contactForm from './modules/contact-form';\nimport quick_links from './modules/quick_links';\nimport map from './modules/map';\nimport partners from './modules/partners';\nimport timeline from './modules/timeline';\nimport caseFilter from './modules/case-filter';\nimport processFilter from './modules/process-filter';\nimport documentCentreFilter from './modules/document-centre-filter';\nimport tabs from './modules/tabs';\nimport searchAutoFocus from './modules/searchAutoFocus';\nimport fadeInUplogo from './modules/fadeInUp-logo';\nimport select2 from './modules/select2';\nimport gtm from './modules/gtm';\nimport searchFeaturedContent from './modules/search-featured-content.js';\nimport motions_filter from './modules/motions-filter';\n\n[\n truncate, // Drupal Behavior\n\n popup,\n slider,\n modal,\n modalGallery,\n mediaResourcesPlayVideoBtn,\n accordion,\n mediaResourceSelect,\n mobile_menu,\n certified,\n in_view,\n newsFilterCategoryDd,\n sticky,\n b7,\n contactForm,\n quick_links,\n map,\n partners,\n timeline,\n caseFilter,\n processFilter,\n documentCentreFilter,\n tabs,\n searchAutoFocus,\n fadeInUplogo,\n select2,\n gtm,\n searchFeaturedContent,\n motions_filter\n].forEach(\n module => { module(); }\n);\n","import $ from 'jquery';\n\nexport default () => {\n const $window = $(window);\n\n $('.menu--media-resources-menu').on('click', '.nav-tabs-toggler', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $target = $this.data('target');\n\n $($target).toggleClass('display-none');\n });\n\n $('.accordion-list').on('click', '.li-content-toggler', function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const $target = $this.closest('li').find('.li-content');\n const offsetTop = $this.offset().top;\n const scrollTop = $window.scrollTop();\n\n // If target is not already expanded.\n if (!$this.hasClass('up')) {\n // Collapse others .li-text in accordion.\n const $accordion = $this.closest('.accordion-list');\n\n if ($accordion.length == 1) {\n $('.li-content', $accordion).hide();\n $('.li-content-toggler', $accordion).removeClass('up');\n }\n }\n\n if ($target.length > 0) {\n $target.toggle();\n $this.toggleClass('up');\n $window.scrollTop($this.offset().top - (offsetTop - scrollTop));\n }\n });\n\n $(document).on('click', '.accordion .accordion-toggle', function(e) {\n e.preventDefault();\n $(this).closest('.accordion').toggleClass('active');\n e.stopPropagation();\n });\n\n $('.accordion').on('click', '.accordion-item-trigger', function(event) {\n const $currentItem = $(this).closest('.accordion-item');\n const $allItems = $(this).closest('.accordion').find('.accordion-item');\n\n if ($currentItem.hasClass('active')) {\n $currentItem.removeClass('active')\n } else {\n $allItems.removeClass('active');\n $currentItem.addClass('active');\n }\n });\n};\n","import $ from 'jquery';\n\n// 1000ms = 1s\nconst transitionDuration = 1000;\nfunction Carousel($el) {\n const $this = this;\n\n $this.module = $el;\n\n $this._minScale = 0.6;\n $this._minOffset = 0.5;\n $this._breakpoints = {\n ph: window.matchMedia('(min-width: 480px)'),\n md: window.matchMedia('(min-width: 768px)'),\n bg: window.matchMedia('(min-width: 1024px)'),\n lg: window.matchMedia('(min-width: 1280px)'),\n xl: window.matchMedia('(min-width: 1440px)'),\n };\n $this.settings = {\n auto: {\n play: true,\n time: 5000,\n interval: null,\n }\n };\n\n $this.data = [];\n\n $this.initAutoPlay = function() {\n if ($this.settings.auto.play) {\n $this.startAuto();\n } else {\n $this.stopAuto();\n }\n\n $this.module.hover(function() {\n if ($this.settings.auto.interval) {\n $this.stopAuto();\n $this.settings.auto.autoPaused = true;\n }\n }, function() {\n if ($this.settings.auto.autoPaused) {\n $this.startAuto();\n $this.settings.auto.autoPaused = null;\n }\n });\n\n $(window)\n .focus(function() { $this.startAuto(); })\n .blur(function() { $this.stopAuto(); });\n };\n\n $this.startAuto = function() {\n if ($this.settings.auto.interval) { return; }\n\n $this.settings.auto.interval = setInterval(function() {\n $this.goToNextCard();\n }, $this.settings.auto.time);\n };\n\n $this.stopAuto = function() {\n if (!$this.settings.auto.interval) { return; }\n\n clearInterval($this.settings.auto.interval);\n $this.settings.auto.interval = null;\n };\n\n $this.setElements = function() {\n $this.container = $this.module.find('.module--b7--cards');\n $this.cardsWrapper = $this.module.find('.module--b7--cards');\n $this.cards = $this.module.find('.module--b7--card');\n $this.bodysWrapper = $this.module.find('.module--b7--bodys');\n $this.bodys = $this.module.find('.module--b7--body');\n\n $this.cards.each(function(index, card) {\n card.originalID = index;\n });\n };\n\n $this.getData = function() {\n $this.data = $this.cards.map(function(index, card) {\n return {\n 'order': index - $this.sideQty,\n 'width': $(card).width()\n };\n }).toArray();\n };\n\n $this.setContainerHeight = function() {\n const heights = $this.cards.toArray().map(card => $(card).height());\n $this.container.height(Math.max(...heights));\n };\n\n $this.setVars = function() {\n $this.cardWidth = $this.cards.first().outerWidth();\n $this.scaleStep = (1 - $this._minScale) / $this.sideQty;\n $this.availableSideSpace = ($this.module.width() - $this.cardWidth) / 2;\n $this.reduceOffsetBase = $this.availableSideSpace < $this.spaceRequired() ? $this.additionalOffset() : 0;\n $this.setMode();\n };\n\n $this.spaceRequired = function() {\n return $this.cardWidth * ($this.APS(1, -1 * $this.scaleStep, $this.sideQty + 1) - 1) / 2;\n };\n\n $this.additionalOffset = function() {\n return ($this.spaceRequired() - $this.availableSideSpace) / ($this.APS(1, -1 * $this.scaleStep, $this.sideQty + 1) - 1);\n };\n\n /**\n * Arithmetic progression sum\n * @param {Number} a first term of arithmetic sequence\n * @param {Number} d difference between terms\n * @param {Number} n number of terms\n */\n $this.APS = function(a, d, n) {\n return (2 * a + d * (n - 1)) * n / 2;\n };\n\n $this.rotateCardsForward = function() {\n const cards = $this.cards.toArray();\n cards.push( cards.shift() );\n $this.cards = $(cards);\n };\n\n $this.rotateCardsBackward = function() {\n const cards = $this.cards.toArray();\n cards.unshift( cards.pop() );\n $this.cards = $(cards);\n };\n\n $this.getActiveCard = function() {\n return $this.cards.eq( $this.sideQty );\n };\n\n $this.getCardsBeforeActive = function() {\n return $( $this.cards.toArray().slice(0, $this.sideQty).reverse() );\n };\n\n $this.getCardsAfterActive = function() {\n return $this.cards.slice($this.sideQty + 1);\n };\n\n $this.setCardsPosition = function() {\n const activeCard = $this.getActiveCard();\n const cardsBefore = $this.getCardsBeforeActive();\n const cardsAfter = $this.getCardsAfterActive();\n\n activeCard\n .css( $this.cssTransform(1) )\n .css('z-index', $this.sideQty + 1);\n\n cardsBefore.each((i, el) => {\n const card = $(el);\n const cardStyles = $this.cardStyles(i, -1);\n\n card.css( cardStyles );\n });\n\n cardsAfter.each((i, el) => {\n const card = $(el);\n const cardStyles = $this.cardStyles(i);\n\n card.css( cardStyles );\n });\n };\n\n $this.setCardsOffset = function() {\n $this.cards.each(function(index, el) {\n const $card = $(this);\n $card.css({\n left: `calc(50% - ${$card.width() / 2}px)`,\n top: `calc(50% - ${$card.height() / 2}px)`,\n });\n });\n };\n\n $this.goToNextCard = function() {\n $this.rotateCardsForward();\n $this.cards.removeClass('active');\n $this.getActiveCard().addClass('active');\n $this.setCardsPosition();\n\n $this.bodys.removeClass('active');\n $this.getActiveBody().addClass('active');\n };\n\n $this.goToPrevCard = function() {\n $this.rotateCardsBackward();\n $this.cards.removeClass('active');\n $this.getActiveCard().addClass('active');\n $this.setCardsPosition();\n\n $this.bodys.removeClass('active');\n $this.getActiveBody().addClass('active');\n };\n\n $this.clickHandler = function() {\n const index = $this.cards.index(this);\n const rounds = Math.abs(index - $this.sideQty);\n\n for (let i = 0; i < rounds; i++) {\n setTimeout(() => {\n index > $this.sideQty ? $this.goToNextCard() : $this.goToPrevCard();\n\n if (i == rounds - 1) {\n dataLayer.push({\n 'event': 'gtm.click',\n 'gtm.element': $this.getActiveBody().find('h2').toArray().pop(),\n })\n }\n }, i * 400);\n }\n };\n\n $this.initEventHandlers = function() {\n $this.cards.click($this.clickHandler);\n\n Object.keys($this._breakpoints).forEach((key) => $this._breakpoints[key].addListener((mq) => {\n $this.setVars();\n $this.setCardsPosition();\n $this.setContainerHeight();\n $this.setCardsOffset();\n $this.setBodysHeight();\n }));\n };\n\n $this.setMode = function() {\n if ($this._breakpoints.lg.matches) {\n $this._mode = 'advanced';\n } else if ($this._breakpoints.md.matches) {\n $this._mode = 'mixed';\n } else {\n $this._mode = 'simple';\n }\n };\n\n $this.getMode = function() {\n return $this._mode;\n }\n\n $this.cardScale = function(index) {\n switch($this._mode) {\n case 'advanced':\n return 1 - $this.scaleStep * (index + 1);\n case 'mixed':\n return 0.8;\n default:\n return 1;\n }\n };\n\n $this.cardTransform = function(index) {\n if (index < 0) return 0;\n\n switch($this._mode) {\n case 'advanced':\n const prevMove = $this.cardTransform(index - 1) * $this.cardScale(index - 1) / $this.cardScale(index);\n const prevWidth = $this.cardWidth * $this.cardScale(index - 1);\n const currentWidth = $this.cardWidth * $this.cardScale(index);\n\n return prevMove + (((prevWidth - currentWidth) / 2) + $this._minOffset * currentWidth - $this.reduceOffsetBase * $this.cardScale(index)) / $this.cardScale(index);\n case 'mixed':\n return (index + 1) * ($this.cardWidth * 0.2 / 2 + 70 + $this.cardWidth * 0.8) / 0.8;\n\n default:\n return (index + 1) * ($this.cardWidth + 30);\n }\n };\n\n $this.cardZIndex = function(index) {\n return $this.sideQty - index;\n };\n\n $this.cardStyles = function(i, flip = 1) {\n return jQuery.extend(\n {},\n $this.cssZIndex( $this.cardZIndex(i) ),\n $this.cssTransform($this.cardScale(i), flip * $this.cardTransform(i))\n );\n };\n\n $this.setIndex = function(index) {\n $this._index = index;\n };\n\n $this.getIndex = function() {\n return $this._index !== undefined ? $this._index : Math.floor($this.cards.length / 2);\n };\n\n $this.getActiveBody = function() {\n return $this.bodys.eq( $this.getActiveCard()[0].originalID );\n };\n\n $this.cssTransform = function(scale, translate) {\n const rule = 'transform';\n const value = [scale ? `scale(${scale})` : '', translate ? `translateX(${translate}px)` : '', ].join(' ');\n const prefixes = ['-webkit-', '-ms-', ''];\n const styles = {};\n\n prefixes.forEach(prefix => { styles[prefix + rule] = value} );\n\n return styles;\n };\n\n $this.cssZIndex = function(zindex) {\n return { 'z-index': zindex };\n };\n\n $this.setBodysHeight = function() {\n const heights = $this.bodys.toArray().map(body => $(body).height());\n\n $this.bodysWrapper.height( Math.max(...heights) );\n };\n\n $this.init = function() {\n $this.setElements();\n $this.sideQty = Math.floor($this.cards.length / 2);\n // $this.getData();\n $this.setContainerHeight();\n $this.setCardsOffset();\n $this.setVars();\n $this.setCardsPosition();\n $this.getActiveCard().addClass('active');\n $this.getActiveBody().addClass('active');\n $this.setBodysHeight();\n\n $this.initEventHandlers();\n $this.initAutoPlay();\n };\n};\n\nexport default () => {\n $('.module--b7').each(function() {\n const $module = $(this);\n\n $module.imagesLoaded().always(function() {\n new Carousel( $module ).init();\n })\n });\n}\n","import $ from 'jquery';\nimport { theme_breakpoints } from 'drupalSettings';\n\nconst breakpoints = {\n 'min': {},\n 'max': {},\n};\n\nObject.keys(theme_breakpoints).forEach((key) => {\n breakpoints.min['mb'] = window.matchMedia('(min-width: 0px)');\n breakpoints.min[key] = window.matchMedia(`(min-width: ${theme_breakpoints[key]}px)`);\n breakpoints.max[key] = window.matchMedia(`(max-width: ${theme_breakpoints[key] - 1}px)`);\n})\n\nexport const keys = Object.keys(theme_breakpoints);\n\nexport default breakpoints\n","import $ from 'jquery';\n\nexport default () => {\n const caseListViewsBlockSelector = '#views-exposed-form-article-list-quick-block-case-list';\n const typePlaceholder = Drupal.t('Type');\n const concernsPlaceholder = Drupal.t('Concerns');\n\n Drupal.behaviors.cases_filter_select = {\n attach: function(context, settings) {\n const $form = $(caseListViewsBlockSelector).first();\n\n $form.find('select[name=\"type\"]').once('select2-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: typePlaceholder,\n });\n $form.find('select[name=\"concerns\"]').once('select2-concerns').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: concernsPlaceholder,\n });\n $form.find('select[name=\"is_disassociated\"]').once('select2-is_disassociated').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n });\n }\n };\n}","import $ from 'jquery';\n// import shave from './shave';\n\nexport default () => {\n $('.view-id-certified_products_list .view-content')\n .addClass('owl-carousel owl-theme')\n .owlCarousel({\n margin: 37,\n rewind: false,\n autoWidth: true,\n loop: true,\n responsive: {\n '0': {\n items: 1,\n center: true,\n },\n '1024': {\n center: false\n },\n '1280': {\n autoWidth: false,\n items: 3,\n dotsEach: 3,\n loop: false,\n }\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const $contactForms = $(\".contact-form\");\n const $previewFileModal = $('#preview-modal');\n \n $contactForms.on('click', '.pdf-preview-modal-caller', function (e) {\n const $this = $(this);\n\n if ($('body').hasClass('pdf-support')) {\n e.preventDefault();\n e.stopPropagation();\n\n const src = $this.attr('href');\n const $pdfContainer = $previewFileModal.find('#pdf-container');\n $previewFileModal.find('#accept-terms').data('target', $this.closest('label'));\n \n // Is pdf already loaded?\n if ($pdfContainer.attr('src') !== src) {\n $pdfContainer.attr('src', src);\n }\n\n $previewFileModal.addClass('show');\n } else {\n $this.attr('target', '_blank');\n }\n });\n\n $previewFileModal.on('click', '#accept-terms', function(e) {\n const $this = $(this);\n const $checkbox = $(`#${$this.data('target').prop('for')}`);\n\n $checkbox.prop('checked', true);\n $checkbox.trigger('change');\n $this.data('target', null);\n $previewFileModal.removeClass('show');\n });\n}","import $ from 'jquery';\n\nexport default () => {\n Drupal.behaviors.processes_filter_select = {\n attach: function(context, settings) {\n const $form = $('#views-exposed-form-search-page-document-centre');\n\n $form.find('select[name=\"dspace_doc_type\"]').once('select2-document-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n });\n }\n };\n}\n","import $ from 'jquery';\nimport debounce from 'debounce';\n\nexport default () => {\n const $window = $(window);\n const $logo = $('#header .logo-fadeInUp');\n const offset = +$logo\n .add('
')\n .first()\n .attr('class')\n .split(/\\s+/)\n .find(className => className.startsWith('fadeInUp-offset-'))\n .split('-')\n .pop();\n\n if (offset) {\n $window.on('scroll', debounce(function() {\n if ($window.scrollTop() > offset) {\n $logo.addClass('visible');\n } else {\n $logo.removeClass('visible');\n }\n }, 50));\n }\n};\n","import $ from 'jquery';\n\nexport default () => {\n $('.paragraph--type--contact-form form.contact-form .form-actions input[type=submit]').on('mousedown', function(event) {\n const $form = $(this).parents('form');\n\n dataLayer.push({\n 'event': 'gtm.formSubmit',\n 'gtm.element': $form[0],\n 'gtm.elementClasses': $form.attr('class'),\n 'gtm.elementId': $form.attr('id')\n });\n });\n\n let $regions;\n\n Drupal.behaviors.exposed_form_submission = {\n attach: function(context, settings) {\n $regions = $regions || $('.region-hero, .region-content');\n const selector = '[id^=views-exposed-form]';\n const $forms = $(selector, context).addBack(selector);\n const $bef = $regions.find($forms).once('bef-gtm');\n const filters = [];\n\n $bef.find('input[type=submit]').on('click mousedown', function() {\n const $form = $(this).parents('form');\n const $items = $form.find('.form-item');\n\n $items.each(function() {\n const $item = $(this);\n\n switch(getItemType($item)) {\n case 'select':\n const index = $item.find('select').val();\n const value = $item.find('option')\n .filter(`[value=${index}]`)\n .text();\n filters.push(value);\n break;\n default:\n filters.push($item.find('input').val());\n break;\n }\n });\n\n $form.addClass('views-exposed-form');\n\n dataLayer.push({\n 'event': 'exposedForm',\n 'formFilters': normalizeFilters(filters)\n });\n });\n }\n };\n\n function getItemType($item) {\n return $item.attr('class')\n .split(/\\s+/)\n .filter(className => className.startsWith('form-type'))\n .pop()\n .split('-')\n .pop();\n }\n\n function normalizeFilters(filters) {\n return filters\n .map(filter => filter.replace(/-/g, ''))\n .map(filter => filter.trim())\n .filter(filter => filter.length)\n .join(' - ');\n }\n}\n","import $ from 'jquery';\n\nfunction logErrorMessage(msg) {\n console.error('[Hash.js] The hash passed in to update location is not valid');\n console.error(`[Hash.js] ${msg}`);\n}\n\nfunction isValid(hash) {\n if ('string' !== typeof hash) {\n logErrorMessage('Hash has to be a string');\n return;\n }\n\n if (!hash.length) {\n logErrorMessage('Hash is empty');\n return;\n }\n\n return true;\n}\n\nfunction update(hash) {\n if (!isValid(hash)) { return; }\n\n const destinationElement = $( document.getElementById(hash.substring(1)) );\n\n if (history.pushState) {\n history.pushState({}, '', hash);\n } else {\n destinationElement.removeAttr('id');\n location.hash = hash;\n destinationElement.attr('id', hash.substring(1));\n }\n}\n\nexport default { update }\n","import $ from 'jquery';\nimport debounce from 'debounce';\nimport breakpoints, { keys } from './breakpoints';\n\nfunction test($el, offset = 100) {\n const $win = $(window);\n const winTop = $win.scrollTop();\n const winBot = winTop + $win.height();\n const elTop = $el.offset().top;\n const elBot = elTop + $el.outerHeight();\n\n return (elTop <= (winBot - offset)) && ((winTop + offset) <= elBot);\n}\n\nexport default () => {\n const allElements = $('.checkIfInView');\n const invalidElements = allElements.filter(function() {\n const { inViewMin, inViewMax } = $(this).data();\n let decision = false\n\n if (keys.includes(inViewMin) && keys.includes(inViewMax)) {\n if (!breakpoints.min[inViewMin].matches || !breakpoints.max[inViewMax].matches) {\n decision = true;\n }\n }\n\n if (keys.includes(inViewMin) && !breakpoints.min[inViewMin].matches) {\n decision = true;\n }\n\n if (keys.includes(inViewMax) && !breakpoints.max[inViewMax].matches) {\n decision = true;\n }\n\n if (decision) {\n $(this).removeClass('checkIfInView').addClass('inView');\n }\n\n return decision;\n });\n\n let elements = allElements.not(invalidElements);\n\n if ( !elements.length ) return;\n\n const handler = debounce(function() {\n if (!elements.length) {\n $(window).off('scroll', handler);\n return;\n }\n\n elements.each((i, node) => {\n const $el = $(node);\n const { inViewOffset, inViewClass } = $el.data();\n\n if (test($el, inViewOffset)) {\n $el\n .removeClass('checkIfInView')\n .addClass('inView')\n .addClass(inViewClass);\n\n setTimeout(function() {\n $el.removeClass('inView');\n }, 1100);\n }\n });\n\n elements = elements.filter('.checkIfInView');\n }, 50);\n handler();\n $(window).on('scroll', handler);\n}\n","import $ from 'jquery';\n\nfunction calculateLineHeight($element) {\n let height = 0;\n const styles = [\n 'display: inline !important;',\n 'position: absolute !important;',\n 'line-height: inherit !important;',\n 'padding: 0 !important;',\n 'visibility: hidden !important;',\n 'opacity: 0 !important;'\n ];\n const $testEl = $(' ').attr('style', styles.join(''));\n\n $element.append($testEl);\n\n height = $testEl.height();\n\n $testEl.remove();\n\n return height;\n}\n\nexport default ($element) => {\n const lineHeight = parseFloat($element.css('line-height'));\n\n return Number.isNaN(lineHeight) ? calculateLineHeight($element) : Math.ceil(lineHeight);\n}\n","import $ from 'jquery';\nimport breakpoints from './breakpoints';\n\nfunction title(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n}\n\nfunction setSource(node, srcType) {\n const $map = $(node);\n const src = $map.data(`src${title(srcType)}`);\n\n $map.attr({ src });\n}\n\nfunction testMQ($maps) {\n if (breakpoints.min.bg.matches) {\n $maps.each((i, el) => { setSource(el, 'desktop'); });\n } else {\n $maps.each((i, el) => { setSource(el, 'mobile'); });\n }\n}\n\nexport default () => {\n const $maps = $('iframe.responsive-map');\n\n if (breakpoints.min.bg.matches) {\n testMQ($maps);\n }\n\n breakpoints.min.bg.addListener(() => { testMQ($maps) });\n}\n","import $ from 'jquery';\n\n/**\n * \n * @param {string} mediaID \n * @param {string} source \n * @param {string} type \n * @param {string} thumbnail \n * @param {string} cookieName \n */\nfunction cookiesAddMedia(mediaID, generic, source, type, thumbnail, cookieName) {\n let selectedMedia = Cookies.getJSON(cookieName);\n \n if (undefined === selectedMedia) {\n selectedMedia = {};\n }\n\n selectedMedia[mediaID] = {\n generic: generic,\n type: type,\n source: source,\n thumbnail: type != 'pdf' ? thumbnail : ''\n };\n Cookies.set(cookieName, selectedMedia);\n}\n\n/**\n * \n * @param {string} mediaID \n * @param {string} cookieName \n */\nfunction cookiesDeleteMedia(mediaID, cookieName) {\n let selectedMedia = Cookies.getJSON(cookieName);\n \n if (selectedMedia && delete selectedMedia[mediaID]) {\n Cookies.set(cookieName, selectedMedia);\n }\n}\n\nexport default () => {\n const selectedResources = $('#selected-resources');\n const selectedDocuments = $('#selected-documents');\n const resourceList = $('.resource-list');\n const resourceItemWrapper = '.resource-item';\n const selectedResourceWrapper = '.selected-resource';\n const selectedImageTemplate = $('#selected-image-template ' + selectedResourceWrapper).first();\n const selectedVideoTemplate = $('#selected-video-template ' + selectedResourceWrapper).first();\n const selectedPDFTemplate = $('#selected-pdf-template ' + selectedResourceWrapper).first();\n const selectedMediaCookieName = 'selectedMedia';\n \n function createSelectedResource(mediaID, media) {\n let resourceToAppend = null;\n\n switch (media.type) {\n case 'video':\n if (selectedVideoTemplate.length == 0) {\n return;\n }\n\n resourceToAppend = selectedVideoTemplate.clone();\n resourceToAppend.find('.resource source').first().attr('src', media.source);\n break;\n case 'image':\n if (selectedImageTemplate.length == 0) {\n return;\n }\n\n resourceToAppend = selectedImageTemplate.clone();\n resourceToAppend.find('img').first().attr('src', media.source);\n break;\n case 'pdf':\n default:\n if (selectedPDFTemplate.length == 0) {\n return;\n }\n\n resourceToAppend = selectedPDFTemplate.clone();\n const $img = resourceToAppend.find('img').first();\n \n if (media.thumbnail) {\n $img.attr('src', media.thumbnail);\n }\n\n $img.attr('data-pdf-thumbnail-file', media.source);\n $img.attr('data-type', media.type);\n break;\n }\n \n resourceToAppend.find('.download-btn').first().attr('href', media.source);\n resourceToAppend.attr('data-media', mediaID); // used attr() because data-media will be queried later\n\n if (media.type == 'image' || media.type == 'video') {\n selectedResources.children('.selected-resource-list').first().append(resourceToAppend);\n } else {\n selectedDocuments.children('.selected-resource-list').first().append(resourceToAppend);\n }\n\n $('#' + mediaID, resourceList).closest(resourceItemWrapper).addClass('selected');\n }\n\n if (selectedResources.length == 1 || selectedDocuments.length == 1) {\n // One cycle for adding each media based on its' type to selected section.\n let cookiesMedia = Cookies.getJSON(selectedMediaCookieName);\n\n if (undefined === cookiesMedia) {\n Cookies.set(selectedMediaCookieName, {});\n } else {\n for (const prop in cookiesMedia) {\n if (cookiesMedia.hasOwnProperty(prop)) {\n createSelectedResource(prop, cookiesMedia[prop]);\n }\n }\n }\n\n // Event handlers.\n resourceList.on('click', '.resource-item .select-btn', function(e) {\n e.preventDefault();\n\n const resourceItem = $(this).closest(resourceItemWrapper); // .resource-item\n const resource = resourceItem.find('.resource').first();\n let entity = resourceItem.children('.media, .file').first();\n const fileType = resource.data('type');\n\n if (resourceItem.length == 0 || resource.length == 0 || entity.length == 0) {\n return;\n }\n\n if (resourceItem.hasClass('selected')) {\n let selected = $('.selected-resource[data-media=\"' + entity.attr('id') + '\"]', selectedResources);\n\n if (selected.length == 0) {\n selected = $('.selected-resource[data-media=\"' + entity.attr('id') + '\"]', selectedDocuments);\n }\n \n if (selected.length !== 0) {\n cookiesDeleteMedia(entity.attr('id'), selectedMediaCookieName);\n resourceItem.removeClass('selected');\n selected.remove();\n }\n\n return;\n }\n\n const r = entity.find('.resource').first();\n let entitySource = r.attr('href');\n let entityGeneric = r.attr('data-generic');\n let entityThumbnail = entity.find('.thumbnail').first().attr('src');\n\n createSelectedResource(entity.attr('id'), {\n generic: entityGeneric,\n source: entitySource, \n type: fileType, \n thumbnail: entityThumbnail\n });\n cookiesAddMedia(\n entity.attr('id'),\n entityGeneric,\n entitySource,\n fileType,\n entityThumbnail,\n selectedMediaCookieName\n );\n resourceItem.addClass('selected');\n });\n\n $('.selected-resource-list').on('click', '.selected-resource .unselect-btn', function(e) {\n e.preventDefault();\n\n let selectedResource = $(this).closest(selectedResourceWrapper);\n\n if (selectedResource.length == 1) {\n let mediaID = selectedResource.data('media');\n\n $('#' + mediaID, resourceList).closest(resourceItemWrapper).removeClass('selected');\n cookiesDeleteMedia(mediaID, selectedMediaCookieName);\n selectedResource.remove();\n }\n });\n\n $('.gallery-content').on('click', '.media-select', function(e) {\n e.preventDefault();\n\n const $galleryContent = $(this).closest('.gallery-content');\n const $galleryMedia = $galleryContent.children('#gallery-media');\n const mediaID = $galleryMedia.data('media');\n\n if (undefined === mediaID) {\n return;\n }\n\n let $resourceItem = $('#' + mediaID, resourceList).closest(resourceItemWrapper);\n\n if ($resourceItem.length === 0) {\n return;\n }\n\n if ($galleryContent.hasClass('selected')) {\n cookiesDeleteMedia(mediaID, selectedMediaCookieName);\n\n // Set 'heart' icon to 'unselected' state.\n $galleryContent.removeClass('selected');\n $resourceItem.removeClass('selected');\n\n // Remove media from selected section.\n $('.selected-resource[data-media=\"' + mediaID + '\"]', selectedResources).remove();\n\n return;\n }\n\n let mediaThumbnail = $resourceItem.find('.thumbnail').first().attr('src');\n\n createSelectedResource(mediaID, {\n generic: $galleryMedia.attr('data-generic'),\n source: $galleryMedia.attr('src'), \n type: $galleryMedia.data('type'), \n thumbnail: mediaThumbnail\n });\n cookiesAddMedia(\n mediaID,\n $galleryMedia.attr('data-generic'),\n $galleryMedia.attr('src'),\n $galleryMedia.data('type'),\n mediaThumbnail,\n selectedMediaCookieName\n );\n $galleryContent.addClass('selected');\n $resourceItem.addClass('selected');\n });\n\n $('.selected-header a.link').click(function(e) {\n const $this = $(this);\n let savedMedia = Cookies.getJSON(selectedMediaCookieName);\n let preventDownload = true;\n\n if (undefined !== savedMedia && Object.keys(savedMedia).length > 0) {\n let arr = null;\n\n // Check downloadable content based on media type.\n if ($this.data('target') === 'documents') {\n arr = Object.values(savedMedia).filter(media => media.generic === 'docs');\n } else {\n arr = Object.values(savedMedia).filter(media => media.generic !== 'docs');\n }\n\n preventDownload = arr.length === 0;\n }\n\n if (preventDownload) {\n e.preventDefault();\n e.stopPropagation();\n console.log('Download stopped');\n }\n });\n }\n};\n","import $ from 'jquery';\n\nexport default () => {\n $(\".resource-list, .selected-resources\").on(\"click\", \".resource-container .play-video-btn\", function(e) {\n e.preventDefault();\n\n const clicked = $(this);\n const videoContainer = clicked.siblings(\"iframe\").first();\n\n clicked.hide();\n videoContainer.attr(\"src\", videoContainer.attr(\"data-src\"));\n });\n};","import $ from 'jquery';\n\nexport default () => {\n const menus = $('#header').add('.region-mobile').find('.block-menu .menu');\n const headers = menus.find('.level--1');\n\n headers.click(function(event) {\n const header = $(this);\n\n menus.find('.sub').removeClass('sub--open');\n\n if (header.hasClass('expand')) {\n header.removeClass('expand');\n } else {\n menus.find('.sub').removeClass('sub--open');\n headers.removeClass('expand');\n\n header.addClass('expand')\n .find('.sub').addClass('sub--open');\n }\n });\n\n $(document).click(function(event) {\n const header = headers.filter('.expand');\n const menu = header.closest('.block-menu');\n\n if (menu.find(event.target).length === 0) {\n headers.removeClass('expand');\n menus.find('.sub').removeClass('sub--open');\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n function setGalleryDisplayMedia($gallery, $resourceItem, $prev, $next) {\n let mediaSource = $resourceItem.find('.resource').first().attr('href');\n \n if ($resourceItem.hasClass('selected')) {\n $gallery.find('.gallery-content').first().addClass('selected');\n } else {\n $gallery.find('.gallery-content').first().removeClass('selected');\n }\n\n $gallery.find('#gallery-media')\n .attr('src', mediaSource)\n .data('media', $resourceItem.children('.media').first().attr('id'));\n $gallery.find('.media-download').first().attr('href', mediaSource);\n $gallery.find('.control.next').first().data('target', $next.length === 0 ? null : $next);\n $gallery.find('.control.prev').first().data('target', $prev.length === 0 ? null : $prev);\n }\n\n const $galleries = $('.gallery');\n\n $(document).on('click', '.gallery-caller', function(e) {\n e.preventDefault();\n\n const $clicked = $(this);\n const $resourceItem = $clicked.closest($clicked.data('parent'));\n\n setGalleryDisplayMedia(\n $($clicked.data('target')),\n $clicked.closest($clicked.data('parent')),\n $resourceItem.prev(),\n $resourceItem.next()\n );\n });\n\n $galleries.on('click', '.control', function(e) {\n e.preventDefault();\n\n const $clicked = $(this);\n const $target = $clicked.data('target'); // Next or prev media to show.\n\n if (!$target) {\n return;\n }\n\n setGalleryDisplayMedia(\n $clicked.closest('.gallery'),\n $target,\n $target.prev(),\n $target.next()\n );\n });\n}","import $ from 'jquery';\n\nexport default () => {\n // Show modal.\n $(document).on('click', '.modal-caller', function(e) {\n e.preventDefault();\n\n $($(this).attr('data-target') + '.modal').addClass('show');\n });\n\n // Close modal.\n $('.close-modal').click(function(e) {\n e.preventDefault();\n\n const $this = $(this);\n const target = $this.data('target');\n let $modal = null;\n\n if (target) {\n $modal = $(target);\n } else {\n $modal = $this.closest('.modal');\n }\n\n $modal.removeClass('show');\n $('#pdf-container', $modal).remove();\n });\n\n // Close all modals whenever user clicks outside modal.\n $(window).click(function(e) {\n const $modal = $(e.target);\n\n if ($modal.is('.modal') && $modal.hasClass('show')) {\n $modal.removeClass('show');\n $('#pdf-container', $modal).remove();\n }\n });\n};\n","import $ from 'jquery';\n\nexport default () => {\n Drupal.behaviors.motions_filter_select = {\n attach: function(context, settings) {\n const $form = $('#views-exposed-form-motions-block-motion-platform').first();\n\n $form.find('select[name=\"type\"]').once('select2-motion-type').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Type'),\n });\n $form.find('select[name=\"status\"]').once('select2-motion-status').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Status'),\n });\n $form.find('select[name=\"created_year\"]').once('select2-motion-created-year').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: Drupal.t('Year'),\n });\n }\n };\n}","import $ from 'jquery';\n\nexport default () => {\n const errorLoading = Drupal.t('The results could not be loaded.');\n const loadingMore = Drupal.t('Loading more results');\n const noResults = Drupal.t('No results found');\n const searching = Drupal.t('Searching');\n const maximumSelected = Drupal.t('You can only select %maximum item');\n const inputTooLong = Drupal.t('Please delete %number character');\n const inputTooShort = Drupal.t('Please enter %number or more characters');\n const selector = '#block-news-page-filters';\n const placeholder = Drupal.t('Category');\n\n Drupal.behaviors.news_filter_select = {\n attach: (context, settings) => {\n $(selector, context).addBack(selector).first().find('select').once('select2').select2({\n // To hide search box\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder,\n language: {\n errorLoading: () => errorLoading,\n loadingMore: () => loadingMore,\n noResults: () => noResults,\n searching: () => searching,\n maximumSelected: ({ maximum }) => maximumSelected.replace('%maximum', maximum),\n inputTooLong: ({ maximum, input: { length } }) => inputTooLong.replace('%number', length - maximum),\n inputTooShort: ({ minimum, input: { length } }) => inputTooShort.replace('%number', minimum - length),\n }\n });\n }\n };\n}\n","import $ from 'jquery';\nimport debounce from 'debounce';\nimport breakpoints, { keys } from './breakpoints';\n\nexport default () => {\n const paragraph = $('.paragraph--type--partners-list');\n const container = paragraph.find('.view-content');\n\n container\n .addClass('owl-carousel owl-theme')\n .owlCarousel({\n rewind: false,\n autoWidth: true,\n loop: true,\n center: true,\n dots: false,\n autoplay: true,\n autoplayHoverPause: true,\n responsive: {\n '0': {\n margin: 15\n },\n '768': {\n margin: 30\n },\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const $document = $(document);\n const $body = $document.find('body');\n const callers = $('.popup-caller');\n const popups = $('.popup');\n const overlay = () => $('
').attr('id', 'overlay');\n\n function handler(e) {\n const { caller, popup } = e.data;\n\n e.stopPropagation();\n\n // if current caller doesn't selected\n // others might be, so let's clear them\n if (!caller.hasClass('selected')) {\n closeAll();\n }\n\n caller.toggleClass('selected');\n popup.toggleClass('opened');\n $document.trigger('popup.opened', [popup]);\n $body.toggleClass('popup-opened');\n\n if (popup.hasClass('with-overlay')) {\n const ol = overlay();\n\n popup.before( ol );\n ol.fadeIn(250);\n $body.addClass('clip');\n }\n }\n\n function closeAll() {\n callers.removeClass('selected');\n popups.removeClass('opened full');\n popups.prev('#overlay').remove();\n $body.removeClass('clip').removeClass('popup-opened');\n }\n\n callers.each(function() {\n const caller = $(this);\n const popupSelector = caller.data('popup');\n let popup;\n\n if (popupSelector) {\n popup = $(popupSelector);\n } else {\n popup = caller.parent().find('.popup');\n }\n\n if (popup.length) {\n caller.click({caller, popup}, handler);\n }\n });\n\n popups.each(function() {\n const popup = $(this);\n const close = popup.find('.close');\n const full = popup.find('.popup-switch-full');\n\n close.click(closeAll);\n\n full.click(() => full.closest('.popup').addClass('full'));\n });\n\n $body.click((e) => {\n // Check if click on document is not associated with popup window,\n // if not close active popup and unselect caller\n if (!$(e.target).closest(popups).length) {\n closeAll();\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const caseListViewsBlockSelector = '#block-views-block-article-list-quick-block-process-list';\n const topicPlaceholder = Drupal.t('Topic');\n const statusPlaceholder = Drupal.t('Status');\n\n Drupal.behaviors.processes_filter_select = {\n attach: function(context, settings) {\n const $form = $(caseListViewsBlockSelector).first();\n\n $form.find('select[name=\"status\"]').once('select2-status').select2({\n // To hide search box.\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: statusPlaceholder,\n });\n $form.find('select[name=\"topic\"]').once('select2-topic').select2({\n minimumResultsForSearch: Infinity,\n width: '100%',\n placeholder: topicPlaceholder,\n });\n }\n };\n}","import $ from 'jquery';\nimport breakpoints from './breakpoints';\nimport hash from './hash';\nimport scrollDirection from './scroll-direction';\n\nconst $window = $(window);\nconst $body = $('body');\nconst $header = $('#header');\nconst $quick_links = $('.quick-links');\nconst $placeholder = $quick_links.find('.fixed-placeholder');\n\nfunction clickHandler(event) {\n event.preventDefault();\n\n const id = this.hash.substring(1);\n const $destinationElement = $( document.getElementById(id) );\n const offset = parseInt($body.css('padding-top')) + $header.height() + $quick_links.height();\n\n hash.update('#' + id);\n\n $('html, body').delay(10).animate({\n scrollTop: $destinationElement.offset().top - offset\n }, 700);\n}\n\nfunction isSticky() {\n if (breakpoints.min.bg.matches) {\n scrollHandler();\n $window.on('scroll', scrollHandler);\n } else {\n $window.off('scroll', scrollHandler);\n $quick_links.removeClass('fixed up down');\n $placeholder.removeAttr('style');\n }\n}\n\nfunction scrollHandler() {\n const top = $window.scrollTop() + $header.height() + parseInt($body.css('padding-top'));\n const sd = scrollDirection();\n\n if ($quick_links.offset().top <= top) {\n $placeholder.height($quick_links.height());\n $quick_links.addClass('fixed');\n\n switch(sd) {\n case 'up':\n $quick_links.removeClass('down').addClass('up');\n break;\n case 'down':\n $quick_links.removeClass('up').addClass('down');\n break;\n }\n } else {\n $quick_links.removeClass('fixed up down');\n $placeholder.removeAttr('style');\n }\n}\n\nexport default () => {\n if ($quick_links.length) {\n isSticky();\n breakpoints.min.bg.addListener(isSticky);\n\n $quick_links.find('a').click(clickHandler);\n }\n}\n","import $ from 'jquery';\n\nconst getPageYOffset = () => Math.round(window.pageYOffset);\nlet lastScrollTop = getPageYOffset();\n\nexport default () => {\n const currentScrollTop = getPageYOffset();\n const direction = currentScrollTop > lastScrollTop ? 'down' : 'up';\n\n lastScrollTop = getPageYOffset();\n\n return direction;\n}\n","import $ from 'jquery';\n\nexport default () => {\n $('#block-views-block-featured-content-block-1 .view-content')\n .addClass('owl-carousel owl-theme')\n .owlCarousel({\n loop: true,\n margin: 15,\n responsive: {\n '0': {\n items: 1,\n center: true,\n autoWidth: true,\n slideBy: 1,\n },\n '768': {\n items: 3,\n center: false,\n autoWidth: false,\n slideBy: 3,\n },\n '1280': {\n items: 4,\n slideBy: 4,\n }\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n $('.block-system .view-search input[name=\"search\"]').first().focus();\n\n $(document).on('popup.opened', function(e, popup) {\n if (popup.hasClass('search')) {\n popup.find('.view-search input[name=\"search\"]').first().focus();\n }\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n $('.select2').select2({\n minimumResultsForSearch: 20\n });\n}\n","import $ from 'jquery';\n\nexport default () => {\n const container = $('.slider').eq(0);\n const slider = $('.slides', container);\n const contentBoxes = slider.find('.slide_content');\n\n if (slider.children().length < 2) {\n return;\n }\n\n slider.bxSlider({\n auto: true,\n pause: 5000,\n autoHover: true,\n controls: false,\n preloadImages: 'all',\n onSliderLoad: () => {\n checkDimensions();\n checkDescriptionHeight();\n },\n onSliderResize: function() {\n checkDimensions();\n checkDescriptionHeight();\n },\n onSlideBefore: function() {\n checkDimensions();\n },\n });\n\n // container.find('.bx-viewport').off('touchstart');\n\n slider.find('a').not('.use-ajax').click(function(event) {\n window.location.href = $(this).attr('href');\n });\n\n $('.next', container).click(() => slider.goToNextSlide());\n $('.prev', container).click(() => slider.goToPrevSlide());\n\n function checkDimensions() {\n const viewHeight = container.height();\n const viewWidth = container.width();\n const viewRatio = viewWidth / viewHeight;\n\n slider.find('.slide')\n .each((i, node) => {\n const slide = $(node);\n const media = slide.find('.slide--background').find('video').eq(0);\n const mediaHeight = media.height();\n const mediaWidth = media.width();\n let mediaRatio = 0;\n\n if (media.data('ratio')) {\n mediaRatio = media.data('ratio');\n } else {\n mediaRatio = mediaWidth / mediaHeight;\n media.data('ratio', mediaRatio);\n }\n\n mediaRatio < viewRatio ? slide.addClass('alt') : slide.removeClass('alt');\n });\n }\n\n function checkDescriptionHeight() {\n const $boxes = slider.find('.slide_content');\n\n $boxes.each(function() {\n const $box = $(this);\n const $desc = $box.children('.description');\n const $p = $desc.find('p');\n\n // Some slides might not has a description\n // so let's check it\n if ($p.length) {\n // Could happend that visible height of .description element is even\n // smaller than line-height of p element which will cause it to be shaved\n // to 0 lines. So we pick what's bigger from the line-height and maxHeight\n $p.shave(Math.max($desc.height(), parseFloat($p.css('line-height'))))\n }\n });\n }\n}\n","import $ from 'jquery';\n\nexport default () => {\n const stickyElements = $(\".paragraph--type--image-text-vert\");\n const stickyBP = window.matchMedia(\"(min-width: 1024px)\"); // stick only if screen width >= 1024\n\n $(\".bullet-list li:first-of-type .paragraph--type--image-text-vert\")\n .addClass(\"current\");\n\n canStick();\n stickyBP.addListener(canStick);\n\n $(window).scroll(function() {\n if (stickyBP.matches) {\n let elem = aboveBorder($(\".static-content\"));\n\n if (elem) { // if any element at the top\n toggleSticky( // make it visible and hide others\n elem.closest(\"li\").find(\".paragraph--type--image-text-vert\").first()\n );\n }\n }\n });\n\n /**\n * @return void\n */\n function canStick() {\n if (stickyBP.matches) {\n make_sticky();\n } else {\n stickyElements.trigger(\"sticky_kit:detach\");\n }\n }\n\n /**\n * Get the last element with position above border\n *\n * @param jQuery elements\n * @param int border\n *\n * @return jQuery\n */\n function aboveBorder(elements, border = 210) {\n let result = null;\n\n elements.each(function(key, elem) {\n let top = elem.getBoundingClientRect().top;\n\n if (top <= border) {\n result = elem;\n }\n });\n\n return result ? $(result) : null;\n }\n\n /**\n * Shows elem and hides other sticky elements\n *\n * By default all sticky elements are hidden.\n * Class '.current' makes sticky element visible.\n */\n function toggleSticky(elem) {\n if (!elem.hasClass(\"current\")) {\n $(\"li .paragraph--type--image-text-vert.current\").removeClass(\"current\");\n elem.addClass(\"current\");\n }\n }\n\n function make_sticky() {\n $(\".paragraph--type--image-text-bullet-list .paragraph--type--image-text-vert\")\n .stick_in_parent({\n parent: \".paragraph--type--image-text-bullet-list\",\n offset_top: 200,\n spacer: false\n });\n $(\"li .paragraph--type--image-text-vert\").stick_in_parent({\n // parent: \"li\",\n parent: \"ul\",// \".paragraph--type--custom-bullet-list\",\n offset_top: 200,\n spacer: false,\n recalc_every: 10\n });\n }\n};\n","import $ from 'jquery';\n\nexport default () => {\n $('.custom-tabs').on('click', '.custom-tabs--nav-item', function(e) {\n e.stopPropagation();\n\n const $this = $(this);\n const $parent = $this.closest('.custom-tabs');\n\n // Set active tab.\n if ($parent.length > 0) {\n const target = $this.data('target');\n\n if (target) {\n $('.custom-tabs--item', $parent).removeClass('active');\n $(`#${target}`, $parent).addClass('active');\n\n // Set active nav item.\n const $parentNav = $this.closest('.custom-tabs--nav');\n\n if ($parentNav.length > 0) {\n $('.custom-tabs--nav-item', $parentNav).removeClass('active');\n }\n\n $this.addClass('active');\n }\n }\n });\n\n $('.tabbed').each(function(index, el) {\n const $mobile_container = $('.mobile', this);\n const $mobile_switches = $('.tab__switch', $mobile_container);\n const $normal_container = $('.normal', this);\n const $normal_switches = $('.tab__switch', $normal_container);\n const $tabs = $('.tab', this);\n\n $normal_switches.click(function(event) {\n const $switch = $(this);\n\n event.preventDefault();\n\n $tabs\n .add($mobile_switches).add($normal_switches)\n .removeClass('active')\n .filter(`[data-tab-id=${ $switch.data('tab-id') }]`)\n .addClass('active');\n\n $normal_container.addClass('hide');\n });\n\n $mobile_container.click(function() {\n $normal_container.removeClass('hide');\n });\n });\n}\n","import $ from 'jquery';\nimport breakpoints from './breakpoints';\n\nconst $window = $(window);\nconst $document = $(document);\nconst $body = $('body');\nconst $header = $('#header');\nconst $quickLinks = $('.quick-links');\n\nconst $paragraph = $('.paragraph--type--timeline-information');\nconst $sidebar = $paragraph.find('.sidebar');\nconst $content = $paragraph.find('.content');\nconst $titlesList = $paragraph.find('.titles-list');\nconst $titles = $paragraph.find('.title');\nconst $panels = $paragraph.find('.panel');\nconst $switches = $paragraph.find('.panel-switch');\nconst $covers = $paragraph.find('.title-cover');\n\nconst spacer = 30;\nlet isStuck = false;\n\nfunction showTitlesList() {\n const $cover = $(this);\n const $title = $cover.parent();\n const top = $title.position().top + $title.height();\n\n $cover\n .addClass('active');\n\n $titlesList\n .addClass('show')\n .css({ top });\n}\n\nfunction hideTitlesList() {\n $titlesList\n .removeClass('show')\n .removeAttr('style');\n\n $covers\n .removeClass('active');\n}\n\nfunction setActiveTitle(key) {\n $titles\n .removeClass('active')\n .filter((i) => $titles.eq(i).data('timeline') == key)\n .addClass('active');\n}\n\nfunction setActivePanel(id) {\n $content\n .height($content.height());\n\n $panels\n .removeClass('active')\n .filter(id)\n .addClass('active')\n\n $content\n .removeAttr('style');\n}\n\nfunction scrollToPanel() {\n if (isStuck) {\n $window.scrollTop($content.offset().top - getOffset());\n }\n}\n\nfunction switchPanel(event) {\n event.preventDefault();\n\n const $switcher = $(this);\n const id = $switcher.attr('href');\n const key = id.replace('#timeline-', '');\n\n hideTitlesList();\n setActiveTitle(key);\n setActivePanel(id);\n scrollToPanel();\n recalcStickyKit();\n}\n\nfunction isSticky() {\n return breakpoints.min.bg.matches;\n}\n\nfunction initStickyKit() {\n const offset_top = getOffset();\n\n $sidebar\n .off('sticky_kit:stick sticky_kit:unstick')\n .trigger('sticky_kit:detach')\n .stick_in_parent({ offset_top })\n .on('sticky_kit:stick', () => { isStuck = true })\n .on('sticky_kit:unstick', () => { isStuck = false });\n}\n\nfunction destroyStickyKit() {\n $sidebar\n .off('sticky_kit:stick sticky_kit:unstick')\n .trigger('sticky_kit:detach');\n\n isStuck = false;\n}\n\nfunction getOffset() {\n return Drupal.displace.calculateOffset('top') + $header.height() + ($quickLinks.height() || 0) + spacer;\n}\n\nfunction updateStickyKit() {\n if (isStuck) {\n initStickyKit();\n }\n}\n\nfunction recalcStickyKit() {\n $sidebar\n .trigger('sticky_kit:recalc');\n}\n\nfunction testStickyKit() {\n if (isSticky()) {\n initStickyKit();\n\n $document.on('drupalViewportOffsetChange', updateStickyKit);\n } else {\n destroyStickyKit();\n\n $document.off('drupalViewportOffsetChange', updateStickyKit);\n }\n}\n\nexport default () => {\n testStickyKit();\n breakpoints.min.bg.addListener(testStickyKit);\n\n $covers.click(showTitlesList);\n $switches.click(switchPanel);\n\n setTimeout(() => {\n if (isSticky() && !isStuck) {\n initStickyKit();\n }\n }, 150);\n}\n","import $ from 'jquery';\nimport lineHeight from './lineHeight';\nimport breakpoints, { keys } from './breakpoints';\n\nexport function truncateByLines($element) {\n const lh = lineHeight($element);\n const lines = parseInt($element.data('truncateLines')) || 4;\n\n $element.shave(lh * lines)\n}\n\nexport function truncateByHeight($element) {\n const $container = $element.children('.truncate-container');\n const maxHeight = $element.height();\n const minHeight = lineHeight($element);\n\n $container.shave(Math.max(minHeight, maxHeight));\n}\n\nexport default () => {\n Drupal.behaviors.truncateByHeight = {\n attach: function(context, settings) {\n $('.truncate-by-height', context).once('truncate')\n .wrapInner('
')\n .each((i, node) => {\n truncateByHeight($(node));\n });\n }\n };\n\n Drupal.behaviors.truncateByLines = {\n attach: function(context, settings) {\n $('.truncate-by-lines', context).once('truncate')\n .each((i, node) => {\n truncateByLines($(node));\n });\n }\n };\n\n Object.values(breakpoints.min).forEach((mq) => {\n mq.addListener(() => {\n $('.truncate-by-height').each((i, node) => {\n truncateByHeight($(node));\n });\n\n $('.truncate-by-lines').each((i, node) => {\n truncateByLines($(node));\n });\n })\n });\n}\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLWZ1bmN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1pbnN0YW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZXhwb3J0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19maXgtcmUtd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mb3Itb2YuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oYXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lvYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1yZWdleHAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGVmaW5lLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1jb250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1hYnNvbHV0ZS1pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZXh0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwic3JjL3NjcmlwdHMvZW50cnkuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2FjY29yZGlvbi5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvYjcuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2JyZWFrcG9pbnRzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9jYXNlLWZpbHRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvY2VydGlmaWVkLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9jb250YWN0LWZvcm0uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2RvY3VtZW50LWNlbnRyZS1maWx0ZXIuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2ZhZGVJblVwLWxvZ28uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL2d0bS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvaGFzaC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvaW4tdmlldy5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbGluZUhlaWdodC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbWFwLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9tZWRpYS1yZXNvdXJjZS1zZWxlY3QuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21lZGlhLXJlc291cmNlcy1wbGF5LXZpZGVvLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9tb2JpbGVfbWVudS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbW9kYWwtZ2FsbGVyeS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvbW9kYWwuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL21vdGlvbnMtZmlsdGVyLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9uZXdzLWZpbHRlci1jYXRlZ29yeS1kZC5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvcGFydG5lcnMuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3BvcHVwLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9wcm9jZXNzLWZpbHRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvcXVpY2tfbGlua3MuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3Njcm9sbC1kaXJlY3Rpb24uanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3NlYXJjaC1mZWF0dXJlZC1jb250ZW50LmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy9zZWFyY2hBdXRvRm9jdXMuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3NlbGVjdDIuanMiLCJzcmMvc2NyaXB0cy9tb2R1bGVzL3NsaWRlci5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvc3RpY2t5LmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy90YWJzLmpzIiwic3JjL3NjcmlwdHMvbW9kdWxlcy90aW1lbGluZS5qcyIsInNyYy9zY3JpcHRzL21vZHVsZXMvdHJ1bmNhdGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBOztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTs7QUNGQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBOztBQ0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTs7QUNIQTtBQUNBOztBQ0RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBOztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7O0FDREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzFEQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLENBQ0UsaUJBREYsRUFHRSxjQUhGLEVBSUUsZUFKRixFQUtFLGNBTEYsRUFNRSxxQkFORixFQU9FLGdDQVBGLEVBUUUsa0JBUkYsRUFTRSw0QkFURixF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QyxxQkFBRSxJQUFGLENBQUQsQ0FBaEI7QUFDRCxPQUpIO0FBS0Q7QUFQaUMsR0FBcEM7QUFVQSxFQUFBLE1BQU0sQ0FBQyxTQUFQLENBQWlCLGVBQWpCLEdBQW1DO0FBQ2pDLElBQUEsTUFBTSxFQUFFLGdCQUFTLE9BQVQsRUFBa0IsUUFBbEIsRUFBNEI7QUFDbEMsMkJBQUUsb0JBQUYsRUFBd0IsT0FBeEIsRUFBaUMsSUFBakMsQ0FBc0MsVUFBdEMsRUFDRyxJQURILENBQ1EsVUFBQyxDQUFELEVBQUksSUFBSixFQUFhO0FBQ2pCLFFBQUEsZUFBZSxDQUFDLHFCQUFFLElBQUYsQ0FBRCxDQUFmO0FBQ0QsT0FISDtBQUlEO0FBTmdDLEdBQW5DO0FBU0EsRUFBQSxNQUFNLENBQUMsTUFBUCxDQUFjLHFCQUFZLEdBQTFCLEVBQStCLE9BQS9CLENBQXVDLFVBQUMsRUFBRCxFQUFRO0FBQzdDLElBQUEsRUFBRSxDQUFDLFdBQUgsQ0FBZSxZQUFNO0FBQ25CLDJCQUFFLHFCQUFGLEVBQXlCLElBQXpCLENBQThCLFVBQUMsQ0FBRCxFQUFJLElBQUosRUFBYTtBQUN6QyxRQUFBLGdCQUFnQixDQUFDLHFCQUFFLElBQUYsQ0FBRCxDQUFoQjtBQUNELE9BRkQ7QUFJQSwyQkFBRSxvQkFBRixFQUF3QixJQUF4QixDQUE2QixVQUFDLENBQUQsRUFBSSxJQUFKLEVBQWE7QUFDeEMsUUFBQSxlQUFlLENBQUMscUJBQUUsSUFBRixDQUFELENBQWY7QUFDRCxPQUZEO0FBR0QsS0FSRDtBQVNELEdBVkQ7QUFXRCxDIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjExJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiIsIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJpbXBvcnQgdHJ1bmNhdGUgZnJvbSAnLi9tb2R1bGVzL3RydW5jYXRlJztcbmltcG9ydCBwb3B1cCBmcm9tICcuL21vZHVsZXMvcG9wdXAnO1xuaW1wb3J0IHNsaWRlciBmcm9tICcuL21vZHVsZXMvc2xpZGVyJztcbmltcG9ydCBtb2RhbCBmcm9tICcuL21vZHVsZXMvbW9kYWwnO1xuaW1wb3J0IG1vZGFsR2FsbGVyeSBmcm9tICcuL21vZHVsZXMvbW9kYWwtZ2FsbGVyeSc7XG5pbXBvcnQgbWVkaWFSZXNvdXJjZXNQbGF5VmlkZW9CdG4gZnJvbSAnLi9tb2R1bGVzL21lZGlhLXJlc291cmNlcy1wbGF5LXZpZGVvJztcbmltcG9ydCBhY2NvcmRpb24gZnJvbSAnLi9tb2R1bGVzL2FjY29yZGlvbic7XG5pbXBvcnQgbWVkaWFSZXNvdXJjZVNlbGVjdCBmcm9tICcuL21vZHVsZXMvbWVkaWEtcmVzb3VyY2Utc2VsZWN0JztcbmltcG9ydCBtb2JpbGVfbWVudSBmcm9tICcuL21vZHVsZXMvbW9iaWxlX21lbnUnO1xuaW1wb3J0IGNlcnRpZmllZCBmcm9tICcuL21vZHVsZXMvY2VydGlmaWVkJztcbmltcG9ydCBpbl92aWV3IGZyb20gJy4vbW9kdWxlcy9pbi12aWV3JztcbmltcG9ydCBuZXdzRmlsdGVyQ2F0ZWdvcnlEZCBmcm9tICcuL21vZHVsZXMvbmV3cy1maWx0ZXItY2F0ZWdvcnktZGQnO1xuaW1wb3J0IHN0aWNreSBmcm9tICcuL21vZHVsZXMvc3RpY2t5JztcbmltcG9ydCBiNyBmcm9tICcuL21vZHVsZXMvYjcnO1xuaW1wb3J0IGNvbnRhY3RGb3JtIGZyb20gJy4vbW9kdWxlcy9jb250YWN0LWZvcm0nO1xuaW1wb3J0IHF1aWNrX2xpbmtzIGZyb20gJy4vbW9kdWxlcy9xdWlja19saW5rcyc7XG5pbXBvcnQgbWFwIGZyb20gJy4vbW9kdWxlcy9tYXAnO1xuaW1wb3J0IHBhcnRuZXJzIGZyb20gJy4vbW9kdWxlcy9wYXJ0bmVycyc7XG5pbXBvcnQgdGltZWxpbmUgZnJvbSAnLi9tb2R1bGVzL3RpbWVsaW5lJztcbmltcG9ydCBjYXNlRmlsdGVyIGZyb20gJy4vbW9kdWxlcy9jYXNlLWZpbHRlcic7XG5pbXBvcnQgcHJvY2Vzc0ZpbHRlciBmcm9tICcuL21vZHVsZXMvcHJvY2Vzcy1maWx0ZXInO1xuaW1wb3J0IGRvY3VtZW50Q2VudHJlRmlsdGVyIGZyb20gJy4vbW9kdWxlcy9kb2N1bWVudC1jZW50cmUtZmlsdGVyJztcbmltcG9ydCB0YWJzIGZyb20gJy4vbW9kdWxlcy90YWJzJztcbmltcG9ydCBzZWFyY2hBdXRvRm9jdXMgZnJvbSAnLi9tb2R1bGVzL3NlYXJjaEF1dG9Gb2N1cyc7XG5pbXBvcnQgZmFkZUluVXBsb2dvIGZyb20gJy4vbW9kdWxlcy9mYWRlSW5VcC1sb2dvJztcbmltcG9ydCBzZWxlY3QyIGZyb20gJy4vbW9kdWxlcy9zZWxlY3QyJztcbmltcG9ydCBndG0gZnJvbSAnLi9tb2R1bGVzL2d0bSc7XG5pbXBvcnQgc2VhcmNoRmVhdHVyZWRDb250ZW50IGZyb20gJy4vbW9kdWxlcy9zZWFyY2gtZmVhdHVyZWQtY29udGVudC5qcyc7XG5pbXBvcnQgbW90aW9uc19maWx0ZXIgZnJvbSAnLi9tb2R1bGVzL21vdGlvbnMtZmlsdGVyJztcblxuW1xuICB0cnVuY2F0ZSwgLy8gRHJ1cGFsIEJlaGF2aW9yXG5cbiAgcG9wdXAsXG4gIHNsaWRlcixcbiAgbW9kYWwsXG4gIG1vZGFsR2FsbGVyeSxcbiAgbWVkaWFSZXNvdXJjZXNQbGF5VmlkZW9CdG4sXG4gIGFjY29yZGlvbixcbiAgbWVkaWFSZXNvdXJjZVNlbGVjdCxcbiAgbW9iaWxlX21lbnUsXG4gIGNlcnRpZmllZCxcbiAgaW5fdmlldyxcbiAgbmV3c0ZpbHRlckNhdGVnb3J5RGQsXG4gIHN0aWNreSxcbiAgYjcsXG4gIGNvbnRhY3RGb3JtLFxuICBxdWlja19saW5rcyxcbiAgbWFwLFxuICBwYXJ0bmVycyxcbiAgdGltZWxpbmUsXG4gIGNhc2VGaWx0ZXIsXG4gIHByb2Nlc3NGaWx0ZXIsXG4gIGRvY3VtZW50Q2VudHJlRmlsdGVyLFxuICB0YWJzLFxuICBzZWFyY2hBdXRvRm9jdXMsXG4gIGZhZGVJblVwbG9nbyxcbiAgc2VsZWN0MixcbiAgZ3RtLFxuICBzZWFyY2hGZWF0dXJlZENvbnRlbnQsXG4gIG1vdGlvbnNfZmlsdGVyXG5dLmZvckVhY2goXG4gIG1vZHVsZSA9PiB7IG1vZHVsZSgpOyB9XG4pO1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuXG4gICQoJy5tZW51LS1tZWRpYS1yZXNvdXJjZXMtbWVudScpLm9uKCdjbGljaycsICcubmF2LXRhYnMtdG9nZ2xlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJHRhcmdldCA9ICR0aGlzLmRhdGEoJ3RhcmdldCcpO1xuXG4gICAgJCgkdGFyZ2V0KS50b2dnbGVDbGFzcygnZGlzcGxheS1ub25lJyk7XG4gIH0pO1xuXG4gICQoJy5hY2NvcmRpb24tbGlzdCcpLm9uKCdjbGljaycsICcubGktY29udGVudC10b2dnbGVyJywgZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCAkdGFyZ2V0ID0gJHRoaXMuY2xvc2VzdCgnbGknKS5maW5kKCcubGktY29udGVudCcpO1xuICAgIGNvbnN0IG9mZnNldFRvcCA9ICR0aGlzLm9mZnNldCgpLnRvcDtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAkd2luZG93LnNjcm9sbFRvcCgpO1xuXG4gICAgLy8gSWYgdGFyZ2V0IGlzIG5vdCBhbHJlYWR5IGV4cGFuZGVkLlxuICAgIGlmICghJHRoaXMuaGFzQ2xhc3MoJ3VwJykpIHtcbiAgICAgIC8vIENvbGxhcHNlIG90aGVycyAubGktdGV4dCBpbiBhY2NvcmRpb24uXG4gICAgICBjb25zdCAkYWNjb3JkaW9uID0gJHRoaXMuY2xvc2VzdCgnLmFjY29yZGlvbi1saXN0Jyk7XG5cbiAgICAgIGlmICgkYWNjb3JkaW9uLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICQoJy5saS1jb250ZW50JywgJGFjY29yZGlvbikuaGlkZSgpO1xuICAgICAgICAkKCcubGktY29udGVudC10b2dnbGVyJywgJGFjY29yZGlvbikucmVtb3ZlQ2xhc3MoJ3VwJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCR0YXJnZXQubGVuZ3RoID4gMCkge1xuICAgICAgJHRhcmdldC50b2dnbGUoKTtcbiAgICAgICR0aGlzLnRvZ2dsZUNsYXNzKCd1cCcpO1xuICAgICAgJHdpbmRvdy5zY3JvbGxUb3AoJHRoaXMub2Zmc2V0KCkudG9wIC0gKG9mZnNldFRvcCAtIHNjcm9sbFRvcCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5hY2NvcmRpb24gLmFjY29yZGlvbi10b2dnbGUnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbicpLnRvZ2dsZUNsYXNzKCdhY3RpdmUnKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9KTtcblxuICAkKCcuYWNjb3JkaW9uJykub24oJ2NsaWNrJywgJy5hY2NvcmRpb24taXRlbS10cmlnZ2VyJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCAkY3VycmVudEl0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QoJy5hY2NvcmRpb24taXRlbScpO1xuICAgIGNvbnN0ICRhbGxJdGVtcyA9ICQodGhpcykuY2xvc2VzdCgnLmFjY29yZGlvbicpLmZpbmQoJy5hY2NvcmRpb24taXRlbScpO1xuXG4gICAgaWYgKCRjdXJyZW50SXRlbS5oYXNDbGFzcygnYWN0aXZlJykpIHtcbiAgICAgICRjdXJyZW50SXRlbS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICB9IGVsc2Uge1xuICAgICAgJGFsbEl0ZW1zLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICRjdXJyZW50SXRlbS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG4vLyAxMDAwbXMgPSAxc1xuY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uID0gMTAwMDtcbmZ1bmN0aW9uIENhcm91c2VsKCRlbCkge1xuICBjb25zdCAkdGhpcyA9IHRoaXM7XG5cbiAgJHRoaXMubW9kdWxlID0gJGVsO1xuXG4gICR0aGlzLl9taW5TY2FsZSA9IDAuNjtcbiAgJHRoaXMuX21pbk9mZnNldCA9IDAuNTtcbiAgJHRoaXMuX2JyZWFrcG9pbnRzID0ge1xuICAgIHBoOiB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogNDgwcHgpJyksXG4gICAgbWQ6IHdpbmRvdy5tYXRjaE1lZGlhKCcobWluLXdpZHRoOiA3NjhweCknKSxcbiAgICBiZzogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEwMjRweCknKSxcbiAgICBsZzogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDEyODBweCknKSxcbiAgICB4bDogd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDE0NDBweCknKSxcbiAgfTtcbiAgJHRoaXMuc2V0dGluZ3MgPSB7XG4gICAgYXV0bzoge1xuICAgICAgcGxheTogdHJ1ZSxcbiAgICAgIHRpbWU6IDUwMDAsXG4gICAgICBpbnRlcnZhbDogbnVsbCxcbiAgICB9XG4gIH07XG5cbiAgJHRoaXMuZGF0YSA9IFtdO1xuXG4gICR0aGlzLmluaXRBdXRvUGxheSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLnBsYXkpIHtcbiAgICAgICR0aGlzLnN0YXJ0QXV0bygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5zdG9wQXV0bygpO1xuICAgIH1cblxuICAgICR0aGlzLm1vZHVsZS5ob3ZlcihmdW5jdGlvbigpIHtcbiAgICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7XG4gICAgICAgICR0aGlzLnN0b3BBdXRvKCk7XG4gICAgICAgICR0aGlzLnNldHRpbmdzLmF1dG8uYXV0b1BhdXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoJHRoaXMuc2V0dGluZ3MuYXV0by5hdXRvUGF1c2VkKSB7XG4gICAgICAgICR0aGlzLnN0YXJ0QXV0bygpO1xuICAgICAgICAkdGhpcy5zZXR0aW5ncy5hdXRvLmF1dG9QYXVzZWQgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCh3aW5kb3cpXG4gICAgICAuZm9jdXMoZnVuY3Rpb24oKSB7ICR0aGlzLnN0YXJ0QXV0bygpOyB9KVxuICAgICAgLmJsdXIoZnVuY3Rpb24oKSB7ICR0aGlzLnN0b3BBdXRvKCk7IH0pO1xuICB9O1xuXG4gICR0aGlzLnN0YXJ0QXV0byA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICgkdGhpcy5zZXR0aW5ncy5hdXRvLmludGVydmFsKSB7IHJldHVybjsgfVxuXG4gICAgJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgICAgJHRoaXMuZ29Ub05leHRDYXJkKCk7XG4gICAgfSwgJHRoaXMuc2V0dGluZ3MuYXV0by50aW1lKTtcbiAgfTtcblxuICAkdGhpcy5zdG9wQXV0byA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCkgeyByZXR1cm47IH1cblxuICAgIGNsZWFySW50ZXJ2YWwoJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCk7XG4gICAgJHRoaXMuc2V0dGluZ3MuYXV0by5pbnRlcnZhbCA9IG51bGw7XG4gIH07XG5cbiAgJHRoaXMuc2V0RWxlbWVudHMgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5jb250YWluZXIgPSAkdGhpcy5tb2R1bGUuZmluZCgnLm1vZHVsZS0tYjctLWNhcmRzJyk7XG4gICAgJHRoaXMuY2FyZHNXcmFwcGVyID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1jYXJkcycpO1xuICAgICR0aGlzLmNhcmRzID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1jYXJkJyk7XG4gICAgJHRoaXMuYm9keXNXcmFwcGVyID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1ib2R5cycpO1xuICAgICR0aGlzLmJvZHlzID0gJHRoaXMubW9kdWxlLmZpbmQoJy5tb2R1bGUtLWI3LS1ib2R5Jyk7XG5cbiAgICAkdGhpcy5jYXJkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBjYXJkKSB7XG4gICAgICBjYXJkLm9yaWdpbmFsSUQgPSBpbmRleDtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5nZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgJHRoaXMuZGF0YSA9ICR0aGlzLmNhcmRzLm1hcChmdW5jdGlvbihpbmRleCwgY2FyZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ29yZGVyJzogaW5kZXggLSAkdGhpcy5zaWRlUXR5LFxuICAgICAgICAnd2lkdGgnOiAkKGNhcmQpLndpZHRoKClcbiAgICAgIH07XG4gICAgfSkudG9BcnJheSgpO1xuICB9O1xuXG4gICR0aGlzLnNldENvbnRhaW5lckhlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGhlaWdodHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCkubWFwKGNhcmQgPT4gJChjYXJkKS5oZWlnaHQoKSk7XG4gICAgJHRoaXMuY29udGFpbmVyLmhlaWdodChNYXRoLm1heCguLi5oZWlnaHRzKSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0VmFycyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRXaWR0aCA9ICR0aGlzLmNhcmRzLmZpcnN0KCkub3V0ZXJXaWR0aCgpO1xuICAgICR0aGlzLnNjYWxlU3RlcCA9ICgxIC0gJHRoaXMuX21pblNjYWxlKSAvICR0aGlzLnNpZGVRdHk7XG4gICAgJHRoaXMuYXZhaWxhYmxlU2lkZVNwYWNlID0gKCR0aGlzLm1vZHVsZS53aWR0aCgpIC0gJHRoaXMuY2FyZFdpZHRoKSAvIDI7XG4gICAgJHRoaXMucmVkdWNlT2Zmc2V0QmFzZSA9ICR0aGlzLmF2YWlsYWJsZVNpZGVTcGFjZSA8ICR0aGlzLnNwYWNlUmVxdWlyZWQoKSA/ICR0aGlzLmFkZGl0aW9uYWxPZmZzZXQoKSA6IDA7XG4gICAgJHRoaXMuc2V0TW9kZSgpO1xuICB9O1xuXG4gICR0aGlzLnNwYWNlUmVxdWlyZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZFdpZHRoICogKCR0aGlzLkFQUygxLCAtMSAqICR0aGlzLnNjYWxlU3RlcCwgJHRoaXMuc2lkZVF0eSArIDEpIC0gMSkgLyAyO1xuICB9O1xuXG4gICR0aGlzLmFkZGl0aW9uYWxPZmZzZXQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKCR0aGlzLnNwYWNlUmVxdWlyZWQoKSAtICR0aGlzLmF2YWlsYWJsZVNpZGVTcGFjZSkgLyAoJHRoaXMuQVBTKDEsIC0xICogJHRoaXMuc2NhbGVTdGVwLCAkdGhpcy5zaWRlUXR5ICsgMSkgLSAxKTtcbiAgfTtcblxuICAvKipcbiAgICogQXJpdGhtZXRpYyBwcm9ncmVzc2lvbiBzdW1cbiAgICogQHBhcmFtIHtOdW1iZXJ9IGEgZmlyc3QgdGVybSBvZiBhcml0aG1ldGljIHNlcXVlbmNlXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkIGRpZmZlcmVuY2UgYmV0d2VlbiB0ZXJtc1xuICAgKiBAcGFyYW0ge051bWJlcn0gbiBudW1iZXIgb2YgdGVybXNcbiAgICovXG4gICR0aGlzLkFQUyA9IGZ1bmN0aW9uKGEsIGQsIG4pIHtcbiAgICByZXR1cm4gKDIgKiBhICsgZCAqIChuIC0gMSkpICogbiAvIDI7XG4gIH07XG5cbiAgJHRoaXMucm90YXRlQ2FyZHNGb3J3YXJkID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgY2FyZHMgPSAkdGhpcy5jYXJkcy50b0FycmF5KCk7XG4gICAgY2FyZHMucHVzaCggY2FyZHMuc2hpZnQoKSApO1xuICAgICR0aGlzLmNhcmRzID0gJChjYXJkcyk7XG4gIH07XG5cbiAgJHRoaXMucm90YXRlQ2FyZHNCYWNrd2FyZCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGNhcmRzID0gJHRoaXMuY2FyZHMudG9BcnJheSgpO1xuICAgIGNhcmRzLnVuc2hpZnQoIGNhcmRzLnBvcCgpICk7XG4gICAgJHRoaXMuY2FyZHMgPSAkKGNhcmRzKTtcbiAgfTtcblxuICAkdGhpcy5nZXRBY3RpdmVDYXJkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLmNhcmRzLmVxKCAkdGhpcy5zaWRlUXR5ICk7XG4gIH07XG5cbiAgJHRoaXMuZ2V0Q2FyZHNCZWZvcmVBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJCggJHRoaXMuY2FyZHMudG9BcnJheSgpLnNsaWNlKDAsICR0aGlzLnNpZGVRdHkpLnJldmVyc2UoKSApO1xuICB9O1xuXG4gICR0aGlzLmdldENhcmRzQWZ0ZXJBY3RpdmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJHRoaXMuY2FyZHMuc2xpY2UoJHRoaXMuc2lkZVF0eSArIDEpO1xuICB9O1xuXG4gICR0aGlzLnNldENhcmRzUG9zaXRpb24gPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBhY3RpdmVDYXJkID0gJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpO1xuICAgIGNvbnN0IGNhcmRzQmVmb3JlID0gJHRoaXMuZ2V0Q2FyZHNCZWZvcmVBY3RpdmUoKTtcbiAgICBjb25zdCBjYXJkc0FmdGVyID0gJHRoaXMuZ2V0Q2FyZHNBZnRlckFjdGl2ZSgpO1xuXG4gICAgYWN0aXZlQ2FyZFxuICAgICAgLmNzcyggJHRoaXMuY3NzVHJhbnNmb3JtKDEpIClcbiAgICAgIC5jc3MoJ3otaW5kZXgnLCAkdGhpcy5zaWRlUXR5ICsgMSk7XG5cbiAgICBjYXJkc0JlZm9yZS5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgY2FyZCA9ICQoZWwpO1xuICAgICAgY29uc3QgY2FyZFN0eWxlcyA9ICR0aGlzLmNhcmRTdHlsZXMoaSwgLTEpO1xuXG4gICAgICBjYXJkLmNzcyggY2FyZFN0eWxlcyApO1xuICAgIH0pO1xuXG4gICAgY2FyZHNBZnRlci5lYWNoKChpLCBlbCkgPT4ge1xuICAgICAgY29uc3QgY2FyZCA9ICQoZWwpO1xuICAgICAgY29uc3QgY2FyZFN0eWxlcyA9ICR0aGlzLmNhcmRTdHlsZXMoaSk7XG5cbiAgICAgIGNhcmQuY3NzKCBjYXJkU3R5bGVzICk7XG4gICAgfSk7XG4gIH07XG5cbiAgJHRoaXMuc2V0Q2FyZHNPZmZzZXQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5jYXJkcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbCkge1xuICAgICAgY29uc3QgJGNhcmQgPSAkKHRoaXMpO1xuICAgICAgJGNhcmQuY3NzKHtcbiAgICAgICAgbGVmdDogYGNhbGMoNTAlIC0gJHskY2FyZC53aWR0aCgpIC8gMn1weClgLFxuICAgICAgICB0b3A6IGBjYWxjKDUwJSAtICR7JGNhcmQuaGVpZ2h0KCkgLyAyfXB4KWAsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICAkdGhpcy5nb1RvTmV4dENhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5yb3RhdGVDYXJkc0ZvcndhcmQoKTtcbiAgICAkdGhpcy5jYXJkcy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG5cbiAgICAkdGhpcy5ib2R5cy5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgfTtcblxuICAkdGhpcy5nb1RvUHJldkNhcmQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5yb3RhdGVDYXJkc0JhY2t3YXJkKCk7XG4gICAgJHRoaXMuY2FyZHMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUNhcmQoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgJHRoaXMuc2V0Q2FyZHNQb3NpdGlvbigpO1xuXG4gICAgJHRoaXMuYm9keXMucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLmdldEFjdGl2ZUJvZHkoKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gIH07XG5cbiAgJHRoaXMuY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaW5kZXggPSAkdGhpcy5jYXJkcy5pbmRleCh0aGlzKTtcbiAgICBjb25zdCByb3VuZHMgPSBNYXRoLmFicyhpbmRleCAtICR0aGlzLnNpZGVRdHkpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3VuZHM7IGkrKykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGluZGV4ID4gJHRoaXMuc2lkZVF0eSA/ICR0aGlzLmdvVG9OZXh0Q2FyZCgpIDogJHRoaXMuZ29Ub1ByZXZDYXJkKCk7XG5cbiAgICAgICAgaWYgKGkgPT0gcm91bmRzIC0gMSkge1xuICAgICAgICAgIGRhdGFMYXllci5wdXNoKHtcbiAgICAgICAgICAgICdldmVudCc6ICdndG0uY2xpY2snLFxuICAgICAgICAgICAgJ2d0bS5lbGVtZW50JzogJHRoaXMuZ2V0QWN0aXZlQm9keSgpLmZpbmQoJ2gyJykudG9BcnJheSgpLnBvcCgpLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0sIGkgKiA0MDApO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5pbml0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uKCkge1xuICAgICR0aGlzLmNhcmRzLmNsaWNrKCR0aGlzLmNsaWNrSGFuZGxlcik7XG5cbiAgICBPYmplY3Qua2V5cygkdGhpcy5fYnJlYWtwb2ludHMpLmZvckVhY2goKGtleSkgPT4gJHRoaXMuX2JyZWFrcG9pbnRzW2tleV0uYWRkTGlzdGVuZXIoKG1xKSA9PiB7XG4gICAgICAkdGhpcy5zZXRWYXJzKCk7XG4gICAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG4gICAgICAkdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAgICR0aGlzLnNldENhcmRzT2Zmc2V0KCk7XG4gICAgICAkdGhpcy5zZXRCb2R5c0hlaWdodCgpO1xuICAgIH0pKTtcbiAgfTtcblxuICAkdGhpcy5zZXRNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCR0aGlzLl9icmVha3BvaW50cy5sZy5tYXRjaGVzKSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdhZHZhbmNlZCc7XG4gICAgfSBlbHNlIGlmICgkdGhpcy5fYnJlYWtwb2ludHMubWQubWF0Y2hlcykge1xuICAgICAgJHRoaXMuX21vZGUgPSAnbWl4ZWQnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5fbW9kZSA9ICdzaW1wbGUnO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5nZXRNb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLl9tb2RlO1xuICB9XG5cbiAgJHRoaXMuY2FyZFNjYWxlID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBzd2l0Y2goJHRoaXMuX21vZGUpIHtcbiAgICAgIGNhc2UgJ2FkdmFuY2VkJzpcbiAgICAgICAgcmV0dXJuIDEgLSAkdGhpcy5zY2FsZVN0ZXAgKiAoaW5kZXggKyAxKTtcbiAgICAgIGNhc2UgJ21peGVkJzpcbiAgICAgICAgcmV0dXJuIDAuODtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5jYXJkVHJhbnNmb3JtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4gMDtcblxuICAgIHN3aXRjaCgkdGhpcy5fbW9kZSkge1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgICBjb25zdCBwcmV2TW92ZSA9ICR0aGlzLmNhcmRUcmFuc2Zvcm0oaW5kZXggLSAxKSAqICR0aGlzLmNhcmRTY2FsZShpbmRleCAtIDEpIC8gJHRoaXMuY2FyZFNjYWxlKGluZGV4KTtcbiAgICAgICAgY29uc3QgcHJldldpZHRoID0gJHRoaXMuY2FyZFdpZHRoICogJHRoaXMuY2FyZFNjYWxlKGluZGV4IC0gMSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9ICR0aGlzLmNhcmRXaWR0aCAqICR0aGlzLmNhcmRTY2FsZShpbmRleCk7XG5cbiAgICAgICAgcmV0dXJuIHByZXZNb3ZlICsgKCgocHJldldpZHRoIC0gY3VycmVudFdpZHRoKSAvIDIpICsgJHRoaXMuX21pbk9mZnNldCAqIGN1cnJlbnRXaWR0aCAtICR0aGlzLnJlZHVjZU9mZnNldEJhc2UgKiAkdGhpcy5jYXJkU2NhbGUoaW5kZXgpKSAvICR0aGlzLmNhcmRTY2FsZShpbmRleCk7XG4gICAgICBjYXNlICdtaXhlZCc6XG4gICAgICAgIHJldHVybiAoaW5kZXggKyAxKSAqICgkdGhpcy5jYXJkV2lkdGggKiAwLjIgLyAyICsgNzAgKyAkdGhpcy5jYXJkV2lkdGggKiAwLjgpIC8gMC44O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gKGluZGV4ICsgMSkgKiAoJHRoaXMuY2FyZFdpZHRoICsgMzApO1xuICAgIH1cbiAgfTtcblxuICAkdGhpcy5jYXJkWkluZGV4ID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICByZXR1cm4gJHRoaXMuc2lkZVF0eSAtIGluZGV4O1xuICB9O1xuXG4gICR0aGlzLmNhcmRTdHlsZXMgPSBmdW5jdGlvbihpLCBmbGlwID0gMSkge1xuICAgIHJldHVybiBqUXVlcnkuZXh0ZW5kKFxuICAgICAge30sXG4gICAgICAkdGhpcy5jc3NaSW5kZXgoICR0aGlzLmNhcmRaSW5kZXgoaSkgKSxcbiAgICAgICR0aGlzLmNzc1RyYW5zZm9ybSgkdGhpcy5jYXJkU2NhbGUoaSksIGZsaXAgKiAkdGhpcy5jYXJkVHJhbnNmb3JtKGkpKVxuICAgICk7XG4gIH07XG5cbiAgJHRoaXMuc2V0SW5kZXggPSBmdW5jdGlvbihpbmRleCkge1xuICAgICR0aGlzLl9pbmRleCA9IGluZGV4O1xuICB9O1xuXG4gICR0aGlzLmdldEluZGV4ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLl9pbmRleCAhPT0gdW5kZWZpbmVkID8gJHRoaXMuX2luZGV4IDogTWF0aC5mbG9vcigkdGhpcy5jYXJkcy5sZW5ndGggLyAyKTtcbiAgfTtcblxuICAkdGhpcy5nZXRBY3RpdmVCb2R5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICR0aGlzLmJvZHlzLmVxKCAkdGhpcy5nZXRBY3RpdmVDYXJkKClbMF0ub3JpZ2luYWxJRCApO1xuICB9O1xuXG4gICR0aGlzLmNzc1RyYW5zZm9ybSA9IGZ1bmN0aW9uKHNjYWxlLCB0cmFuc2xhdGUpIHtcbiAgICBjb25zdCBydWxlID0gJ3RyYW5zZm9ybSc7XG4gICAgY29uc3QgdmFsdWUgPSBbc2NhbGUgPyBgc2NhbGUoJHtzY2FsZX0pYCA6ICcnLCB0cmFuc2xhdGUgPyBgdHJhbnNsYXRlWCgke3RyYW5zbGF0ZX1weClgIDogJycsIF0uam9pbignICcpO1xuICAgIGNvbnN0IHByZWZpeGVzID0gWyctd2Via2l0LScsICctbXMtJywgJyddO1xuICAgIGNvbnN0IHN0eWxlcyA9IHt9O1xuXG4gICAgcHJlZml4ZXMuZm9yRWFjaChwcmVmaXggPT4geyBzdHlsZXNbcHJlZml4ICsgcnVsZV0gPSB2YWx1ZX0gKTtcblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH07XG5cbiAgJHRoaXMuY3NzWkluZGV4ID0gZnVuY3Rpb24oemluZGV4KSB7XG4gICAgcmV0dXJuIHsgJ3otaW5kZXgnOiB6aW5kZXggfTtcbiAgfTtcblxuICAkdGhpcy5zZXRCb2R5c0hlaWdodCA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGhlaWdodHMgPSAkdGhpcy5ib2R5cy50b0FycmF5KCkubWFwKGJvZHkgPT4gJChib2R5KS5oZWlnaHQoKSk7XG5cbiAgICAkdGhpcy5ib2R5c1dyYXBwZXIuaGVpZ2h0KCBNYXRoLm1heCguLi5oZWlnaHRzKSApO1xuICB9O1xuXG4gICR0aGlzLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAkdGhpcy5zZXRFbGVtZW50cygpO1xuICAgICR0aGlzLnNpZGVRdHkgPSBNYXRoLmZsb29yKCR0aGlzLmNhcmRzLmxlbmd0aCAvIDIpO1xuICAgIC8vICR0aGlzLmdldERhdGEoKTtcbiAgICAkdGhpcy5zZXRDb250YWluZXJIZWlnaHQoKTtcbiAgICAkdGhpcy5zZXRDYXJkc09mZnNldCgpO1xuICAgICR0aGlzLnNldFZhcnMoKTtcbiAgICAkdGhpcy5zZXRDYXJkc1Bvc2l0aW9uKCk7XG4gICAgJHRoaXMuZ2V0QWN0aXZlQ2FyZCgpLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAkdGhpcy5nZXRBY3RpdmVCb2R5KCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICR0aGlzLnNldEJvZHlzSGVpZ2h0KCk7XG5cbiAgICAkdGhpcy5pbml0RXZlbnRIYW5kbGVycygpO1xuICAgICR0aGlzLmluaXRBdXRvUGxheSgpO1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcubW9kdWxlLS1iNycpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgJG1vZHVsZSA9ICQodGhpcyk7XG5cbiAgICAkbW9kdWxlLmltYWdlc0xvYWRlZCgpLmFsd2F5cyhmdW5jdGlvbigpIHtcbiAgICAgIG5ldyBDYXJvdXNlbCggJG1vZHVsZSApLmluaXQoKTtcbiAgICB9KVxuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgeyB0aGVtZV9icmVha3BvaW50cyB9IGZyb20gJ2RydXBhbFNldHRpbmdzJztcblxuY29uc3QgYnJlYWtwb2ludHMgPSB7XG4gICdtaW4nOiB7fSxcbiAgJ21heCc6IHt9LFxufTtcblxuT2JqZWN0LmtleXModGhlbWVfYnJlYWtwb2ludHMpLmZvckVhY2goKGtleSkgPT4ge1xuICBicmVha3BvaW50cy5taW5bJ21iJ10gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogMHB4KScpO1xuICBicmVha3BvaW50cy5taW5ba2V5XSA9IHdpbmRvdy5tYXRjaE1lZGlhKGAobWluLXdpZHRoOiAke3RoZW1lX2JyZWFrcG9pbnRzW2tleV19cHgpYCk7XG4gIGJyZWFrcG9pbnRzLm1heFtrZXldID0gd2luZG93Lm1hdGNoTWVkaWEoYChtYXgtd2lkdGg6ICR7dGhlbWVfYnJlYWtwb2ludHNba2V5XSAtIDF9cHgpYCk7XG59KVxuXG5leHBvcnQgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lX2JyZWFrcG9pbnRzKTtcblxuZXhwb3J0IGRlZmF1bHQgYnJlYWtwb2ludHNcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IgPSAnI3ZpZXdzLWV4cG9zZWQtZm9ybS1hcnRpY2xlLWxpc3QtcXVpY2stYmxvY2stY2FzZS1saXN0JztcbiAgY29uc3QgdHlwZVBsYWNlaG9sZGVyID0gRHJ1cGFsLnQoJ1R5cGUnKTtcbiAgY29uc3QgY29uY2VybnNQbGFjZWhvbGRlciA9IERydXBhbC50KCdDb25jZXJucycpO1xuXG4gIERydXBhbC5iZWhhdmlvcnMuY2FzZXNfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwidHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0eXBlUGxhY2Vob2xkZXIsXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiY29uY2VybnNcIl0nKS5vbmNlKCdzZWxlY3QyLWNvbmNlcm5zJykuc2VsZWN0Mih7XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IGNvbmNlcm5zUGxhY2Vob2xkZXIsXG4gICAgICB9KTtcbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwiaXNfZGlzYXNzb2NpYXRlZFwiXScpLm9uY2UoJ3NlbGVjdDItaXNfZGlzYXNzb2NpYXRlZCcpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5Jztcbi8vIGltcG9ydCBzaGF2ZSBmcm9tICcuL3NoYXZlJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcudmlldy1pZC1jZXJ0aWZpZWRfcHJvZHVjdHNfbGlzdCAudmlldy1jb250ZW50JylcbiAgICAuYWRkQ2xhc3MoJ293bC1jYXJvdXNlbCBvd2wtdGhlbWUnKVxuICAgIC5vd2xDYXJvdXNlbCh7XG4gICAgICBtYXJnaW46IDM3LFxuICAgICAgcmV3aW5kOiBmYWxzZSxcbiAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgJzEwMjQnOiB7XG4gICAgICAgICAgY2VudGVyOiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICAnMTI4MCc6IHtcbiAgICAgICAgICBhdXRvV2lkdGg6IGZhbHNlLFxuICAgICAgICAgIGl0ZW1zOiAzLFxuICAgICAgICAgIGRvdHNFYWNoOiAzLFxuICAgICAgICAgIGxvb3A6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGNvbnN0ICRjb250YWN0Rm9ybXMgPSAkKFwiLmNvbnRhY3QtZm9ybVwiKTtcbiAgY29uc3QgJHByZXZpZXdGaWxlTW9kYWwgPSAkKCcjcHJldmlldy1tb2RhbCcpO1xuICBcbiAgJGNvbnRhY3RGb3Jtcy5vbignY2xpY2snLCAnLnBkZi1wcmV2aWV3LW1vZGFsLWNhbGxlcicsIGZ1bmN0aW9uIChlKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuXG4gICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygncGRmLXN1cHBvcnQnKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgY29uc3Qgc3JjID0gJHRoaXMuYXR0cignaHJlZicpO1xuICAgICAgY29uc3QgJHBkZkNvbnRhaW5lciA9ICRwcmV2aWV3RmlsZU1vZGFsLmZpbmQoJyNwZGYtY29udGFpbmVyJyk7XG4gICAgICAkcHJldmlld0ZpbGVNb2RhbC5maW5kKCcjYWNjZXB0LXRlcm1zJykuZGF0YSgndGFyZ2V0JywgJHRoaXMuY2xvc2VzdCgnbGFiZWwnKSk7XG4gICAgICBcbiAgICAgIC8vIElzIHBkZiBhbHJlYWR5IGxvYWRlZD9cbiAgICAgIGlmICgkcGRmQ29udGFpbmVyLmF0dHIoJ3NyYycpICE9PSBzcmMpIHtcbiAgICAgICAgJHBkZkNvbnRhaW5lci5hdHRyKCdzcmMnLCBzcmMpO1xuICAgICAgfVxuXG4gICAgICAkcHJldmlld0ZpbGVNb2RhbC5hZGRDbGFzcygnc2hvdycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkdGhpcy5hdHRyKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgfVxuICB9KTtcblxuICAkcHJldmlld0ZpbGVNb2RhbC5vbignY2xpY2snLCAnI2FjY2VwdC10ZXJtcycsIGZ1bmN0aW9uKGUpIHtcbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJGNoZWNrYm94ID0gJChgIyR7JHRoaXMuZGF0YSgndGFyZ2V0JykucHJvcCgnZm9yJyl9YCk7XG5cbiAgICAkY2hlY2tib3gucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICRjaGVja2JveC50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICAkdGhpcy5kYXRhKCd0YXJnZXQnLCBudWxsKTtcbiAgICAkcHJldmlld0ZpbGVNb2RhbC5yZW1vdmVDbGFzcygnc2hvdycpO1xuICB9KTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMucHJvY2Vzc2VzX2ZpbHRlcl9zZWxlY3QgPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgY29uc3QgJGZvcm0gPSAkKCcjdmlld3MtZXhwb3NlZC1mb3JtLXNlYXJjaC1wYWdlLWRvY3VtZW50LWNlbnRyZScpO1xuXG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImRzcGFjZV9kb2NfdHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItZG9jdW1lbnQtdHlwZScpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2RlYm91bmNlJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICBjb25zdCAkbG9nbyA9ICQoJyNoZWFkZXIgLmxvZ28tZmFkZUluVXAnKTtcbiAgY29uc3Qgb2Zmc2V0ID0gKyRsb2dvXG4gICAgLmFkZCgnPGRpdiBjbGFzcz1cImZhZGVJblVwLW9mZnNldC0wXCI+JylcbiAgICAuZmlyc3QoKVxuICAgIC5hdHRyKCdjbGFzcycpXG4gICAgLnNwbGl0KC9cXHMrLylcbiAgICAuZmluZChjbGFzc05hbWUgPT4gY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ2ZhZGVJblVwLW9mZnNldC0nKSlcbiAgICAuc3BsaXQoJy0nKVxuICAgIC5wb3AoKTtcblxuICBpZiAob2Zmc2V0KSB7XG4gICAgJHdpbmRvdy5vbignc2Nyb2xsJywgZGVib3VuY2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoJHdpbmRvdy5zY3JvbGxUb3AoKSA+IG9mZnNldCkge1xuICAgICAgICAkbG9nby5hZGRDbGFzcygndmlzaWJsZScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGxvZ28ucmVtb3ZlQ2xhc3MoJ3Zpc2libGUnKTtcbiAgICAgIH1cbiAgICB9LCA1MCkpO1xuICB9XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcucGFyYWdyYXBoLS10eXBlLS1jb250YWN0LWZvcm0gZm9ybS5jb250YWN0LWZvcm0gLmZvcm0tYWN0aW9ucyBpbnB1dFt0eXBlPXN1Ym1pdF0nKS5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCAkZm9ybSA9ICQodGhpcykucGFyZW50cygnZm9ybScpO1xuXG4gICAgZGF0YUxheWVyLnB1c2goe1xuICAgICAgJ2V2ZW50JzogJ2d0bS5mb3JtU3VibWl0JyxcbiAgICAgICdndG0uZWxlbWVudCc6ICRmb3JtWzBdLFxuICAgICAgJ2d0bS5lbGVtZW50Q2xhc3Nlcyc6ICRmb3JtLmF0dHIoJ2NsYXNzJyksXG4gICAgICAnZ3RtLmVsZW1lbnRJZCc6ICRmb3JtLmF0dHIoJ2lkJylcbiAgICB9KTtcbiAgfSk7XG5cbiAgbGV0ICRyZWdpb25zO1xuXG4gIERydXBhbC5iZWhhdmlvcnMuZXhwb3NlZF9mb3JtX3N1Ym1pc3Npb24gPSB7XG4gICAgYXR0YWNoOiBmdW5jdGlvbihjb250ZXh0LCBzZXR0aW5ncykge1xuICAgICAgJHJlZ2lvbnMgPSAkcmVnaW9ucyB8fCAkKCcucmVnaW9uLWhlcm8sIC5yZWdpb24tY29udGVudCcpO1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSAnW2lkXj12aWV3cy1leHBvc2VkLWZvcm1dJztcbiAgICAgIGNvbnN0ICRmb3JtcyA9ICQoc2VsZWN0b3IsIGNvbnRleHQpLmFkZEJhY2soc2VsZWN0b3IpO1xuICAgICAgY29uc3QgJGJlZiA9ICRyZWdpb25zLmZpbmQoJGZvcm1zKS5vbmNlKCdiZWYtZ3RtJyk7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gW107XG5cbiAgICAgICRiZWYuZmluZCgnaW5wdXRbdHlwZT1zdWJtaXRdJykub24oJ2NsaWNrIG1vdXNlZG93bicsIGZ1bmN0aW9uKCkge1xuICAgICAgICBjb25zdCAkZm9ybSA9ICQodGhpcykucGFyZW50cygnZm9ybScpO1xuICAgICAgICBjb25zdCAkaXRlbXMgPSAkZm9ybS5maW5kKCcuZm9ybS1pdGVtJyk7XG5cbiAgICAgICAgJGl0ZW1zLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY29uc3QgJGl0ZW0gPSAkKHRoaXMpO1xuXG4gICAgICAgICAgc3dpdGNoKGdldEl0ZW1UeXBlKCRpdGVtKSkge1xuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSAkaXRlbS5maW5kKCdzZWxlY3QnKS52YWwoKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAkaXRlbS5maW5kKCdvcHRpb24nKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoYFt2YWx1ZT0ke2luZGV4fV1gKVxuICAgICAgICAgICAgICAgIC50ZXh0KCk7XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKCRpdGVtLmZpbmQoJ2lucHV0JykudmFsKCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRmb3JtLmFkZENsYXNzKCd2aWV3cy1leHBvc2VkLWZvcm0nKTtcblxuICAgICAgICBkYXRhTGF5ZXIucHVzaCh7XG4gICAgICAgICAgJ2V2ZW50JzogJ2V4cG9zZWRGb3JtJyxcbiAgICAgICAgICAnZm9ybUZpbHRlcnMnOiBub3JtYWxpemVGaWx0ZXJzKGZpbHRlcnMpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldEl0ZW1UeXBlKCRpdGVtKSB7XG4gICAgcmV0dXJuICRpdGVtLmF0dHIoJ2NsYXNzJylcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAuZmlsdGVyKGNsYXNzTmFtZSA9PiBjbGFzc05hbWUuc3RhcnRzV2l0aCgnZm9ybS10eXBlJykpXG4gICAgICAucG9wKClcbiAgICAgIC5zcGxpdCgnLScpXG4gICAgICAucG9wKCk7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVGaWx0ZXJzKGZpbHRlcnMpIHtcbiAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgLm1hcChmaWx0ZXIgPT4gZmlsdGVyLnJlcGxhY2UoLy0vZywgJycpKVxuICAgICAgLm1hcChmaWx0ZXIgPT4gZmlsdGVyLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoZmlsdGVyID0+IGZpbHRlci5sZW5ndGgpXG4gICAgICAuam9pbignIC0gJyk7XG4gIH1cbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmZ1bmN0aW9uIGxvZ0Vycm9yTWVzc2FnZShtc2cpIHtcbiAgY29uc29sZS5lcnJvcignW0hhc2guanNdIFRoZSBoYXNoIHBhc3NlZCBpbiB0byB1cGRhdGUgbG9jYXRpb24gaXMgbm90IHZhbGlkJyk7XG4gIGNvbnNvbGUuZXJyb3IoYFtIYXNoLmpzXSAke21zZ31gKTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZChoYXNoKSB7XG4gIGlmICgnc3RyaW5nJyAhPT0gdHlwZW9mIGhhc2gpIHtcbiAgICBsb2dFcnJvck1lc3NhZ2UoJ0hhc2ggaGFzIHRvIGJlIGEgc3RyaW5nJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFoYXNoLmxlbmd0aCkge1xuICAgIGxvZ0Vycm9yTWVzc2FnZSgnSGFzaCBpcyBlbXB0eScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGUoaGFzaCkge1xuICBpZiAoIWlzVmFsaWQoaGFzaCkpIHsgcmV0dXJuOyB9XG5cbiAgY29uc3QgZGVzdGluYXRpb25FbGVtZW50ID0gJCggZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaGFzaC5zdWJzdHJpbmcoMSkpICk7XG5cbiAgaWYgKGhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBoYXNoKTtcbiAgfSBlbHNlIHtcbiAgICBkZXN0aW5hdGlvbkVsZW1lbnQucmVtb3ZlQXR0cignaWQnKTtcbiAgICBsb2NhdGlvbi5oYXNoID0gaGFzaDtcbiAgICBkZXN0aW5hdGlvbkVsZW1lbnQuYXR0cignaWQnLCBoYXNoLnN1YnN0cmluZygxKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgeyB1cGRhdGUgfVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdkZWJvdW5jZSc7XG5pbXBvcnQgYnJlYWtwb2ludHMsIHsga2V5cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0ZXN0KCRlbCwgb2Zmc2V0ID0gMTAwKSB7XG4gIGNvbnN0ICR3aW4gPSAkKHdpbmRvdyk7XG4gIGNvbnN0IHdpblRvcCA9ICR3aW4uc2Nyb2xsVG9wKCk7XG4gIGNvbnN0IHdpbkJvdCA9IHdpblRvcCArICR3aW4uaGVpZ2h0KCk7XG4gIGNvbnN0IGVsVG9wID0gJGVsLm9mZnNldCgpLnRvcDtcbiAgY29uc3QgZWxCb3QgPSBlbFRvcCArICRlbC5vdXRlckhlaWdodCgpO1xuXG4gIHJldHVybiAoZWxUb3AgPD0gKHdpbkJvdCAtIG9mZnNldCkpICYmICgod2luVG9wICsgb2Zmc2V0KSA8PSBlbEJvdCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgYWxsRWxlbWVudHMgPSAkKCcuY2hlY2tJZkluVmlldycpO1xuICBjb25zdCBpbnZhbGlkRWxlbWVudHMgPSBhbGxFbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgeyBpblZpZXdNaW4sIGluVmlld01heCB9ID0gJCh0aGlzKS5kYXRhKCk7XG4gICAgbGV0IGRlY2lzaW9uID0gZmFsc2VcblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01pbikgJiYga2V5cy5pbmNsdWRlcyhpblZpZXdNYXgpKSB7XG4gICAgICBpZiAoIWJyZWFrcG9pbnRzLm1pbltpblZpZXdNaW5dLm1hdGNoZXMgfHwgIWJyZWFrcG9pbnRzLm1heFtpblZpZXdNYXhdLm1hdGNoZXMpIHtcbiAgICAgICAgZGVjaXNpb24gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChrZXlzLmluY2x1ZGVzKGluVmlld01pbikgJiYgIWJyZWFrcG9pbnRzLm1pbltpblZpZXdNaW5dLm1hdGNoZXMpIHtcbiAgICAgIGRlY2lzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5cy5pbmNsdWRlcyhpblZpZXdNYXgpICYmICFicmVha3BvaW50cy5tYXhbaW5WaWV3TWF4XS5tYXRjaGVzKSB7XG4gICAgICBkZWNpc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGRlY2lzaW9uKSB7XG4gICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdjaGVja0lmSW5WaWV3JykuYWRkQ2xhc3MoJ2luVmlldycpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWNpc2lvbjtcbiAgfSk7XG5cbiAgbGV0IGVsZW1lbnRzID0gYWxsRWxlbWVudHMubm90KGludmFsaWRFbGVtZW50cyk7XG5cbiAgaWYgKCAhZWxlbWVudHMubGVuZ3RoICkgcmV0dXJuO1xuXG4gIGNvbnN0IGhhbmRsZXIgPSBkZWJvdW5jZShmdW5jdGlvbigpIHtcbiAgICBpZiAoIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgJCh3aW5kb3cpLm9mZignc2Nyb2xsJywgaGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZWxlbWVudHMuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgY29uc3QgJGVsID0gJChub2RlKTtcbiAgICAgIGNvbnN0IHsgaW5WaWV3T2Zmc2V0LCBpblZpZXdDbGFzcyB9ID0gJGVsLmRhdGEoKTtcblxuICAgICAgaWYgKHRlc3QoJGVsLCBpblZpZXdPZmZzZXQpKSB7XG4gICAgICAgICRlbFxuICAgICAgICAgIC5yZW1vdmVDbGFzcygnY2hlY2tJZkluVmlldycpXG4gICAgICAgICAgLmFkZENsYXNzKCdpblZpZXcnKVxuICAgICAgICAgIC5hZGRDbGFzcyhpblZpZXdDbGFzcyk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoJ2luVmlldycpO1xuICAgICAgICB9LCAxMTAwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKCcuY2hlY2tJZkluVmlldycpO1xuICB9LCA1MCk7XG4gIGhhbmRsZXIoKTtcbiAgJCh3aW5kb3cpLm9uKCdzY3JvbGwnLCBoYW5kbGVyKTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZUxpbmVIZWlnaHQoJGVsZW1lbnQpIHtcbiAgbGV0IGhlaWdodCA9IDA7XG4gIGNvbnN0IHN0eWxlcyA9IFtcbiAgICAnZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7JyxcbiAgICAncG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7JyxcbiAgICAnbGluZS1oZWlnaHQ6IGluaGVyaXQgIWltcG9ydGFudDsnLFxuICAgICdwYWRkaW5nOiAwICFpbXBvcnRhbnQ7JyxcbiAgICAndmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7JyxcbiAgICAnb3BhY2l0eTogMCAhaW1wb3J0YW50OydcbiAgXTtcbiAgY29uc3QgJHRlc3RFbCA9ICQoJzxzcGFuPiZuYnNwOzwvc3Bhbj4nKS5hdHRyKCdzdHlsZScsIHN0eWxlcy5qb2luKCcnKSk7XG5cbiAgJGVsZW1lbnQuYXBwZW5kKCR0ZXN0RWwpO1xuXG4gIGhlaWdodCA9ICR0ZXN0RWwuaGVpZ2h0KCk7XG5cbiAgJHRlc3RFbC5yZW1vdmUoKTtcblxuICByZXR1cm4gaGVpZ2h0O1xufVxuXG5leHBvcnQgZGVmYXVsdCAoJGVsZW1lbnQpID0+IHtcbiAgY29uc3QgbGluZUhlaWdodCA9IHBhcnNlRmxvYXQoJGVsZW1lbnQuY3NzKCdsaW5lLWhlaWdodCcpKTtcblxuICByZXR1cm4gTnVtYmVyLmlzTmFOKGxpbmVIZWlnaHQpID8gY2FsY3VsYXRlTGluZUhlaWdodCgkZWxlbWVudCkgOiBNYXRoLmNlaWwobGluZUhlaWdodCk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMnO1xuXG5mdW5jdGlvbiB0aXRsZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zdWJzdHJpbmcoMSk7XG59XG5cbmZ1bmN0aW9uIHNldFNvdXJjZShub2RlLCBzcmNUeXBlKSB7XG4gIGNvbnN0ICRtYXAgPSAkKG5vZGUpO1xuICBjb25zdCBzcmMgPSAkbWFwLmRhdGEoYHNyYyR7dGl0bGUoc3JjVHlwZSl9YCk7XG5cbiAgJG1hcC5hdHRyKHsgc3JjIH0pO1xufVxuXG5mdW5jdGlvbiB0ZXN0TVEoJG1hcHMpIHtcbiAgaWYgKGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzKSB7XG4gICAgJG1hcHMuZWFjaCgoaSwgZWwpID0+IHsgc2V0U291cmNlKGVsLCAnZGVza3RvcCcpOyB9KTtcbiAgfSBlbHNlIHtcbiAgICAkbWFwcy5lYWNoKChpLCBlbCkgPT4geyBzZXRTb3VyY2UoZWwsICdtb2JpbGUnKTsgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkbWFwcyA9ICQoJ2lmcmFtZS5yZXNwb25zaXZlLW1hcCcpO1xuXG4gIGlmIChicmVha3BvaW50cy5taW4uYmcubWF0Y2hlcykge1xuICAgIHRlc3RNUSgkbWFwcyk7XG4gIH1cblxuICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIoKCkgPT4geyB0ZXN0TVEoJG1hcHMpIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZWRpYUlEIFxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFxuICogQHBhcmFtIHtzdHJpbmd9IHRodW1ibmFpbCBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb29raWVOYW1lIFxuICovXG5mdW5jdGlvbiBjb29raWVzQWRkTWVkaWEobWVkaWFJRCwgZ2VuZXJpYywgc291cmNlLCB0eXBlLCB0aHVtYm5haWwsIGNvb2tpZU5hbWUpIHtcbiAgbGV0IHNlbGVjdGVkTWVkaWEgPSBDb29raWVzLmdldEpTT04oY29va2llTmFtZSk7XG4gIFxuICBpZiAodW5kZWZpbmVkID09PSBzZWxlY3RlZE1lZGlhKSB7XG4gICAgc2VsZWN0ZWRNZWRpYSA9IHt9O1xuICB9XG5cbiAgc2VsZWN0ZWRNZWRpYVttZWRpYUlEXSA9IHtcbiAgICBnZW5lcmljOiBnZW5lcmljLFxuICAgIHR5cGU6IHR5cGUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgdGh1bWJuYWlsOiB0eXBlICE9ICdwZGYnID8gdGh1bWJuYWlsIDogJydcbiAgfTtcbiAgQ29va2llcy5zZXQoY29va2llTmFtZSwgc2VsZWN0ZWRNZWRpYSk7XG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVkaWFJRCBcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb29raWVOYW1lIFxuICovXG5mdW5jdGlvbiBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgY29va2llTmFtZSkge1xuICBsZXQgc2VsZWN0ZWRNZWRpYSA9IENvb2tpZXMuZ2V0SlNPTihjb29raWVOYW1lKTtcbiAgXG4gIGlmIChzZWxlY3RlZE1lZGlhICYmIGRlbGV0ZSBzZWxlY3RlZE1lZGlhW21lZGlhSURdKSB7XG4gICAgQ29va2llcy5zZXQoY29va2llTmFtZSwgc2VsZWN0ZWRNZWRpYSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBzZWxlY3RlZFJlc291cmNlcyA9ICQoJyNzZWxlY3RlZC1yZXNvdXJjZXMnKTtcbiAgY29uc3Qgc2VsZWN0ZWREb2N1bWVudHMgPSAkKCcjc2VsZWN0ZWQtZG9jdW1lbnRzJyk7XG4gIGNvbnN0IHJlc291cmNlTGlzdCA9ICQoJy5yZXNvdXJjZS1saXN0Jyk7XG4gIGNvbnN0IHJlc291cmNlSXRlbVdyYXBwZXIgPSAnLnJlc291cmNlLWl0ZW0nO1xuICBjb25zdCBzZWxlY3RlZFJlc291cmNlV3JhcHBlciA9ICcuc2VsZWN0ZWQtcmVzb3VyY2UnO1xuICBjb25zdCBzZWxlY3RlZEltYWdlVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtaW1hZ2UtdGVtcGxhdGUgJyArIHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKS5maXJzdCgpO1xuICBjb25zdCBzZWxlY3RlZFZpZGVvVGVtcGxhdGUgPSAkKCcjc2VsZWN0ZWQtdmlkZW8tdGVtcGxhdGUgJyArIHNlbGVjdGVkUmVzb3VyY2VXcmFwcGVyKS5maXJzdCgpO1xuICBjb25zdCBzZWxlY3RlZFBERlRlbXBsYXRlID0gJCgnI3NlbGVjdGVkLXBkZi10ZW1wbGF0ZSAnICsgc2VsZWN0ZWRSZXNvdXJjZVdyYXBwZXIpLmZpcnN0KCk7XG4gIGNvbnN0IHNlbGVjdGVkTWVkaWFDb29raWVOYW1lID0gJ3NlbGVjdGVkTWVkaWEnO1xuICBcbiAgZnVuY3Rpb24gY3JlYXRlU2VsZWN0ZWRSZXNvdXJjZShtZWRpYUlELCBtZWRpYSkge1xuICAgIGxldCByZXNvdXJjZVRvQXBwZW5kID0gbnVsbDtcblxuICAgIHN3aXRjaCAobWVkaWEudHlwZSkge1xuICAgICAgY2FzZSAndmlkZW8nOlxuICAgICAgICBpZiAoc2VsZWN0ZWRWaWRlb1RlbXBsYXRlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb3VyY2VUb0FwcGVuZCA9IHNlbGVjdGVkVmlkZW9UZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJy5yZXNvdXJjZSBzb3VyY2UnKS5maXJzdCgpLmF0dHIoJ3NyYycsIG1lZGlhLnNvdXJjZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBpZiAoc2VsZWN0ZWRJbWFnZVRlbXBsYXRlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb3VyY2VUb0FwcGVuZCA9IHNlbGVjdGVkSW1hZ2VUZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICByZXNvdXJjZVRvQXBwZW5kLmZpbmQoJ2ltZycpLmZpcnN0KCkuYXR0cignc3JjJywgbWVkaWEuc291cmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZGYnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNlbGVjdGVkUERGVGVtcGxhdGUubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvdXJjZVRvQXBwZW5kID0gc2VsZWN0ZWRQREZUZW1wbGF0ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCAkaW1nID0gcmVzb3VyY2VUb0FwcGVuZC5maW5kKCdpbWcnKS5maXJzdCgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKG1lZGlhLnRodW1ibmFpbCkge1xuICAgICAgICAgICRpbWcuYXR0cignc3JjJywgbWVkaWEudGh1bWJuYWlsKTtcbiAgICAgICAgfVxuXG4gICAgICAgICRpbWcuYXR0cignZGF0YS1wZGYtdGh1bWJuYWlsLWZpbGUnLCBtZWRpYS5zb3VyY2UpO1xuICAgICAgICAkaW1nLmF0dHIoJ2RhdGEtdHlwZScsIG1lZGlhLnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgXG4gICAgcmVzb3VyY2VUb0FwcGVuZC5maW5kKCcuZG93bmxvYWQtYnRuJykuZmlyc3QoKS5hdHRyKCdocmVmJywgbWVkaWEuc291cmNlKTtcbiAgICByZXNvdXJjZVRvQXBwZW5kLmF0dHIoJ2RhdGEtbWVkaWEnLCBtZWRpYUlEKTsgLy8gdXNlZCBhdHRyKCkgYmVjYXVzZSBkYXRhLW1lZGlhIHdpbGwgYmUgcXVlcmllZCBsYXRlclxuXG4gICAgaWYgKG1lZGlhLnR5cGUgPT0gJ2ltYWdlJyB8fCAgbWVkaWEudHlwZSA9PSAndmlkZW8nKSB7XG4gICAgICBzZWxlY3RlZFJlc291cmNlcy5jaGlsZHJlbignLnNlbGVjdGVkLXJlc291cmNlLWxpc3QnKS5maXJzdCgpLmFwcGVuZChyZXNvdXJjZVRvQXBwZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWREb2N1bWVudHMuY2hpbGRyZW4oJy5zZWxlY3RlZC1yZXNvdXJjZS1saXN0JykuZmlyc3QoKS5hcHBlbmQocmVzb3VyY2VUb0FwcGVuZCk7XG4gICAgfVxuXG4gICAgJCgnIycgKyBtZWRpYUlELCByZXNvdXJjZUxpc3QpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcikuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2VsZWN0ZWRSZXNvdXJjZXMubGVuZ3RoID09IDEgfHwgc2VsZWN0ZWREb2N1bWVudHMubGVuZ3RoID09IDEpIHtcbiAgICAvLyBPbmUgY3ljbGUgZm9yIGFkZGluZyBlYWNoIG1lZGlhIGJhc2VkIG9uIGl0cycgdHlwZSB0byBzZWxlY3RlZCBzZWN0aW9uLlxuICAgIGxldCBjb29raWVzTWVkaWEgPSBDb29raWVzLmdldEpTT04oc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuXG4gICAgaWYgKHVuZGVmaW5lZCA9PT0gY29va2llc01lZGlhKSB7XG4gICAgICBDb29raWVzLnNldChzZWxlY3RlZE1lZGlhQ29va2llTmFtZSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHByb3AgaW4gY29va2llc01lZGlhKSB7XG4gICAgICAgIGlmIChjb29raWVzTWVkaWEuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKHByb3AsIGNvb2tpZXNNZWRpYVtwcm9wXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFdmVudCBoYW5kbGVycy5cbiAgICByZXNvdXJjZUxpc3Qub24oJ2NsaWNrJywgJy5yZXNvdXJjZS1pdGVtIC5zZWxlY3QtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCByZXNvdXJjZUl0ZW0gPSAkKHRoaXMpLmNsb3Nlc3QocmVzb3VyY2VJdGVtV3JhcHBlcik7IC8vIC5yZXNvdXJjZS1pdGVtXG4gICAgICBjb25zdCByZXNvdXJjZSA9IHJlc291cmNlSXRlbS5maW5kKCcucmVzb3VyY2UnKS5maXJzdCgpO1xuICAgICAgbGV0IGVudGl0eSA9IHJlc291cmNlSXRlbS5jaGlsZHJlbignLm1lZGlhLCAuZmlsZScpLmZpcnN0KCk7XG4gICAgICBjb25zdCBmaWxlVHlwZSA9IHJlc291cmNlLmRhdGEoJ3R5cGUnKTtcblxuICAgICAgaWYgKHJlc291cmNlSXRlbS5sZW5ndGggPT0gMCB8fCByZXNvdXJjZS5sZW5ndGggPT0gMCB8fCBlbnRpdHkubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2VJdGVtLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgIGxldCBzZWxlY3RlZCA9ICQoJy5zZWxlY3RlZC1yZXNvdXJjZVtkYXRhLW1lZGlhPVwiJyArIGVudGl0eS5hdHRyKCdpZCcpICsgJ1wiXScsIHNlbGVjdGVkUmVzb3VyY2VzKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICBzZWxlY3RlZCA9ICQoJy5zZWxlY3RlZC1yZXNvdXJjZVtkYXRhLW1lZGlhPVwiJyArIGVudGl0eS5hdHRyKCdpZCcpICsgJ1wiXScsIHNlbGVjdGVkRG9jdW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGNvb2tpZXNEZWxldGVNZWRpYShlbnRpdHkuYXR0cignaWQnKSwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgICAgIHJlc291cmNlSXRlbS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICBzZWxlY3RlZC5yZW1vdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgciA9IGVudGl0eS5maW5kKCcucmVzb3VyY2UnKS5maXJzdCgpO1xuICAgICAgbGV0IGVudGl0eVNvdXJjZSA9IHIuYXR0cignaHJlZicpO1xuICAgICAgbGV0IGVudGl0eUdlbmVyaWMgPSByLmF0dHIoJ2RhdGEtZ2VuZXJpYycpO1xuICAgICAgbGV0IGVudGl0eVRodW1ibmFpbCA9IGVudGl0eS5maW5kKCcudGh1bWJuYWlsJykuZmlyc3QoKS5hdHRyKCdzcmMnKTtcblxuICAgICAgY3JlYXRlU2VsZWN0ZWRSZXNvdXJjZShlbnRpdHkuYXR0cignaWQnKSwge1xuICAgICAgICBnZW5lcmljOiBlbnRpdHlHZW5lcmljLFxuICAgICAgICBzb3VyY2U6IGVudGl0eVNvdXJjZSwgXG4gICAgICAgIHR5cGU6IGZpbGVUeXBlLCBcbiAgICAgICAgdGh1bWJuYWlsOiBlbnRpdHlUaHVtYm5haWxcbiAgICAgIH0pO1xuICAgICAgY29va2llc0FkZE1lZGlhKFxuICAgICAgICBlbnRpdHkuYXR0cignaWQnKSxcbiAgICAgICAgZW50aXR5R2VuZXJpYyxcbiAgICAgICAgZW50aXR5U291cmNlLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgZW50aXR5VGh1bWJuYWlsLFxuICAgICAgICBzZWxlY3RlZE1lZGlhQ29va2llTmFtZVxuICAgICAgKTtcbiAgICAgIHJlc291cmNlSXRlbS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9KTtcblxuICAgICQoJy5zZWxlY3RlZC1yZXNvdXJjZS1saXN0Jykub24oJ2NsaWNrJywgJy5zZWxlY3RlZC1yZXNvdXJjZSAudW5zZWxlY3QtYnRuJywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBsZXQgc2VsZWN0ZWRSZXNvdXJjZSA9ICQodGhpcykuY2xvc2VzdChzZWxlY3RlZFJlc291cmNlV3JhcHBlcik7XG5cbiAgICAgIGlmIChzZWxlY3RlZFJlc291cmNlLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIGxldCBtZWRpYUlEID0gc2VsZWN0ZWRSZXNvdXJjZS5kYXRhKCdtZWRpYScpO1xuXG4gICAgICAgICQoJyMnICsgbWVkaWFJRCwgcmVzb3VyY2VMaXN0KS5jbG9zZXN0KHJlc291cmNlSXRlbVdyYXBwZXIpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgICBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuICAgICAgICBzZWxlY3RlZFJlc291cmNlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJCgnLmdhbGxlcnktY29udGVudCcpLm9uKCdjbGljaycsICcubWVkaWEtc2VsZWN0JywgZnVuY3Rpb24oZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCAkZ2FsbGVyeUNvbnRlbnQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5nYWxsZXJ5LWNvbnRlbnQnKTtcbiAgICAgIGNvbnN0ICRnYWxsZXJ5TWVkaWEgPSAkZ2FsbGVyeUNvbnRlbnQuY2hpbGRyZW4oJyNnYWxsZXJ5LW1lZGlhJyk7XG4gICAgICBjb25zdCBtZWRpYUlEID0gJGdhbGxlcnlNZWRpYS5kYXRhKCdtZWRpYScpO1xuXG4gICAgICBpZiAodW5kZWZpbmVkID09PSBtZWRpYUlEKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0ICRyZXNvdXJjZUl0ZW0gPSAkKCcjJyArIG1lZGlhSUQsIHJlc291cmNlTGlzdCkuY2xvc2VzdChyZXNvdXJjZUl0ZW1XcmFwcGVyKTtcblxuICAgICAgaWYgKCRyZXNvdXJjZUl0ZW0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCRnYWxsZXJ5Q29udGVudC5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgICBjb29raWVzRGVsZXRlTWVkaWEobWVkaWFJRCwgc2VsZWN0ZWRNZWRpYUNvb2tpZU5hbWUpO1xuXG4gICAgICAgIC8vIFNldCAnaGVhcnQnIGljb24gdG8gJ3Vuc2VsZWN0ZWQnIHN0YXRlLlxuICAgICAgICAkZ2FsbGVyeUNvbnRlbnQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICRyZXNvdXJjZUl0ZW0ucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIG1lZGlhIGZyb20gc2VsZWN0ZWQgc2VjdGlvbi5cbiAgICAgICAgJCgnLnNlbGVjdGVkLXJlc291cmNlW2RhdGEtbWVkaWE9XCInICsgbWVkaWFJRCArICdcIl0nLCBzZWxlY3RlZFJlc291cmNlcykucmVtb3ZlKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgbWVkaWFUaHVtYm5haWwgPSAkcmVzb3VyY2VJdGVtLmZpbmQoJy50aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ3NyYycpO1xuXG4gICAgICBjcmVhdGVTZWxlY3RlZFJlc291cmNlKG1lZGlhSUQsIHtcbiAgICAgICAgZ2VuZXJpYzogJGdhbGxlcnlNZWRpYS5hdHRyKCdkYXRhLWdlbmVyaWMnKSxcbiAgICAgICAgc291cmNlOiAkZ2FsbGVyeU1lZGlhLmF0dHIoJ3NyYycpLCBcbiAgICAgICAgdHlwZTogJGdhbGxlcnlNZWRpYS5kYXRhKCd0eXBlJyksIFxuICAgICAgICB0aHVtYm5haWw6IG1lZGlhVGh1bWJuYWlsXG4gICAgICB9KTtcbiAgICAgIGNvb2tpZXNBZGRNZWRpYShcbiAgICAgICAgbWVkaWFJRCxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5hdHRyKCdkYXRhLWdlbmVyaWMnKSxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5hdHRyKCdzcmMnKSxcbiAgICAgICAgJGdhbGxlcnlNZWRpYS5kYXRhKCd0eXBlJyksXG4gICAgICAgIG1lZGlhVGh1bWJuYWlsLFxuICAgICAgICBzZWxlY3RlZE1lZGlhQ29va2llTmFtZVxuICAgICAgKTtcbiAgICAgICRnYWxsZXJ5Q29udGVudC5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICRyZXNvdXJjZUl0ZW0uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgfSk7XG5cbiAgICAkKCcuc2VsZWN0ZWQtaGVhZGVyIGEubGluaycpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCBzYXZlZE1lZGlhID0gQ29va2llcy5nZXRKU09OKHNlbGVjdGVkTWVkaWFDb29raWVOYW1lKTtcbiAgICAgIGxldCBwcmV2ZW50RG93bmxvYWQgPSB0cnVlO1xuXG4gICAgICBpZiAodW5kZWZpbmVkICE9PSBzYXZlZE1lZGlhICYmIE9iamVjdC5rZXlzKHNhdmVkTWVkaWEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGFyciA9IG51bGw7XG5cbiAgICAgICAgLy8gQ2hlY2sgZG93bmxvYWRhYmxlIGNvbnRlbnQgYmFzZWQgb24gbWVkaWEgdHlwZS5cbiAgICAgICAgaWYgKCR0aGlzLmRhdGEoJ3RhcmdldCcpID09PSAnZG9jdW1lbnRzJykge1xuICAgICAgICAgIGFyciA9IE9iamVjdC52YWx1ZXMoc2F2ZWRNZWRpYSkuZmlsdGVyKG1lZGlhID0+IG1lZGlhLmdlbmVyaWMgPT09ICdkb2NzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyID0gT2JqZWN0LnZhbHVlcyhzYXZlZE1lZGlhKS5maWx0ZXIobWVkaWEgPT4gbWVkaWEuZ2VuZXJpYyAhPT0gJ2RvY3MnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZlbnREb3dubG9hZCA9IGFyci5sZW5ndGggPT09IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2ZW50RG93bmxvYWQpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb25zb2xlLmxvZygnRG93bmxvYWQgc3RvcHBlZCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKFwiLnJlc291cmNlLWxpc3QsIC5zZWxlY3RlZC1yZXNvdXJjZXNcIikub24oXCJjbGlja1wiLCBcIi5yZXNvdXJjZS1jb250YWluZXIgLnBsYXktdmlkZW8tYnRuXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBjbGlja2VkID0gJCh0aGlzKTtcbiAgICBjb25zdCB2aWRlb0NvbnRhaW5lciA9IGNsaWNrZWQuc2libGluZ3MoXCJpZnJhbWVcIikuZmlyc3QoKTtcblxuICAgIGNsaWNrZWQuaGlkZSgpO1xuICAgIHZpZGVvQ29udGFpbmVyLmF0dHIoXCJzcmNcIiwgdmlkZW9Db250YWluZXIuYXR0cihcImRhdGEtc3JjXCIpKTtcbiAgfSk7XG59OyIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgbWVudXMgPSAkKCcjaGVhZGVyJykuYWRkKCcucmVnaW9uLW1vYmlsZScpLmZpbmQoJy5ibG9jay1tZW51IC5tZW51Jyk7XG4gIGNvbnN0IGhlYWRlcnMgPSBtZW51cy5maW5kKCcubGV2ZWwtLTEnKTtcblxuICBoZWFkZXJzLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgY29uc3QgaGVhZGVyID0gJCh0aGlzKTtcblxuICAgIG1lbnVzLmZpbmQoJy5zdWInKS5yZW1vdmVDbGFzcygnc3ViLS1vcGVuJyk7XG5cbiAgICBpZiAoaGVhZGVyLmhhc0NsYXNzKCdleHBhbmQnKSkge1xuICAgICAgaGVhZGVyLnJlbW92ZUNsYXNzKCdleHBhbmQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcbiAgICAgIGhlYWRlcnMucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuXG4gICAgICBoZWFkZXIuYWRkQ2xhc3MoJ2V4cGFuZCcpXG4gICAgICAgIC5maW5kKCcuc3ViJykuYWRkQ2xhc3MoJ3N1Yi0tb3BlbicpO1xuICAgIH1cbiAgfSk7XG5cbiAgJChkb2N1bWVudCkuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBjb25zdCBoZWFkZXIgPSBoZWFkZXJzLmZpbHRlcignLmV4cGFuZCcpO1xuICAgIGNvbnN0IG1lbnUgPSBoZWFkZXIuY2xvc2VzdCgnLmJsb2NrLW1lbnUnKTtcblxuICAgIGlmIChtZW51LmZpbmQoZXZlbnQudGFyZ2V0KS5sZW5ndGggPT09IDApIHtcbiAgICAgIGhlYWRlcnMucmVtb3ZlQ2xhc3MoJ2V4cGFuZCcpO1xuICAgICAgbWVudXMuZmluZCgnLnN1YicpLnJlbW92ZUNsYXNzKCdzdWItLW9wZW4nKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBmdW5jdGlvbiBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKCRnYWxsZXJ5LCAkcmVzb3VyY2VJdGVtLCAkcHJldiwgJG5leHQpIHtcbiAgICBsZXQgbWVkaWFTb3VyY2UgPSAkcmVzb3VyY2VJdGVtLmZpbmQoJy5yZXNvdXJjZScpLmZpcnN0KCkuYXR0cignaHJlZicpO1xuICAgIFxuICAgIGlmICgkcmVzb3VyY2VJdGVtLmhhc0NsYXNzKCdzZWxlY3RlZCcpKSB7XG4gICAgICAkZ2FsbGVyeS5maW5kKCcuZ2FsbGVyeS1jb250ZW50JykuZmlyc3QoKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJGdhbGxlcnkuZmluZCgnLmdhbGxlcnktY29udGVudCcpLmZpcnN0KCkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgfVxuXG4gICAgJGdhbGxlcnkuZmluZCgnI2dhbGxlcnktbWVkaWEnKVxuICAgICAgLmF0dHIoJ3NyYycsIG1lZGlhU291cmNlKVxuICAgICAgLmRhdGEoJ21lZGlhJywgJHJlc291cmNlSXRlbS5jaGlsZHJlbignLm1lZGlhJykuZmlyc3QoKS5hdHRyKCdpZCcpKTtcbiAgICAkZ2FsbGVyeS5maW5kKCcubWVkaWEtZG93bmxvYWQnKS5maXJzdCgpLmF0dHIoJ2hyZWYnLCBtZWRpYVNvdXJjZSk7XG4gICAgJGdhbGxlcnkuZmluZCgnLmNvbnRyb2wubmV4dCcpLmZpcnN0KCkuZGF0YSgndGFyZ2V0JywgJG5leHQubGVuZ3RoID09PSAwID8gbnVsbCA6ICRuZXh0KTtcbiAgICAkZ2FsbGVyeS5maW5kKCcuY29udHJvbC5wcmV2JykuZmlyc3QoKS5kYXRhKCd0YXJnZXQnLCAkcHJldi5sZW5ndGggPT09IDAgPyBudWxsIDogJHByZXYpO1xuICB9XG5cbiAgY29uc3QgJGdhbGxlcmllcyA9ICQoJy5nYWxsZXJ5Jyk7XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgJy5nYWxsZXJ5LWNhbGxlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCAkY2xpY2tlZCA9ICQodGhpcyk7XG4gICAgY29uc3QgJHJlc291cmNlSXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJGNsaWNrZWQuZGF0YSgncGFyZW50JykpO1xuXG4gICAgc2V0R2FsbGVyeURpc3BsYXlNZWRpYShcbiAgICAgICQoJGNsaWNrZWQuZGF0YSgndGFyZ2V0JykpLFxuICAgICAgJGNsaWNrZWQuY2xvc2VzdCgkY2xpY2tlZC5kYXRhKCdwYXJlbnQnKSksXG4gICAgICAkcmVzb3VyY2VJdGVtLnByZXYoKSxcbiAgICAgICRyZXNvdXJjZUl0ZW0ubmV4dCgpXG4gICAgKTtcbiAgfSk7XG5cbiAgJGdhbGxlcmllcy5vbignY2xpY2snLCAnLmNvbnRyb2wnLCBmdW5jdGlvbihlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgJGNsaWNrZWQgPSAkKHRoaXMpO1xuICAgIGNvbnN0ICR0YXJnZXQgPSAkY2xpY2tlZC5kYXRhKCd0YXJnZXQnKTsgLy8gTmV4dCBvciBwcmV2IG1lZGlhIHRvIHNob3cuXG5cbiAgICBpZiAoISR0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRHYWxsZXJ5RGlzcGxheU1lZGlhKFxuICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLmdhbGxlcnknKSxcbiAgICAgICR0YXJnZXQsXG4gICAgICAkdGFyZ2V0LnByZXYoKSxcbiAgICAgICR0YXJnZXQubmV4dCgpXG4gICAgKTtcbiAgfSk7XG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAvLyBTaG93IG1vZGFsLlxuICAkKGRvY3VtZW50KS5vbignY2xpY2snLCAnLm1vZGFsLWNhbGxlcicsIGZ1bmN0aW9uKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAkKCQodGhpcykuYXR0cignZGF0YS10YXJnZXQnKSArICcubW9kYWwnKS5hZGRDbGFzcygnc2hvdycpO1xuICB9KTtcblxuICAvLyBDbG9zZSBtb2RhbC5cbiAgJCgnLmNsb3NlLW1vZGFsJykuY2xpY2soZnVuY3Rpb24oZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCB0YXJnZXQgPSAkdGhpcy5kYXRhKCd0YXJnZXQnKTtcbiAgICBsZXQgJG1vZGFsID0gbnVsbDtcblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICRtb2RhbCA9ICQodGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJG1vZGFsID0gJHRoaXMuY2xvc2VzdCgnLm1vZGFsJyk7XG4gICAgfVxuXG4gICAgJG1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgJCgnI3BkZi1jb250YWluZXInLCAkbW9kYWwpLnJlbW92ZSgpO1xuICB9KTtcblxuICAvLyBDbG9zZSBhbGwgbW9kYWxzIHdoZW5ldmVyIHVzZXIgY2xpY2tzIG91dHNpZGUgbW9kYWwuXG4gICQod2luZG93KS5jbGljayhmdW5jdGlvbihlKSB7XG4gICAgY29uc3QgJG1vZGFsID0gJChlLnRhcmdldCk7XG5cbiAgICBpZiAoJG1vZGFsLmlzKCcubW9kYWwnKSAmJiAkbW9kYWwuaGFzQ2xhc3MoJ3Nob3cnKSkge1xuICAgICAgJG1vZGFsLnJlbW92ZUNsYXNzKCdzaG93Jyk7XG4gICAgICAkKCcjcGRmLWNvbnRhaW5lcicsICRtb2RhbCkucmVtb3ZlKCk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIERydXBhbC5iZWhhdmlvcnMubW90aW9uc19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJCgnI3ZpZXdzLWV4cG9zZWQtZm9ybS1tb3Rpb25zLWJsb2NrLW1vdGlvbi1wbGF0Zm9ybScpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwidHlwZVwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLXR5cGUnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1R5cGUnKSxcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJzdGF0dXNcIl0nKS5vbmNlKCdzZWxlY3QyLW1vdGlvbi1zdGF0dXMnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogRHJ1cGFsLnQoJ1N0YXR1cycpLFxuICAgICAgfSk7XG4gICAgICAkZm9ybS5maW5kKCdzZWxlY3RbbmFtZT1cImNyZWF0ZWRfeWVhclwiXScpLm9uY2UoJ3NlbGVjdDItbW90aW9uLWNyZWF0ZWQteWVhcicpLnNlbGVjdDIoe1xuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBEcnVwYWwudCgnWWVhcicpLFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgY29uc3QgZXJyb3JMb2FkaW5nID0gRHJ1cGFsLnQoJ1RoZSByZXN1bHRzIGNvdWxkIG5vdCBiZSBsb2FkZWQuJyk7XG4gIGNvbnN0IGxvYWRpbmdNb3JlID0gRHJ1cGFsLnQoJ0xvYWRpbmcgbW9yZSByZXN1bHRzJyk7XG4gIGNvbnN0IG5vUmVzdWx0cyA9IERydXBhbC50KCdObyByZXN1bHRzIGZvdW5kJyk7XG4gIGNvbnN0IHNlYXJjaGluZyA9IERydXBhbC50KCdTZWFyY2hpbmcnKTtcbiAgY29uc3QgbWF4aW11bVNlbGVjdGVkID0gRHJ1cGFsLnQoJ1lvdSBjYW4gb25seSBzZWxlY3QgJW1heGltdW0gaXRlbScpO1xuICBjb25zdCBpbnB1dFRvb0xvbmcgPSBEcnVwYWwudCgnUGxlYXNlIGRlbGV0ZSAlbnVtYmVyIGNoYXJhY3RlcicpO1xuICBjb25zdCBpbnB1dFRvb1Nob3J0ID0gRHJ1cGFsLnQoJ1BsZWFzZSBlbnRlciAlbnVtYmVyIG9yIG1vcmUgY2hhcmFjdGVycycpO1xuICBjb25zdCBzZWxlY3RvciA9ICcjYmxvY2stbmV3cy1wYWdlLWZpbHRlcnMnO1xuICBjb25zdCBwbGFjZWhvbGRlciA9IERydXBhbC50KCdDYXRlZ29yeScpO1xuXG4gIERydXBhbC5iZWhhdmlvcnMubmV3c19maWx0ZXJfc2VsZWN0ID0ge1xuICAgIGF0dGFjaDogKGNvbnRleHQsIHNldHRpbmdzKSA9PiB7XG4gICAgICAkKHNlbGVjdG9yLCBjb250ZXh0KS5hZGRCYWNrKHNlbGVjdG9yKS5maXJzdCgpLmZpbmQoJ3NlbGVjdCcpLm9uY2UoJ3NlbGVjdDInKS5zZWxlY3QyKHtcbiAgICAgICAgLy8gVG8gaGlkZSBzZWFyY2ggYm94XG4gICAgICAgIG1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOiBJbmZpbml0eSxcbiAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGxhbmd1YWdlOiB7XG4gICAgICAgICAgZXJyb3JMb2FkaW5nOiAoKSA9PiBlcnJvckxvYWRpbmcsXG4gICAgICAgICAgbG9hZGluZ01vcmU6ICgpID0+IGxvYWRpbmdNb3JlLFxuICAgICAgICAgIG5vUmVzdWx0czogKCkgPT4gbm9SZXN1bHRzLFxuICAgICAgICAgIHNlYXJjaGluZzogKCkgPT4gc2VhcmNoaW5nLFxuICAgICAgICAgIG1heGltdW1TZWxlY3RlZDogKHsgbWF4aW11bSB9KSA9PiBtYXhpbXVtU2VsZWN0ZWQucmVwbGFjZSgnJW1heGltdW0nLCBtYXhpbXVtKSxcbiAgICAgICAgICBpbnB1dFRvb0xvbmc6ICh7IG1heGltdW0sIGlucHV0OiB7IGxlbmd0aCB9IH0pID0+IGlucHV0VG9vTG9uZy5yZXBsYWNlKCclbnVtYmVyJywgbGVuZ3RoIC0gbWF4aW11bSksXG4gICAgICAgICAgaW5wdXRUb29TaG9ydDogKHsgbWluaW11bSwgaW5wdXQ6IHsgbGVuZ3RoIH0gfSkgPT4gaW5wdXRUb29TaG9ydC5yZXBsYWNlKCclbnVtYmVyJywgbWluaW11bSAtIGxlbmd0aCksXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnZGVib3VuY2UnO1xuaW1wb3J0IGJyZWFrcG9pbnRzLCB7IGtleXMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBwYXJhZ3JhcGggPSAkKCcucGFyYWdyYXBoLS10eXBlLS1wYXJ0bmVycy1saXN0Jyk7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHBhcmFncmFwaC5maW5kKCcudmlldy1jb250ZW50Jyk7XG5cbiAgY29udGFpbmVyXG4gICAgLmFkZENsYXNzKCdvd2wtY2Fyb3VzZWwgb3dsLXRoZW1lJylcbiAgICAub3dsQ2Fyb3VzZWwoe1xuICAgICAgcmV3aW5kOiBmYWxzZSxcbiAgICAgIGF1dG9XaWR0aDogdHJ1ZSxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICBjZW50ZXI6IHRydWUsXG4gICAgICBkb3RzOiBmYWxzZSxcbiAgICAgIGF1dG9wbGF5OiB0cnVlLFxuICAgICAgYXV0b3BsYXlIb3ZlclBhdXNlOiB0cnVlLFxuICAgICAgcmVzcG9uc2l2ZToge1xuICAgICAgICAnMCc6IHtcbiAgICAgICAgICBtYXJnaW46IDE1XG4gICAgICAgIH0sXG4gICAgICAgICc3NjgnOiB7XG4gICAgICAgICAgbWFyZ2luOiAzMFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcbiAgY29uc3QgJGJvZHkgPSAkZG9jdW1lbnQuZmluZCgnYm9keScpO1xuICBjb25zdCBjYWxsZXJzID0gJCgnLnBvcHVwLWNhbGxlcicpO1xuICBjb25zdCBwb3B1cHMgPSAkKCcucG9wdXAnKTtcbiAgY29uc3Qgb3ZlcmxheSA9ICgpID0+ICQoJzxkaXY+JykuYXR0cignaWQnLCAnb3ZlcmxheScpO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZXIoZSkge1xuICAgIGNvbnN0IHsgY2FsbGVyLCBwb3B1cCB9ID0gZS5kYXRhO1xuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIGlmIGN1cnJlbnQgY2FsbGVyIGRvZXNuJ3Qgc2VsZWN0ZWRcbiAgICAvLyBvdGhlcnMgbWlnaHQgYmUsIHNvIGxldCdzIGNsZWFyIHRoZW1cbiAgICBpZiAoIWNhbGxlci5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgY2xvc2VBbGwoKTtcbiAgICB9XG5cbiAgICBjYWxsZXIudG9nZ2xlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgcG9wdXAudG9nZ2xlQ2xhc3MoJ29wZW5lZCcpO1xuICAgICRkb2N1bWVudC50cmlnZ2VyKCdwb3B1cC5vcGVuZWQnLCBbcG9wdXBdKTtcbiAgICAkYm9keS50b2dnbGVDbGFzcygncG9wdXAtb3BlbmVkJyk7XG5cbiAgICBpZiAocG9wdXAuaGFzQ2xhc3MoJ3dpdGgtb3ZlcmxheScpKSB7XG4gICAgICBjb25zdCBvbCA9IG92ZXJsYXkoKTtcblxuICAgICAgcG9wdXAuYmVmb3JlKCBvbCApO1xuICAgICAgb2wuZmFkZUluKDI1MCk7XG4gICAgICAkYm9keS5hZGRDbGFzcygnY2xpcCcpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlQWxsKCkge1xuICAgIGNhbGxlcnMucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgcG9wdXBzLnJlbW92ZUNsYXNzKCdvcGVuZWQgZnVsbCcpO1xuICAgIHBvcHVwcy5wcmV2KCcjb3ZlcmxheScpLnJlbW92ZSgpO1xuICAgICRib2R5LnJlbW92ZUNsYXNzKCdjbGlwJykucmVtb3ZlQ2xhc3MoJ3BvcHVwLW9wZW5lZCcpO1xuICB9XG5cbiAgY2FsbGVycy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGNhbGxlciA9ICQodGhpcyk7XG4gICAgY29uc3QgcG9wdXBTZWxlY3RvciA9IGNhbGxlci5kYXRhKCdwb3B1cCcpO1xuICAgIGxldCBwb3B1cDtcblxuICAgIGlmIChwb3B1cFNlbGVjdG9yKSB7XG4gICAgICBwb3B1cCA9ICQocG9wdXBTZWxlY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcHVwID0gY2FsbGVyLnBhcmVudCgpLmZpbmQoJy5wb3B1cCcpO1xuICAgIH1cblxuICAgIGlmIChwb3B1cC5sZW5ndGgpIHtcbiAgICAgIGNhbGxlci5jbGljayh7Y2FsbGVyLCBwb3B1cH0sIGhhbmRsZXIpO1xuICAgIH1cbiAgfSk7XG5cbiAgcG9wdXBzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgcG9wdXAgPSAkKHRoaXMpO1xuICAgIGNvbnN0IGNsb3NlID0gcG9wdXAuZmluZCgnLmNsb3NlJyk7XG4gICAgY29uc3QgZnVsbCA9IHBvcHVwLmZpbmQoJy5wb3B1cC1zd2l0Y2gtZnVsbCcpO1xuXG4gICAgY2xvc2UuY2xpY2soY2xvc2VBbGwpO1xuXG4gICAgZnVsbC5jbGljaygoKSA9PiBmdWxsLmNsb3Nlc3QoJy5wb3B1cCcpLmFkZENsYXNzKCdmdWxsJykpO1xuICB9KTtcblxuICAkYm9keS5jbGljaygoZSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIGNsaWNrIG9uIGRvY3VtZW50IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggcG9wdXAgd2luZG93LFxuICAgIC8vIGlmIG5vdCBjbG9zZSBhY3RpdmUgcG9wdXAgYW5kIHVuc2VsZWN0IGNhbGxlclxuICAgIGlmICghJChlLnRhcmdldCkuY2xvc2VzdChwb3B1cHMpLmxlbmd0aCkge1xuICAgICAgY2xvc2VBbGwoKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjYXNlTGlzdFZpZXdzQmxvY2tTZWxlY3RvciA9ICcjYmxvY2stdmlld3MtYmxvY2stYXJ0aWNsZS1saXN0LXF1aWNrLWJsb2NrLXByb2Nlc3MtbGlzdCc7XG4gIGNvbnN0IHRvcGljUGxhY2Vob2xkZXIgPSBEcnVwYWwudCgnVG9waWMnKTtcbiAgY29uc3Qgc3RhdHVzUGxhY2Vob2xkZXIgPSBEcnVwYWwudCgnU3RhdHVzJyk7XG5cbiAgRHJ1cGFsLmJlaGF2aW9ycy5wcm9jZXNzZXNfZmlsdGVyX3NlbGVjdCA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICBjb25zdCAkZm9ybSA9ICQoY2FzZUxpc3RWaWV3c0Jsb2NrU2VsZWN0b3IpLmZpcnN0KCk7XG5cbiAgICAgICRmb3JtLmZpbmQoJ3NlbGVjdFtuYW1lPVwic3RhdHVzXCJdJykub25jZSgnc2VsZWN0Mi1zdGF0dXMnKS5zZWxlY3QyKHtcbiAgICAgICAgLy8gVG8gaGlkZSBzZWFyY2ggYm94LlxuICAgICAgICBtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDogSW5maW5pdHksXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBzdGF0dXNQbGFjZWhvbGRlcixcbiAgICAgIH0pO1xuICAgICAgJGZvcm0uZmluZCgnc2VsZWN0W25hbWU9XCJ0b3BpY1wiXScpLm9uY2UoJ3NlbGVjdDItdG9waWMnKS5zZWxlY3QyKHtcbiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IEluZmluaXR5LFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBwbGFjZWhvbGRlcjogdG9waWNQbGFjZWhvbGRlcixcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IGhhc2ggZnJvbSAnLi9oYXNoJztcbmltcG9ydCBzY3JvbGxEaXJlY3Rpb24gZnJvbSAnLi9zY3JvbGwtZGlyZWN0aW9uJztcblxuY29uc3QgJHdpbmRvdyA9ICQod2luZG93KTtcbmNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuY29uc3QgJGhlYWRlciA9ICQoJyNoZWFkZXInKTtcbmNvbnN0ICRxdWlja19saW5rcyA9ICQoJy5xdWljay1saW5rcycpO1xuY29uc3QgJHBsYWNlaG9sZGVyID0gJHF1aWNrX2xpbmtzLmZpbmQoJy5maXhlZC1wbGFjZWhvbGRlcicpO1xuXG5mdW5jdGlvbiBjbGlja0hhbmRsZXIoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICBjb25zdCBpZCA9IHRoaXMuaGFzaC5zdWJzdHJpbmcoMSk7XG4gIGNvbnN0ICRkZXN0aW5hdGlvbkVsZW1lbnQgPSAkKCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgKTtcbiAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VJbnQoJGJvZHkuY3NzKCdwYWRkaW5nLXRvcCcpKSArICRoZWFkZXIuaGVpZ2h0KCkgKyAkcXVpY2tfbGlua3MuaGVpZ2h0KCk7XG5cbiAgaGFzaC51cGRhdGUoJyMnICsgaWQpO1xuXG4gICQoJ2h0bWwsIGJvZHknKS5kZWxheSgxMCkuYW5pbWF0ZSh7XG4gICAgc2Nyb2xsVG9wOiAkZGVzdGluYXRpb25FbGVtZW50Lm9mZnNldCgpLnRvcCAtIG9mZnNldFxuICB9LCA3MDApO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreSgpIHtcbiAgaWYgKGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzKSB7XG4gICAgc2Nyb2xsSGFuZGxlcigpO1xuICAgICR3aW5kb3cub24oJ3Njcm9sbCcsIHNjcm9sbEhhbmRsZXIpO1xuICB9IGVsc2Uge1xuICAgICR3aW5kb3cub2ZmKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyKTtcbiAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ2ZpeGVkIHVwIGRvd24nKTtcbiAgICAkcGxhY2Vob2xkZXIucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxIYW5kbGVyKCkge1xuICBjb25zdCB0b3AgPSAkd2luZG93LnNjcm9sbFRvcCgpICsgJGhlYWRlci5oZWlnaHQoKSArIHBhcnNlSW50KCRib2R5LmNzcygncGFkZGluZy10b3AnKSk7XG4gIGNvbnN0IHNkID0gc2Nyb2xsRGlyZWN0aW9uKCk7XG5cbiAgaWYgKCRxdWlja19saW5rcy5vZmZzZXQoKS50b3AgPD0gdG9wKSB7XG4gICAgJHBsYWNlaG9sZGVyLmhlaWdodCgkcXVpY2tfbGlua3MuaGVpZ2h0KCkpO1xuICAgICRxdWlja19saW5rcy5hZGRDbGFzcygnZml4ZWQnKTtcblxuICAgIHN3aXRjaChzZCkge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ2Rvd24nKS5hZGRDbGFzcygndXAnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgJHF1aWNrX2xpbmtzLnJlbW92ZUNsYXNzKCd1cCcpLmFkZENsYXNzKCdkb3duJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAkcXVpY2tfbGlua3MucmVtb3ZlQ2xhc3MoJ2ZpeGVkIHVwIGRvd24nKTtcbiAgICAkcGxhY2Vob2xkZXIucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gIGlmICgkcXVpY2tfbGlua3MubGVuZ3RoKSB7XG4gICAgaXNTdGlja3koKTtcbiAgICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIoaXNTdGlja3kpO1xuXG4gICAgJHF1aWNrX2xpbmtzLmZpbmQoJ2EnKS5jbGljayhjbGlja0hhbmRsZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5jb25zdCBnZXRQYWdlWU9mZnNldCA9ICgpID0+IE1hdGgucm91bmQod2luZG93LnBhZ2VZT2Zmc2V0KTtcbmxldCBsYXN0U2Nyb2xsVG9wID0gZ2V0UGFnZVlPZmZzZXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjdXJyZW50U2Nyb2xsVG9wID0gZ2V0UGFnZVlPZmZzZXQoKTtcbiAgY29uc3QgZGlyZWN0aW9uID0gY3VycmVudFNjcm9sbFRvcCA+IGxhc3RTY3JvbGxUb3AgPyAnZG93bicgOiAndXAnO1xuXG4gIGxhc3RTY3JvbGxUb3AgPSBnZXRQYWdlWU9mZnNldCgpO1xuXG4gIHJldHVybiBkaXJlY3Rpb247XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJyNibG9jay12aWV3cy1ibG9jay1mZWF0dXJlZC1jb250ZW50LWJsb2NrLTEgLnZpZXctY29udGVudCcpXG4gICAgLmFkZENsYXNzKCdvd2wtY2Fyb3VzZWwgb3dsLXRoZW1lJylcbiAgICAub3dsQ2Fyb3VzZWwoe1xuICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgIG1hcmdpbjogMTUsXG4gICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICcwJzoge1xuICAgICAgICAgIGl0ZW1zOiAxLFxuICAgICAgICAgIGNlbnRlcjogdHJ1ZSxcbiAgICAgICAgICBhdXRvV2lkdGg6IHRydWUsXG4gICAgICAgICAgc2xpZGVCeTogMSxcbiAgICAgICAgfSxcbiAgICAgICAgJzc2OCc6IHtcbiAgICAgICAgICBpdGVtczogMyxcbiAgICAgICAgICBjZW50ZXI6IGZhbHNlLFxuICAgICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgICAgc2xpZGVCeTogMyxcbiAgICAgICAgfSxcbiAgICAgICAgJzEyODAnOiB7XG4gICAgICAgICAgaXRlbXM6IDQsXG4gICAgICAgICAgc2xpZGVCeTogNCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICAkKCcuYmxvY2stc3lzdGVtIC52aWV3LXNlYXJjaCBpbnB1dFtuYW1lPVwic2VhcmNoXCJdJykuZmlyc3QoKS5mb2N1cygpO1xuXG4gICQoZG9jdW1lbnQpLm9uKCdwb3B1cC5vcGVuZWQnLCBmdW5jdGlvbihlLCBwb3B1cCkge1xuICAgIGlmIChwb3B1cC5oYXNDbGFzcygnc2VhcmNoJykpIHtcbiAgICAgIHBvcHVwLmZpbmQoJy52aWV3LXNlYXJjaCBpbnB1dFtuYW1lPVwic2VhcmNoXCJdJykuZmlyc3QoKS5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5zZWxlY3QyJykuc2VsZWN0Mih7XG4gICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDIwXG4gIH0pO1xufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBjb250YWluZXIgPSAkKCcuc2xpZGVyJykuZXEoMCk7XG4gIGNvbnN0IHNsaWRlciA9ICQoJy5zbGlkZXMnLCBjb250YWluZXIpO1xuICBjb25zdCBjb250ZW50Qm94ZXMgPSBzbGlkZXIuZmluZCgnLnNsaWRlX2NvbnRlbnQnKTtcblxuICBpZiAoc2xpZGVyLmNoaWxkcmVuKCkubGVuZ3RoIDwgMikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHNsaWRlci5ieFNsaWRlcih7XG4gICAgYXV0bzogdHJ1ZSxcbiAgICBwYXVzZTogNTAwMCxcbiAgICBhdXRvSG92ZXI6IHRydWUsXG4gICAgY29udHJvbHM6IGZhbHNlLFxuICAgIHByZWxvYWRJbWFnZXM6ICdhbGwnLFxuICAgIG9uU2xpZGVyTG9hZDogKCkgPT4ge1xuICAgICAgY2hlY2tEaW1lbnNpb25zKCk7XG4gICAgICBjaGVja0Rlc2NyaXB0aW9uSGVpZ2h0KCk7XG4gICAgfSxcbiAgICBvblNsaWRlclJlc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgICBjaGVja0RpbWVuc2lvbnMoKTtcbiAgICAgIGNoZWNrRGVzY3JpcHRpb25IZWlnaHQoKTtcbiAgICB9LFxuICAgIG9uU2xpZGVCZWZvcmU6IGZ1bmN0aW9uKCkge1xuICAgICAgY2hlY2tEaW1lbnNpb25zKCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gY29udGFpbmVyLmZpbmQoJy5ieC12aWV3cG9ydCcpLm9mZigndG91Y2hzdGFydCcpO1xuXG4gIHNsaWRlci5maW5kKCdhJykubm90KCcudXNlLWFqYXgnKS5jbGljayhmdW5jdGlvbihldmVudCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XG4gIH0pO1xuXG4gICQoJy5uZXh0JywgY29udGFpbmVyKS5jbGljaygoKSA9PiBzbGlkZXIuZ29Ub05leHRTbGlkZSgpKTtcbiAgJCgnLnByZXYnLCBjb250YWluZXIpLmNsaWNrKCgpID0+IHNsaWRlci5nb1RvUHJldlNsaWRlKCkpO1xuXG4gIGZ1bmN0aW9uIGNoZWNrRGltZW5zaW9ucygpIHtcbiAgICBjb25zdCB2aWV3SGVpZ2h0ID0gY29udGFpbmVyLmhlaWdodCgpO1xuICAgIGNvbnN0IHZpZXdXaWR0aCA9IGNvbnRhaW5lci53aWR0aCgpO1xuICAgIGNvbnN0IHZpZXdSYXRpbyA9IHZpZXdXaWR0aCAvIHZpZXdIZWlnaHQ7XG5cbiAgICBzbGlkZXIuZmluZCgnLnNsaWRlJylcbiAgICAgIC5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNsaWRlID0gJChub2RlKTtcbiAgICAgICAgY29uc3QgbWVkaWEgPSBzbGlkZS5maW5kKCcuc2xpZGUtLWJhY2tncm91bmQnKS5maW5kKCd2aWRlbycpLmVxKDApO1xuICAgICAgICBjb25zdCBtZWRpYUhlaWdodCA9IG1lZGlhLmhlaWdodCgpO1xuICAgICAgICBjb25zdCBtZWRpYVdpZHRoID0gbWVkaWEud2lkdGgoKTtcbiAgICAgICAgbGV0IG1lZGlhUmF0aW8gPSAwO1xuXG4gICAgICAgIGlmIChtZWRpYS5kYXRhKCdyYXRpbycpKSB7XG4gICAgICAgICAgbWVkaWFSYXRpbyA9IG1lZGlhLmRhdGEoJ3JhdGlvJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVkaWFSYXRpbyA9IG1lZGlhV2lkdGggLyBtZWRpYUhlaWdodDtcbiAgICAgICAgICBtZWRpYS5kYXRhKCdyYXRpbycsIG1lZGlhUmF0aW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgbWVkaWFSYXRpbyA8IHZpZXdSYXRpbyA/IHNsaWRlLmFkZENsYXNzKCdhbHQnKSA6IHNsaWRlLnJlbW92ZUNsYXNzKCdhbHQnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tEZXNjcmlwdGlvbkhlaWdodCgpIHtcbiAgICBjb25zdCAkYm94ZXMgPSBzbGlkZXIuZmluZCgnLnNsaWRlX2NvbnRlbnQnKTtcblxuICAgICRib3hlcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgJGJveCA9ICQodGhpcyk7XG4gICAgICBjb25zdCAkZGVzYyA9ICRib3guY2hpbGRyZW4oJy5kZXNjcmlwdGlvbicpO1xuICAgICAgY29uc3QgJHAgPSAkZGVzYy5maW5kKCdwJyk7XG5cbiAgICAgIC8vIFNvbWUgc2xpZGVzIG1pZ2h0IG5vdCBoYXMgYSBkZXNjcmlwdGlvblxuICAgICAgLy8gc28gbGV0J3MgY2hlY2sgaXRcbiAgICAgIGlmICgkcC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ291bGQgaGFwcGVuZCB0aGF0IHZpc2libGUgaGVpZ2h0IG9mIC5kZXNjcmlwdGlvbiBlbGVtZW50IGlzIGV2ZW5cbiAgICAgICAgLy8gc21hbGxlciB0aGFuIGxpbmUtaGVpZ2h0IG9mIHAgZWxlbWVudCB3aGljaCB3aWxsIGNhdXNlIGl0IHRvIGJlIHNoYXZlZFxuICAgICAgICAvLyB0byAwIGxpbmVzLiBTbyB3ZSBwaWNrIHdoYXQncyBiaWdnZXIgZnJvbSB0aGUgbGluZS1oZWlnaHQgYW5kIG1heEhlaWdodFxuICAgICAgICAkcC5zaGF2ZShNYXRoLm1heCgkZGVzYy5oZWlnaHQoKSwgcGFyc2VGbG9hdCgkcC5jc3MoJ2xpbmUtaGVpZ2h0JykpKSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcblxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xuICBjb25zdCBzdGlja3lFbGVtZW50cyA9ICQoXCIucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIik7XG4gIGNvbnN0IHN0aWNreUJQID0gd2luZG93Lm1hdGNoTWVkaWEoXCIobWluLXdpZHRoOiAxMDI0cHgpXCIpOyAvLyBzdGljayBvbmx5IGlmIHNjcmVlbiB3aWR0aCA+PSAxMDI0XG5cbiAgJChcIi5idWxsZXQtbGlzdCBsaTpmaXJzdC1vZi10eXBlIC5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKVxuICAgIC5hZGRDbGFzcyhcImN1cnJlbnRcIik7XG5cbiAgY2FuU3RpY2soKTtcbiAgc3RpY2t5QlAuYWRkTGlzdGVuZXIoY2FuU3RpY2spO1xuXG4gICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHN0aWNreUJQLm1hdGNoZXMpIHtcbiAgICAgIGxldCBlbGVtID0gYWJvdmVCb3JkZXIoJChcIi5zdGF0aWMtY29udGVudFwiKSk7XG5cbiAgICAgIGlmIChlbGVtKSB7IC8vIGlmIGFueSBlbGVtZW50IGF0IHRoZSB0b3BcbiAgICAgICAgdG9nZ2xlU3RpY2t5KCAvLyBtYWtlIGl0IHZpc2libGUgYW5kIGhpZGUgb3RoZXJzXG4gICAgICAgICAgZWxlbS5jbG9zZXN0KFwibGlcIikuZmluZChcIi5wYXJhZ3JhcGgtLXR5cGUtLWltYWdlLXRleHQtdmVydFwiKS5maXJzdCgpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogQHJldHVybiB2b2lkXG4gICAqL1xuICBmdW5jdGlvbiBjYW5TdGljaygpIHtcbiAgICBpZiAoc3RpY2t5QlAubWF0Y2hlcykge1xuICAgICAgbWFrZV9zdGlja3koKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RpY2t5RWxlbWVudHMudHJpZ2dlcihcInN0aWNreV9raXQ6ZGV0YWNoXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxhc3QgZWxlbWVudCB3aXRoIHBvc2l0aW9uIGFib3ZlIGJvcmRlclxuICAgKlxuICAgKiBAcGFyYW0galF1ZXJ5IGVsZW1lbnRzXG4gICAqIEBwYXJhbSBpbnQgYm9yZGVyXG4gICAqXG4gICAqIEByZXR1cm4galF1ZXJ5XG4gICAqL1xuICBmdW5jdGlvbiBhYm92ZUJvcmRlcihlbGVtZW50cywgYm9yZGVyID0gMjEwKSB7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG5cbiAgICBlbGVtZW50cy5lYWNoKGZ1bmN0aW9uKGtleSwgZWxlbSkge1xuICAgICAgbGV0IHRvcCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG4gICAgICBpZiAodG9wIDw9IGJvcmRlcikge1xuICAgICAgICByZXN1bHQgPSBlbGVtO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdCA/ICQocmVzdWx0KSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgZWxlbSBhbmQgaGlkZXMgb3RoZXIgc3RpY2t5IGVsZW1lbnRzXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgYWxsIHN0aWNreSBlbGVtZW50cyBhcmUgaGlkZGVuLlxuICAgKiBDbGFzcyAnLmN1cnJlbnQnIG1ha2VzIHN0aWNreSBlbGVtZW50IHZpc2libGUuXG4gICAqL1xuICBmdW5jdGlvbiB0b2dnbGVTdGlja3koZWxlbSkge1xuICAgIGlmICghZWxlbS5oYXNDbGFzcyhcImN1cnJlbnRcIikpIHtcbiAgICAgICQoXCJsaSAucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnQuY3VycmVudFwiKS5yZW1vdmVDbGFzcyhcImN1cnJlbnRcIik7XG4gICAgICBlbGVtLmFkZENsYXNzKFwiY3VycmVudFwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlX3N0aWNreSgpIHtcbiAgICAkKFwiLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC1idWxsZXQtbGlzdCAucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIilcbiAgICAgIC5zdGlja19pbl9wYXJlbnQoe1xuICAgICAgICBwYXJlbnQ6IFwiLnBhcmFncmFwaC0tdHlwZS0taW1hZ2UtdGV4dC1idWxsZXQtbGlzdFwiLFxuICAgICAgICBvZmZzZXRfdG9wOiAyMDAsXG4gICAgICAgIHNwYWNlcjogZmFsc2VcbiAgICAgIH0pO1xuICAgICQoXCJsaSAucGFyYWdyYXBoLS10eXBlLS1pbWFnZS10ZXh0LXZlcnRcIikuc3RpY2tfaW5fcGFyZW50KHtcbiAgICAgIC8vIHBhcmVudDogXCJsaVwiLFxuICAgICAgcGFyZW50OiBcInVsXCIsLy8gXCIucGFyYWdyYXBoLS10eXBlLS1jdXN0b20tYnVsbGV0LWxpc3RcIixcbiAgICAgIG9mZnNldF90b3A6IDIwMCxcbiAgICAgIHNwYWNlcjogZmFsc2UsXG4gICAgICByZWNhbGNfZXZlcnk6IDEwXG4gICAgfSk7XG4gIH1cbn07XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCAoKSA9PiB7XG4gICQoJy5jdXN0b20tdGFicycpLm9uKCdjbGljaycsICcuY3VzdG9tLXRhYnMtLW5hdi1pdGVtJywgZnVuY3Rpb24oZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgY29uc3QgJHBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5jdXN0b20tdGFicycpO1xuXG4gICAgLy8gU2V0IGFjdGl2ZSB0YWIuXG4gICAgaWYgKCRwYXJlbnQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gJHRoaXMuZGF0YSgndGFyZ2V0Jyk7XG5cbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgJCgnLmN1c3RvbS10YWJzLS1pdGVtJywgJHBhcmVudCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAkKGAjJHt0YXJnZXR9YCwgJHBhcmVudCkuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgICAgIC8vIFNldCBhY3RpdmUgbmF2IGl0ZW0uXG4gICAgICAgIGNvbnN0ICRwYXJlbnROYXYgPSAkdGhpcy5jbG9zZXN0KCcuY3VzdG9tLXRhYnMtLW5hdicpO1xuXG4gICAgICAgIGlmICgkcGFyZW50TmF2Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAkKCcuY3VzdG9tLXRhYnMtLW5hdi1pdGVtJywgJHBhcmVudE5hdikucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgJHRoaXMuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgJCgnLnRhYmJlZCcpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsKSB7XG4gICAgY29uc3QgJG1vYmlsZV9jb250YWluZXIgPSAkKCcubW9iaWxlJywgdGhpcyk7XG4gICAgY29uc3QgJG1vYmlsZV9zd2l0Y2hlcyA9ICQoJy50YWJfX3N3aXRjaCcsICRtb2JpbGVfY29udGFpbmVyKTtcbiAgICBjb25zdCAkbm9ybWFsX2NvbnRhaW5lciA9ICQoJy5ub3JtYWwnLCB0aGlzKTtcbiAgICBjb25zdCAkbm9ybWFsX3N3aXRjaGVzID0gJCgnLnRhYl9fc3dpdGNoJywgJG5vcm1hbF9jb250YWluZXIpO1xuICAgIGNvbnN0ICR0YWJzID0gJCgnLnRhYicsIHRoaXMpO1xuXG4gICAgJG5vcm1hbF9zd2l0Y2hlcy5jbGljayhmdW5jdGlvbihldmVudCkge1xuICAgICAgY29uc3QgJHN3aXRjaCA9ICQodGhpcyk7XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICR0YWJzXG4gICAgICAgIC5hZGQoJG1vYmlsZV9zd2l0Y2hlcykuYWRkKCRub3JtYWxfc3dpdGNoZXMpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmZpbHRlcihgW2RhdGEtdGFiLWlkPSR7ICRzd2l0Y2guZGF0YSgndGFiLWlkJykgfV1gKVxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICAgICAkbm9ybWFsX2NvbnRhaW5lci5hZGRDbGFzcygnaGlkZScpO1xuICAgIH0pO1xuXG4gICAgJG1vYmlsZV9jb250YWluZXIuY2xpY2soZnVuY3Rpb24oKSB7XG4gICAgICAkbm9ybWFsX2NvbnRhaW5lci5yZW1vdmVDbGFzcygnaGlkZScpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgYnJlYWtwb2ludHMgZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmNvbnN0ICR3aW5kb3cgPSAkKHdpbmRvdyk7XG5jb25zdCAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KTtcbmNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuY29uc3QgJGhlYWRlciA9ICQoJyNoZWFkZXInKTtcbmNvbnN0ICRxdWlja0xpbmtzID0gJCgnLnF1aWNrLWxpbmtzJyk7XG5cbmNvbnN0ICRwYXJhZ3JhcGggPSAkKCcucGFyYWdyYXBoLS10eXBlLS10aW1lbGluZS1pbmZvcm1hdGlvbicpO1xuY29uc3QgJHNpZGViYXIgPSAkcGFyYWdyYXBoLmZpbmQoJy5zaWRlYmFyJyk7XG5jb25zdCAkY29udGVudCA9ICRwYXJhZ3JhcGguZmluZCgnLmNvbnRlbnQnKTtcbmNvbnN0ICR0aXRsZXNMaXN0ID0gJHBhcmFncmFwaC5maW5kKCcudGl0bGVzLWxpc3QnKTtcbmNvbnN0ICR0aXRsZXMgPSAkcGFyYWdyYXBoLmZpbmQoJy50aXRsZScpO1xuY29uc3QgJHBhbmVscyA9ICRwYXJhZ3JhcGguZmluZCgnLnBhbmVsJyk7XG5jb25zdCAkc3dpdGNoZXMgPSAkcGFyYWdyYXBoLmZpbmQoJy5wYW5lbC1zd2l0Y2gnKTtcbmNvbnN0ICRjb3ZlcnMgPSAkcGFyYWdyYXBoLmZpbmQoJy50aXRsZS1jb3ZlcicpO1xuXG5jb25zdCBzcGFjZXIgPSAzMDtcbmxldCBpc1N0dWNrID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNob3dUaXRsZXNMaXN0KCkge1xuICBjb25zdCAkY292ZXIgPSAkKHRoaXMpO1xuICBjb25zdCAkdGl0bGUgPSAkY292ZXIucGFyZW50KCk7XG4gIGNvbnN0IHRvcCA9ICR0aXRsZS5wb3NpdGlvbigpLnRvcCArICR0aXRsZS5oZWlnaHQoKTtcblxuICAkY292ZXJcbiAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xuXG4gICR0aXRsZXNMaXN0XG4gICAgLmFkZENsYXNzKCdzaG93JylcbiAgICAuY3NzKHsgdG9wIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlVGl0bGVzTGlzdCgpIHtcbiAgJHRpdGxlc0xpc3RcbiAgICAucmVtb3ZlQ2xhc3MoJ3Nob3cnKVxuICAgIC5yZW1vdmVBdHRyKCdzdHlsZScpO1xuXG4gICRjb3ZlcnNcbiAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xufVxuXG5mdW5jdGlvbiBzZXRBY3RpdmVUaXRsZShrZXkpIHtcbiAgJHRpdGxlc1xuICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAuZmlsdGVyKChpKSA9PiAkdGl0bGVzLmVxKGkpLmRhdGEoJ3RpbWVsaW5lJykgPT0ga2V5KVxuICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKTtcbn1cblxuZnVuY3Rpb24gc2V0QWN0aXZlUGFuZWwoaWQpIHtcbiAgJGNvbnRlbnRcbiAgICAuaGVpZ2h0KCRjb250ZW50LmhlaWdodCgpKTtcblxuICAkcGFuZWxzXG4gICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICAgIC5maWx0ZXIoaWQpXG4gICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG5cbiAgJGNvbnRlbnRcbiAgICAucmVtb3ZlQXR0cignc3R5bGUnKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG9QYW5lbCgpIHtcbiAgaWYgKGlzU3R1Y2spIHtcbiAgICAkd2luZG93LnNjcm9sbFRvcCgkY29udGVudC5vZmZzZXQoKS50b3AgLSBnZXRPZmZzZXQoKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc3dpdGNoUGFuZWwoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICBjb25zdCAkc3dpdGNoZXIgPSAkKHRoaXMpO1xuICBjb25zdCBpZCA9ICRzd2l0Y2hlci5hdHRyKCdocmVmJyk7XG4gIGNvbnN0IGtleSA9IGlkLnJlcGxhY2UoJyN0aW1lbGluZS0nLCAnJyk7XG5cbiAgaGlkZVRpdGxlc0xpc3QoKTtcbiAgc2V0QWN0aXZlVGl0bGUoa2V5KTtcbiAgc2V0QWN0aXZlUGFuZWwoaWQpO1xuICBzY3JvbGxUb1BhbmVsKCk7XG4gIHJlY2FsY1N0aWNreUtpdCgpO1xufVxuXG5mdW5jdGlvbiBpc1N0aWNreSgpIHtcbiAgcmV0dXJuIGJyZWFrcG9pbnRzLm1pbi5iZy5tYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBpbml0U3RpY2t5S2l0KCkge1xuICBjb25zdCBvZmZzZXRfdG9wID0gZ2V0T2Zmc2V0KCk7XG5cbiAgJHNpZGViYXJcbiAgICAub2ZmKCdzdGlja3lfa2l0OnN0aWNrIHN0aWNreV9raXQ6dW5zdGljaycpXG4gICAgLnRyaWdnZXIoJ3N0aWNreV9raXQ6ZGV0YWNoJylcbiAgICAuc3RpY2tfaW5fcGFyZW50KHsgb2Zmc2V0X3RvcCB9KVxuICAgIC5vbignc3RpY2t5X2tpdDpzdGljaycsICgpID0+IHsgaXNTdHVjayA9IHRydWUgfSlcbiAgICAub24oJ3N0aWNreV9raXQ6dW5zdGljaycsICgpID0+IHsgaXNTdHVjayA9IGZhbHNlIH0pO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95U3RpY2t5S2l0KCkge1xuICAkc2lkZWJhclxuICAgIC5vZmYoJ3N0aWNreV9raXQ6c3RpY2sgc3RpY2t5X2tpdDp1bnN0aWNrJylcbiAgICAudHJpZ2dlcignc3RpY2t5X2tpdDpkZXRhY2gnKTtcblxuICBpc1N0dWNrID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldE9mZnNldCgpIHtcbiAgcmV0dXJuIERydXBhbC5kaXNwbGFjZS5jYWxjdWxhdGVPZmZzZXQoJ3RvcCcpICsgJGhlYWRlci5oZWlnaHQoKSArICgkcXVpY2tMaW5rcy5oZWlnaHQoKSB8fCAwKSArIHNwYWNlcjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3RpY2t5S2l0KCkge1xuICBpZiAoaXNTdHVjaykge1xuICAgIGluaXRTdGlja3lLaXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNhbGNTdGlja3lLaXQoKSB7XG4gICRzaWRlYmFyXG4gICAgLnRyaWdnZXIoJ3N0aWNreV9raXQ6cmVjYWxjJyk7XG59XG5cbmZ1bmN0aW9uIHRlc3RTdGlja3lLaXQoKSB7XG4gIGlmIChpc1N0aWNreSgpKSB7XG4gICAgaW5pdFN0aWNreUtpdCgpO1xuXG4gICAgJGRvY3VtZW50Lm9uKCdkcnVwYWxWaWV3cG9ydE9mZnNldENoYW5nZScsIHVwZGF0ZVN0aWNreUtpdCk7XG4gIH0gZWxzZSB7XG4gICAgZGVzdHJveVN0aWNreUtpdCgpO1xuXG4gICAgJGRvY3VtZW50Lm9mZignZHJ1cGFsVmlld3BvcnRPZmZzZXRDaGFuZ2UnLCB1cGRhdGVTdGlja3lLaXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgdGVzdFN0aWNreUtpdCgpO1xuICBicmVha3BvaW50cy5taW4uYmcuYWRkTGlzdGVuZXIodGVzdFN0aWNreUtpdCk7XG5cbiAgJGNvdmVycy5jbGljayhzaG93VGl0bGVzTGlzdCk7XG4gICRzd2l0Y2hlcy5jbGljayhzd2l0Y2hQYW5lbCk7XG5cbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKGlzU3RpY2t5KCkgJiYgIWlzU3R1Y2spIHtcbiAgICAgIGluaXRTdGlja3lLaXQoKTtcbiAgICB9XG4gIH0sIDE1MCk7XG59XG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IGxpbmVIZWlnaHQgZnJvbSAnLi9saW5lSGVpZ2h0JztcbmltcG9ydCBicmVha3BvaW50cywgeyBrZXlzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZUJ5TGluZXMoJGVsZW1lbnQpIHtcbiAgY29uc3QgbGggPSBsaW5lSGVpZ2h0KCRlbGVtZW50KTtcbiAgY29uc3QgbGluZXMgPSBwYXJzZUludCgkZWxlbWVudC5kYXRhKCd0cnVuY2F0ZUxpbmVzJykpIHx8IDQ7XG5cbiAgJGVsZW1lbnQuc2hhdmUobGggKiBsaW5lcylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRydW5jYXRlQnlIZWlnaHQoJGVsZW1lbnQpIHtcbiAgY29uc3QgJGNvbnRhaW5lciA9ICRlbGVtZW50LmNoaWxkcmVuKCcudHJ1bmNhdGUtY29udGFpbmVyJyk7XG4gIGNvbnN0IG1heEhlaWdodCA9ICRlbGVtZW50LmhlaWdodCgpO1xuICBjb25zdCBtaW5IZWlnaHQgPSBsaW5lSGVpZ2h0KCRlbGVtZW50KTtcblxuICAkY29udGFpbmVyLnNoYXZlKE1hdGgubWF4KG1pbkhlaWdodCwgbWF4SGVpZ2h0KSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcbiAgRHJ1cGFsLmJlaGF2aW9ycy50cnVuY2F0ZUJ5SGVpZ2h0ID0ge1xuICAgIGF0dGFjaDogZnVuY3Rpb24oY29udGV4dCwgc2V0dGluZ3MpIHtcbiAgICAgICQoJy50cnVuY2F0ZS1ieS1oZWlnaHQnLCBjb250ZXh0KS5vbmNlKCd0cnVuY2F0ZScpXG4gICAgICAgIC53cmFwSW5uZXIoJzxkaXYgY2xhc3M9XCJ0cnVuY2F0ZS1jb250YWluZXJcIj4nKVxuICAgICAgICAuZWFjaCgoaSwgbm9kZSkgPT4ge1xuICAgICAgICAgIHRydW5jYXRlQnlIZWlnaHQoJChub2RlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBEcnVwYWwuYmVoYXZpb3JzLnRydW5jYXRlQnlMaW5lcyA9IHtcbiAgICBhdHRhY2g6IGZ1bmN0aW9uKGNvbnRleHQsIHNldHRpbmdzKSB7XG4gICAgICAkKCcudHJ1bmNhdGUtYnktbGluZXMnLCBjb250ZXh0KS5vbmNlKCd0cnVuY2F0ZScpXG4gICAgICAgIC5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgICAgdHJ1bmNhdGVCeUxpbmVzKCQobm9kZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LnZhbHVlcyhicmVha3BvaW50cy5taW4pLmZvckVhY2goKG1xKSA9PiB7XG4gICAgbXEuYWRkTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgJCgnLnRydW5jYXRlLWJ5LWhlaWdodCcpLmVhY2goKGksIG5vZGUpID0+IHtcbiAgICAgICAgdHJ1bmNhdGVCeUhlaWdodCgkKG5vZGUpKTtcbiAgICAgIH0pO1xuXG4gICAgICAkKCcudHJ1bmNhdGUtYnktbGluZXMnKS5lYWNoKChpLCBub2RlKSA9PiB7XG4gICAgICAgIHRydW5jYXRlQnlMaW5lcygkKG5vZGUpKTtcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0pO1xufVxuIl19"}